summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@localhost>2004-03-29 01:32:32 +0000
committernobody <nobody@localhost>2004-03-29 01:32:32 +0000
commit14a213ec31f13f2ef5831a6b109507cd47f2a0da (patch)
tree86a86985e5b846564f39a4c16dd6991923a4f880
parentd76b1451efe6eebf270d6f56c4577c68ce91805e (diff)
parentfebe6e56493aa2da5ec5ed8e2bebc5aa62f3e5e0 (diff)
This commit was manufactured by cvs2svn to create tag 'REL1_2_2'.1.2.2
-rw-r--r--COPYING340
-rw-r--r--INSTALL69
-rw-r--r--LocalSettings.sample127
-rw-r--r--RELEASE-NOTES84
-rw-r--r--config/index.php753
-rw-r--r--images/Arr_.pngbin0 -> 918 bytes
-rw-r--r--images/Arr_d.pngbin0 -> 215 bytes
-rw-r--r--images/Arr_l.pngbin0 -> 263 bytes
-rw-r--r--images/Arr_r.pngbin0 -> 210 bytes
-rw-r--r--images/Arr_r.xcfbin0 -> 1437 bytes
-rw-r--r--includes/Article.php16
-rw-r--r--includes/CacheManager.php18
-rw-r--r--includes/Database.php16
-rw-r--r--includes/DefaultSettings.php37
-rw-r--r--includes/GlobalFunctions.php183
-rw-r--r--includes/LogPage.php18
-rw-r--r--includes/Math.php19
-rw-r--r--includes/MemcachedSessions.php17
-rwxr-xr-xincludes/MessageCache.php4
-rw-r--r--includes/OutputPage.php29
-rw-r--r--includes/SearchEngine.php6
-rw-r--r--includes/Setup.php16
-rw-r--r--includes/Skin.php66
-rw-r--r--includes/SkinSmarty.php17
-rw-r--r--includes/SpecialAsksql.php15
-rw-r--r--includes/SpecialExport.php17
-rw-r--r--includes/SpecialMovepage.php3
-rw-r--r--includes/SpecialSpecialpages.php5
-rw-r--r--includes/SpecialUndelete.php17
-rw-r--r--includes/SpecialUpload.php22
-rw-r--r--includes/SpecialVersion.php17
-rw-r--r--includes/User.php50
-rw-r--r--includes/WatchedItem.php17
-rw-r--r--index.php56
-rw-r--r--install-utils.inc6
-rw-r--r--install.php13
-rw-r--r--irc/rc2irc.php192
-rw-r--r--irc/rcdumper.php102
-rw-r--r--languages/Language.php10
-rw-r--r--languages/LanguageAr.php27
-rw-r--r--languages/LanguageBn.php1004
-rw-r--r--languages/LanguageCy.php1144
-rw-r--r--languages/LanguageDe.php1
-rw-r--r--languages/LanguageEs.php102
-rw-r--r--languages/LanguageFr.php885
-rwxr-xr-xlanguages/LanguageGa.php403
-rw-r--r--languages/LanguageHi.php892
-rw-r--r--languages/LanguageId.php9
-rw-r--r--languages/LanguageUr.php22
-rw-r--r--languages/LanguageYi.php21
-rwxr-xr-xmaintenance/InitialiseMessages.inc10
-rw-r--r--maintenance/archives/importTests.php10
-rw-r--r--maintenance/archives/importUseModWiki.php6
-rw-r--r--maintenance/archives/patch-linkscc.sql12
-rw-r--r--maintenance/archives/patch-list.txt5
-rw-r--r--maintenance/archives/upgradeWatchlist.php7
-rw-r--r--maintenance/importPhase2.php349
-rw-r--r--maintenance/indexes.sql8
-rw-r--r--maintenance/rebuildrecentchanges.inc99
-rw-r--r--maintenance/tables.sql65
-rw-r--r--maintenance/updaters.inc133
-rw-r--r--rdf/recent.phtml76
-rw-r--r--stylesheets/sticky.js2
-rw-r--r--stylesheets/wikibits.js32
-rw-r--r--update.php135
65 files changed, 6036 insertions, 1800 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 000000000000..5b6e7c66c276
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
diff --git a/INSTALL b/INSTALL
index 159109a60b32..c0fd080f0cc3 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,69 @@
+---
+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 prerequesites available.
+
+Required software:
+* Web server with PHP 4.1.2 or higher (4.3.x is preferred)
+* A MySQL server. 4.0.x is preferred, but 3.2.x should
+ work as well.
+
+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.
+
+Don't forget to check the RELEASE-NOTES file...
+
+********************** WARNING **************************
+
+The web-based install is still somewhat experimental. It
+doesn't yet support updating the format of an existing
+MediaWiki database, the maintenance scripts aren't available,
+and there may be all kinds of horrible bugs or security
+problems that haven't been worked out yet.
+
+ALWAYS BACK UP YOUR DATABASE BEFORE ATTEMPTING TO INSTALL
+OR UPGRADE!!!
+
+----
+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.
+
+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.
+
+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).
+
----
-Installing Wikipedia Phase III Software
+"Classic" install instructions:
----
The Wikipedia software was developed collaboratively by
@@ -133,8 +197,7 @@ Or for Apache 2.0 module:
./configure --enable-shmop --with-zlib --with-zlib-dir=/usr/lib --with-mysql=/usr/local/mysql --with-iconv --with-apxs2filter=/usr/local/apache/bin/apxs --with-readline --enable-sockets
(using your own local paths, of course). Build and install as
- instructed. Set "register_globals" on in the config file, and
- "warnings" to
+ instructed.
8. Finish building Apache. Configure with something like:
diff --git a/LocalSettings.sample b/LocalSettings.sample
index 0479dc2d385a..3046303351d9 100644
--- a/LocalSettings.sample
+++ b/LocalSettings.sample
@@ -25,23 +25,60 @@
#
$IP = "/usr/local/apache/htdocs/wiki";
+
+## Don't change this bit; install.php needs it.
+#
if ( ! isset( $DP ) ) { $DP = $IP; }
include_once( "$DP/DefaultSettings.php" );
+## Please customize!
+#
+$wgSitename = "MediaWiki";
+
# You can customize a lot of URLs and paths, but you will
# almost certainly want to customize the following. The
+
+# Normally the server will be auto-detected, but you can
+# force the base URL. Don't forget http:// (or https://)!
+#
+#$wgServer = "http://www.myhost.com";
+
+## The location of the main script, you need this to be correct!
+#
+$wgScriptPath = "/wiki";
+$wgScript = "{$wgScriptPath}/index.php";
+$wgRedirectScript = "{$wgScriptPath}/redirect.php";
+
# ArticlePath one is especially useful if you want to use
# mod_redirect to make page-viewing URLs look static.
#
-$wgServer = "http://www.myhost.com";
-$wgScriptPath = "/wiki";
-$wgArticlePath = "{$wgScript}?title=$1";
-$wgEmergencyContact = "wikiadmin@myhost.com";
+$wgArticlePath = "{$wgScript}/$1";
+# $wgArticlePath = "/wiki/$1"; # Prettier if you're setup for it
+
+## Normally you don't need to change these once the above are set...
+#
+$wgStyleSheetPath = "{$wgScriptPath}/style";
+$wgStyleSheetDirectory = "{$IP}/style";
+
+$wgUploadPath = "{$wgScriptPath}/upload";
+$wgUploadDirectory = "{$IP}/upload";
+$wgLogo = "{$wgUploadPath}/wiki.png";
+
+## Preferably these addresses should be able to receive mail asking for help
+#
+$wgEmergencyContact = "wikiadmin@" . getenv( "SERVER_NAME" );
+$wgPasswordSender = "Wikipedia Mail <apache@" . getenv( "SERVER_NAME" ) . ">";
# MySQL settings
#
# The user you specify here DOES NOT NEED TO EXIST.
-# It is created by the installation script.
+# It is created by the installation script, if
+# you have root privileges on your database.
+#
+# IF on the other hand you have only limited privs
+# on your DB and have to do a manual install, use
+# your existing username and password. Be sure this
+# file doesn't get left around on the web legible...
#
# $wgDBsqluser is used for queries through the
# web interface. It is also created by the script.
@@ -51,57 +88,75 @@ $wgEmergencyContact = "wikiadmin@myhost.com";
$wgDBserver = "localhost";
$wgDBname = "wikidb";
$wgDBuser = "wikiuser";
-$wgDBpassword = "userpass";
+$wgDBpassword = "userpass"; # Use a better password! ;)
$wgDBsqluser = "sqluser";
$wgDBsqlpassword = "sqlpass";
-# Advanced DB settings
+## Advanced DB settings
#
$wgDBminWordLen = 3; # Match this to your MySQL fulltext
-$wgDBtransactions = false; # Set to true if using InnoDB tables
+## Set these to true to turn on some optimizations when using
+## MySQL 4.x:
#
-# Set $wgUseImageResize to true if you want to enable dynamic
-# server side image resizing ("Thumbnails")
-#
-$wgUseImageResize = false;
+# $wgDBmysql4 = true;
+# $wgEnablePersistentLC = true;
-# Resizing can be done using PHP's internal image libraries
-# or using ImageMagick. The later supports more file formats
-# than PHP, which only supports PNG, GIF, JPG, XBM and WBMP.
+## You can customize the interface messages through the wiki;
+## see [[MediaWiki:All pages]]. (This requires a sysop account.)
+## This causes a performance hit, though; if you don't need it,
+## feel free to turn it off:
#
-# Set $wgUseImageMagick to true to use Image Magick instead
-# of the builtin functions
-#
-$wgUseImageMagick = false;
-$wgImageMagickConvertCommand = "/usr/bin/convert";
+# $wgUseDatabaseMessages = false;
-# If you want a non-English wiki, add a line like this
-# $wgLanguageCode = "de";
+## Set $wgUseImageResize to true if you want to enable dynamic
+## server side image resizing ("Thumbnails")
+#
+# $wgUseImageResize = true;
-# Turn this on during database maintenance
-# $wgReadOnly = true;
+## Resizing can be done using PHP's internal image libraries
+## or using ImageMagick. The later supports more file formats
+## than PHP, which only supports PNG, GIF, JPG, XBM and WBMP.
+##
+## Set $wgUseImageMagick to true to use Image Magick instead
+## of the builtin functions
+#
+# $wgUseImageMagick = true;
+# $wgImageMagickConvertCommand = "/usr/bin/convert";
-# Turn this on to get HTML debug comments
-# $wgDebugComments = true;
+## If you have the appropriate support software installed
+## you can enable inline LaTeX equations:
+# $wgUseTeX = true;
+# $wgMathPath = "{$wgUploadPath}/math";
+# $wgMathDirectory = "{$wgUploadDirectory}/math";
+# $wgTmpDirectory = "{$wgUploadDirectory}/tmp";
-$wgUseTeX = false;
-$wgUseCategoryMagic = true ;
+$wgLocalInterwiki = $wgSitename;
-$wgLocalInterwiki = "w";
+## If you want a non-English wiki, add a line like this
+# $wgLanguageCode = "de";
-$wgInputEncoding = "ISO-8859-1";
-$wgOutputEncoding = "ISO-8859-1";
+## Character encoding: normally auto-selected by the language.
+## English, German, Danish, Dutch, French, Spanish, and Swedish
+## will be in ISO-8859-1 by default, all other languages in
+## UTF-8 encoding. UTF-8 is more flexible, but some older browsers
+## have trouble with it. You can force an English-language wiki
+## to UTF-8 by uncommenting the lines below. The other languages
+## mentioned above might not work properly this way without
+## additional tweaking.
+#
+# $wgInputEncoding = "UTF-8";
+# $wgOutputEncoding = "UTF-8";
-# Extremely high-traffic wikis may want to disable
-# some database-intensive features here:
+## Extremely high-traffic wikis may want to disable
+## some database-intensive features here:
#
# $wgDisableTextSearch = true;
# $wgDisableCounters = true;
# $wgMiserMode = true;
-# The following three config variables are used to define
-# the rights of users in your system.
+## The following three config variables are used to define
+## the rights of users in your system.
#
# If wgWhitelistEdit is set to true, only logged in users
# are allowed to edit articles.
@@ -144,4 +199,4 @@ $wgOutputEncoding = "ISO-8859-1";
# 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');
-?>
+?> \ No newline at end of file
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index fc0aeef19909..960f2d0e5191 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,13 +1,30 @@
= MediaWiki release notes =
-== Version 1.2.0rc1, 2004-02-27 ==
+== Version 1.2.2, 2004-03-28 ==
-This is a RELEASE CANDIDATE for the new production release. It is more or
-less in sync with what is running on Wikipedia right now. There may be
-some interesting bugs, it may eat all your data, and documentation may
-not be up to date. If you use this on a production site, BE CAREFUL.
+* Fixed an upgrade bug introduced in 1.2.1.
+* Disabled $wgUseCategoryMagic, which feature is incomplete broken
+
+== Version 1.2.1, 2004-03-27 ==
+
+Installation, compatibility, security fixlets:
+* Detect use of PHP as CGI and disable index.php/Title URLs
+* Try to auto-create math tmp & output directories if not present
+* Disable Asksql in default install ($wgAllowSysopQueries)
+* Better handling of get_magic_quotes_gpc (apostrophe problems)
+* French localisation no longer hard-codes "Wikipedia" name
+
+== Version 1.2.0, 2004-03-24 ==
+
+This is the new production release; it is more or less in sync with what
+is running on Wikipedia right now. However this software is provided with
+NO WARRANTY of fitness for any purpose; there may be some interesting bugs,
+it may eat all your data, and documentation may not be up to date.
New features in 1.2:
+* In-place web-based installation [experimental!]
+ Note that maintenance functions are not yet
+ available through the web install script.
* Image resizing/thumbnail generation
* Stricter upload file extension blacklist and whitelist options
* More flexible blocking system; time period may be set
@@ -18,22 +35,36 @@ New features in 1.2:
* Optional compression of old revision text (requires zlib support)
* Fuzzy title search (experimental, requires memcached)
* Page rendering cache (experimental)
-* JavaScript editing toolbar (off by default in user preferences)
+* Editing toolbar to demonstrate wiki syntax to newbies
+ (off by default in user preferences)
+* Support for authenticated SMTP outgoing e-mail (experimental)
+* It's now possible to assign sysop accounts from within the wiki.
+ An account with this ability must be labeled with the "bureaucrat"
+ privilege, such as the 'Developer' account created by the install.
Fixes and tweaks:
+* Now works with register_globals off!
* Should work out of the box on MySQL 3.2.x again. On 4.x set
$wgEnablePersistentLC = true; to turn on the link cache table
for a slight rendering speed boost.
+* Should work on PHP 5.0 beta (not thoroughly tested)
+* Works with short tags disabled.
+* rebuildMessages.php can now selectively update new messages, or
+ overwrite everything.
+* Some layout fixes for RTL languages.
+* Now includes arrow icons for enhanced recent changes.
* Various bug fixes.
-* Other stuff we forgot.
-* Documentation more out of date than ever before!
-=== IMPORTANT BEHAVIOR CHANGES: ===
+=== Behavior changes ===
-* wiki.phtml and redirect.phtml are now installed as index.php and redirect.php
- by default. If you are upgrading from an older version, you will have to
- change $wgScript in LocalSettings.php to point to index.php and
- redirect.php.
+* wiki.phtml and redirect.phtml are now renamed to index.php and redirect.php
+ The old names are provided too for compatibility, but make sure they don't
+ conflict if you've been putting other files in your wiki.
+* Uploaded filenames are more strictly checked than before. See bits in
+ DefaultSettings.php to tweak this behavior to your needs.
+* Database messages are now enabled by default, so the interface messages can
+ be tweaked through the wiki with a sysop account. Disable this if you
+ don't want the performance hit.
=== Database changes ===
@@ -43,7 +74,34 @@ An index was added to recentchanges table to speed up Newpages
Expiration date field has been added to ipblocks table
(patch-ipb_expiry.sql for manual updaters).
+The links tables have slightly stricter indexes. ('links' and
+'brokenlinks' are not changed on existing installations.)
+
+=== Known problems ===
+
+The version 1.1.0 LocalSettings.sample file included the setting
+$wgCategoryMagic = true; this setting is for an experimental
+feature that _does not work correctly_. If you have it left over,
+turn it off or you'll see mysterious problems with vanishing links.
+
+There may be problems with session handling on some systems. Checking
+the "remember my password" box may help as a temporary workaround.
+
+If you receive "Cannot load input file" errors when trying to get
+at the wiki after installation, make the following changes:
+
+ in LocalSettings.php change the line something like this:
+ $wgArticlePath = "/wiki/index.php/$1";
+ to:
+ $wgArticlePath = "/wiki/index.php?title=$1";
+ in index.php, remove these lines:
+ if( isset( $_SERVER['PATH_INFO'] ) ) {
+ $title = substr( $_SERVER['PATH_INFO'], 1 );
+ } else {
+ $title = $_REQUEST['title'];
+ }
+
== Version 1.1.0, 2003-12-08 ==
This is the new production release. Any following 1.1.x releases are expected
diff --git a/config/index.php b/config/index.php
new file mode 100644
index 000000000000..d94798bc9a49
--- /dev/null
+++ b/config/index.php
@@ -0,0 +1,753 @@
+<?php
+# MediaWiki web-based config/installation
+# 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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+header( "Content-type: text/html; charset=utf-8" );
+
+?><!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">
+ <meta name="robots" content="noindex,nofollow">
+ <title>MediaWiki installation</title>
+ <style type="text/css">
+ #credit {
+ float: right;
+ width: 200px;
+ font-size: 0.7em;
+ background-color: #eee;
+ color: black;
+ border: solid 1px #444;
+ padding: 8px;
+ margin-left: 8px;
+ }
+
+ dl.setup dd {
+ margin-left: 0;
+ }
+ dl.setup dd label {
+ clear: left;
+ font-weight: bold;
+ width: 12em;
+ float: left;
+ text-align: right;
+ padding-right: 1em;
+ }
+ dl.setup dt {
+ clear: left;
+ font-size: 0.8em;
+ margin-left: 10em;
+ /* margin-right: 200px; */
+ margin-bottom: 2em;
+ }
+ .error {
+ color: red;
+ }
+ </style>
+</head>
+
+<body>
+
+<div id="credit">
+ <center>
+ <a href="http://www.mediawiki.org/"><img
+ src="../images/wiki.png" width="135" height="135" alt="" border="0" /></a>
+ </center>
+
+ <b><a href="http://www.mediawiki.org/">MediaWiki</a></b> is
+ Copyright (C) 2001-2004 by Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+ Tim Starling, Erik M&ouml;ller, and others.</p>
+
+ <ul>
+ <li><a href="../README">Readme</a></li>
+ <li><a href="../RELEASE-NOTES">Release notes</a></li>
+ <li><a href="../docs/">doc/</a></li>
+ <li><a href="http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide">User's Guide</a></li>
+ </ul>
+
+ <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 progarm 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ or <a href="http://www.gnu.org/copyleft/gpl.html">read it online</a></p>
+</div>
+
+<?php
+$IP = ".."; # Just to suppress notices, not for anything useful
+include( "../includes/DefaultSettings.php" );
+?>
+
+<h1>MediaWiki <?php print $wgVersion ?> installation</h1>
+
+
+<?php
+
+/* Check for existing configurations and bug out! */
+
+if( file_exists( "../LocalSettings.php" ) || file_exists( "../AdminSettings.php" ) ) {
+ dieout( "<h2>Wiki is configured.</h2>
+
+ <p>Already configured... <a href='../index.php'>return to the wiki</a>.</p>
+
+ <p>(You should probably remove this directory for added security.)</p>" );
+}
+
+if( file_exists( "./LocalSettings.php" ) || file_exists( "./AdminSettings.php" ) ) {
+ dieout( "<h2>You're configured!</h2>
+
+ <p>Please move <tt>LocalSettings.php</tt> to the parent directory, then
+ <a href='../index.php'>try out your wiki</a>.
+ (You should remove this config directory for added security once you're done.)</p>" );
+}
+
+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>" );
+}
+
+
+include( "../install-utils.inc" );
+include( "../maintenance/updaters.inc" );
+class ConfigData {
+ function getEncoded( $data ) {
+ # Hackish
+ global $wgInputEncoding;
+ if( strcasecmp( $wgInputEncoding, "utf-8" ) == 0 ) {
+ return $data;
+ } else {
+ return utf8_decode( $data ); /* to latin1 wikis */
+ }
+ }
+ function getSitename() { return $this->getEncoded( $this->Sitename ); }
+ function getSysopName() { return $this->getEncoded( $this->SysopName ); }
+ function getSysopPass() { return $this->getEncoded( $this->SysopPass ); }
+}
+
+?>
+
+
+<h2>Checking environment...</h2>
+<ul>
+<?php
+$endl = "
+";
+$conf = new ConfigData;
+
+install_version_checks();
+print "<li>PHP " . phpversion() . " ok</li>\n";
+
+$sapi = php_sapi_name();
+$conf->prettyURLs = true;
+print "<li>PHP server API is $sapi; ";
+switch( $sapi ) {
+case "apache":
+ print "ok, using pretty URLs (<tt>index.php/Page_Title</tt>)";
+ break;
+case "cgi":
+case "cgi-fcgi":
+ print "using ugly URLs (<tt>index.php?title=Page_Title</tt>)";
+ $conf->prettyURLs = false;
+ break;
+default:
+ print "unknown; using pretty URLs (<tt>index.php/Page_Title</tt>), if you have trouble change this in <tt>LocalSettings.php</tt>";
+}
+print "</li>\n";
+
+$conf->zlib = function_exists( "gzencode" );
+if( $conf->zlib ) {
+ print "<li>Have zlib support; enabling output compression.</li>\n";
+} else {
+ print "<li>No zlib support.</li>\n";
+}
+
+$conf->ImageMagick = false;
+
+$conf->HaveGD = function_exists( "imagejpeg" );
+if( $conf->HaveGD ) {
+ print "<li>Found GD graphics library built-in, image thumbnailing will be enabled if you enable uploads.</li>\n";
+} else {
+ $imcheck = array( "/usr/bin", "/usr/local/bin", "/sw/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;
+ }
+ }
+ if( !$conf->ImageMagick ) {
+ print "<li>Couldn't find GD library or ImageMagick; image thumbnailing disabled.</li>\n";
+ }
+}
+
+$conf->UseImageResize = $conf->HaveGD || $conf->ImageMagick;
+
+# $conf->IP = "/Users/brion/Sites/inplace";
+chdir( ".." );
+$conf->IP = getcwd();
+chdir( "config" );
+print "<li>Installation directory: <tt>" . htmlspecialchars( $conf->IP ) . "</tt></li>\n";
+
+# $conf->ScriptPath = "/~brion/inplace";
+$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $_SERVER["REQUEST_URI"] );
+print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</tt></li>\n";
+
+ $conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST");
+
+ $conf->Sitename = ucfirst( importPost( "Sitename", "" ) );
+ $conf->EmergencyContact = importPost( "EmergencyContact", $_SERVER["SERVER_ADMIN"] );
+ $conf->DBserver = importPost( "DBserver", "localhost" );
+ $conf->DBname = importPost( "DBname", "wikidb" );
+ $conf->DBuser = importPost( "DBuser", "wikiuser" );
+ $conf->DBpassword = importPost( "DBpassword" );
+ $conf->DBpassword2 = importPost( "DBpassword2" );
+ $conf->RootPW = importPost( "RootPW" );
+ $conf->LanguageCode = importPost( "LanguageCode", "en-utf8" );
+ $conf->SysopName = importPost( "SysopName", "WikiSysop" );
+ $conf->SysopPass = importPost( "SysopPass" );
+ $conf->SysopPass2 = importPost( "SysopPass2" );
+
+/* Check for validity */
+$errs = array();
+
+if( $conf->Sitename == "" || $conf->Sitename == "MediaWiki" || $conf->Sitename == "Mediawiki" ) {
+ $errs["Sitename"] = "Must not be blank or \"MediaWiki\".";
+}
+if( $conf->DBpassword == "" ) {
+ $errs["DBpassword"] = "Must not be blank";
+}
+if( $conf->DBpassword != $conf->DBpassword2 ) {
+ $errs["DBpassword2"] = "Passwords don't match!";
+}
+
+if( $conf->SysopPass == "" ) {
+ $errs["SysopPass"] = "Must not be blank";
+}
+if( $conf->SysopPass != $conf->SysopPass2 ) {
+ $errs["SysopPass2"] = "Passwords don't match!";
+}
+
+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 );
+ $wgCommandLineMode = false;
+ eval($local);
+
+ $wgDBadminuser = $wgDBuser;
+ $wgDBadminpassword = $wgDBpassword;
+ $wgCommandLineMode = true;
+ $wgUseDatabaseMessages = false; /* FIXME: For database failure */
+ include_once( "Setup.php" );
+ include_once( "../maintenance/InitialiseMessages.inc" );
+
+ $wgTitle = Title::newFromText( "Installation script" );
+ $wgDatabase = Database::newFromParams( $wgDBserver, "root", $conf->RootPW, "", 1 );
+ $wgDatabase->mIgnoreErrors = true;
+
+ @$myver = mysql_get_server_info( $wgDatabase->mConn );
+ if( !$myver ) {
+ print "<li>MySQL error " . ($err = mysql_errno() ) .
+ ": " . htmlspecialchars( mysql_error() );
+ $ok = false;
+ switch( $err ) {
+ case 1045:
+ if( $conf->Root ) {
+ $errs["RootPW"] = "Check password";
+ } else {
+ print "<li>Trying regular user...\n";
+ /* Try the regular user... */
+ $wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, "", 1 );
+ $wgDatabase->isOpen();
+ $wgDatabase->mIgnoreErrors = true;
+ @$myver = mysql_get_server_info( $wgDatabase->mConn );
+ if( !$myver ) {
+ $errs["DBuser"] = "Check name/pass";
+ $errs["DBpassword"] = "or enter root";
+ $errs["DBpassword2"] = "password below";
+ $errs["RootPW"] = "Got root?";
+ print " need password.</li>\n";
+ } else {
+ $conf->Root = true;
+ $conf->RootPW = "";
+ print " ok.</li>\n";
+ # And keep going...
+ $ok = true;
+ }
+ break;
+ }
+ case 2002:
+ case 2003:
+ $errs["DBserver"] = "Connection failed";
+ break;
+ default:
+ $errs["DBserver"] = "Couldn't connect to database";
+ break;
+ }
+ if( !$ok ) continue;
+ }
+
+ if ( !$wgDatabase->isOpen() ) {
+ $errs["DBserver"] = "Couldn't connect to database";
+ continue;
+ }
+
+ print "<li>Connected to database... $myver";
+ if( version_compare( $myver, "4.0.0" ) >= 0 ) {
+ print "; enabling MySQL 4 enhancements";
+ $conf->DBmysql4 = true;
+ $local = writeLocalSettings( $conf );
+ }
+ print "</li>\n";
+
+ @$sel = mysql_select_db( $wgDBname, $wgDatabase->mConn );
+ if( $sel ) {
+ print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
+ } else {
+ $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 );
+
+ if( $wgDatabase->tableExists( "cur" ) ) {
+ print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n<pre>";
+
+ chdir( ".." );
+ flush();
+ do_ipblocks_update(); flush();
+ do_interwiki_update(); flush();
+ do_index_update(); flush();
+ do_linkscc_update(); flush();
+ do_hitcounter_update(); flush();
+ do_recentchanges_update(); flush();
+ initialiseMessages(); flush();
+ chdir( "config" );
+
+ print "</pre>\n";
+ print "<li>Finished update checks.</li>\n";
+ } else {
+ # FIXME: Check for errors
+ print "<li>Creating tables...";
+ dbsource( "../maintenance/tables.sql", $wgDatabase );
+ dbsource( "../maintenance/interwiki.sql", $wgDatabase );
+ dbsource( "../maintenance/indexes.sql", $wgDatabase );
+ print " done.</li>\n";
+
+ print "<li>Initializing data...";
+ $wgDatabase->query( "INSERT INTO site_stats (ss_row_id,ss_total_views," .
+ "ss_total_edits,ss_good_articles) VALUES (1,0,0,0)" );
+
+ if( $conf->SysopName ) {
+ $u = User::newFromName( $conf->getSysopName() );
+ if ( 0 == $u->idForName() ) {
+ $u->addToDatabase();
+ $u->setPassword( $conf->getSysopPass() );
+ $u->addRight( "sysop" );
+ $u->addRight( "bureaucrat" );
+ $u->saveSettings();
+ 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";
+ }
+
+ print "<li>Initialising log pages...";
+ $logs = array(
+ "uploadlogpage" => "uploadlogpagetext",
+ "dellogpage" => "dellogpagetext",
+ "protectlogpage" => "protectlogtext",
+ "blocklogpage" => "blocklogtext"
+ );
+ $metaNamespace = Namespace::getWikipedia();
+ $now = wfTimestampNow();
+ $won = wfInvertTimestamp( $now );
+ foreach( $logs as $page => $text ) {
+ $logTitle = wfStrencode( $wgLang->ucfirst( str_replace( " ", "_", wfMsgNoDB( $page ) ) ) );
+ $logText = wfStrencode( wfMsgNoDB( $text ) );
+ $wgDatabase->query( "INSERT INTO cur (cur_namespace,cur_title,cur_text," .
+ "cur_restrictions,cur_timestamp,inverse_timestamp,cur_touched) " .
+ "VALUES ($metaNamespace,'$logTitle','$logText','sysop','$now','$won','$now')" );
+ }
+ print "</li>\n";
+
+ $titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) );
+ $title = $titleobj->getDBkey();
+ $sql = "INSERT INTO cur (cur_namespace,cur_title,cur_text,cur_timestamp,inverse_timestamp,cur_touched) " .
+ "VALUES (0,'$title','" .
+ wfStrencode( wfMsg( "mainpagetext" ) ) . "','$now','$won','$now')";
+ $wgDatabase->query( $sql, $fname );
+
+ print "<li><pre>";
+ initialiseMessages();
+ print "</pre></li>\n";
+
+ if( $conf->Root ) {
+ # Grant user permissions
+ dbsource( "../maintenance/users.sql", $wgDatabase );
+ }
+ }
+
+ /* Write out the config file now that all is well */
+ print "<p>Creating LocalSettings.php...</p>\n\n";
+ $localSettings = "<" . "?php$endl$local$endl?" . ">";
+
+ if( version_compare( phpversion(), "4.3.2" ) >= 0 ) {
+ $xt = "xt"; # Refuse to overwrite an existing file
+ } else {
+ $xt = "wt"; # 'x' is not available prior to PHP 4.3.2. We did check above, but race conditions blah blah
+ }
+ $f = fopen( "LocalSettings.php", $xt );
+
+ if( $f == false ) {
+ dieout( "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" );
+ }
+ fwrite( $f, $localSettings );
+ fclose( $f );
+
+ print "<p>Success! Move the LocalSettings.php file into the parent directory, then follow
+ <a href='{$conf->ScriptPath}/index.php'>this link</a> to your wiki.</p>\n";
+
+ } while( false );
+}
+?>
+</ul>
+
+
+<?php
+
+if( count( $errs ) ) {
+ /* Display options form */
+
+ if( $conf->posted ) {
+ echo "<p class='error'>Something's not quite right yet; make sure everything below is filled out correctly.</p>\n";
+ }
+?>
+
+<form name="config" method="post">
+
+
+<h2>Site config</h2>
+
+<dl class="setup">
+ <dd>
+ <?php
+ aField( $conf, "Sitename", "Site name:" );
+ ?>
+ </dd>
+ <dt>
+ Your site name should be a relatively short word. It'll appear as the namespace
+ name for 'meta' pages as well as throughout the user interface. Good site names
+ are things like "<a href="http://www.wikipedia.org/">Wikipedia</a>" and
+ "<a href="http://openfacts.berlios.de/">OpenFacts</a>"; avoid punctuation,
+ which may cause problems.
+ </dt>
+
+ <dd>
+ <?php
+ aField( $conf, "EmergencyContact", "Contact e-mail" );
+ ?>
+ </dd>
+ <dt>
+ This will be used as the return address for password reminders and
+ may be displayed in some error conditions so visitors can get in
+ touch with you.
+ </dt>
+
+ <dd>
+ <label for="LanguageCode">Language</label>
+ <select id="LanguageCode" name="LanguageCode">
+ <?php
+ $list = getLanguageList();
+ foreach( $list as $code => $name ) {
+ $sel = ($code == $conf->LanguageCode) ? "selected" : "";
+ echo "\t\t<option value=\"$code\" $sel>$name</option>\n";
+ }
+ ?>
+ </select>
+ </dd>
+ <dt>
+ You may select the language for the user interface of the wiki...
+ Some localizations are less complete than others. This also controls
+ the character encoding; Unicode is more flexible, but Latin-1 may be
+ more compatible with older browsers for some languages. Unicode will
+ be used where not specified otherwise.
+ </dt>
+
+ <dd>
+ <?php aField( $conf, "SysopName", "Sysop account name:", "" ) ?>
+ </dd>
+ <dd>
+ <?php aField( $conf, "SysopPass", "password:", "password" ) ?>
+ </dd>
+ <dd>
+ <?php aField( $conf, "SysopPass2", "again:", "password" ) ?>
+ </dd>
+ <dt>
+ A sysop user account can lock or delete pages, block problematic IP
+ addresses from editing, and other maintenance tasks. If creating a new
+ wiki database, a sysop account will be created with the given name
+ and password.
+ </dt>
+</dl>
+
+<h2>Database config</h2>
+
+<dl class="setup">
+ <dd><?php
+ aField( $conf, "DBserver", "MySQL server" );
+ ?></dd>
+ <dt>
+ If your database server isn't on your web server, enter the name
+ or IP address here.
+ </dt>
+
+ <dd><?php
+ aField( $conf, "DBname", "Database name" );
+ ?></dd>
+ <dd><?php
+ aField( $conf, "DBuser", "DB username" );
+ ?></dd>
+ <dd><?php
+ aField( $conf, "DBpassword", "DB password", "password" );
+ ?></dd>
+ <dd><?php
+ aField( $conf, "DBpassword2", "again", "password" );
+ ?></dd>
+ <dt>
+ 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.
+ </dt>
+
+
+ <dd>
+ <?php
+ aField( $conf, "RootPW", "DB root password", "password" );
+ ?>
+ </dd>
+ <dt>
+ You will only need this if the database and/or user account
+ above don't already exist.
+ Do <em>not</em> type in your machine's root password! MySQL
+ has its own "root" user with a separate password. (It might
+ even be blank, depending on your configuration.)
+ </dt>
+
+ <dd>
+ <label>&nbsp;</label>
+ <input type="submit" value="Install!" />
+ </dd>
+</dl>
+
+
+</form>
+
+<?php
+}
+
+/* -------------------------------------------------------------------------------------- */
+
+function writeAdminSettings( $conf ) {
+ return "
+\$wgDBadminuser = \"{$conf->DBadminuser}\";
+\$wgDBadminpassword = \"{$conf->DBadminpassword}\";
+";
+}
+
+function writeLocalSettings( $conf ) {
+ $conf->DBmysql4 = @$conf->DBmysql4 ? 'true' : 'false';
+ $conf->UseImageResize = $conf->UseImageResize ? 'true' : 'false';
+ $conf->PasswordSender = $conf->EmergencyContact;
+ if( $conf->LanguageCode == "en-utf8" ) {
+ $conf->LanguageCode = "en";
+ $conf->Encoding = "UTF-8";
+ }
+ $zlib = ($conf->zlib ? "" : "# ");
+ $magic = ($conf->ImageMagick ? "" : "# ");
+ $convert = ($conf->ImageMagick ? $conf->ImageMagick : "/usr/bin/convert" );
+ $pretty = ($conf->prettyURLs ? "" : "# ");
+ $ugly = ($conf->prettyURLs ? "# " : "");
+
+ $sep = (DIRECTORY_SEPARATOR == "\\") ? ";" : ":";
+ return "
+# 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.
+
+\$IP = \"{$conf->IP}\";
+ini_set( \"include_path\", \"\$IP/includes$sep\$IP/languages$sep\" . ini_get(\"include_path\") );
+include_once( \"DefaultSettings.php\" );
+
+if( \$wgCommandLineMode ) {
+ die( \"Can't use command-line utils with in-place install yet, sorry.\" );
+} else {
+ ## Compress output if the browser supports it
+ {$zlib}if( !ini_get( 'zlib.output_compression' ) ) ob_start( 'ob_gzhandler' );
+}
+
+\$wgSitename = \"{$conf->Sitename}\";
+
+\$wgScriptPath = \"{$conf->ScriptPath}\";
+\$wgScript = \"\$wgScriptPath/index.php\";
+\$wgRedirectScript = \"\$wgScriptPath/redirect.php\";
+
+## If using PHP as a CGI module, use the ugly URLs
+{$pretty}\$wgArticlePath = \"\$wgScript/\$1\";
+{$ugly}\$wgArticlePath = \"\$wgScript?title=\$1\";
+
+\$wgStyleSheetPath = \"\$wgScriptPath/stylesheets\";
+\$wgStyleSheetDirectory = \"\$IP/stylesheets\";
+
+\$wgUploadPath = \"\$wgScriptPath/images\";
+\$wgUploadDirectory = \"\$IP/images\";
+\$wgLogo = \"\$wgUploadPath/wiki.png\";
+
+\$wgEmergencyContact = \"{$conf->EmergencyContact}\";
+\$wgPasswordSender = \"{$conf->PasswordSender}\";
+
+\$wgDBserver = \"{$conf->DBserver}\";
+\$wgDBname = \"{$conf->DBname}\";
+\$wgDBuser = \"{$conf->DBuser}\";
+\$wgDBpassword = \"{$conf->DBpassword}\";
+
+## To allow SQL queries through the wiki's Special:Askaql page,
+## uncomment the next lines. THIS IS VERY INSECURE. If you want
+## to allow semipublic read-only SQL access for your sysops,
+## you should define a MySQL user with limited privileges.
+## See MySQL docs: http://www.mysql.com/doc/en/GRANT.html
+#
+# \$wgAllowSysopQueries = true;
+# \$wgDBsqluser = \"sqluser\";
+# \$wgDBsqlpassword = \"sqlpass\";
+
+\$wgDBmysql4 = \$wgEnablePersistentLC = {$conf->DBmysql4};
+
+## To enable image uploads, make sure the 'images' directory
+## is writable, then uncomment this:
+# \$wgDisableUploads = false;
+\$wgUseImageResize = {$conf->UseImageResize};
+{$magic}\$wgUseImageMagick = true;
+{$magic}\$wgImageMagickConvertCommand = \"{$convert}\";
+
+## If you have the appropriate support software installed
+## you can enable inline LaTeX equations:
+# \$wgUseTeX = true;
+\$wgMathPath = \"{\$wgUploadPath}/math\";
+\$wgMathDirectory = \"{\$wgUploadDirectory}/math\";
+\$wgTmpDirectory = \"{\$wgUploadDirectory}/tmp\";
+
+\$wgLocalInterwiki = \$wgSitename;
+
+\$wgLanguageCode = \"{$conf->LanguageCode}\";
+" . ($conf->Encoding ? "\$wgInputEncoding = \$wgOutputEncoding = \"{$conf->Encoding}\";" : "" ) . "
+
+";
+}
+
+function dieout( $text ) {
+ die( $text . "\n\n</body>\n</html>" );
+}
+
+function importPost( $name, $default = "" ) {
+ if( isset( $_POST[$name] ) ) {
+ return $_POST[$name];
+ } else {
+ return $default;
+ }
+}
+
+function aField( &$conf, $field, $text, $type = "" ) {
+ if( $type != "" ) $type = "type=\"$type\"";
+ echo "\t\t<label for=\"$field\">$text</label>\n";
+ echo "\t\t<input $type name=\"$field\" id=\"$field\" value=\"";
+ echo htmlspecialchars( $conf->$field );
+ echo "\" />\n";
+
+ global $errs;
+ if(isset($errs[$field])) echo "<span class='error'>" . $errs[$field] . "</span>\n";
+}
+
+function getLanguageList() {
+ global $wgLanguageNames;
+ if( !isset( $wgLanguageNames ) ) {
+ $wgLanguageCode = "xxx";
+ function wfLocalUrl( $x ) { return $x; }
+ function wfLocalUrlE( $x ) { return $x; }
+ include( "../languages/Language.php" );
+ }
+
+ $codes = array();
+ $latin1 = array( "da", "de", "en", "es", "nl", "sv" );
+
+ $d = opendir( "../languages" );
+ while( false !== ($f = readdir( $d ) ) ) {
+ if( preg_match( '/Language([A-Z][a-z]+)\.php$/', $f, $m ) ) {
+ $code = strtolower( $m[1] );
+ $codes[$code] = "$code - " . $wgLanguageNames[$code];
+ if( in_array( $code, $latin1 ) ) {
+ $codes[$code] .= " - Latin-1";
+ }
+ }
+ }
+ $codes["en-utf8"] = "en - English - Unicode";
+ closedir( $d );
+ ksort( $codes );
+ return $codes;
+}
+
+?>
+
+</body>
+</html>
diff --git a/images/Arr_.png b/images/Arr_.png
new file mode 100644
index 000000000000..83fafc740b04
--- /dev/null
+++ b/images/Arr_.png
Binary files differ
diff --git a/images/Arr_d.png b/images/Arr_d.png
new file mode 100644
index 000000000000..421dd101536e
--- /dev/null
+++ b/images/Arr_d.png
Binary files differ
diff --git a/images/Arr_l.png b/images/Arr_l.png
new file mode 100644
index 000000000000..9db66232e34c
--- /dev/null
+++ b/images/Arr_l.png
Binary files differ
diff --git a/images/Arr_r.png b/images/Arr_r.png
new file mode 100644
index 000000000000..d1b161b07908
--- /dev/null
+++ b/images/Arr_r.png
Binary files differ
diff --git a/images/Arr_r.xcf b/images/Arr_r.xcf
new file mode 100644
index 000000000000..83b7b2a8768b
--- /dev/null
+++ b/images/Arr_r.xcf
Binary files differ
diff --git a/includes/Article.php b/includes/Article.php
index 55f218adbd9d..f1433f142303 100644
--- a/includes/Article.php
+++ b/includes/Article.php
@@ -427,7 +427,8 @@ class Article {
# Squid purging
if ( $wgUseSquid ) {
$urlArr = Array(
- $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL())
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL()),
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL(), 'action=history')
);
wfPurgeSquidServers($urlArr);
/* this needs to be done after LinksUpdate */
@@ -497,7 +498,12 @@ class Article {
$res = wfQuery( $sql, DB_WRITE, $fname );
if( wfAffectedRows() == 0 ) {
- /* Belated edit conflict! Run away!! */
+ # This is *not* the main edit conflict check. The main edit conflict
+ # check is done in the EditPage user interface. This here is a check
+ # for a race condition where simultaneous edits partially go through
+ # and we end up stepping on each other. If the last save turns out
+ # not to be what we just checked against a millisecond ago, we abort
+ # now instead of stepping all over it.
return false;
}
@@ -543,7 +549,8 @@ class Article {
if ( $wgUseSquid ) {
$urlArr = Array(
- $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL())
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL()),
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL(), 'action=history')
);
wfPurgeSquidServers($urlArr);
}
@@ -833,7 +840,8 @@ class Article {
# Squid purging
if ( $wgUseSquid ) {
$urlArr = Array(
- $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL())
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL()),
+ $wgInternalServer.wfLocalUrl( $this->mTitle->getPrefixedURL(), 'action=history')
);
wfPurgeSquidServers($urlArr);
diff --git a/includes/CacheManager.php b/includes/CacheManager.php
index 09f9a80bafb6..a0925e19176b 100644
--- a/includes/CacheManager.php
+++ b/includes/CacheManager.php
@@ -1,4 +1,22 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
# 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
diff --git a/includes/Database.php b/includes/Database.php
index 84f2c4668316..7c221fa1dda9 100644
--- a/includes/Database.php
+++ b/includes/Database.php
@@ -308,15 +308,17 @@ class Database {
function tableExists( $table )
{
- $res = mysql_list_tables( $this->mDBname );
- if( !$res ) {
- echo "** " . $this->lastError() . "\n";
+ $old = $this->setIgnoreErrors( true );
+ $res = $this->query( "SELECT 1 FROM $table LIMIT 1" );
+ $this->setIgnoreErrors( $old );
+ if( $res ) {
+ $this->freeResult( $res );
+ return true;
+ } else {
+ # Clear error flag
+ wfLastError();
return false;
}
- for( $i = $this->numRows( $res ) - 1; $i--; $i > 0 ) {
- if( mysql_tablename( $res, $i ) == $table ) return true;
- }
- return false;
}
function fieldInfo( $table, $field )
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index 83524255f174..e05b9a654df3 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -6,12 +6,14 @@
# like $wgScriptPath, you must also localize everything that
# depends on it.
-$wgVersion = "1.2.0rc1";
+$wgVersion = "1.2.2";
$wgSitename = "MediaWiki"; # Please customize!
$wgMetaNamespace = FALSE; # will be same as you set $wgSitename
-$wgServer = "http://" . getenv( "SERVER_NAME" );
+$wgServer = "http://" . $_SERVER["SERVER_NAME"];
+if( $_SERVER["SERVER_PORT"] != 80 ) $wgServer .= ":" . $_SERVER["SERVER_PORT"];
+
$wgScriptPath = "/wiki";
# ATTN: Old installations used wiki.phtml and redirect.phtml -
@@ -19,6 +21,9 @@ $wgScriptPath = "/wiki";
$wgScript = "{$wgScriptPath}/index.php";
$wgRedirectScript = "{$wgScriptPath}/redirect.php";
+# Whether to support URLs like index.php/Page_title
+$wgUsePathInfo = ( strpos( php_sapi_name(), "cgi" ) === false );
+
$wgStyleSheetPath = "{$wgScriptPath}/style";
$wgStyleSheetDirectory = "{$IP}/style";
$wgArticlePath = "{$wgScript}?title=$1";
@@ -42,12 +47,16 @@ $wgDBname = "wikidb";
$wgDBconnection = "";
$wgDBuser = "wikiuser";
$wgDBpassword = "userpass";
-$wgDBsqluser = "sqluser";
-$wgDBsqlpassword = "sqlpass";
$wgDBminWordLen = 4;
$wgDBtransactions = false; # Set to true if using InnoDB tables
$wgDBmysql4 = false; # Set to true to use enhanced fulltext search
+
+# Sysop SQL queries
+$wgAllowSysopQueries = false; # Dangerous if not configured properly.
+$wgDBsqluser = "sqluser";
+$wgDBsqlpassword = "sqlpass";
$wgSqlTimeout = 30;
+$wgSqlLogFile = "{$wgUploadDirectory}/sqllog_mFhyRe6";
# Database load balancer
$wgDBservers = false; # e.g. array("larousse", "pliny")
@@ -82,8 +91,8 @@ $wgShowIPinHeader = true; # For non-logged in users
$wgMaxNameChars = 32; # Maximum number of bytes in username
# Translation using MediaWiki: namespace
-# Not recommended unless memcached is installed
-$wgUseDatabaseMessages = false;
+# This will increase load times by 25-60% unless memcached is installed
+$wgUseDatabaseMessages = true;
$wgMsgCacheExpiry = 86400;
$wgExtraSubtitle = "";
@@ -99,7 +108,6 @@ $wgDebugLogFile = "";
$wgDebugComments = false;
$wgReadOnly = false;
-$wgSqlLogFile = "{$wgUploadDirectory}/sqllog_mFhyRe6";
$wgLogQueries = false;
$wgUseCategoryMagic = false;
$wgEnablePersistentLC = false; # Persistent link cache in linkscc table; FAILS on MySQL 3.x
@@ -229,6 +237,21 @@ $wgCheckFileExtensions = true;
# covered by $wgFileExtensions.
$wgStrictFileExtensions = true;
+## Set $wgUseImageResize to true if you want to enable dynamic
+## server side image resizing ("Thumbnails")
+#
+$wgUseImageResize = false;
+
+## Resizing can be done using PHP's internal image libraries
+## or using ImageMagick. The later supports more file formats
+## than PHP, which only supports PNG, GIF, JPG, XBM and WBMP.
+##
+## Set $wgUseImageMagick to true to use Image Magick instead
+## of the builtin functions
+#
+$wgUseImageMagick = false;
+$wgImageMagickConvertCommand = "/usr/bin/convert";
+
$wgPasswordSalt = true; # For compatibility with old installations set to false
# Which namespaces should support subpages?
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 60959b8c26c2..f7029ca13d5a 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -279,29 +279,16 @@ function wfMsgReal( $key, $args, $useDB ) {
function wfCleanFormFields( $fields )
{
- global $HTTP_POST_VARS;
global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding, $wgLang;
- if ( get_magic_quotes_gpc() ) {
- foreach ( $fields as $fname ) {
- if ( isset( $HTTP_POST_VARS[$fname] ) ) {
- $HTTP_POST_VARS[$fname] = stripslashes(
- $HTTP_POST_VARS[$fname] );
- }
- global ${$fname};
- if ( isset( ${$fname} ) ) {
- ${$fname} = stripslashes( ${$fname} );
- }
- }
- }
$enc = $wgOutputEncoding;
if( $wgEditEncoding != "") $enc = $wgEditEncoding;
if ( $enc != $wgInputEncoding ) {
foreach ( $fields as $fname ) {
- if ( isset( $HTTP_POST_VARS[$fname] ) ) {
- $HTTP_POST_VARS[$fname] = $wgLang->iconv(
+ if ( isset( $_POST[$fname] ) ) {
+ $_POST[$fname] = $wgLang->iconv(
$wgOutputEncoding, $wgInputEncoding,
- $HTTP_POST_VARS[$fname] );
+ $_POST[$fname] );
}
global ${$fname};
if ( isset( ${$fname} ) ) {
@@ -331,9 +318,6 @@ function wfDemungeQuotes( $in )
function wfCleanQueryVar( $var )
{
global $wgLang;
- if ( get_magic_quotes_gpc() ) {
- $var = stripslashes( $var );
- }
return $wgLang->recodeInput( $var );
}
@@ -766,81 +750,94 @@ $urlArr should contain the full URLs to purge as values
XXX report broken Squids per mail or log */
function wfPurgeSquidServers ($urlArr) {
- global $wgSquidServers;
- $maxsocketspersquid = 8; // socket cap per Squid
- $urlspersocket = 400; // 400 seems to be a good tradeoff, opening a socket takes a while
- $sockspersq = ceil(count($urlArr) / $urlspersocket );
- 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;
- $socket = @fsockopen($server, $port, $error, $errstr, 3);
- if (!$socket) {
- $failed = true;
- $totalsockets -= $sockspersq;
- } else {
- @fputs($socket,"PURGE " . $urlArr[0] . " HTTP/1.0\r\n".
- "Connection: Keep-Alive\r\n\r\n");
- $res = @fread($socket,512);
- /* 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[] = @fsockopen($server, $port, $error, $errstr, 2);
- @stream_set_blocking($sockets[$s],false);
- }
- $so++;
- }
- }
-
- if ($urlspersocket > 1) {
- /* 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 < 20 ) {
- $res .= @fread($sockets[$s],512);
+ global $wgSquidServers;
+ $maxsocketspersquid = 8; // socket cap per Squid
+ $urlspersocket = 400; // 400 seems to be a good tradeoff, opening a socket takes a while
+ $firsturl = $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;
+ $socket = @fsockopen($server, $port, $error, $errstr, 3);
+ if (!$socket) {
+ $failed = true;
+ $totalsockets -= $sockspersq;
+ } else {
+ @fputs($socket,"PURGE " . $firsturl . " HTTP/1.0\r\n".
+ "Connection: Keep-Alive\r\n\r\n");
+ $res = @fread($socket,512);
+ /* 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[] = @fsockopen($server, $port, $error, $errstr, 2);
+ @stream_set_blocking($sockets[$s],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));
+ @fputs($sockets[$s],"PURGE " . $urlArr[$urindex] . " HTTP/1.0\r\n".
+ "Connection: Keep-Alive\r\n\r\n");
+ }
+ }
+ }
+
+ foreach ($sockets as $socket) {
+ $res = '';
+ $esc = 0;
+ while (strlen($res) < 100 && $esc < 200 ) {
+ $res .= @fread($socket,1024);
$esc++;
- }
+ usleep(20);
}
- $urindex = $r + $urlspersocket * ($s - $sockspersq * floor($s / $sockspersq));
- @fputs($sockets[$s],"PURGE " . $urlArr[$urindex] . " HTTP/1.0\r\n".
- "Connection: Keep-Alive\r\n\r\n");
- }
- }
- }
-
- foreach ($sockets as $socket) {
- @fclose($sockets);
- }
- return;
+
+ @fclose($socket);
+ }
+ return;
}
+
?>
diff --git a/includes/LogPage.php b/includes/LogPage.php
index d26495c53f66..6178a6a10857 100644
--- a/includes/LogPage.php
+++ b/includes/LogPage.php
@@ -1,4 +1,22 @@
<?php
+# Copyright (C) 2002 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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
# Class to simplify the use of log pages
class LogPage {
diff --git a/includes/Math.php b/includes/Math.php
index 3c6075f3ff8c..798b569e5608 100644
--- a/includes/Math.php
+++ b/includes/Math.php
@@ -42,6 +42,25 @@ function renderMath( $tex )
}
}
+ # Ensure that the temp and output directories are available before continuing...
+ if( !file_exists( $wgMathDirectory ) ) {
+ if( !@mkdir( $wgMathDirectory ) ) {
+ return "<b>$mf (" . wfMsg( "math_bad_output" ) . ")</b>";
+ }
+ } elseif( !is_dir( $wgMathDirectory ) || !is_writable( $wgMathDirectory ) ) {
+ return "<b>$mf (" . wfMsg( "math_bad_output" ) . ")</b>";
+ }
+ if( !file_exists( $wgTmpDirectory ) ) {
+ if( !@mkdir( $wgTmpDirectory ) ) {
+ return "<b>$mf (" . wfMsg( "math_bad_tmpdir" ) . ")</b>";
+ }
+ } elseif( !is_dir( $wgTmpDirectory ) || !is_writable( $wgTmpDirectory ) ) {
+ return "<b>$mf (" . wfMsg( "math_bad_tmpdir" ) . ")</b>";
+ }
+
+ if( !is_executable( $wgTexvc ) ) {
+ return "<b>$mf (" . wfMsg( "math_notexvc" ) . ")</b>";
+ }
$cmd = $wgTexvc." ".
escapeshellarg($wgTmpDirectory)." ".
escapeshellarg($wgMathDirectory)." ".
diff --git a/includes/MemcachedSessions.php b/includes/MemcachedSessions.php
index 435d32fb7a04..dd45d516f602 100644
--- a/includes/MemcachedSessions.php
+++ b/includes/MemcachedSessions.php
@@ -1,4 +1,21 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
/*
This file gets included if $wgSessionsInMemcache is set in the config.
diff --git a/includes/MessageCache.php b/includes/MessageCache.php
index 681078617a41..5dd1516ddf7a 100755
--- a/includes/MessageCache.php
+++ b/includes/MessageCache.php
@@ -200,5 +200,9 @@ class MessageCache
}
return $message;
}
+
+ function disable() { $this->mDisable = true; }
+ function enable() { $this->mDisable = false; }
+
}
?>
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index d0e3efacf063..bf72f55677c2 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -30,11 +30,12 @@ class OutputPage {
$this->mCategoryLinks = array() ;
$this->mDoNothing = false;
$this->mContainsOldMagic = $this->mContainsNewMagic = 0;
+ $this->mSquidMaxage = 0;
}
function addHeader( $name, $val ) { array_push( $this->mHeaders, "$name: $val" ) ; }
function addCookie( $name, $val ) { array_push( $this->mCookies, array( $name, $val ) ); }
- function redirect( $url ) { $this->mRedirect = $url; }
+ function redirect( $url, $responsecode = '302' ) { $this->mRedirect = $url; $this->mRedirectCode = $responsecode; }
# To add an http-equiv meta tag, precede the name with "http:"
function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); }
@@ -166,12 +167,11 @@ class OutputPage {
# Set the maximum cache time on the Squid in seconds
function setSquidMaxage( $maxage ) {
- global $wgSquidMaxage;
- $wgSquidMaxage = $maxage;
+ $this->mSquidMaxage = $maxage;
}
function sendCacheControl() {
- global $wgUseSquid, $wgUseESI, $wgSquidMaxage;
+ global $wgUseSquid, $wgUseESI;
# FIXME: This header may cause trouble with some versions of Internet Explorer
header( "Vary: Accept-Encoding, Cookie" );
if( $this->mLastModified != "" ) {
@@ -185,7 +185,7 @@ class OutputPage {
wfDebug( "** 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"');
- header( 'Surrogate-Control: max-age='.$wgSquidMaxage.'+'.$wgSquidMaxage.', content="ESI/1.0"');
+ header( 'Surrogate-Control: max-age='.$wgSquidMaxage.'+'.$this->mSquidMaxage.', content="ESI/1.0"');
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
@@ -195,7 +195,7 @@ class OutputPage {
wfDebug( "** 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" );
- header( 'Cache-Control: s-maxage='.$wgSquidMaxage.', must-revalidate, max-age=0' );
+ 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
@@ -229,10 +229,6 @@ class OutputPage {
$sk = $wgUser->getSkin();
- $this->sendCacheControl();
-
- header( "Content-type: text/html; charset={$wgOutputEncoding}" );
- header( "Content-language: {$wgLanguageCode}" );
if ( "" != $this->mRedirect ) {
if( substr( $this->mRedirect, 0, 4 ) != "http" ) {
@@ -240,9 +236,22 @@ class OutputPage {
global $wgServer;
$this->mRedirect = $wgServer . $this->mRedirect;
}
+ if( $this->mRedirectCode == '301') {
+ header("HTTP/1.1 {$this->mRedirectCode} Moved Permanently");
+
+ $this->mLastModified = gmdate( "D, j M Y H:i:s" ) . " GMT";
+ }
+
+ $this->sendCacheControl();
+
header( "Location: {$this->mRedirect}" );
return;
}
+
+ $this->sendCacheControl();
+
+ header( "Content-type: text/html; charset={$wgOutputEncoding}" );
+ header( "Content-language: {$wgLanguageCode}" );
$exp = time() + $wgCookieExpiration;
foreach( $this->mCookies as $name => $val ) {
diff --git a/includes/SearchEngine.php b/includes/SearchEngine.php
index 0e182fc74b9a..40bce800c3c5 100644
--- a/includes/SearchEngine.php
+++ b/includes/SearchEngine.php
@@ -471,11 +471,11 @@ class SearchEngine {
foreach( array(NS_MAIN, NS_WP, NS_USER, NS_IMAGE, NS_MEDIAWIKI) as $namespace){
$anyhit |= SearchEngine::doFuzzyTitleSearch( $search, $namespace );
}
- }
+ }
+
if( ! $anyhit ){
- $wgOut->addHTML( wfMsg("notitlematches") );
+ return $this->showResults();
}
- $wgOut->addHTML( wfMsg( "googlesearch", htmlspecialchars( $search ), $GLOBALS['wgInputEncoding'] ) );
}
/* static */ function doFuzzyTitleSearch( $search, $namespace ){
diff --git a/includes/Setup.php b/includes/Setup.php
index 69bd23e845a0..14ca7604df90 100644
--- a/includes/Setup.php
+++ b/includes/Setup.php
@@ -20,12 +20,17 @@ if ( $wgProfiling and (0 == rand() % $wgProfileSampleRate ) ) {
/* collect the originating ips */
-$wgIP = getenv("REMOTE_ADDR");
if( $wgUseSquid && isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
# If the web server is behind a reverse proxy, we need to find
# out where our requests are really coming from.
- $wgIP = trim( preg_replace( "/^(.*, )?([^,]+)$/", "$2",
- $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
+ $hopips = split(', ', $_SERVER['HTTP_X_FORWARDED_FOR'] );
+
+ while(in_array(trim(end($hopips)), $wgSquidServers)){
+ array_pop($hopips);
+ }
+ $wgIP = trim(end($hopips));
+} else {
+ $wgIP = getenv("REMOTE_ADDR");
}
$fname = "Setup.php";
@@ -148,7 +153,7 @@ if ( $wgUseDynamicDates ) {
$wgDateFormatter = new DateFormatter;
}
-if( !$wgCommandLineMode && isset( $_COOKIE[ini_get("session.name")] ) ) {
+if( !$wgCommandLineMode && ( isset( $_COOKIE[ini_get("session.name")] ) || isset( $_COOKIE["{$wgDBname}Password"] ) ) ) {
User::SetupSession();
}
@@ -161,6 +166,9 @@ $wgMwRedir =& MagicWord::get( MAG_REDIRECT );
$wgParserCache = new ParserCache();
$wgParser = new Parser();
+# Disable known broken features
+$wgUseCategoryMagic = false;
+
wfProfileOut( "$fname-misc" );
wfProfileOut( $fname );
diff --git a/includes/Skin.php b/includes/Skin.php
index d933a110d7a9..5887a45e62ae 100644
--- a/includes/Skin.php
+++ b/includes/Skin.php
@@ -1524,8 +1524,13 @@ class Skin {
$alt = htmlspecialchars( $alt );
$u = wfLocalUrlE( $link );
- $s = "<a href=\"{$u}\" class='image' title=\"{$alt}\">" .
- "<img border=\"0\" src=\"{$url}\" alt=\"{$alt}\"></a>";
+ if ( $url == "" )
+ {
+ $s = str_replace( "$1", $name, wfMsg("missingimage") );
+ } else {
+ $s = "<a href=\"{$u}\" class='image' title=\"{$alt}\">" .
+ "<img border=\"0\" src=\"{$url}\" alt=\"{$alt}\"></a>";
+ }
if ( "" != $align ) {
$s = "<div class=\"float{$align}\">{$s}</div>";
}
@@ -1542,7 +1547,13 @@ class Skin {
$thumbPath = wfImageThumbDir( $thumbName )."/".$thumbName;
$thumbUrl = wfImageThumbUrl( $thumbName );
- if ( (! file_exists( $thumbPath ) && file_exists( $imgPath ))
+ if ( ! file_exists( $imgPath ) )
+ {
+ # If there is no image, there will be no thumbnail
+ return "";
+ }
+
+ if ( (! file_exists( $thumbPath ) )
|| ( filemtime($thumbPath) < filemtime($imgPath) ) ) {
# Squid purging
if ( $wgUseSquid ) {
@@ -1629,7 +1640,7 @@ class Skin {
}
function makeThumbLinkObj( $nt, $label = "", $align = "right", $boxwidth = 180 ) {
- global $wgUploadPath;
+ global $wgUploadPath, $wgLang;
$name = $nt->getDBKey();
$image = Title::makeTitle( Namespace::getImage(), $name );
$link = $image->getPrefixedURL();
@@ -1638,7 +1649,12 @@ class Skin {
$label = htmlspecialchars( $label );
- list($width, $height, $type, $attr) = getimagesize( $path );
+ if ( file_exists( $path ) )
+ {
+ list($width, $height, $type, $attr) = getimagesize( $path );
+ } else {
+ $width = $height = 200;
+ }
$boxheight = intval( $height/($width/$boxwidth) );
if ( $boxwidth > $width ) {
$boxwidth = $width;
@@ -1649,14 +1665,22 @@ class Skin {
$u = wfLocalUrlE( $link );
- $more = wfMsg( "thumbnail-more" );
+ $more = htmlspecialchars( wfMsg( "thumbnail-more" ) );
+ $magnifyalign = $wgLang->isRTL() ? "left" : "right";
+ $textalign = $wgLang->isRTL() ? " style=\"text-align:right\"" : "";
- $s = "<div class=\"thumbnail-{$align}\" style=\"width:{$boxwidth}px;\">" .
- "<a href=\"{$u}\" class=\"internal\" title=\"{$label}\">" .
- "<img border=\"0\" src=\"{$thumbUrl}\" alt=\"{$label}\" width=\"{$boxwidth}\" height=\"{$boxheight}\"></a>" .
- "<a href=\"{$u}\" class=\"internal\" title=\"{$more}\">" .
- "<img border=\"0\" src=\"{$wgUploadPath}/magnify-clip.png\" width=\"26\" height=\"24\" align=\"right\" alt=\"{$more}\"></a>" .
- "<p>{$label}</p></div>";
+ $s = "<div class=\"thumbnail-{$align}\" style=\"width:{$boxwidth}px;\">";
+ if ( $thumbUrl == "" ) {
+ $s .= str_replace( "$1", $name, wfMsg("missingimage") );
+ } else {
+ $s .= "<a href=\"{$u}\" class=\"internal\" title=\"{$alt}\">" .
+ "<img border=\"0\" src=\"{$thumbUrl}\" alt=\"{$alt}\" " .
+ " width=\"{$boxwidth}\" height=\"{$boxheight}\"></a>" .
+ "<a href=\"{$u}\" class=\"internal\" title=\"{$more}\">" .
+ "<img border=\"0\" src=\"{$wgUploadPath}/magnify-clip.png\" " .
+ " width=\"26\" height=\"24\" align=\"{$magnifyalign}\" alt=\"{$more}\"></a>";
+ }
+ $s .= "<p{$textalign}>{$label}</p></div>";
return $s;
}
@@ -1728,7 +1752,7 @@ class Skin {
# Spacer image
$r = "" ;
- $r .= "<img src='{$wgUploadPath}/Arr_.png' width=12 height=12 border=0>" ; $r .= "<tt>" ;
+ $r .= "<img src='{$wgUploadPath}/Arr_.png' width='12' height='12' border='0'>" ; $r .= "<tt>" ;
if ( $rc_type == RC_MOVE ) {
$r .= "&nbsp;&nbsp;";
@@ -1813,10 +1837,10 @@ class Skin {
$rci = "RCI{$this->rcCacheIndex}" ;
$rcl = "RCL{$this->rcCacheIndex}" ;
$rcm = "RCM{$this->rcCacheIndex}" ;
- $tl = "<a href='javascript:toggleVisibility(\"{$rci}\",\"{$rcm}\",\"{$rcl}\")'>" ;
- $tl .= "<span id='{$rcm}'><img src='{$wgUploadPath}/Arr_r.png' width=12 height=12 border=0></span>" ;
- $tl .= "<span id='{$rcl}' style='display:none'><img src='{$wgUploadPath}/Arr_d.png' width=12 height=12 border=0></span>" ;
- $tl .= "</a>" ;
+ $toggleLink = "javascript:toggleVisibility(\"{$rci}\",\"{$rcm}\",\"{$rcl}\")" ;
+ $arrowdir = $wgLang->isRTL() ? "l" : "r";
+ $tl = "<span id='{$rcm}'><a href='$toggleLink'><img src='{$wgUploadPath}/Arr_{$arrowdir}.png' width='12' height='12' border='0' /></a></span>" ;
+ $tl .= "<span id='{$rcl}' style='display:none'><a href='$toggleLink'><img src='{$wgUploadPath}/Arr_d.png' width='12' height='12' border='0' /></a></span>" ;
$r .= $tl ;
# Main line
@@ -1910,7 +1934,7 @@ class Skin {
}
}
- return "<div align=left>{$r}</div>" ;
+ return "<div>{$r}</div>" ;
}
# Called in a loop over all displayed RC entries
@@ -2338,17 +2362,17 @@ class Skin {
$image=$wgUploadPath."/".$tool["image"];
$open=$tool["open"];
$close=$tool["close"];
- $sample=$tool["sample"];
+ $sample = addslashes( $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=$tool["tip"];
+ $tip = addslashes( $tool["tip"] );
$toolbar.="addButton('$image','$tip','$open','$close','$sample');\n";
}
- $toolbar.="addInfobox('".wfMsg("infobox")."');\n";
+ $toolbar.="addInfobox('" . addslashes( wfMsg( "infobox" ) ) . "');\n";
$toolbar.="document.writeln(\"</div>\");\n</script>";
return $toolbar;
}
diff --git a/includes/SkinSmarty.php b/includes/SkinSmarty.php
index e49361a328cd..135c76ee1e31 100644
--- a/includes/SkinSmarty.php
+++ b/includes/SkinSmarty.php
@@ -1,4 +1,21 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
include_once( "Smarty.class.php" );
diff --git a/includes/SpecialAsksql.php b/includes/SpecialAsksql.php
index b5116efc30d0..42f44640ebe6 100644
--- a/includes/SpecialAsksql.php
+++ b/includes/SpecialAsksql.php
@@ -2,9 +2,13 @@
function wfSpecialAsksql()
{
- global $wgUser, $wgOut, $action;
+ global $wgUser, $wgOut, $wgAllowSysopQueries, $action;
- if ( ! $wgUser->isSysop() ) {
+ if( !$wgAllowSysopQueries ) {
+ $wgOut->errorpage( "nosuchspecialpage", "nospecialpagetext" );
+ return;
+ }
+ if( !$wgUser->isSysop() ) {
$wgOut->sysopRequired();
return;
}
@@ -12,8 +16,11 @@ function wfSpecialAsksql()
wfCleanFormFields( $fields );
$f = new SqlQueryForm();
- if ( "submit" == $action ) { $f->doSubmit(); }
- else { $f->showForm( "" ); }
+ if ( "submit" == $action ) {
+ $f->doSubmit();
+ } else {
+ $f->showForm( "" );
+ }
}
class SqlQueryForm {
diff --git a/includes/SpecialExport.php b/includes/SpecialExport.php
index 2a3291d53207..a6cd8ddec9cf 100644
--- a/includes/SpecialExport.php
+++ b/includes/SpecialExport.php
@@ -1,4 +1,21 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
function wfSpecialExport( $page = "" ) {
global $wgOut, $wgLang;
diff --git a/includes/SpecialMovepage.php b/includes/SpecialMovepage.php
index 3a0b32d0e49a..9fc0dd6e79af 100644
--- a/includes/SpecialMovepage.php
+++ b/includes/SpecialMovepage.php
@@ -312,6 +312,7 @@ class MovePageForm {
# Change the name of the target page:
$now = wfTimestampNow();
+ $won = wfInvertTimestamp( $now );
$sql = "UPDATE cur SET cur_touched='{$now}'," .
"cur_namespace={$this->nns},cur_title='{$this->ndt}' " .
"WHERE cur_id={$this->oldid}";
@@ -320,7 +321,7 @@ class MovePageForm {
# Repurpose the old redirect. We don't save it to history since
# by definition if we've got here it's rather uninteresting.
- $sql = "UPDATE cur SET cur_touched='{$now}',cur_timestamp='{$now}'," .
+ $sql = "UPDATE cur SET cur_touched='{$now}',cur_timestamp='{$now}',inverse_timestamp='${won}'," .
"cur_namespace={$this->ons},cur_title='{$this->odt}'," .
"cur_text='#REDIRECT [[{$this->nft}]]\n',cur_comment='" .
"{$mt} \\\"{$this->nft}\\\"',cur_user='" . $wgUser->getID() .
diff --git a/includes/SpecialSpecialpages.php b/includes/SpecialSpecialpages.php
index 9805fa5293dc..aac52bfa7473 100644
--- a/includes/SpecialSpecialpages.php
+++ b/includes/SpecialSpecialpages.php
@@ -2,7 +2,7 @@
function wfSpecialSpecialpages()
{
- global $wgUser, $wgOut, $wgLang;
+ global $wgUser, $wgOut, $wgLang, $wgAllowSysopQueries;
$wgOut->setRobotpolicy( "index,nofollow" );
@@ -23,6 +23,9 @@ function wfSpecialSpecialpages()
foreach ( $sysopSP as $name => $desc ) {
if ( "" == $desc ) { continue; }
+ if( "Asksql" == $name && !$wgAllowSysopQueries ) {
+ continue;
+ }
$link = $sk->makeKnownLink( $wgLang->specialPage( $name ), $desc );
$wgOut->addHTML( "<li>{$link}</li>\n" );
}
diff --git a/includes/SpecialUndelete.php b/includes/SpecialUndelete.php
index ac2ff9c310c7..fbccfcf59d16 100644
--- a/includes/SpecialUndelete.php
+++ b/includes/SpecialUndelete.php
@@ -1,4 +1,21 @@
<?php
+# Copyright (C) 2002 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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
function wfSpecialUndelete( $par )
{
diff --git a/includes/SpecialUpload.php b/includes/SpecialUpload.php
index 9e2398faccdd..dd0283b8a87c 100644
--- a/includes/SpecialUpload.php
+++ b/includes/SpecialUpload.php
@@ -35,7 +35,7 @@ function processUpload()
{
global $wgUser, $wgOut, $wgLang, $wpUploadAffirm, $wpUploadFile;
global $wpUploadDescription, $wpIgnoreWarning;
- global $HTTP_POST_FILES, $wgUploadDirectory;
+ global $wgUploadDirectory;
global $wpUploadSaveName, $wpUploadTempName, $wpUploadSize;
global $wgSavedFile, $wgUploadOldVersion, $wpUploadOldVersion;
global $wgUseCopyrightUpload , $wpUploadCopyStatus , $wpUploadSource ;
@@ -54,13 +54,13 @@ function processUpload()
return;
}
if ( ! $wpUploadTempName ) {
- $wpUploadTempName = $HTTP_POST_FILES['wpUploadFile']['tmp_name'];
+ $wpUploadTempName = $_FILES['wpUploadFile']['tmp_name'];
}
if ( ! $wpUploadSize ) {
- $wpUploadSize = $HTTP_POST_FILES['wpUploadFile']['size'];
+ $wpUploadSize = $_FILES['wpUploadFile']['size'];
}
$prev = error_reporting( E_ALL & ~( E_NOTICE | E_WARNING ) );
- $oname = wfCleanQueryVar( $HTTP_POST_FILES['wpUploadFile']['name'] );
+ $oname = wfCleanQueryVar( $_FILES['wpUploadFile']['name'] );
if ( $wpUploadSaveName != "" ) $wpUploadSaveName = wfCleanQueryVar( $wpUploadSaveName );
error_reporting( $prev );
@@ -77,10 +77,14 @@ function processUpload()
$partname = substr( $basename, 0, strlen( $basename ) - $xl );
if ( strlen( $partname ) < 3 ) {
- mainUploadForm( WfMsg( "minlength" ) );
+ mainUploadForm( wfMsg( "minlength" ) );
return;
}
$nt = Title::newFromText( $basename );
+ if( !$nt ) {
+ mainUploadForm( wfMsg( "badtitle" ) );
+ return;
+ }
$wpUploadSaveName = $nt->getDBkey();
/* Don't allow users to override the blacklist */
@@ -157,9 +161,9 @@ function saveUploadedFile()
function unsaveUploadedFile()
{
global $wpSessionKey, $wpUploadOldVersion;
- global $wgUploadDirectory, $wgOut, $wsUploadFiles;
+ global $wgUploadDirectory, $wgOut;
- $wgSavedFile = $wsUploadFiles[$wpSessionKey];
+ $wgSavedFile = $_SESSION['wsUploadFiles'][$wpSessionKey];
$wgUploadOldVersion = $wpUploadOldVersion;
if ( ! @unlink( $wgSavedFile ) ) {
@@ -193,12 +197,12 @@ function uploadWarning( $warning )
global $wpUploadDescription, $wpIgnoreWarning;
global $wpUploadSaveName, $wpUploadTempName, $wpUploadSize;
global $wgSavedFile, $wgUploadOldVersion;
- global $wpSessionKey, $wpUploadOldVersion, $wsUploadFiles;
+ global $wpSessionKey, $wpUploadOldVersion;
global $wgUseCopyrightUpload , $wpUploadCopyStatus , $wpUploadSource ;
# wgSavedFile is stored in the session not the form, for security
$wpSessionKey = mt_rand( 0, 0x7fffffff );
- $wsUploadFiles[$wpSessionKey] = $wgSavedFile;
+ $_SESSION['wsUploadFiles'][$wpSessionKey] = $wgSavedFile;
$sub = wfMsg( "uploadwarning" );
$wgOut->addHTML( "<h2>{$sub}</h2>\n" );
diff --git a/includes/SpecialVersion.php b/includes/SpecialVersion.php
index 8f99360cea14..8e1ff5e77f4d 100644
--- a/includes/SpecialVersion.php
+++ b/includes/SpecialVersion.php
@@ -1,4 +1,21 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
function wfSpecialVersion()
{
diff --git a/includes/User.php b/includes/User.php
index 7a21052abf89..3758f4e5995e 100644
--- a/includes/User.php
+++ b/includes/User.php
@@ -138,41 +138,35 @@ class User {
function SetupSession() {
global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain;
- global $wsUserID, $wsUserName, $wsUserPassword, $wsUploadFiles;
if( $wgSessionsInMemcached ) {
include_once( "MemcachedSessions.php" );
}
session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain );
session_cache_limiter( "private, must-revalidate" );
session_start();
- session_register( "wsUserID" );
- session_register( "wsUserName" );
- session_register( "wsUserPassword" );
- session_register( "wsUploadFiles" );
}
/* static */ function loadFromSession()
{
- global $HTTP_COOKIE_VARS, $wsUserID, $wsUserName, $wsUserPassword;
global $wgMemc, $wgDBname;
- if ( isset( $wsUserID ) ) {
- if ( 0 != $wsUserID ) {
- $sId = $wsUserID;
+ if ( isset( $_SESSION['wsUserID'] ) ) {
+ if ( 0 != $_SESSION['wsUserID'] ) {
+ $sId = $_SESSION['wsUserID'];
} else {
return new User();
}
- } else if ( isset( $HTTP_COOKIE_VARS["{$wgDBname}UserID"] ) ) {
- $sId = IntVal( $HTTP_COOKIE_VARS["{$wgDBname}UserID"] );
- $wsUserID = $sId;
+ } else if ( isset( $_COOKIE["{$wgDBname}UserID"] ) ) {
+ $sId = IntVal( $_COOKIE["{$wgDBname}UserID"] );
+ $_SESSION['wsUserID'] = $sId;
} else {
return new User();
}
- if ( isset( $wsUserName ) ) {
- $sName = $wsUserName;
- } else if ( isset( $HTTP_COOKIE_VARS["{$wgDBname}UserName"] ) ) {
- $sName = $HTTP_COOKIE_VARS["{$wgDBname}UserName"];
- $wsUserName = $sName;
+ if ( isset( $_SESSION['wsUserName'] ) ) {
+ $sName = $_SESSION['wsUserName'];
+ } else if ( isset( $_COOKIE["{$wgDBname}UserName"] ) ) {
+ $sName = $_COOKIE["{$wgDBname}UserName"];
+ $_SESSION['wsUserName'] = $sName;
} else {
return new User();
}
@@ -188,12 +182,12 @@ class User {
wfDebug( "User::loadFromSession() got from cache!\n" );
}
- if ( isset( $wsUserPassword ) ) {
- $passwordCorrect = $wsUserPassword == $user->mPassword;
- } else if ( isset( $HTTP_COOKIE_VARS["{$wgDBname}Password"] ) ) {
- $user->mCookiePassword = $HTTP_COOKIE_VARS["{$wgDBname}Password"];
- $wsUserPassword = $user->addSalt( $user->mCookiePassword );
- $passwordCorrect = $wsUserPassword == $user->mPassword;
+ if ( isset( $_SESSION['wsUserPassword'] ) ) {
+ $passwordCorrect = $_SESSION['wsUserPassword'] == $user->mPassword;
+ } else if ( isset( $_COOKIE["{$wgDBname}Password"] ) ) {
+ $user->mCookiePassword = $_COOKIE["{$wgDBname}Password"];
+ $_SESSION['wsUserPassword'] = $user->addSalt( $user->mCookiePassword );
+ $passwordCorrect = $_SESSION['wsUserPassword'] == $user->mPassword;
} else {
return new User(); # Can't log in from session
}
@@ -486,19 +480,18 @@ class User {
function setCookies()
{
- global $wsUserID, $wsUserName, $wsUserPassword;
global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgDBname;
if ( 0 == $this->mId ) return;
$this->loadFromDatabase();
$exp = time() + $wgCookieExpiration;
- $wsUserID = $this->mId;
+ $_SESSION['wsUserID'] = $this->mId;
setcookie( "{$wgDBname}UserID", $this->mId, $exp, $wgCookiePath, $wgCookieDomain );
- $wsUserName = $this->mName;
+ $_SESSION['wsUserName'] = $this->mName;
setcookie( "{$wgDBname}UserName", $this->mName, $exp, $wgCookiePath, $wgCookieDomain );
- $wsUserPassword = $this->mPassword;
+ $_SESSION['wsUserPassword'] = $this->mPassword;
if ( 1 == $this->getOption( "rememberpassword" ) ) {
setcookie( "{$wgDBname}Password", $this->mCookiePassword, $exp, $wgCookiePath, $wgCookieDomain );
} else {
@@ -508,10 +501,9 @@ class User {
function logout()
{
- global $wsUserID, $wgCookiePath, $wgCookieDomain, $wgDBname;
$this->mId = 0;
- $wsUserID = 0;
+ $_SESSION['wsUserID'] = 0;
setcookie( "{$wgDBname}UserID", "", time() - 3600, $wgCookiePath, $wgCookieDomain );
setcookie( "{$wgDBname}Password", "", time() - 3600, $wgCookiePath, $wgCookieDomain );
diff --git a/includes/WatchedItem.php b/includes/WatchedItem.php
index b5933f0776d7..56bba3c9cb59 100644
--- a/includes/WatchedItem.php
+++ b/includes/WatchedItem.php
@@ -1,4 +1,21 @@
<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
class WatchedItem {
diff --git a/index.php b/index.php
index 34580967802e..b99da2145f36 100644
--- a/index.php
+++ b/index.php
@@ -1,12 +1,47 @@
<?php
# Main wiki script; see design.doc
#
+
+# Fudge the variable imports to work around oddness with
+# magic_quotes_gpc being on and register_globals being off
+function &fix_magic_quotes( &$arr ) {
+ foreach( $arr as $key => $val ) {
+ if( is_array( $val ) ) {
+ fix_magic_quotes( $arr[$key] );
+ } else {
+ $arr[$key] = stripslashes( $val );
+ }
+ }
+ return $arr;
+}
+if( get_magic_quotes_gpc() ) {
+ fix_magic_quotes( $_COOKIE );
+ fix_magic_quotes( $_ENV );
+ fix_magic_quotes( $_GET );
+ fix_magic_quotes( $_POST );
+ fix_magic_quotes( $_REQUEST );
+ fix_magic_quotes( $_SERVER );
+ fix_magic_quotes( $_FILES );
+}
+if( get_magic_quotes_gpc() || !ini_get( "register_globals" ) ) {
+ # Import or re-import the variables
+ extract( $_REQUEST );
+}
+
+# Now that that's done, let's get on with business!
$wgRequestTime = microtime();
unset( $IP );
ini_set( "allow_url_fopen", 0 ); # For security...
+if(!file_exists("LocalSettings.php")) {
+ die( "You'll have to <a href='config/index.php'>set the wiki up</a> first!" );
+}
include_once( "./LocalSettings.php" );
+if( $wgSitename == "MediaWiki" ) {
+ die( "You must set the site name in \$wgSitename before installation.\n\n" );
+}
+
# Windows requires ';' as separator, ':' for Unix
$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
ini_set( "include_path", "$IP$sep$include_path" );
@@ -21,6 +56,12 @@ OutputPage::setEncodings(); # Not really used yet
global $action, $title, $search, $go, $target, $printable;
global $returnto, $diff, $oldid, $curid;
+if( isset( $_SERVER['PATH_INFO'] ) && $wgUsePathInfo ) {
+ $title = substr( $_SERVER['PATH_INFO'], 1 );
+} else {
+ $title = $_REQUEST['title'];
+}
+
# Placeholders in case of DB error
$wgTitle = Title::newFromText( wfMsg( "badtitle" ) );
$wgArticle = new Article($wgTitle);
@@ -49,8 +90,8 @@ if ( "" != $search ) {
$wgTitle = Title::newFromText( wfMsg( "badtitle" ) );
$wgOut->errorpage( "badtitle", "badtitletext" );
} else if ( ( $action == "view" ) && $wgTitle->getPrefixedDBKey() != $title ) {
- /* redirect to canonical url */
- $wgOut->redirect( wfLocalUrl( $wgTitle->getPrefixedURL() ) );
+ /* redirect to canonical url, make it a 301 to allow caching */
+ $wgOut->redirect( wfLocalUrl( $wgTitle->getPrefixedURL() ), '301');
} else if ( Namespace::getSpecial() == $wgTitle->getNamespace() ) {
wfSpecialPage();
} else {
@@ -70,6 +111,9 @@ if ( "" != $search ) {
wfQuery("BEGIN", DB_WRITE);
switch( $action ) {
case "view":
+ $wgOut->setSquidMaxage( $wgSquidMaxage );
+ $wgArticle->$action();
+ break;
case "watch":
case "unwatch":
case "delete":
@@ -92,10 +136,18 @@ if ( "" != $search ) {
$editor->$action();
break;
case "history":
+ if ($_SERVER["REQUEST_URI"] == $wgInternalServer.wfLocalUrl( $wgTitle->getPrefixedURL(), 'action=history')) {
+ $wgOut->setSquidMaxage( $wgSquidMaxage );
+ }
include_once( "PageHistory.php" );
$history = new PageHistory( $wgArticle );
$history->history();
break;
+ case "purge":
+ wfPurgeSquidServers(array($wgInternalServer.wfLocalUrl( $wgTitle->getPrefixedURL())));
+ $wgOut->setSquidMaxage( $wgSquidMaxage );
+ $wgArticle->view();
+ break;
default:
$wgOut->errorpage( "nosuchaction", "nosuchactiontext" );
}
diff --git a/install-utils.inc b/install-utils.inc
index 8d1734e5d23a..608c6abcd513 100644
--- a/install-utils.inc
+++ b/install-utils.inc
@@ -1,6 +1,9 @@
<?php
function install_version_checks() {
+ # Turn off output buffering if it's on
+ @ob_end_flush();
+
if( !function_exists( "version_compare" ) ) {
# version_compare was introduced in 4.1.0
die( "Your PHP version is much too old; 4.0.x will _not_ work. 4.3.2 or higher is recommended. ABORTING.\n" );
@@ -8,9 +11,6 @@ function install_version_checks() {
if( version_compare( phpversion(), "4.3.2" ) < 0 ) {
echo "WARNING: PHP 4.3.2 or higher is recommended. Older versions from 4.1.x up may work but are not actively supported.\n\n";
}
- if( !ini_get( "register_globals" ) ) {
- echo "WARNING: register_globals is not on; MediaWiki currently relies on this option.\n\n";
- }
if (!extension_loaded('mysql')) {
if (!dl('mysql.so')) {
diff --git a/install.php b/install.php
index b966798c648f..9f6fd4bfaa37 100644
--- a/install.php
+++ b/install.php
@@ -19,6 +19,10 @@ include_once( "./LocalSettings.php" );
include_once( "./AdminSettings.php" );
include_once( "./maintenance/InitialiseMessages.inc" );
+if( $wgSitename == "MediaWiki" ) {
+ die( "You must set the site name in \$wgSitename before installation.\n\n" );
+}
+
if ( $wgUseTeX && ( ! is_executable( "./math/texvc" ) ) ) {
print "To use math functions, you must first compile texvc by\n" .
"running \"make\" in the math directory.\n";
@@ -72,6 +76,11 @@ copyfile( "./images", "button_media.png", $wgUploadDirectory );
copyfile( "./images", "button_nowiki.png", $wgUploadDirectory );
copyfile( "./images", "button_sig.png", $wgUploadDirectory );
copyfile( "./images", "button_template.png", $wgUploadDirectory );
+copyfile( "./images", "magnify-clip.png", $wgUploadDirectory );
+copyfile( "./images", "Arr_.png", $wgUploadDirectory );
+copyfile( "./images", "Arr_r.png", $wgUploadDirectory );
+copyfile( "./images", "Arr_d.png", $wgUploadDirectory );
+copyfile( "./images", "Arr_l.png", $wgUploadDirectory );
copyfile( "./languages", "Language.php", $IP );
copyfile( "./languages", "LanguageUtf8.php", $IP );
@@ -204,7 +213,8 @@ function populatedata() {
}
print "Do you want to create a sysop+developer account? A developer\n";
print "can switch the database to read-only mode and run any type of\n";
- print "query through a web interface. [Y/n] ";
+ print "query through a web interface. This account can also assign\n";
+ print "sysop access to other accounts. [Y/n] ";
$response=readconsole();
if(strtolower($response)!="n") {
print "Enter the username [Developer]: ";
@@ -220,6 +230,7 @@ function populatedata() {
$u->setPassword( $developer_password );
$u->addRight( "sysop" );
$u->addRight( "developer" );
+ $u->addRight( "bureaucrat" );
$u->saveSettings();
} else {
print "Could not create user - already exists!\n";
diff --git a/irc/rc2irc.php b/irc/rc2irc.php
deleted file mode 100644
index 41d6b155ed57..000000000000
--- a/irc/rc2irc.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?
-
-$ircNick = "wikipedia_rc";
-$rooms = array("en" => 1, "fr" => 1, "de" => 1);
-$ircServer = "irc.freenode.net"
-$ircSockName = "tcp://$ircServer";
-$ircPort = 6667;
-$minDelay = 0.5;
-$ircReadTimeout = 200000; # us
-$ircWriteTimeout = 30; # s
-$fmB = chr(2);
-$fmU = chr(31);
-$queueId = 337055475;
-$maxMessageSize = 16384;
-
-#-----------------------------------------------------------------------------
-
-# Get queue
-
-$ircPassword = mt_rand(0xffffffff);
-$hostname = getenv('SERVER_NAME');
-
-$queue = msg_get_queue($queueId);
-
-if ( !$queue ) {
- print "Could not open RC message queue\n";
- exit;
-}
-emptyQueue( $queue );
-
-# Initialise the IRC connection
-$sockIRC = fsockopen( $ircSockName, $ircPort );
-if ( !$sockIRC ) {
- print "Could not open IRC connection\n";
- exit;
-}
-stream_set_timeout($sockIRC, 0, $ircWriteTimeout);
-
-fwrite( $sockIRC,
- "PASS $ircPassword\r\n" .
- "NICK $ircNick\r\n" .
- "USER recentchanges $hostname $ircServer Wikipedia RC->IRC bot\r\n"
-);
-
-foreach ( $rooms as $room => $v ) {
- joinRoom( $sockIRC, $room );
-}
-
-$readObjs = array( $sockIRC, $queue );
-
-# Main input loop
-$die = false;
-while ( !$die ) {
- # RC input
- $msgType = 0;
- $entry = false;
- if (!msg_receive($queue, 0, $msgType, $maxMessageSize, $entry, true, MSG_IPC_NOWAIT)) {
- $entry = false;
- }
- if (is_array( $entry )) {
- $out = getIrcOutput( $sockIRC, $entry );
- fwrite( $sockIRC, $out );
- }
-
- # IRC input
- stream_set_timeout($sockIRC, 0, $ircReadTimeout);
- $line = rtrim(fgets( $sockIRC ));
- stream_set_timeout($sockIRC, 0, $ircWriteTimeout);
- if ( $line ) {
- $die = processIrcInput( $sockIRC, $line );
- }
-}
-exit();
-
-#--------------------------------------------------------------
-function delayMin()
-{
- static $lastTime = 0;
- global $minDelay;
- if ( !$lastTime ) {
- $lastTime = getMicroTime();
- }
- $curTime = getMicroTime();
- $timeDifference = $curTime - $lastTime;
- if ( $timeDifference < $minDelay ) {
- usleep( ($minDelay - $timeDifference) *1000000 );
- }
- $lastTime = $curTime;
-}
-
-function getMicroTime()
-{
- list($usec, $sec) = explode(" ",microtime());
- return ((float)$usec + (float)$sec);
-}
-
-function getIrcOutput( $socket, $in )
-{
- global $rooms;
-
- delayMin();
- $bad = array("\n", "\r");
- $empty = array("", "");
- $comment = $in['comment'];
- $title = $in['prefixedDBkey'];
- $user = $in['userText'];
- $lastid = IntVal($in['lastOldid']);
- $flag = ($in['minor'] ? "M" : "") . ($in['new'] ? "N" : "");
- $lang = $in['lang'];
- if ( $lang == "w" ) {
- $lang = "en";
- }
-
- if ( !array_key_exists( $rooms, $lang ) ) {
- return "";
- }
- $room = "#{$lang}rc.wikipedia";
-
- if ( $in['new'] ) {
- $url = "http://$lang.wikipedia.org/wiki/" . urlencode($title);
- } else {
- $url = "http://$lang.wikipedia.org/w/wiki.phtml?title=" . urlencode($title) .
- "&diff=0&oldid=$lastid";
- }
- $spaceTitle = str_replace("_", " ", $title);
-
- $beep = "";
- if ( $patterns ) {
- foreach ( $patterns as $pattern ) {
- if ( preg_match( $pattern, $comment ) ) {
- $beep = chr(7);
- break;
- }
- }
- }
- if ( $comment !== "" ) {
- $comment = "($comment)";
- }
-
- $fullString = str_replace($bad, $empty,
- "$beep$fmB$spaceTitle$fmB $flag $url $user $comment");
- $fullString = "PRIVMSG $room :$fullString\r\n";
- return $fullString;
-}
-
-function joinRoom( $sock, $room )
-{
- global $rooms;
- $rooms[$room] = 1;
- fwrite( $sock, "JOIN #{$room}rc.wikipedia\r\n" );
-}
-
-function partRoom( $sock, $room )
-{
- global $rooms;
- unset( $rooms[$room] );
- fwrite( $sock, "PART #{$room}rc.wikipedia\r\n" );
-}
-
-function processIrcInput( $sock, $line )
-{
- global $rooms;
-
- $die = false;
- $args = explode( " ", $line );
-
- if ( $args[0] == "PING" ) {
- fwrite( $sock, "PONG {$args[1]}\r\n" );
- } elseif ( $args[0]{0} == ":" ) {
- $name = array_shift( $args );
- $name = substr($name, 1);
- $cmd = array_shift( $args );
- if ( $cmd == "PRIVMSG" ) {
- $msgRoom = array_shift( $args );
- if ( $args[0] == "die" ) {
- $die = true;
- } elseif ( $args[0] == "join" ) {
- joinRoom( $args[1] );
- } elseif ( $args[0] == "part" ) {
- partRoom( $args[1] );
- }
- }
- }
-}
-
-function emptyQueue( $id )
-{
- while ( msg_receive($queue, 0, $msgType, $maxMessageSize, $entry, true, MSG_IPC_NOWAIT));
-}
-
-?>
-
diff --git a/irc/rcdumper.php b/irc/rcdumper.php
deleted file mode 100644
index 0ba026cd799a..000000000000
--- a/irc/rcdumper.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-$wgCommandLineMode = true;
-$fmB = chr(2);
-$fmU = chr(31);
-
-$sep = strchr( $include_path = ini_get( "include_path" ), ";" ) ? ";" : ":";
-if ( $argv[1] ) {
- $lang = $argv[1];
- putenv( "wikilang=$lang");
- $settingsFile = "/apache/htdocs/{$argv[1]}/w/LocalSettings.php";
- $newpath = "/apache/common/php$sep";
-} else {
- $settingsFile = "../LocalSettings.php";
- $newpath = "";
-}
-
-if ( $argv[2] ) {
- $patterns = explode( ",", $argv[2]);
-} else {
- $patterns = false;
-}
-
-if ( ! is_readable( $settingsFile ) ) {
- print "A copy of your installation's LocalSettings.php\n" .
- "must exist in the source directory.\n";
- exit();
-}
-
-ini_set( "include_path", "$newpath$IP$sep$include_path" );
-
-$wgCommandLineMode = true;
-$DP = "../includes";
-include_once( $settingsFile );
-include_once( "Setup.php" );
-$wgTitle = Title::newFromText( "RC dumper" );
-$wgCommandLineMode = true;
-set_time_limit(0);
-
-sleep(30);
-
-$res = wfQuery( "SELECT rc_timestamp FROM recentchanges ORDER BY rc_timestamp DESC LIMIT 1", DB_READ );
-$row = wfFetchObject( $res );
-$oldTimestamp = $row->rc_timestamp;
-
-while (1) {
- $res = wfQuery( "SELECT * FROM recentchanges WHERE rc_timestamp>'$oldTimestamp' ORDER BY rc_timestamp", DB_READ );
- $rowIndex = 0;
- while ( $row = wfFetchObject( $res ) ) {
- $ns = $wgLang->getNsText( $row->rc_namespace ) ;
- if ( $ns ) {
- $title = "$ns:{$row->rc_title}";
- } else {
- $title = $row->rc_title;
- }
- /*if ( strlen( $row->rc_comment ) > 50 ) {
- $comment = substr( $row->rc_comment, 0, 50 );
- } else {*/
- $comment = $row->rc_comment;
-// }
- $bad = array("\n", "\r");
- $empty = array("", "");
- $comment = str_replace($bad, $empty, $comment);
- $title = str_replace($bad, $empty, $title);
- $user = str_replace($bad, $empty, $row->rc_user_text);
- $lastid = IntVal($row->rc_last_oldid);
- $flag = ($row->rc_minor ? "M" : "") . ($row->rc_new ? "N" : "");
- if ( $row->rc_new ) {
- $url = "http://$lang.wikipedia.org/wiki/" . urlencode($title);
- } else {
- $url = "http://$lang.wikipedia.org/w/wiki.phtml?title=" . urlencode($title) .
- "&diff=0&oldid=$lastid";
- }
- $boldTitle = $fmB . str_replace("_", " ", $title) . $fmB;
-
- if ( $patterns ) {
- foreach ( $patterns as $pattern ) {
- if ( preg_match( $pattern, $comment ) ) {
- print chr(7);
- break;
- }
- }
- }
- if ( $comment !== "" ) {
- $comment = "($comment)";
- }
-
- $fullString = "$boldTitle $flag $url $user $comment\n";
-
- if ( $fullString{0} == "/" ) {
- $fullString = " $fullString";
- }
- print( $fullString );
- $oldTimestamp = $row->rc_timestamp;
- sleep(2);
- }
- sleep(5);
-}
-
-exit();
-
-?>
diff --git a/languages/Language.php b/languages/Language.php
index 6cd3aad89522..fae2f1c2da1a 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -637,7 +637,7 @@ You should log in and change your password now.",
"passwordsent" => "A new password has been sent to the e-mail address
registered for \"$1\".
Please log in again after you receive it.",
-"loginend" => "",
+"loginend" => "&nbsp;",
# Edit page toolbar
"bold_sample"=>"Bold text",
@@ -841,7 +841,10 @@ See [[$wgMetaNamespace:User preferences help]] for help deciphering the options.
"math_unknown_function" => "unknown function ",
"math_lexing_error" => "lexing error",
"math_syntax_error" => "syntax error",
-"math_image_error" => "PNG conversion failed",
+"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.",
"saveprefs" => "Save preferences",
"resetprefs" => "Reset preferences",
"oldpassword" => "Old password",
@@ -1381,7 +1384,8 @@ amusement.",
# Thumbnails
-"thumbnail-more" => "Enlarge"
+"thumbnail-more" => "Enlarge",
+"missingimage" => "<b>Missing image</b><br><i>$1</i>\n"
);
diff --git a/languages/LanguageAr.php b/languages/LanguageAr.php
index 6eae649b62a2..4868e12fea1b 100644
--- a/languages/LanguageAr.php
+++ b/languages/LanguageAr.php
@@ -3,18 +3,18 @@
include_once("LanguageUtf8.php");
/* private */ $wgNamespaceNamesAr = array(
- "-2" => "ملÙ",
- "-1" => "خاص",
- "0" => "",
- "1" => "نقاش",
- "2" => "مستخدم",
- "3" => "نقاش_المستخدم",
- "4" => "ويكيبيديا",
- "5" => "ويكيبيديا_نقاش",
- "6" => "صورة",
- "7" => "نقاش_الصورة",
- "8" => "MediaWiki",
- "9" => "MediaWiki_talk",
+ -2 => "ملÙ",
+ -1 => "خاص",
+ 0 => "",
+ 1 => "نقاش",
+ 2 => "مستخدم",
+ 3 => "نقاش_المستخدم",
+ 4 => "ويكيبيديا",
+ 5 => "ويكيبيديا_نقاش",
+ 6 => "صورة",
+ 7 => "نقاش_الصورة",
+ 8 => "MediaWiki",
+ 9 => "MediaWiki_talk",
);
/* private */ $wgWeekdayNamesAr = array(
@@ -85,6 +85,9 @@ class LanguageAr extends LanguageUtf8 {
# Swap sidebar to right side by default
$opt['quickbar'] = 2;
+
+ # Underlines seriously harm legibility. Force off:
+ $opt['underline'] = 0;
return $opt ;
}
diff --git a/languages/LanguageBn.php b/languages/LanguageBn.php
new file mode 100644
index 000000000000..3a2eb5f44b90
--- /dev/null
+++ b/languages/LanguageBn.php
@@ -0,0 +1,1004 @@
+<?php
+
+# NOTE: To turn off "Current Events" in the sidebar,
+# set "currentevents" => "-"
+
+# The names of the namespaces can be set here, but the numbers
+# are magical, so don't change or move them! The Namespace class
+# encapsulates some of the magic-ness.
+#
+/* private */ $wgNamespaceNamesBn = array(
+ -1 => "বিশেষ",
+ 0 => "",
+ 1 => "আলাপ",
+ 2 => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€",
+ 3 => "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€_আলাপ",
+ 4 => "উইকিপেডিয়া",
+ 5 => "উইকিপেডিয়া_আলাপ",
+ 6 => "চিতà§à¦°",
+ 7 => "চিতà§à¦°_আলাপ",
+ 8 => "MediaWiki",
+ 9 => "MediaWik i_আলাপ",
+);
+
+/* private */ $wgDefaultUserOptionsBn = array(
+ "quickbar" => 1, "underline" => 1, "hover" => 1,
+ "cols" => 80, "rows" => 25, "searchlimit" => 20,
+ "contextlines" => 5, "contextchars" => 50,
+ "skin" => 0, "math" => 1, "rcdays" => 7, "rclimit" => 50,
+ "highlightbroken" => 1, "stubthreshold" => 0,
+ "previewontop" => 1, "editsection"=>1, "showtoc"=>1,
+ "date" => 0
+);
+
+/* private */ $wgQuickbarSettingsBn = array(
+ "None", "Fixed left", "Fixed right", "Floating left"
+);
+
+/* private */ $wgSkinNamesBn = array(
+ "Standard", "Nostalgia", "Cologne Blue"
+);
+
+/* private */ $wgMathNamesBn = array(
+ "Always render PNG",
+ "HTML if very simple or else PNG",
+ "HTML if possible or else PNG",
+ "Leave it as TeX (for text browsers)",
+ "Recommended for modern browsers"
+);
+
+/* private */ $wgDateFormatsBn = array(
+ "No preference",
+ "January 15, 2001",
+ "15 January 2001",
+ "2001 January 15"
+);
+
+/* private */ $wgUserTogglesBn = array(
+ "hover" => "Show hoverbox over wiki links",
+ "underline" => "Underline links",
+ "highlightbroken" => "Format broken links <a href=\"\" class=\"new\">like
+this</a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
+ "justify" => "Justify paragraphs",
+ "hideminor" => "Hide minor edits in recent changes",
+ "usenewrc" => "Enhanced recent changes (not for all browsers)",
+ "numberheadings" => "Auto-number headings",
+ "editsection"=>"Show links for editing individual sections",
+ "showtoc"=>"Show table of contents for articles with more than 3 headings",
+ "rememberpassword" => "Remember password across sessions",
+ "editwidth" => "Edit box has full width",
+ "editondblclick" => "Edit pages on double click (JavaScript)",
+ "watchdefault" => "Add pages you edit to your watchlist",
+ "minordefault" => "Mark all edits minor by default",
+ "previewontop" => "Show preview before edit box and not after it",
+ "nocache" => "Disable page caching"
+);
+
+/* private */ $wgBookstoreListBn = 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://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+ "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
+);
+
+/* private */ $wgWeekdayNamesBn = array(
+ "রবিবার", "সোমবার", "মঙà§à¦—লবার", "বà§à¦§à¦¬à¦¾à¦°", "বৃহসà§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°",
+ "শà§à¦•à§à¦°à¦¬à¦¾à¦°", "শনিবার"
+);
+
+/* private */ $wgMonthNamesBn = array(
+ "জানà§à§Ÿà¦¾à¦°à§€", "ফেবà§à¦°à§à§Ÿà¦¾à¦°à§€", "মারà§à¦š", "à¦à¦ªà§à¦°à¦¿à¦²", "মে", "জà§à¦¨",
+ "জà§à¦²à¦¾à¦‡", "আগসà§à¦Ÿ", "সেপà§à¦Ÿà§‡à¦®à§à¦¬à¦°", "অকà§à¦Ÿà§‹à¦¬à¦°", "নভেমà§à¦¬à¦°",
+ "ডিসেমà§à¦¬à¦°"
+);
+
+/* private */ $wgMonthAbbreviationsBn = array(
+ "জানà§", "ফেবà§à¦°à§", "মারà§à¦š", "à¦à¦ªà§à¦°à¦¿à¦²", "মে", "জà§à¦¨", "জà§à¦²à¦¾à¦‡", "আগসà§à¦Ÿ",
+ "সেপà§à¦Ÿà§‡", "অকà§à¦Ÿà§‹", "নভে", "ডিসে"
+);
+
+# All special pages have to be listed here: a description of ""
+# will make them not show up on the "Special Pages" page, which
+# is the right thing for some of them (such as the "targeted" ones).
+#
+/* private */ $wgValidSpecialPagesBn = array(
+ "Userlogin" => "",
+ "Userlogout" => "",
+ "Preferences" => "Set my user preferences",
+ "Watchlist" => "My watchlist",
+ "Recentchanges" => "Recently updated pages",
+ "Upload" => "Upload image files",
+ "Imagelist" => "Image list",
+ "Listusers" => "Registered users",
+ "Statistics" => "Site statistics",
+ "Randompage" => "Random article",
+
+ "Lonelypages" => "Orphaned articles",
+ "Unusedimages" => "Orphaned images",
+ "Popularpages" => "Popular articles",
+ "Wantedpages" => "Most wanted articles",
+ "Shortpages" => "Short articles",
+ "Longpages" => "Long articles",
+ "Newpages" => "Newly created articles",
+ "Ancientpages" => "Oldest articles",
+ "Intl" => "Interlanguage links",
+ "Allpages" => "All pages by title",
+
+ "Ipblocklist" => "Blocked IP addresses",
+ "Maintenance" => "Maintenance page",
+ "Specialpages" => "",
+ "Contributions" => "",
+ "Emailuser" => "",
+ "Whatlinkshere" => "",
+ "Recentchangeslinked" => "",
+ "Movepage" => "",
+ "Booksources" => "External book sources",
+ "Export" => "XML export",
+ "Version" => "Version",
+
+);
+
+/* private */ $wgSysopSpecialPagesBn = array(
+ "Blockip" => "Block an IP address",
+ "Asksql" => "Query the database",
+ "Undelete" => "Restore deleted pages"
+);
+
+/* private */ $wgDeveloperSpecialPagesBn = array(
+ "Lockdb" => "Make database read-only",
+ "Unlockdb" => "Restore DB write access",
+ "Debug" => "Debugging information"
+);
+
+/* private */ $wgAllMessagesBn = array(
+
+# Bits of text used by many pages:
+#
+
+"linktrail" => "/^([a-z]+)(.*)\$/sD",
+"mainpage" => "পà§à¦°à¦§à¦¾à¦¨ পাতা",
+"mainpagetext" => "Wiki software successfully installed.",
+"about" => "বৃতà§à¦¤à¦¾à¦¨à§à¦¤",
+"aboutwikipedia" => "উইকিপেডিয়ার বৃতà§à¦¤à¦¾à¦¨à§à¦¤",
+"aboutpage" => "উইকিপেডিয়া:বৃতà§à¦¤à¦¾à¦¨à§à¦¤",
+"help" => "সহায়িকা",
+"helppage" => "উইকিপেডিয়া:সহায়িকা",
+"wikititlesuffix" => "উইকিপেডিয়া",
+"bugreports" => "তà§à¦°à§à¦Ÿà¦¿ বিবরণী",
+"bugreportspage" => "উইকিপেডিয়া:তà§à¦°à§à¦Ÿà¦¿_বিবরণী",
+"faq" => "পà§à¦°à¦¶à§à¦¨à§‹à¦¤à§à¦¤à¦°",
+"faqpage" => "উইকিপেডিয়া:পà§à¦°à¦¶à§à¦¨à§‹à¦¤à§à¦¤à¦°",
+"edithelp" => "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ সহায়িকা",
+"edithelppage" => "উইকিপেডিয়া:কিভাবে_à¦à¦•à¦Ÿà¦¿_পৃষà§à¦ à¦¾_সমà§à¦ªà¦¾à¦¦à¦¨à¦¾_করবেন",
+"cancel" => "বাতিল কর",
+"qbfind" => "খà¦à§à¦œà§‡ দেখ",
+"qbbrowse" => "ঘà§à¦°à§‡ দেখ",
+"qbedit" => "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ কর",
+"qbpageoptions" => "ঠপৃষà§à¦ à¦¾à¦° বিকলà§à¦ªà¦¸à¦®à§‚হ",
+"qbpageinfo" => "পৃষà§à¦ à¦¾-সংকà§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯",
+"qbmyoptions" => "আমার পছনà§à¦¦",
+"mypage" => "আমার পাতা",
+"mytalk" => "আমার কথাবারà§à¦¤à¦¾",
+"currentevents" => "সমসাময়িক ঘটনা",
+"errorpagetitle" => "ভà§à¦²",
+"returnto" => "ফিরে যাও $1.",
+"fromwikipedia" => "উইকিপেডিয়া, মà§à¦•à§à¦¤ বিশà§à¦¬à¦•à§‹à¦· থেকে",
+"whatlinkshere" => "যেসব পাতা থেকে à¦à¦–ানে সংযোগ আছে",
+"help" => "সহায়িকা",
+"search" => "খà¦à§à¦œà§‡ দেখ",
+"go" => "চল",
+"history" => "ঠপৃষà§à¦ à¦¾à¦° ইতিহাস",
+"printableversion" => "ছাপার যোগà§à¦¯ সংসà§à¦•à¦°à¦£",
+"editthispage" => "à¦à¦‡ পৃষà§à¦ à¦¾à¦Ÿà¦¿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨",
+"deletethispage" => "à¦à¦‡ পৃষà§à¦ à¦¾à¦Ÿà¦¿ মà§à¦›à§‡ ফেলà§à¦¨",
+"protectthispage" => "à¦à¦‡ পৃষà§à¦ à¦¾à¦Ÿà¦¿ সংরকà§à¦·à¦£ করà§à¦¨",
+"unprotectthispage" => "à¦à¦‡ পৃষà§à¦ à¦¾à¦° সংরকà§à¦·à¦£ ছেড়ে দিন",
+"newpage" => "নতà§à¦¨ পাতা",
+"talkpage" => "à¦à¦‡ পৃষà§à¦ à¦¾ নিয়ে আলোচনা করà§à¦¨",
+"articlepage" => "নিবনà§à¦§ দেখà§à¦¨",
+"subjectpage" => "বিষয় দেখà§à¦¨", # For compatibility
+"userpage" => "বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° পাতা দেখà§à¦¨",
+"wikipediapage" => "মেটা-পাতা দেখà§à¦¨",
+"imagepage" => "ছবির পাতা দেখà§à¦¨",
+"viewtalkpage" => "আলোচনা দেখà§à¦¨",
+"otherlanguages" => "অনà§à¦¯à¦¾à¦¨à§à¦¯ ভাষা",
+"redirectedfrom" => "($1 থেকে ঘà§à¦°à§‡ à¦à¦¸à§‡à¦›à§‡)",
+"lastmodified" => "ঠপৃষà§à¦ à¦¾à§Ÿ শেষ পরিবরà§à¦¤à¦¨ হয়েছিল $1.",
+"viewcount" => "ঠপৃষà§à¦ à¦¾ দেখা হয়েছে $1 বার।",
+"gnunote" => "সব লেখা <a class=internal href='/wiki/GNU_FDL'>GNU Free Documentation License</a> অনà§à¦¯à¦¾à§Ÿà§€ বিনামূলà§à¦¯à§‡ à¦à¦¬à¦‚ মà§à¦•à§à¦¤à¦­à¦¾à¦¬à§‡ সংগà§à¦°à¦¹ ও বিতরণযোগà§à¦¯",
+"printsubtitle" => "(From http://www.wikipedia.org)",
+"protectedpage" => "সংরকà§à¦·à¦¿à¦¤ পাতা",
+"administrators" => "উইকিপেডিয়া:পà§à¦°à¦¶à¦¾à¦¸à¦•à¦¬à§ƒà¦¨à§à¦¦",
+"sysoptitle" => "Sysop à¦à¦° কà§à¦·à¦®à¦¤à¦¾ পà§à¦°à§Ÿà§‹à¦œà¦¨",
+"sysoptext" => "ঠকাজটি কেবল \"sysop\" কà§à¦·à¦®à¦¤à¦¾à¦¸à¦®à§à¦ªà¦¨à§à¦¨ বà§à¦¯à¦•à§à¦¤à¦¿à¦‡ করতে পারেন। $1 দেখà§à¦¨à¥¤",
+"developertitle" => "developer à¦à¦° কà§à¦·à¦®à¦¤à¦¾ পà§à¦°à§Ÿà§‹à¦œà¦¨",
+"developertext" => "ঠকাজটি কেবল \"developer\" কà§à¦·à¦®à¦¤à¦¾à¦¸à¦®à§à¦ªà¦¨à§à¦¨ বà§à¦¯à¦•à§à¦¤à¦¿à¦‡ করতে পারেন। $1 দেখà§à¦¨à¥¤",
+"nbytes" => "$1 বাইট",
+"go" => "চল",
+"ok" => "ঠিক আছে",
+"sitetitle" => "উইকিপেডিয়া",
+"sitesubtitle" => "মà§à¦•à§à¦¤ বিশà§à¦¬à¦•à§‹à¦· ",
+"retrievedfrom" => "\"$1\" থেকে আনীত",
+"newmessages" => "আপনার $1 à¦à¦¸à§‡à¦›à§‡à¥¤",
+"newmessageslink" => "নতà§à¦¨ বারà§à¦¤à¦¾",
+"editsection"=>"সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨",
+"toc" => "সূচীপতà§à¦°",
+"showtoc" => "দেখাও",
+"hidetoc" => "সরিয়ে রাখ",
+
+# Main script and global functions
+#
+"nosuchaction" => "No such action",
+"nosuchactiontext" => "The action specified by the URL is not
+recognized by the Wikipedia software",
+"nosuchspecialpage" => "No such special page",
+"nospecialpagetext" => "You have requested a special page that is not
+recognized by the Wikipedia software.",
+
+# General errors
+#
+"error" => "Error",
+"databaseerror" => "Database error",
+"dberrortext" => "A database query syntax error has occurred.
+This could be because of an illegal search query (see $5),
+or it 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\".\n",
+"noconnect" => "Could not connect to DB on $1",
+"nodb" => "Could not select database $1",
+"readonly" => "Database locked",
+"enterlockreason" => "Enter a reason for the lock, including an estimate
+of when the lock will be released",
+"readonlytext" => "The Wikipedia 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" => "The database did not find the text of a page
+that it should have found, named \"$1\".
+
+<p>This is usually caused by following an outdated diff or history link to a
+page that has been deleted.
+
+<p>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.",
+"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 image 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.",
+"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's a saved copy from $1:",
+
+# Login and logout pages
+#
+"logouttitle" => "User logout",
+"logouttext" => "You are now logged out.
+You can continue to use Wikipedia anonymously, or you can log in
+again as the same or as a different user.\n",
+
+"welcomecreation" => "<h2>Welcome, $1!</h2><p>Your account has been created.
+Don't forget to personalize your wikipedia preferences.",
+
+"loginpagetitle" => "User login",
+"yourname" => "Your user name",
+"yourpassword" => "Your password",
+"yourpasswordagain" => "Retype password",
+"newusersonly" => " (new users only)",
+"remembermypassword" => "Remember my password across sessions.",
+"loginproblem" => "<b>There has been a problem with your login.</b><br>Try again!",
+"alreadyloggedin" => "<font color=red><b>User $1, you are already logged in!</b></font><br>\n",
+
+"areyounew" => "If you are new to Wikipedia and want to get a user account,
+enter a user name, then type and re-type a password.
+Your e-mail address is optional; if you lose your password you can request
+that it be to the address you give.<br>\n",
+
+"login" => "Log in",
+"userlogin" => "Log in",
+"logout" => "Log out",
+"userlogout" => "Log out",
+"notloggedin" => "Not logged in",
+"createaccount" => "Create new account",
+"badretype" => "The passwords you entered do not match.",
+"userexists" => "The user name you entered is already in use. Please choose a different name.",
+"youremail" => "Your e-mail*",
+"yournick" => "Your nickname (for signatures)",
+"emailforlost" => "* Entering an email address is optional. But it enables people to
+contact you through the website without you having to reveal your
+email address to them, and it also helps you if you forget your
+password.",
+"loginerror" => "Login error",
+"noname" => "You have not specified a valid user name.",
+"loginsuccesstitle" => "Login successful",
+"loginsuccess" => "You are now logged in to Wikipedia as \"$1\".",
+"nosuchuser" => "There is no user by the name \"$1\".
+Check your spelling, or use the form below to create a new user account.",
+"wrongpassword" => "The password you entered is incorrect. Please try again.",
+"mailmypassword" => "Mail me a new password",
+"passwordremindertitle" => "Password reminder from Wikipedia",
+"passwordremindertext" => "Someone (probably you, from IP address $1)
+requested that we send you a new Wikipedia login password.
+The password for user \"$2\" is now \"$3\".
+You should log in and change your password now.",
+"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.",
+
+# Edit pages
+#
+"summary" => "Summary",
+"minoredit" => "This is a minor edit",
+"watchthis" => "Watch this article",
+"savearticle" => "Save page",
+"preview" => "Preview",
+"showpreview" => "Show preview",
+"blockedtitle" => "User is blocked",
+"blockedtext" => "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
+[[Wikipedia:administrators|administrators]] to discuss the block.",
+"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 [[Wikipedia:Help|help page]] for more info).
+If you are here by mistake, just click your browser's '''back''' button.",
+"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)",
+"updated" => "(Updated)",
+"note" => "<strong>Note:</strong> ",
+"previewnote" => "Remember that this is only a preview, and has not yet been saved!",
+"previewconflict" => "This preview reflects the text in the upper
+text editing area as it will appear if you choose to save.",
+"editing" => "Editing $1",
+"sectionedit" => " (section)",
+"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\".\n<p>",
+"yourtext" => "Your text",
+"storedversion" => "Stored version",
+"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>\n",
+"yourdiff" => "Differences",
+"copyrightwarning" => "Please note that all contributions to Wikipedia are
+considered to be released under the GNU Free Documentation License
+(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>",
+"longpagewarning" => "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.",
+"readonlywarning" => "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.",
+"protectedpagewarning" => "WARNING: This page has been locked so that only
+users with sysop privileges can edit it. Be sure you are following the
+<a href='/wiki/Wikipedia:Protected_page_guidelines'>protected page
+guidelines</a>.",
+
+# History pages
+#
+"revhistory" => "Revision history",
+"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.\n",
+"loadhist" => "Loading page history",
+"currentrev" => "Current revision",
+"revisionasof" => "Revision as of $1",
+"cur" => "cur",
+"next" => "next",
+"last" => "last",
+"orig" => "orig",
+"histlegend" => "Legend: (cur) = difference with current version,
+(last) = difference with preceding version, M = minor edit",
+
+# Diffs
+#
+"difference" => "(Difference between revisions)",
+"loadingrev" => "loading revision for diff",
+"lineno" => "Line $1:",
+"editcurrent" => "Edit the current version of this page",
+
+# Search results
+#
+"searchresults" => "Search results",
+"searchhelppage" => "Wikipedia:Searching",
+"searchingwikipedia" => "Searching Wikipedia",
+"searchresulttext" => "For more information about searching Wikipedia, see $1.",
+"searchquery" => "For query \"$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 article titles
+and the text of $3 articles.",
+"nogomatch" => "No page with this exact title exists, trying full text search.",
+"titlematches" => "Article title matches",
+"notitlematches" => "No article title matches",
+"textmatches" => "Article text matches",
+"notextmatches" => "No article text matches",
+"prevn" => "previous $1",
+"nextn" => "next $1",
+"viewprevnext" => "View ($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>Note</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" => "Search",
+"powersearchtext" => "
+Search in namespaces :<br>
+$1<br>
+$2 List redirects &nbsp; Search for $3 $9",
+
+
+# Preferences page
+#
+"preferences" => "Preferences",
+"prefsnologin" => "Not logged in",
+"prefsnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to set user preferences.",
+"prefslogintext" => "You are logged in as \"$1\".
+Your internal ID number is $2.
+
+See [[Wikipedia:User preferences help]] for help deciphering the options.",
+"prefsreset" => "Preferences have been reset from storage.",
+"qbsettings" => "Quickbar settings",
+"changepassword" => "Change password",
+"skin" => "Skin",
+"math" => "Rendering math",
+"dateformat" => "Date format",
+"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",
+"saveprefs" => "Save preferences",
+"resetprefs" => "Reset preferences",
+"oldpassword" => "Old password",
+"newpassword" => "New password",
+"retypenew" => "Retype new password",
+"textboxsize" => "Textbox dimensions",
+"rows" => "Rows",
+"columns" => "Columns",
+"searchresultshead" => "Search result settings",
+"resultsperpage" => "Hits to show per page",
+"contextlines" => "Lines to show per hit",
+"contextchars" => "Characters of context per line",
+"stubthreshold" => "Threshold for stub display",
+"recentchangescount" => "Number of titles in recent changes",
+"savedprefs" => "Your preferences have been saved.",
+"timezonetext" => "Enter number of hours your local time differs
+from server time (UTC).",
+"localtime" => "Local time display",
+"timezoneoffset" => "Offset",
+"servertime" => "Server time is now",
+"guesstimezone" => "Fill in from browser",
+"emailflag" => "Disable e-mail from other users",
+"defaultns" => "Search in these namespaces by default:",
+
+# Recent changes
+#
+"changes" => "changes",
+"recentchanges" => "Recent changes",
+"recentchangestext" => "Track the most recent changes to Wikipedia on this page.
+[[Wikipedia:Welcome,_newcomers|Welcome, newcomers]]!
+Please have a look at these pages: [[wikipedia:FAQ|Wikipedia FAQ]],
+[[Wikipedia:Policies and guidelines|Wikipedia policy]]
+(especially [[wikipedia:Naming conventions|naming conventions]],
+[[wikipedia:Neutral point of view|neutral point of view]]),
+and [[wikipedia:Most common Wikipedia faux pas|most common Wikipedia faux pas]].
+
+If you want to see Wikipedia succeed, it's very important that you don't add
+material restricted by others' [[wikipedia:Copyrights|copyrights]].
+The legal liability could really hurt the project, so please don't do it.
+See also the [http://meta.wikipedia.org/wiki/Special:Recentchanges recent meta discussion].",
+"rcloaderr" => "Loading recent changes",
+"rcnote" => "Below are the last <strong>$1</strong> changes in last <strong>$2</strong> days.",
+"rcnotefrom" => "Below are the changes since <b>$2</b> (up to <b>$1</b> shown).",
+"rclistfrom" => "Show new changes starting from $1",
+# "rclinks" => "Show last $1 changes in last $2 hours / last $3 days",
+# "rclinks" => "Show last $1 changes in last $2 days.",
+"rclinks" => "Show last $1 changes in last $2 days; $3 minor edits",
+"rchide" => "in $4 form; $1 minor edits; $2 secondary namespaces; $3 multiple edits.",
+"rcliu" => "; $1 edits from logged in users",
+"diff" => "diff",
+"hist" => "hist",
+"hide" => "hide",
+"show" => "show",
+"tableform" => "table",
+"listform" => "list",
+"nchanges" => "$1 changes",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload" => "Upload file",
+"uploadbtn" => "Upload file",
+"uploadlink" => "Upload images",
+"reupload" => "Re-upload",
+"reuploaddesc" => "Return to the upload form.",
+"uploadnologin" => "Not logged in",
+"uploadnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to upload files.",
+"uploadfile" => "Upload file",
+"uploaderror" => "Upload error",
+"uploadtext" => "<strong>STOP!</strong> Before you upload here,
+make sure to read and follow Wikipedia's <a href=\"" .
+wfLocalUrlE( "Wikipedia:Image_use_policy" ) . "\">image use policy</a>.
+<p>To view or search previously uploaded images,
+go to the <a href=\"" . wfLocalUrlE( "Special:Imagelist" ) .
+"\">list of uploaded images</a>.
+Uploads and deletions are logged on the <a href=\"" .
+wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">upload log</a>.
+<p>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.
+<p>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
+<b>[[image:file.jpg]]</b> or <b>[[image:file.png|alt text]]</b>
+or <b>[[media:file.ogg]]</b> for sounds.
+<p>Please note that as with Wikipedia 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" => "upload log",
+"uploadlogpage" => "Upload_log",
+"uploadlogpagetext" => "Below is a list of the most recent file uploads.
+All times shown are server time (UTC).
+<ul>
+</ul>
+",
+"filename" => "Filename",
+"filedesc" => "Summary",
+"affirmation" => "I affirm that the copyright holder of this file
+agrees to license it under the terms of the $1.",
+"copyrightpage" => "Wikipedia:Copyrights",
+"copyrightpagename" => "Wikipedia copyright",
+"uploadedfiles" => "Uploaded files",
+"noaffirmation" => "You must affirm that your upload does not violate
+any copyrights.",
+"ignorewarning" => "Ignore warning and save file anyway.",
+"minlength" => "Image names must be at least three letters.",
+"badfilename" => "Image name has been changed to \"$1\".",
+"badfiletype" => "\".$1\" is not a recommended image file format.",
+"largefile" => "It is recommended that images not exceed 100k in size.",
+"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.",
+"uploadwarning" => "Upload warning",
+"savefile" => "Save file",
+"uploadedimage" => "uploaded \"$1\"",
+
+# Image list
+#
+"imagelist" => "Image list",
+"imagelisttext" => "Below is a list of $1 images sorted $2.",
+"getimagelist" => "fetching image list",
+"ilshowmatch" => "Show all images with names matching",
+"ilsubmit" => "Search",
+"showlast" => "Show last $1 images sorted $2.",
+"all" => "all",
+"byname" => "by name",
+"bydate" => "by date",
+"bysize" => "by size",
+"imgdelete" => "del",
+"imgdesc" => "desc",
+"imglegend" => "Legend: (desc) = show/edit image description.",
+"imghistory" => "Image history",
+"revertimg" => "rev",
+"deleteimg" => "del",
+"imghistlegend" => "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" => "Image links",
+"linkstoimage" => "The following pages link to this image:",
+"nolinkstoimage" => "There are no pages that link to this image.",
+
+# Statistics
+#
+"statistics" => "Statistics",
+"sitestats" => "Site statistics",
+"userstats" => "User statistics",
+"sitestatstext" => "There are <b>$1</b> total pages in the database.
+This includes \"talk\" pages, pages about Wikipedia, minimal \"stub\"
+pages, redirects, and others that probably don't qualify as articles.
+Excluding those, there are <b>$2</b> pages that are probably legitimate
+articles.<p>
+There have been a total of <b>$3</b> page views, and <b>$4</b> page edits
+since the software was upgraded (July 20, 2002).
+That comes to <b>$5</b> average edits per page, and <b>$6</b> views per edit.",
+"userstatstext" => "There are <b>$1</b> registered users.
+<b>$2</b> of these are administrators (see $3).",
+
+# Maintenance Page
+#
+"maintenance" => "Maintenance page",
+"maintnancepagetext" => "This page includes several handy tools for everyday maintenance. Some of these functions tend to stress the database, so please do not hit reload after every item you fixed ;-)",
+"maintenancebacklink" => "Back to Maintenance Page",
+"disambiguations" => "Disambiguation pages",
+"disambiguationspage" => "Wikipedia: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" => "Double Redirects",
+"doubleredirectstext" => "<b>Attention:</b> This list may contain false positives. That usually means there is additional text with links below the first #REDIRECT.<br>\nEach row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" taget article, which the first redirect should point to.",
+"brokenredirects" => "Broken Redirects",
+"brokenredirectstext" => "The following redirects link to a non-existing article.",
+"selflinks" => "Pages with Self Links",
+"selflinkstext" => "The following pages contain a link to themselves, which they should not.",
+"mispeelings" => "Pages with misspellings",
+"mispeelingstext" => "The following pages contain a common misspelling, which are listed on $1. The correct spelling might be given (like this).",
+"mispeelingspage" => "List of common misspellings",
+"missinglanguagelinks" => "Missing Language Links",
+"missinglanguagelinksbutton" => "Find missing language links for",
+"missinglanguagelinkstext" => "These articles do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
+
+
+# Miscellaneous special pages
+#
+"orphans" => "Orphaned pages",
+"lonelypages" => "Orphaned pages",
+"unusedimages" => "Unused images",
+"popularpages" => "Popular pages",
+"nviews" => "$1 views",
+"wantedpages" => "Wanted pages",
+"nlinks" => "$1 links",
+"allpages" => "All pages",
+"randompage" => "Random page",
+"shortpages" => "Short pages",
+"longpages" => "Long pages",
+"listusers" => "User list",
+"specialpages" => "Special pages",
+"spheading" => "Special pages",
+"sysopspheading" => "Special pages for sysop use",
+"developerspheading" => "Special pages for developer use",
+"protectpage" => "Protect page",
+"recentchangeslinked" => "Related changes",
+"rclsub" => "(to pages linked from \"$1\")",
+"debug" => "Debug",
+"newpages" => "New pages",
+"ancientpages" => "Oldest articles",
+"intl" => "Interlanguage links",
+"movethispage" => "Move this page",
+"unusedimagestext" => "<p>Please note that other web sites
+such as the international Wikipedias may link to an image with
+a direct URL, and so may still be listed here despite being
+in active use.",
+"booksources" => "Book sources",
+"booksourcetext" => "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.
+Wikipedia is not affiliated with any of these businesses, and
+this list should not be construed as an endorsement.",
+"alphaindexline" => "$1 to $2",
+
+# Email this user
+#
+"mailnologin" => "No send address",
+"mailnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+and have a valid e-mail address in your <a href=\"" .
+ wfLocalUrl( "Special:Preferences" ) . "\">preferences</a>
+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.",
+"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",
+"emailsent" => "E-mail sent",
+"emailsenttext" => "Your e-mail message has been sent.",
+
+# Watchlist
+#
+"watchlist" => "My watchlist",
+"watchlistsub" => "(for user \"$1\")",
+"nowatchlist" => "You have no items on your watchlist.",
+"watchnologin" => "Not logged in",
+"watchnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to modify your watchlist.",
+"addedwatch" => "Added to watchlist",
+"addedwatchtext" => "The page \"$1\" has been added to your <a href=\"" .
+ wfLocalUrl( "Special:Watchlist" ) . "\">watchlist</a>.
+Future changes to this page and its associated Talk page will be listed there,
+and the page will appear <b>bolded</b> in the <a href=\"" .
+ wfLocalUrl( "Special:Recentchanges" ) . "\">list of recent changes</a> to
+make it easier to pick out.</p>
+
+<p>If you want to remove the page from your watchlist later, click \"Stop watching\" in the sidebar.",
+"removedwatch" => "Removed from watchlist",
+"removedwatchtext" => "The page \"$1\" has been removed from your watchlist.",
+"watchthispage" => "Watch this page",
+"unwatchthispage" => "Stop watching",
+"notanarticle" => "Not an article",
+
+# Delete/protect/revert
+#
+"deletepage" => "Delete page",
+"confirm" => "Confirm",
+"excontent" => "content was:",
+"exbeforeblank" => "content before blanking was:",
+"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
+[[Wikipedia:Policy]].",
+"confirmcheck" => "Yes, I really want to delete this.",
+"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.
+All times shown are server time (UTC).
+<ul>
+</ul>
+",
+"deletionlog" => "deletion log",
+"reverted" => "Reverted to earlier revision",
+"deletecomment" => "Reason for deletion",
+"imagereverted" => "Revert to earlier version was successful.",
+"rollback" => "Roll back edits",
+"rollbacklink" => "rollback",
+"rollbackfailed" => "Rollback failed",
+"cantrollback" => "Cannot revert edit; last contributor is only author of this article.",
+"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.
+
+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 to last edit by $1",
+
+# Undelete
+"undelete" => "Restore deleted page",
+"undeletepage" => "View and restore 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.",
+"undeletearticle" => "Restore deleted article",
+"undeleterevisions" => "$1 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.",
+"undeleterevision" => "Deleted revision as of $1",
+"undeletebtn" => "Restore!",
+"undeletedarticle" => "restored \"$1\"",
+"undeletedtext" => "The article [[$1]] has been successfully restored.
+See [[Wikipedia:Deletion_log]] for a record of recent deletions and restorations.",
+
+# Contributions
+#
+"contributions" => "User contributions",
+"mycontris" => "My contributions",
+"contribsub" => "For $1",
+"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)" ,
+
+# What links here
+#
+"whatlinkshere" => "What links here",
+"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 here:",
+"nolinkshere" => "No pages link to here.",
+"isredirect" => "redirect page",
+
+# Block/unblock IP
+#
+"blockip" => "Block IP address",
+"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 [[Wikipedia:Policy|Wikipedia policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).",
+"ipaddress" => "IP Address",
+"ipbreason" => "Reason",
+"ipbsubmit" => "Block this address",
+"badipaddress" => "The IP address is badly formed.",
+"noblockreason" => "You must supply a reason for the block.",
+"blockipsuccesssub" => "Block succeeded",
+"blockipsuccesstext" => "The IP address \"$1\" has been blocked.
+<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",
+"ipusuccess" => "IP address \"$1\" unblocked",
+"ipblocklist" => "List of blocked IP addresses",
+"blocklistline" => "$1, $2 blocked $3",
+"blocklink" => "block",
+"unblocklink" => "unblock",
+"contribslink" => "contribs",
+
+# 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 Wikipedia database has been locked.
+<br>Remember to remove the lock after your maintenance is complete.",
+"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
+
+# SQL query
+#
+"asksql" => "SQL query",
+"asksqltext" => "Use the form below to make a direct query of the
+Wikipedia database.
+Use single quotes ('like this') to delimit string literals.
+This can often add considerable load to the server, so please use
+this function sparingly.",
+"sqlislogged" => "Please note that all queries are logged.",
+"sqlquery" => "Enter query",
+"querybtn" => "Submit query",
+"selectonly" => "Queries other than \"SELECT\" are restricted to
+Wikipedia developers.",
+"querysuccessful" => "Query successful",
+
+# 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
+[[Special:Maintenance|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, if any, will be automatically moved along with it '''unless:'''
+*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" => "Move page",
+"movenologin" => "Not logged in",
+"movenologintext" => "You must be a registered user and <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to move a page.",
+"newtitle" => "To new title",
+"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 \"talk\" page as well, if applicable.",
+"talkpagemoved" => "The corresponding talk page was also moved.",
+"talkpagenotmoved" => "The corresponding talk page was <strong>not</strong> moved.",
+
+);
+
+include( "LanguageUtf8.php" );
+
+class LanguageBn extends LanguageUtf8 {
+ function getNamespaces() {
+ global $wgNamespaceNamesBn;
+ return $wgNamespaceNamesBn;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesBn;
+ return $wgNamespaceNamesBn[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesBn;
+
+ foreach ( $wgNamespaceNamesBn as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+ # fallback
+ return Language::getNsIndex( $text );
+ }
+
+ function getMonthName( $key )
+ {
+ global $wgMonthNamesBn;
+ return $wgMonthNamesBn[$key-1];
+ }
+
+ function getMessage( $key )
+ {
+ global $wgAllMessagesBn;
+ if(array_key_exists($key, $wgAllMessagesBn))
+ return $wgAllMessagesBn[$key];
+ else
+ return Language::getMessage($key);
+ }
+
+}
+
+?>
diff --git a/languages/LanguageCy.php b/languages/LanguageCy.php
new file mode 100644
index 000000000000..96762b40ccc7
--- /dev/null
+++ b/languages/LanguageCy.php
@@ -0,0 +1,1144 @@
+<?php
+
+/* Cymraeg - Welsh */
+
+/* private */ $wgNamespaceNamesCy = array(
+ -2 => "Media",
+ -1 => "Arbennig",
+ 0 => "",
+ 1 => "Sgwrs",
+ 2 => "Defnyddiwr",
+ 3 => "Sgwrs_Defnyddiwr",
+ 4 => $wgMetaNamespace,
+ 5 => "Sgwrs_" . $wgMetaNamespace,
+ 6 => "Delwedd",
+ 7 => "Sgwrs_Delwedd",
+ 8 => "MediaWiki",
+ 9 => "Sgwrs_MediaWiki"
+);
+
+/* private */ $wgDefaultUserOptionsCy = array(
+ "quickbar" => 1, "underline" => 1, "hover" => 1,
+ "cols" => 80, "rows" => 25, "searchlimit" => 20,
+ "contextlines" => 5, "contextchars" => 50,
+ "skin" => 0, "math" => 1, "rcdays" => 7, "rclimit" => 50,
+ "highlightbroken" => 1, "stubthreshold" => 0,
+ "previewontop" => 1, "editsection"=>1,"editsectiononrightclick"=>0,
+ "showtoc"=>1,
+ "showtoolbar" =>1,
+ "date" => 0
+);
+
+/* private */ $wgQuickbarSettingsCy = array(
+ "Dim", "Sefydlog chwith", "Sefydlog de", "Arnawf de"
+);
+
+/* private */ $wgSkinNamesCy = array(
+ "Safonol", "Hiraeth", "Glas Cwlen" /* standard, nostalgia, Cologne Blue */
+);
+
+/* private */ $wgMathNamesCy = array(
+ "Rendrwch PNG o hyd",
+ "HTML os yn syml iawn, PNG fel arall",
+ "HTML os bosibl, PNG fel arall",
+ "Gadewch fel TeX (am porwyr testun)",
+ "Cymeradwedig am porwyr modern"
+);
+
+/* private */ $wgDateFormatsCy = array(
+ "Dim dewis",
+ "Ionawr 15, 2001",
+ "15 Ionawr 2001",
+ "2001 Ionawr 15",
+ "2001-01-15"
+);
+
+/* private */ $wgUserTogglesCy = array(
+ "hover" => "Dangos bocs hofren uwchben cysylltiadau wici",
+ "underline" => "Tanllinellu cysylltiadau",
+ "highlightbroken" => "Fformatio cysylltiadau wedi'i dorri <a href=\"\" class=\"new\">fel hyn</a> (dewis arall: fel hyn<a href=\"\" class=\"internal\">?</a>).",
+ "justify" => "Unioni paragraffau",
+ "hideminor" => "Cuddiwch golygiadau bach mewn newidiadau diweddar",
+ "usenewrc" => "Newidiadau diweddar mwyhad (nid am pob porwr)",
+ "numberheadings" => "Rhifwch teiltau yn awtomatig",
+ "showtoolbar"=> "Dangos bar erfynbocs golygu",
+ "editondblclick" => "Golygu tudalennau gyda clic dwbwl (JavaScript)",
+ "editwidth" => "Mae gan bocs golygu lled llon",
+ "editsection" => "Galluogwch golygu adrannau trwy cysylltiadau [golygu]",
+ "editsectiononrightclick" => "Galluogwch golygu adrannau trwy dde-clicio ar teitlau adran (JavaScript)",
+ "showtoc" => "Dangoswch Taflen Cynnwys (am erthyglau gyda mwy na 3 pennawdau",
+ "rememberpassword" => "Cofiwch allweddair dros sesiwnau",
+ "watchdefault" => "Gwiliwch erthyglau newydd ac wedi adnewid",
+ "minordefault" => "Marciwch pob golygiad fel un bach",
+ "previewontop" => "Dangos blaenwelediad cyn y bocs golygu, nid ar ol e",
+ "nocache" => "Anablwch casio tudanlen"
+
+);
+
+/* private */ $wgBookstoreListCy = 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://shop.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"
+);
+
+/* private */ $wgWeekdayNamesCy = array(
+ "Dydd Sul", "Dydd Llun", "Dydd Mawrth", "Dydd Mercher", "Dydd Iau",
+ "Dydd Gwener", "Dydd Sadwrn"
+);
+
+/* private */ $wgMonthNamesCy = array(
+ "Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin",
+ "Gorffenaf", "Awst", "Medi", "Hydref", "Tachwedd",
+ "Rhagfyr"
+);
+
+/* private */ $wgMonthAbbreviationsCy = array(
+ "Ion", "Chwe", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws",
+ "Med", "Hyd", "Tach", "Rhag"
+);
+
+/* private */ $wgMagicWordsCy = array(
+# ID CASE SYNONYMS
+ MAG_REDIRECT => array( 0, "#ail-cyfeirio" ),
+ MAG_NOTOC => array( 0, "__DIMTAFLENCYNNWYS__" ),
+ MAG_NOEDITSECTION => array( 0, "__DIMADRANGOLYGU__" ),
+ MAG_START => array( 0, "__DECHRAU__" ),
+ MAG_CURRENTMONTH => array( 1, "{{MISCYFOES}}" ),
+ MAG_CURRENTMONTHNAME => array( 1, "{{ENWMISCYFOES}}" ),
+ MAG_CURRENTDAY => array( 1, "{{DYDDIADCYFOES}}" ),
+ MAG_CURRENTDAYNAME => array( 1, "{{ENWDYDDCYFOES}}" ),
+ MAG_CURRENTYEAR => array( 1, "{{FLWYDDYNCYFOES}}" ),
+ MAG_CURRENTTIME => array( 1, "{{AMSERCYFOES}}" ),
+ MAG_NUMBEROFARTICLES => array( 1, "{{NIFEROERTHYGLAU}}" ),
+ MAG_CURRENTMONTHNAMEGEN => array( 1, "{{GENENWMISCYFOES}}" ),
+ MAG_MSG => array( 1, "{{MSG:$1}}" ),
+ MAG_SUBST => array( 1, "{{SUBST:$1}}" ),
+ MAG_MSGNW => array( 0, "{{MSGNW:$1}}" ),
+ MAG_END => array( 0, "DIWEDD_" ),
+ MAG_IMG_THUMBNAIL => array( 1, "ewin bawd", "bawd" ),
+ MAG_IMG_RIGHT => array( 1, "de" ),
+ MAG_IMG_LEFT => array( 1, "chwith" ),
+ MAG_IMG_NONE => array( 1, "dim" ),
+ MAG_IMG_WIDTH => array( 1, "$1px" ),
+ MAG_IMG_CENTER => array( 1, "canol", "canol" )
+);
+
+# All special pages have to be listed here: a description of ""
+# will make them not show up on the "Special Pages" page, which
+# is the right thing for some of them (such as the "targeted" ones).
+#
+/* private */ $wgValidSpecialPagesCy = array(
+ "Userlogin" => "",
+ "Userlogout" => "",
+ "Preferences" => "Setiwch fy ffafraethau defnyddwr",
+ "Watchlist" => "Rhestr gwylio fi",
+ "Recentchanges" => "Tudalennau wedi adnewid yn diweddar",
+ "Upload" => "Llwytho ffeiliau lluniau",
+ "Imagelist" => "Rhestr lluniau",
+ "Listusers" => "Defnyddwyr cofrestru",
+ "Statistics" => "Ystadegau'r Safle",
+ "Randompage" => "Erthygl hapgyrch",
+ "Lonelypages" => "Erthyglau heb cysylltiadau",
+ "Unusedimages" => "Lluniau heb cysylltiadau",
+ "Popularpages" => "Erthyglau poblogol",
+ "Wantedpages" => "Eisiau erthyglau am...",
+ "Shortpages" => "Erthyglau byr",
+ "Longpages" => "Erthyglau hir",
+ "Newpages" => "Erthyglau newydd",
+ "Ancientpages" => "Erthyglau hynach",
+ "Deadendpages" => "Erthyglau heb cysylltiadau",
+ "Intl" => "Cysylltiadau rhwng-ieithol",
+ "Allpages" => "Pob tudalen gan teitl",
+ "Ipblocklist" => "Cyfeiriadau IP wedi'i blocio",
+ "Maintenance" => "Tudalen arofal",
+ "Specialpages" => "",
+ "Contributions" => "",
+ "Emailuser" => "",
+ "Whatlinkshere" => "",
+ "Recentchangeslinked" => "",
+ "Movepage" => "",
+ "Booksources" => "Ffynnonellau llyfrau allanol",
+ "Categories" => "Categorïau tudalennau",
+ "Export" => "",
+ "Version" => "Dangos fersiwn Mediawiki"
+);
+
+/* private */ $wgSysopSpecialPagesCy = array(
+ "Blockip" => "Blociwch cyfeiriad IP",
+ "Asksql" => "Gofynnwch y databas",
+ "Undelete" => "Gwyliwch ac atgyweirio tundalennau wedi'u dileu",
+ "Makesysop" => "Gwnewch sysop allan o defnyddiwr"
+);
+
+/* private */ $wgDeveloperSpecialPagesCy = array(
+ "Lockdb" => "Databas darllen yn unig",
+ "Unlockdb" => "Gwnewch y databas yn ysgrifennol"
+);
+
+/* private */ $wgAllMessagesCy = array(
+
+# Bits of text used by many pages:
+#
+"categories" => "Categorïau tudalen",
+"category" => "categori",
+"category_header" => "Erthyglau mewn categori \"$1\"",
+"subcategories" => "Is-categorïau",
+"linktrail" => "/^((?:à|á|â|è|é|ê|ì|í|î|ï|ò|ó|ô|û|[a-z])+)(.*)\$/sD",
+"mainpage" => "Prif tudalen",
+"mainpagetext" => "Meddalwedd Wicipedia wedi sefydlu'n llwyddiannus",
+"about" => "Amdano",
+"aboutwikipedia" => "Amdano Wicipedia",
+"aboutpage" => "$wgMetaNamespace:Amdano",
+"help" => "Help",
+"helppage" => "$wgMetaNamespace:Help",
+"wikititlesuffix" => "$wgSitename",
+"bugreports" => "Adroddiadau diffygion",
+"bugreportspage" => "$wgMetaNamespace:Adroddiadau_diffygion",
+"sitesupport" => "Rhoddion",
+"sitesupportpage" => "", # If not set, won't appear. Can be wiki page or URL
+"faq" => "COF",
+"faqpage" => "$wgMetaNamespace:COF",
+"edithelp" => "Help gyda golygu",
+"edithelppage" => "$wgMetaNamespace: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" => "$wgMetaNamespace:Gwadiad_cyffredin",
+"currentevents" => "Digwyddiadau presennol",
+"errorpagetitle" => "Gwall",
+"returnto" => "Ewch yn ôl i $1.",
+"fromwikipedia" => "Oddiwrth Wicipedia, y gwyddoniadur rhad.",
+"whatlinkshere" => "Tudalennau sydd yn cysyllti fan hyn",
+"help" => "Help",
+"search" => "Chwilio",
+"go" => "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",
+"subjectpage" => "Gwyliwch pwnc", # For compatibility
+"userpage" => "Gwyliwch tudalen defnyddiwr",
+"wikipediapage" => "Gwyliwch tudalen meta",
+"imagepage" => "Gwyliwch tudalen llun",
+"viewtalkpage" => "Gwyliwch sgwrs",
+"otherlanguages" => "Ieithoed eraill",
+"redirectedfrom" => "(Ail-cyfeiriad oddiwrth $1)",
+"lastmodified" => "Pryd cafodd ei newid diwethaf $1.",
+"viewcount" => "Mae'r tudalen hyn wedi cael ei gweld $1 o weithiau.",
+"gnunote" => "Mae pob testun ar gael o dan term<a class=internal href='/wiki/GNU_FDL'>Goddefiad dogfennau rhad GNU</a>.",
+"printsubtitle" => "(Oddiwrth http://www.wikipedia.org/)",
+"protectedpage" => "Tudalen amddiffyniol",
+"administrators" => "$wgMetaNamespace:Gweinyddwyr",
+"sysoptitle" => "Mynediad Sysop yn unig",
+"sysoptext" => "Mae'r peth rydych wedi gofyn amdano dim ond yn bosibl i ddefnyddwyr gyda statws \"sysop\".
+Gwelwch $1.",
+"developertitle" => "Mynediad Datblygwr yn unig",
+"developertext" => "Mae'r peth rydych wedi gofyn amdano dim ond yn bosibl i ddefnyddwyr gyda statws \"datblygwr\".
+Gwelwch $1.",
+"bureaucrattitle" => "Mynediad Biwrocrat yn unig",
+"bureaucrattext" => "Mae'r peth rydych wedi gofyn amdano dim ond yn bosibl i ddefnyddwyr gyda statws \"biwrocrat\"",
+"nbytes" => "$1 bytes",
+"go" => "Mynd",
+"ok" => "OK",
+"sitetitle" => "Wicipedia",
+"sitesubtitle" => "Y Gwyddoniadur Rhydd",
+"retrievedfrom" => "Wedi dod o \"$1\"",
+"newmessages" => "Mae gen ti $1.",
+"newmessageslink" => "Neges(eueon) newydd",
+"editsection" => "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 Wicipedia 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 Wicipedia ddim yn adnabod.",
+
+# General errors
+#
+"error" => "Gwall",
+"databaseerror" => "Databas ar gam",
+"dberrortext" => "Mae gwall cystrawen wedi digwydd ar y databas.
+Wyrach mae hwn wedi digwydd am achos gofyniad chwilio anghyfreithlon (gwelwch $5), neu mae 'ne byg yn y meddalwedd.
+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\".\n",
+"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 Wicipedia 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",
+"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
+[[$wgMetaNamespace: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 Wicipedia yn anhysbys, neu gallwch chi mewngofnodi eto fel yr un defnyddwr neu un arall.\n",
+
+"welcomecreation" => "<h2>Croeso, $1!</h2><p>Mae eich accownt wedi gael eu creu. Peidiwch ac anghofio i personaleiddio eich ffafraethau defnyddwr Wicipedia.",
+"loginpagetitle" => "Mewngofnodi'r defnyddwr",
+"yourname" => "Eich enw defnyddwr",
+"yourpassword" => "Eich allweddair",
+"yourpasswordagain" => "Ail-teipiwch allweddair",
+"newusersonly" => " (defnyddwyr newydd yn unig)",
+"remembermypassword" => "Cofiwch fy allweddair dros mwy nag un sesiwn.",
+"loginproblem" => "<b>Mae problem efo'ch mewngofnodi.</b><br>Triwch eto!",
+"alreadyloggedin" => "<font color=red><b>Defnyddwr $1, yr ydych eisioes wedi mewngofnodi!</b></font><br>\n",
+
+"areyounew" => "Os ydych chi newydd wedi dod i Wicipedia ac yn eisiau cael accownt defnyddwr, teipiwch enw defnyddwr, felly teipiwch ac ail-teipiwch allweddair. Dydy eich cyfeiriad e-bost ddim yn gorfodol; os collwch eich allweddair mae'n bosibl i chi gofyn i gael hi eu anfon at y cyfeiriad e-bost hon.<br>\n",
+
+"login" => "Mewngofnodi",
+"loginprompt" => "Rhaid i chi galluogi cwcis i mewngofnodi i $wgSitename.",
+"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)",
+"emailforlost" => "Os anghofiwch eich allweddair, cewch cael un newydd postwyd i'ch cyfeiriad e-bost.",
+"loginerror" => "Problem mewngofnodi",
+"nocookiesnew" => "Mae'r accownt defnyddiwr wedi gael eu creu, ond dydwch chi ddim wedi mewngofnodi. Mae $wgSitename 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 $wgSitename 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 Wicipedia 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 Wicipedia",
+"passwordremindertext" => "Mae rhywun (chi, yn tebygol, oddiwrth cyfeiriad IP $1) wedi gofyn iddi ni danfon allweddair mewngofnodi newydd Wicipedia.
+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.",
+"loginend" => "",
+
+# 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)",
+"infobox" => "Cliciwch botwm i cael testun enghraifft",
+
+# 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
+[[Wicipedia:administrators|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 [[Wicipedia:Help|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",
+"sectionedit" => " (rhan)",
+"commentedit" => " (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\".\n<p>",
+"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>\n",
+"yourdiff" => "Gwahaniaethau",
+"copyrightwarning" => "Sylwch mae pob cyfraniad i Wicipedia 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" => "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.",
+"readonlywarning" => "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.",
+"protectedpagewarning" => "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
+<a href='/wiki/$wgMetaNamespace:Protected_page_guidelines'>gwifrau tywys tudalen amddiffyn</a>.",
+
+# 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.\n",
+"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",
+"searchhelppage" => "Wicipedia: Yn chwilio",
+"searchingwikipedia" => "Yn chwilio Wicipedia",
+"searchresulttext" => "Am mwy o hysbys amdano chwilio Wicipedia, gwelwch $1.",
+"searchquery" => "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.",
+"nogomatch" => "Does dim erthygl gyda'r union teitl hon, yn trio chwiliad testun cyfan. ",
+"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>",
+"googlesearch" => "
+<!--SiteSearch Google -->
+<FORM method=GET action=\"http://www.google.co.uk/search\">
+<TABLE bgcolor=\"#FFFFFF\"><tr><td>
+<A HREF=\"http://www.google.co.uk/\">
+<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>
+<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 -->
+",
+"blanknamespace" => "(Prif)",
+
+
+# Preferences page
+#
+"preferences" => "ffafraethau",
+"prefsnologin" => "Nid wedi mewngofnodi",
+"prefsnologintext" => "Rhaid i chi <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">mewngofnodi</a>
+i setio ffafraethau defnyddwr.",
+"prefslogintext" => "Yr ydych wedi mewngofnodi fel \"$1\".
+$2 yw eich rhif hunaniaith mewnol.",
+"prefsreset" => "Mae ffafraethau wedi gael eu ail-setio oddiwrth y storfa.",
+"qbsettings" => "Gosodiadau bar-gyflym",
+"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",
+"emailflag" => "Anablo e-bost oddiwrth defnyddwyr eraill",
+"defaultns" => "Gwyliwch yn llefydd-enw rhain:",
+
+# Recent changes
+#
+"changes" => "newidiadau",
+"recentchanges" => "Newidiadau diweddar",
+"recentchangestext" => "Traciwch y newidiadau mor diweddar i'r Wicipedia ac i'r tudalen hon.",
+"rcloaderr" => "Yn llwytho newidiadau diweddar",
+"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 oriau olaf / $3 dyddiau olaf",
+"showhideminor" => "$1 golygiadau bach | $2 botiau | $3 defnyddwyr wedi mewngofnodi ",
+"rclinks" => "Dangos y $1 newidiadau olaf yn y $2 dyddiau olaf.",
+"rchide" => "yn ffurf $4; $1 golygiadon bach; $2 llefydd enw eilaidd; $3 golygiadon lluosrif.",
+"rcliu" => "; $1 golygiadau gan defnyddwyr wedi mewngofnodi",
+"diff" => "gwahan",
+"hist" => "hanes",
+"hide" => "cuddio",
+"show" => "dangos",
+"tableform" => "taflen",
+"listform" => "rhestr",
+"nchanges" => "$1 newidiadau",
+"minoreditletter" => "B",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload" => "Llwytho ffeil i fynu",
+"uploadbtn" => "Llwytho ffeil i fynu",
+"uploadlink" => "Llwytho lluniau i fynu",
+"reupload" => "Ail-llwytho i fynu",
+"reuploaddesc" => "Return to the upload form.",
+"uploadnologin" => "Nid wedi mewngofnodi",
+"uploadnologintext" => "Rhaid i chi bod wedi <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">mewngofnodi</a>
+i lwytho ffeiliau i fynu.",
+"uploadfile" => "Llwytho ffeil i fynu",
+"uploaderror" => "Gwall yn llwytho ffeil i fynu",
+"uploadtext" => "<strong>STOPIWCH!</strong> Cyn iddich chi llwytho lluniau yma, darllenwch a dilynwch <a href=\"" .
+wfLocalUrlE( "Wicipedia:Polisi_defnyddio_lluniau" ) . "\">polisi defnyddio lluniau</a> Wicipedia os gwelwch yn dda.
+<p>I gweld neu chwilio hen lluniau ewch i'r <a href=\"" . wfLocalUrlE( "Arbennig:Imagelist" ) .
+"\">rhestr lluniau wedi llwytho</a>.
+Mae pob llwyth a dileuo ffeil yn cael eu recordio ar y <a href=\"" .
+wfLocalUrlE( "Wicipedia:Upload_log" ) . "\">log llwytho</a>.
+<p>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.
+<p>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
+<b>[[llun:ffeil.jpg]]</b> neu <b>[[llun:ffeil.png|testun arall]]</b>
+neu <b>[[media:ffeil.ogg]]</b> am sain.
+<p>Sylwch -- fel efo tudalennau Wicipedia, 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",
+"affirmation" => "Rwy'n addo mae'r hawlfraintiwr y ffeil hon wedi cytuno trwyddo'r ffeil o dan termau'r $1.",
+"copyrightpage" => "$wgMetaNamespace:Hawlfraint",
+"copyrightpagename" => "Hawlfraint $wgSitename",
+"uploadedfiles" => "Ffeiliau wedi llwytho i fynu",
+"noaffirmation" => "Rhaid i chi addo dydy'r llwyth i fynu ddim y torri unrhyw hawlfraint.",
+"ignorewarning" => "Anwybyddwch y rhybudd, a chadwch y tudalen beth bynnag.",
+"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",
+"ilshowmatch" => "Dangos pob delwedd gyda enwau yn cyfateb",
+"ilsubmit" => "Chwilio",
+"showlast" => "Dangos y $1 delweddau olaf wedi trefnu $2.",
+"all" => "holl",
+"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",
+"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 Wicipedia, 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)).",
+
+# Maintenance Page
+#
+"maintenance" => "Maintenance page",
+"maintnancepagetext" => "This page includes several handy tools for everyday maintenance. Some of these functions tend to stress the database, so please do not hit reload after every item you fixed ;-)",
+"maintenancebacklink" => "Back to Maintenance Page",
+"disambiguations" => "Disambiguation pages",
+"disambiguationspage" => "Wicipedia: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" => "Double Redirects",
+"doubleredirectstext" => "<b>Attention:</b> This list may contain false positives. That usually means there is additional text with links below the first #REDIRECT.<br>\nEach row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" taget article, which the first redirect should point to.",
+"brokenredirects" => "Broken Redirects",
+"brokenredirectstext" => "The following redirects link to a non-existing article.",
+"selflinks" => "Pages with Self Links",
+"selflinkstext" => "The following pages contain a link to themselves, which they should not.",
+"mispeelings" => "Pages with misspellings",
+"mispeelingstext" => "The following pages contain a common misspelling, which are listed on $1. The correct spelling might be given (like this).",
+"mispeelingspage" => "List of common misspellings",
+"missinglanguagelinks" => "Missing Language Links",
+"missinglanguagelinksbutton" => "Find missing language links for",
+"missinglanguagelinkstext" => "These articles do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
+
+
+# Miscellaneous special pages
+#
+"orphans" => "Erthyglau heb cysylltiadau",
+"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",
+"sysopspheading" => "Erthyglau arbennig am defnyddiad y sysop",
+"developerspheading" => "Erthyglau arbennig am defnyddiad y datblygydd",
+"protectpage" => "Sicrhau erthygl",
+"recentchangeslinked" => "Newidiadau perthnasol",
+"rclsub" => "(i erthyglau cysyllt oddiwrth \"$1\")",
+"debug" => "Debug",
+"newpages" => "Erthyglau newydd",
+"ancientpages" => "Erthyglau hynach",
+"intl" => "Cysylltiadau rhwng ieithau",
+"movethispage" => "Symydwch tudalen hon",
+"unusedimagestext" => "<p>Sylwch mae gwefannau eraill, e.e. y Wicipediau 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.",
+"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 Wicipedia 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 <a href=\"" .
+ wfLocalUrl( "Arbennig:Mewngofnodidefnyddwr" ) . "\">mewngofnodi</a>
+a rhoi cyfeiriad e-bost dilyn yn eich <a href=\"" .
+ wfLocalUrl( "Arbennig:Ffafraethau" ) . "\">ffafraethau</a>
+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 $wgSitename",
+"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",
+"watchlistsub" => "(am defnyddwr \"$1\")",
+"nowatchlist" => "Does ganddoch chi ddim eitem ar eich rhestr gwylio.",
+"watchnologin" => "Dydych chi ddim wedi mewngofnodi",
+"watchnologintext" => "Rhaid i chi bod wedi <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">mewngofnodi</a>
+i adnewid eich rhestr gwylio.",
+"addedwatch" => "Wedi adio i'ch rhestr gwylio",
+"addedwatchtext" => "Mae tudalen \"$1\" wedi gael eu ychwanegu i eich <a href=\"" .
+ wfLocalUrl( "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=\"" .
+ wfLocalUrl( "Arbennig:Newidiadau_diweddar" ) . "\">rhestr newidiadau diweddar</a>, i bod yn hawsach i gweld.</p>
+
+<p>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...
+<a href='$4'>dangos ac olygu y rhestr cyfan</a>.)",
+"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:",
+"exbeforeblank" => "y cynnwys cyn blancio oedd:",
+"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 [[Wicipedia:Polisi]].",
+"confirmcheck" => "Ie, 'Dwi eisio dileu hwn mewn gwirionedd.",
+"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 [[Defnyddwr:$2|$2]] ([[Sgwrs defnyddwr:$2|Sgwrs]]); mae rhywun arall yn barod wedi olygu neu rolio nôl yr erthygl.
+
+[[Defnyddwr:$3|$3]] ([[Sgwrs defnyddwr:$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",
+"protectlogtext" => "Isod mae rhestr o cloion/datgloion tudalennau.
+Gwelwch [[$wgMetaNamespace: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\"",
+
+"undeletedtext" => "Mae'r erthygl [[$1]] wedi cael eu adferio'n llwyddiannus.
+Gwyliwch [[Wicipedia:Log_dileuon]] am record dileuon ac adferion diweddar.",
+
+# Contributions
+#
+"contributions" => "Cyfraniadau defnyddwr",
+"mycontris" => "Fy nghyfraniadau",
+"contribsub" => "Dros $1",
+"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 [[Wicipedia:Polisi|polisi Wicipedia]].
+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.",
+"noblockreason" => "Rhaid i chi rhoi rheswm am y bloc.",
+"blockipsuccesssub" => "Bloc yn llwyddiannus",
+"blockipsuccesstext" => "Mae cyfeiriad IP \"$1\" wedi cael eu blocio.
+<br>Gwelwch [[Arbennig: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",
+"ipusuccess" => "Cyfeiriad IP \"$1\" wedi di-blocio",
+"ipblocklist" => "Rhestr cyfeiriadau IP wedi blocio",
+"blocklistline" => "$1, $2 wedi blocio $3",
+"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.\n",
+
+# Developer tools - left untranslated as the developers would probably
+# prefer them in English!
+#
+"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 remove the lock after your maintenance is complete.",
+"unlockdbsuccesstext" => "The database has been unlocked.",
+
+# SQL query -- left untranslated
+#
+"asksql" => "SQL query",
+"asksqltext" => "Use the form below to make a direct query of the
+Wicipedia database.
+Use single quotes ('like this') to delimit string literals.
+This can often add considerable load to the server, so please use
+this function sparingly.",
+"sqlquery" => "Enter query",
+"querybtn" => "Submit query",
+"selectonly" => "Queries other than \"SELECT\" are restricted to
+Wicipedia developers.",
+"querysuccessful" => "Query successful",
+
+# Make sysop
+"makesysoptitle" => "Gwnewch sysop allan o defnyddiwr",
+"makesysoptext" => "Defnyddiwch y ffurflen hon i troi defnyddiwr cyffredin i gweinyddwr.
+Teipiwch enw'r defnyddiwr yn y blwch a cliciwch y botwm i troi'r defnyddiwr i gweinyddwr",
+"makesysopname" => "Enw'r defnyddiwr:",
+"makesysopsubmit" => "Gwnewch y defnyddiwr hwn yn gweinyddwr",
+"makesysopok" => "<b>Mae defnyddwr '$1' rwan yn gweinyddwr</b>",
+"makesysopfail" => "<b>Wedi methu troi defnyddwr '$1' i gweinyddwr. (Ydych chi wedi sillafu'r enw'n iawn?)</b>",
+"setbureaucratflag" => "Gosod y fflag biwrocrat",
+"bureaucratlog" => "Log_biwrocrat",
+"bureaucratlogentry" => " gosod $1: $2",
+
+# 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 <a href=\"" .
+ wfLocalUrl( "Arbennig:Userlogin" ) . "\">mewngofnodi</a>
+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"
+
+);
+
+
+include_once( "LanguageUtf8.php" );
+
+class LanguageCy extends LanguageUtf8 {
+
+ function getDefaultUserOptions () {
+ global $wgDefaultUserOptionsCy;
+ return $wgDefaultUserOptionsCy;
+ }
+
+ function getBookstoreList () {
+ global $wgBookstoreListCy;
+ return $wgBookstoreListCy;
+ }
+
+ function getNamespaces() {
+ global $wgNamespaceNamesCy;
+ return $wgNamespaceNamesCy;
+ }
+
+ function getNsText( $index ) {
+ global $wgNamespaceNamesCy;
+ return $wgNamespaceNamesCy[$index];
+ }
+
+ function getNsIndex( $text ) {
+ global $wgNamespaceNamesCy;
+
+ foreach ( $wgNamespaceNamesCy as $i => $n ) {
+ if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ }
+ # Fallback to English names for compatibility
+ return Language::getNsIndex( $text );
+ }
+
+ function getQuickbarSettings() {
+ global $wgQuickbarSettingsCy;
+ return $wgQuickbarSettingsCy;
+ }
+
+ function getSkinNames() {
+ global $wgSkinNamesCy;
+ return $wgSkinNamesCy;
+ }
+
+ function getMathNames() {
+ global $wgMathNamesCy;
+ return $wgMathNamesCy;
+ }
+
+ function getDateFormats() {
+ global $wgDateFormatsCy;
+ return $wgDateFormatsCy;
+ }
+
+ function getUserToggles() {
+ global $wgUserTogglesCy;
+ return $wgUserTogglesCy;
+ }
+
+ function getMonthName( $key )
+ {
+ global $wgMonthNamesCy;
+ return $wgMonthNamesCy[$key-1];
+ }
+
+ function getMonthAbbreviation( $key )
+ {
+ global $wgMonthAbbreviationsCy;
+ return $wgMonthAbbreviationsCy[$key-1];
+ }
+
+ function getWeekdayName( $key )
+ {
+ global $wgWeekdayNamesCy;
+ return $wgWeekdayNamesCy[$key-1];
+ }
+
+ function getValidSpecialPages()
+ {
+ global $wgValidSpecialPagesCy;
+ return $wgValidSpecialPagesCy;
+ }
+
+ function getSysopSpecialPages()
+ {
+ global $wgSysopSpecialPagesCy;
+ return $wgSysopSpecialPagesCy;
+ }
+
+ function getDeveloperSpecialPages()
+ {
+ global $wgDeveloperSpecialPagesCy;
+ return $wgDeveloperSpecialPagesCy;
+ }
+
+ function getMessage( $key )
+ {
+ global $wgAllMessagesCy;
+ return $wgAllMessagesCy[$key];
+ }
+
+ function getAllMessages()
+ {
+ global $wgAllMessagesCy;
+ return $wgAllMessagesCy;
+ }
+
+ function getMagicWords()
+ {
+ global $wgMagicWordsCy;
+ return $wgMagicWordsCy;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/languages/LanguageDe.php b/languages/LanguageDe.php
index 32decb3bacf5..f21f71dac2e4 100644
--- a/languages/LanguageDe.php
+++ b/languages/LanguageDe.php
@@ -907,6 +907,7 @@ Diskussions-Seite nicht, da schon eine mit dem neuen Titel existiert. Bitte glei
"export" => "Seiten exportieren",
"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 WikiMedia Software eingespielt werden, bearbeitet oder archiviert werden.",
"exportcuronly" => "Nur die aktuelle Version der Seite exportieren",
+"missingimage" => "<b>Fehlendes Bild</b><br><i>$1</i>\n"
);
class LanguageDe extends Language {
diff --git a/languages/LanguageEs.php b/languages/LanguageEs.php
index 1ae8c5f7f8bf..5db4832ed324 100644
--- a/languages/LanguageEs.php
+++ b/languages/LanguageEs.php
@@ -11,8 +11,8 @@
1 => "Discusión",
2 => "Usuario",
3 => "Usuario_Discusión",
- 4 => "Wikipedia",
- 5 => "Wikipedia_Discusión",
+ 4 => $wgMetaNamespace,
+ 5 => "{$wgMetaNamespace}_Discusión",
6 => "Imagen",
7 => "Imagen_Discusión",
8 => "MediaWiki",
@@ -152,18 +152,18 @@
"mainpage" => "Portada",
"mainpagetext" => "Software wiki instalado con éxito.",
"about" => "Acerca de",
-"aboutwikipedia" => "Acerca de Wikipedia",
-"aboutpage" => "Wikipedia:Acerca de",
+"aboutwikipedia" => "Acerca de $wgSitename",
+"aboutpage" => "$wgMetaNamespace:Acerca de",
"help" => "Ayuda",
-"helppage" => "Wikipedia:Ayuda",
-"wikititlesuffix" =>"Wikipedia",
+"helppage" => "$wgMetaNamespace:Ayuda",
+"wikititlesuffix" =>"$wgSitename",
"bugreports" => "Informes de error de software",
-"bugreportspage" => "Wikipedia:Informes_de_error",
+"bugreportspage" => "$wgMetaNamespace:Informes_de_error",
"faq" => "FAQ",
-"faqpage" => "Wikipedia:FAQ",
+"faqpage" => "$wgMetaNamespace:FAQ",
"edithelp" => "Ayuda de edición",
-"edithelppage" => "Wikipedia:Cómo_se_edita_una_página",
+"edithelppage" => "$wgMetaNamespace:Cómo_se_edita_una_página",
"cancel" => "Cancelar",
"qbfind" => "Encontrar",
"qbbrowse" => "Hojear",
@@ -176,7 +176,7 @@
"currentevents" => "Actualidad",
"errorpagetitle" => "Error",
"returnto" => "Regresa a $1.",
-"fromwikipedia" => "De Wikipedia, la enciclopedia libre.",
+"fromwikipedia" => "De $wgSitename, la enciclopedia libre.",
"whatlinkshere" => "Páginas que enlazan aquí",
"help" => "Ayuda",
"search" => "Buscar",
@@ -204,7 +204,7 @@
"gnunote" => "Todo el texto se hace disponible bajo los términos de la <a class=internal href='/wiki/GNU_FDL'>Licencia de Documentación Libre GNU (GNU FDL)",
"printsubtitle" => "(De http://es.wikipedia.org)",
"protectedpage" => "Página protegida",
-"administrators" => "Wikipedia:Administradores",
+"administrators" => "$wgMetaNamespace:Administradores",
"sysoptitle" => "Acceso de Administrador requerido",
"sysoptext" => "La acción que has requerido sólo puede ser llevada a cabo
por usuarios con status de administrador.
@@ -216,7 +216,7 @@ Ver $1.",
"nbytes" => "$1 bytes",
"go" => "Ir",
"ok" => "OK",
-"sitetitle" => "Wikipedia",
+"sitetitle" => "$wgSitename",
"sitesubtitle" => "La Enciclopedia Libre",
"retrievedfrom" => "Obtenido de \"$1\"",
"newmessages" => "Tienes $1.",
@@ -233,10 +233,10 @@ Ver $1.",
#
"nosuchaction" => "No existe tal acción",
"nosuchactiontext" => "La acción especificada por el URL no es
- reconocida por el software de Wikipedia",
+ reconocida por el software de $wgSitename",
"nosuchspecialpage" => "No existe esa página especial",
"nospecialpagetext" => "Has requerido una página especial que no es
- reconocida por el software de Wikipedia.",
+ reconocida por el software de $wgSitename.",
# General errors
#
@@ -260,7 +260,7 @@ MySQL retornó el error \"$3: $4\".\n",
"readonly" => "Base de datos bloqueada",
"cachederror" => "Esta es una copia guardada en el cache de la página requerida, y puede no estar actualizada.",
"enterlockreason" => "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
-"readonlytext" => "La base de datos de Wikipedia está temporalmente
+"readonlytext" => "La base de datos de $wgSitename 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:
@@ -291,11 +291,11 @@ notando el URL.",
# Login and logout pagesítulo
"logouttitle" => "Fin de sesión",
"logouttext" => "Has terminado tu sesión.
-Puedes continuar usando Wikipedia en forma anónima, o puedes
+Puedes continuar usando $wgSitename en forma anónima, o puedes
iniciar sesión otra vez como el mismo u otro usuario.\n",
"welcomecreation" => "<h2>Bienvenido(a), $1!</h2><p>Tu cuenta ha sido creada.
-No olvides perzonalizar tus preferencia de Wikipedia.",
+No olvides perzonalizar tus preferencia de $wgSitename.",
"loginpagetitle" => "Registrarse/Entrar",
"yourname" => "Tu nombre de usuario",
@@ -320,14 +320,14 @@ No olvides perzonalizar tus preferencia de Wikipedia.",
"loginerror" => "Error de inicio de sesión",
"noname" => "No has especificado un nombre de usuario válido.",
"loginsuccesstitle" => "Inicio de sesión exitoso",
-"loginsuccess" => "Has iniciado tu sesión en Wikipedia como \"$1\".",
+"loginsuccess" => "Has iniciado tu sesión en $wgSitename como \"$1\".",
"nosuchuser" => "No existe usuario alguno llamado \"$1\".
Revisa tu deletreo, o usa la forma abajo para crear una nueva cuenta de usuario.",
"wrongpassword" => "La contraseña que ingresaste es incorrecta. Por favor inténtalo de nuevo.",
"mailmypassword" => "Envíame una nueva contraseña por correo electrónico",
-"passwordremindertitle" => "Recordatorio de contraseña de Wikipedia",
+"passwordremindertitle" => "Recordatorio de contraseña de $wgSitename",
"passwordremindertext" => "Alguien (probablemente tú, desde la direccion IP $1)
-solicitó que te enviaramos una nueva contraseña para iniciar sesión en Wikipedia.
+solicitó que te enviaramos una nueva contraseña para iniciar sesión en $wgSitename.
La contraseña para el usuario \"$2\" es ahora \"$3\".
Ahora deberías iniciar sesion y cambiar tu contraseña.",
"noemail" => "No hay dirección electrónica (e-mail) registrada para el(la) usuario(a) \"$1\".",
@@ -345,10 +345,10 @@ Por favor entra otra vez después de que la recibas.",
"showpreview" => "Mostrar previsualización",
"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<p> Puedes contactar a $1 o a otro de los [[Wikipedia:Administradores|administradores]] para
+La razón dada es la que sigue:<br>$2<p> Puedes contactar a $1 o a otro de los [[$wgMetaNamespace:Administradores|administradores]] para
discutir el bloqueo.",
"newarticle" => "(Nuevo)",
-"newarticletext" => "Wikipedia es una enciclopedia en desarrollo, y esta página aún no existe. Puedes pedir información en [[Wikipedia:Consultas]], pero no esperes una respuesta pronta. Si lo que quieres es crear esta página, empieza a escribir en la caja que sigue. Si llegaste aquí por error, presiona la tecla para volver a la página anterior de tu navegador.",
+"newarticletext" => "$wgSitename es una enciclopedia en desarrollo, y esta página aún no existe. Puedes pedir información en [[$wgMetaNamespace:Consultas]], pero no esperes una respuesta pronta. Si lo que quieres es crear esta página, empieza a escribir en la caja que sigue. 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]] numérica para adentificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y sientes que comentarios irreleventes han sido dirigidos a ti, por favor [[Especial: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)",
@@ -374,7 +374,7 @@ Vas a tener que incorporar tus cambios en el texto existente.
de esta página.
Si la grabas, los cambios hechos desde esa revisión se perderán.</strong>\n",
"yourdiff" => "Diferencias",
-"copyrightwarning" => "Ayuda de edición, caracteres especiales: á é í ó ú Á É Í Ó Ú ü Ü ñ Ñ ¡ ¿ <br><br>Nota por favor que todas las contribuciones a Wikipedia
+"copyrightwarning" => "Ayuda de edición, caracteres especiales: á é í ó ú Á É Í Ó Ú ü Ü ñ Ñ ¡ ¿ <br><br>Nota por favor que todas las contribuciones a $wgSitename
se consideran hechas públicas bajo la Licencia de Documentación Libre GNU
(ver detalles en $1).
Si no deseas que la gente corrija tus escritos sin piedad
@@ -389,7 +389,7 @@ Por favor considera la posibilidad de descomponer esta página en secciones más p
Puedes \"cortar y pegar\" a un archivo de texto en tu computador, y grabarlo para
intentarlo después.",
"protectedpagewarning" => "ADVERTENCIA: Esta página ha sido bloqueda de manera que s&ocute;lo usuarios con privilegios de administrador pueden editarla. Asegúrate de que estás siguiendo las
-<a href='/wiki/Wikipedia:Guías_para_páginas_protegidas'>guías para páginas protegidas</a>.",
+<a href='/wiki/$wgMetaNamespace:Guías_para_páginas_protegidas'>guías para páginas protegidas</a>.",
# History pages
#
"revhistory" => "Historia de revisiones",
@@ -417,9 +417,9 @@ Por favor revisa el URL que usaste para acceder a esta página.\n",
# Search results
#
"searchresults" => "Resultados de búsqueda",
-"searchhelppage" => "Wikipedia:Búsqueda",
-"searchingwikipedia" => "Buscando en Wikipedia",
-"searchresulttext" => "Para más información acerca de búsquedas en Wikipedia, ve a $1.",
+"searchhelppage" => "$wgMetaNamespace:Búsqueda",
+"searchingwikipedia" => "Buscando en $wgSitename",
+"searchresulttext" => "Para más información acerca de búsquedas en $wgSitename, ve a $1.",
"searchquery" => "Para consulta \"$1\"",
"badquery" => "Consulta de búsqueda formateada en forma incorrecta",
@@ -523,15 +523,15 @@ y la hora del servidor (UTC).",
#
"changes" => "cambios",
"recentchanges" => "Cambios Recientes",
-"recentchangestext" => "Sigue los cambios más recientes a Wikipedia en esta página.
-[[Wikipedia:Bienvenidos|Bienvenidos]]!
-Por favor, mira estas páginas: [[wikipedia:FAQ|Wikipedia FAQ]],
-[[Wikipedia:Políticas y guías|políticas de Wikipedia]]
-(especialmente [[wikipedia:Convenciones de nombres|las convenciones para nombrar artículos]] y
-[[wikipedia:Punto de vista neutral|punto de vista neutral]]).
+"recentchangestext" => "Sigue los cambios más recientes a $wgSitename en esta página.
+[[$wgMetaNamespace:Bienvenidos|Bienvenidos]]!
+Por favor, mira estas páginas: [[$wgMetaNamespace:FAQ|$wgSitename FAQ]],
+[[$wgMetaNamespace:Políticas y guías|políticas de $wgSitename]]
+(especialmente [[$wgMetaNamespace:Convenciones de nombres|las convenciones para nombrar artículos]] y
+[[$wgMetaNamespace:Punto de vista neutral|punto de vista neutral]]).
-Si quieres que Wikipedia tenga éxito, es muy importante que no agregues
-material restringido por [[wikipedia:Copyrights|derechos de autor]].
+Si quieres que $wgSitename tenga éxito, es muy importante que no agregues
+material restringido por [[$wgMetaNamespace:Copyrights|derechos de autor]].
La responsabilidad legal realmente podría dañar el proyecto, así que por favor no lo hagas.
@@ -570,8 +570,8 @@ para subir archivos.",
previamente, ve a la <a href=\"" . wfLocalUrlE( "Especial:Imagelist" ) .
"\">lista de imágenes subidas</a>.
Los archivos subidos y borrados son registrados en el <a href=\"" .
-wfLocalUrlE( "Wikipedia:Registro de subidas" ) . "\">registro de subidas</a>.
-Consulta también la <a href=\"" . wfLocalUrlE( "Wikipedia:Política de uso de imágenes" ) .
+wfLocalUrlE( "$wgMetaNamespace:Registro de subidas" ) . "\">registro de subidas</a>.
+Consulta también la <a href=\"" . wfLocalUrlE( "$wgMetaNamespace:Política de uso de imágenes" ) .
"\">política de uso de imágenes</a>.
<p>Usa el formulario siguiente para subir nuevos archivos de imágenes que
vas a usar para ilustrar tus artículos.
@@ -589,7 +589,7 @@ 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
<b>[[imagen:archivo.jpg]]</b> o <b>[[imagen:archivo.png|alt text]]</b>
o <b>[[media:archivo.ogg]]</b> para sonidos.
-<p>Por favor recuerda que, al igual que con las páginas Wikipedia, otros pueden
+<p>Por favor recuerda que, al igual que con las páginas $wgSitename, otros pueden
editar o borrar los archivos que has subido si piensan que es bueno para
la enciclopedia, y se te puede bloquear, impidiéndote subir más archivos si abusas del sistema.",
"uploadlog" => "registro de subidas",
@@ -603,8 +603,8 @@ subido más recientemente. Todas las horas son del servidor (UTC).
"filedesc" => "Sumario",
"affirmation" => "Afirmo que el dueño del copyright de este archivo
está de acuerdo en licenciarlo bajo los términos de $1.",
-"copyrightpage" => "Wikipedia:Copyrights",
-"copyrightpagename" => "Wikipedia copyright",
+"copyrightpage" => "$wgMetaNamespace:Copyrights",
+"copyrightpagename" => "$wgSitename copyright",
"uploadedfiles" => "Archivos subidos",
"noaffirmation" => "Tú debes afirmar que tus subidas de archivos no violan ningún copyright.",
"ignorewarning" => "Ignora la advertencia y graba el archivo de todos modos.",
@@ -653,7 +653,7 @@ esta versión antigua, (rev) = revertir a esta versión antigua.
"sitestats" => "Estadísticas del sitio",
"userstats" => "Estadísticas de usuario",
"sitestatstext" => "Hay un total de <b>$1</b> páginas en la base de datos.
-Esto incluye páginas de discusión, páginas acerca de Wikipedia, páginas mínimas,
+Esto incluye páginas de discusión, páginas acerca de $wgSitename, páginas mínimas,
redirecciones, y otras que probablemente no puedan calificarse como artículos.
Excluyéndolas, hay <b>$2</b> páginas que probablemente son artículos legítimos.<p>
Ha habido un total de <b>$3</b> visitas a páginas, y <b>$4</b> ediciones de página
@@ -669,8 +669,8 @@ de los cuales <b>$2</b> son administradores (ver $3).",
"maintnancepagetext" => "Esta página incluye varias herramientas útiles para el mantenimiento diario de la enciclopedia. Algunas de estas funciones tienden a sobrecargar la base de datos, asi que, por favor, no vuelvas a cargar la página después de cada ítem que arregles ;-)",
"maintenancebacklink" => "Volver a la Página de Mantenimiento",
"disambiguations" => "Páginas de desambiguación",
-"disambiguationspage" => "Wikipedia:Enlaces a páginas de 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 (Como Wikipedia: o usuario:) <b>no</b> son listados aquí.",
+"disambiguationspage" => "$wgMetaNamespace:Enlaces a páginas de 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 (Como $wgMetaNamespace: o usuario:) <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>\nCada 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",
@@ -718,7 +718,7 @@ con un URL directo, y de esa manera todavía estar listada aquí
a pesar de estar en uso activo.",
"booksources" => "Fuentes de libros",
"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.
-Wikipedia no está relacionada con ninguno de estos negocios, y esta lista no debe ser considerada un patrocinio de los mismos.",
+$wgSitename no está relacionada con ninguno de estos negocios, y esta lista no debe ser considerada un patrocinio de los mismos.",
"alphaindexline" => "$1 a $2",
# Email this user
@@ -795,7 +795,7 @@ click el botón 'remover seleccionados' en el fin de la pantalla.",
en forma permanente,
así como toda su historia, 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 [[Wikipedia:Políticas]].",
+consecuencias, y que lo estás haciendo de acuerdo con [[$wgMetaNamespace:Políticas]].",
"confirmcheck" => "Sí, realmente quiero borrar esto.",
"actioncomplete" => "Acción completa",
"deletedtext" => "\"$1\" ha sido borrado.
@@ -835,7 +835,7 @@ Si una nueva página con el mismo nombre ha sido creada desde el borrado, las ver
"undeletebtn" => "Restaurar!",
"undeletedarticle" => "restaurado \"$1\"",
"undeletedtext" => "El artículo [[$1]] ha sido restaurado con éxito.
-Ve [[Wikipedia:Registro_de_borrados]] para una lista de borrados y restauraciones recientes.",
+Ve [[$wgMetaNamespace:Registro_de_borrados]] para una lista de borrados y restauraciones recientes.",
# Contributions
#
@@ -864,7 +864,7 @@ llevar a cabo esta función.",
"blockiptext" => "Usa el formulario siguiente para bloquear el
acceso de escritura desde una dirección IP específica.
Esto debería hacerse sólo para prevenir vandalismo, y de
-acuerdo a las [[Wikipedia:Políticas| políticas de Wikipedia]].
+acuerdo a las [[$wgMetaNamespace:Políticas| políticas de $wgSitename]].
Explica la razón específica del bloqueo (por ejemplo, citando
ls páginas en particular que han sido objeto de vandalismo desde la dirección IP a bloquear).",
"ipaddress" => "Dirección IP",
@@ -902,15 +902,15 @@ acceso de escritura a una dirección IP previamente bloqueada.",
"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 Wikipedia ha sido bloqueada.
+"lockdbsuccesstext" => "La base de datos de $wgSitename ha sido bloqueada.
<br>Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.",
-"unlockdbsuccesstext" => "La base de datos de Wikipedia ha sido desbloqueada.",
+"unlockdbsuccesstext" => "La base de datos de $wgSitename ha sido desbloqueada.",
# SQL query
#
"asksql" => "Consulta SQL",
"asksqltext" => "Usa el formulario que sigue para hacer una consulta directa
-a la base de datos de Wikipedia. Usa comillas simples ('como estas') para delimitar
+a la base de datos de $wgSitename. Usa comillas simples ('como estas') para delimitar
cadenas de caracteres literales.
Esto puede añadir una carga considerable al servidor, así que
por favor usa esta función lo menos possible.",
@@ -918,7 +918,7 @@ por favor usa esta función lo menos possible.",
"sqlquery" => "Entra la consulta",
"querybtn" => "Envía la consulta",
"selectonly" => "Consultas diferentes a \"SELECT\" están restringidas sólo
-a Wikipedia developers.",
+a $wgSitename developers.",
"querysuccessful" => "Consulta exitosa",
# Move page
diff --git a/languages/LanguageFr.php b/languages/LanguageFr.php
index 2e1a85870122..cff78087b59f 100644
--- a/languages/LanguageFr.php
+++ b/languages/LanguageFr.php
@@ -5,6 +5,8 @@
// The names of the namespaces can be set here, but the numbers
// are magical, so don't change or move them! The Namespace class
// encapsulates some of the magic-ness.
+include_once( "LanguageUtf8.php" );
+
/* private */ $wgNamespaceNamesFr = array(
-2 => "Media",
@@ -13,16 +15,16 @@
1 => "Discuter",
2 => "Utilisateur",
3 => "Discussion_Utilisateur",
- 4 => "Wikipédia",
- 5 => "Discussion_Wikipédia",
+ 4 => "$wgMetaNamespace",
+ 5 => "Discussion_$wgMetaNamespace",
6 => "Image",
7 => "Discussion_Image",
8 => "MediaWiki",
- 9 => "Discussion_MediaWiki",
+ 9 => "Discussion_MediaWiki"
);
/* private */ $wgQuickbarSettingsFr = array(
- "Aucune", "Gauche", "Droite", "Flottante à gauche"
+ "Aucune", "Gauche", "Droite", "Flottante à gauche"
);
/* private */ $wgSkinNamesFr = array(
@@ -31,7 +33,7 @@
/* private */ $wgMathNamesFr = array(
"Toujours produire une image PNG",
- "HTML si très simple, autrement PNG",
+ "HTML si très simple, autrement PNG",
"HTML si possible, autrement PNG",
"Laisser le code TeX original",
"Pour les navigateurs modernes"
@@ -39,23 +41,23 @@
/* private */ $wgUserTogglesFr = array(
"hover" => "Afficher des info-bulles sur les liens wiki",
- "underline" => "Liens soulignés",
+ "underline" => "Liens soulignés",
"highlightbroken" => "Liens vers les sujets non existants en rouge",
- "justify" => "Paragraphes justifiés",
- "hideminor" => "Cacher les <i>Modifications récentes</i> mineures",
- "usenewrc" => "Modifications récentes améliorées<br> (certains navigateurs seulement)",
- "numberheadings" => "Numérotation automatique des titres",
+ "justify" => "Paragraphes justifiés",
+ "hideminor" => "Cacher les <i>Modifications récentes</i> mineures",
+ "usenewrc" => "Modifications récentes améliorées<br> (certains navigateurs seulement)",
+ "numberheadings" => "Numérotation automatique des titres",
"showtoolbar" => "Show edit toolbar",
- "editondblclick" => "Double cliquer pour éditer une page (JavaScript)",
- "editsection" => "Éditer une section via les liens [éditer]",
- "editsectiononrightclick" => "Éditer une section en cliquant à droite<br> sur le titre de la section",
- "showtoc" => "Afficher la table des matières<br> (pour les articles ayant plus de 3 sections)",
+ "editondblclick" => "Double cliquer pour éditer une page (JavaScript)",
+ "editsection" => "Éditer une section via les liens [éditer]",
+ "editsectiononrightclick" => "Éditer une section en cliquant à droite<br> sur le titre de la section",
+ "showtoc" => "Afficher la table des matières<br> (pour les articles ayant plus de 3 sections)",
"rememberpassword" => "Se souvenir de mon mot de passe (cookie)",
- "editwidth" => "La fenêtre d'édition s'affiche en pleine largeur",
- "watchdefault" => "Suivre les articles que je crée ou modifie",
- "minordefault" => "Mes modifications sont considérées<br> comme mineures par défaut",
- "previewontop" => "La prévisualisation s'affiche au<br> dessus de la boite de rédaction",
- "nocache" => "Désactiver le cache des pages"
+ "editwidth" => "La fenêtre d'édition s'affiche en pleine largeur",
+ "watchdefault" => "Suivre les articles que je crée ou modifie",
+ "minordefault" => "Mes modifications sont considérées<br> comme mineures par défaut",
+ "previewontop" => "La prévisualisation s'affiche au<br> dessus de la boite de rédaction",
+ "nocache" => "Désactiver le cache des pages"
);
/* private */ $wgBookstoreListFr = array(
@@ -71,14 +73,14 @@
);
/* private */ $wgMonthNamesFr = array(
- "janvier", "février", "mars", "avril", "mai", "juin",
- "juillet", "août", "septembre", "octobre", "novembre",
- "décembre"
+ "janvier", "février", "mars", "avril", "mai", "juin",
+ "juillet", "août", "septembre", "octobre", "novembre",
+ "décembre"
);
/* private */ $wgMonthAbbreviationsFr = array(
- "jan", "fév", "mar", "avr", "mai", "jun", "jul", "aoû",
- "sep", "oct", "nov", "déc"
+ "jan", "fév", "mar", "avr", "mai", "jun", "jul", "aoû",
+ "sep", "oct", "nov", "déc"
);
// All special pages have to be listed here: a description of ""
@@ -88,9 +90,9 @@
/* private */ $wgValidSpecialPagesFr = array(
"Userlogin" => "",
"Userlogout" => "",
- "Preferences" => "Préférences",
+ "Preferences" => "Préférences",
"Watchlist" => "Liste de suivi",
- "Recentchanges" => "Modifications récentes",
+ "Recentchanges" => "Modifications récentes",
"Upload" => "Copier un fichier",
"Imagelist" => "Liste des images",
"Listusers" => "Liste des participants",
@@ -100,14 +102,14 @@
"Lonelypages" => "Pages orphelines",
"Unusedimages" => "Images orphelines",
"Popularpages" => "Les plus populaires",
- "Wantedpages" => "Les plus demandées",
+ "Wantedpages" => "Les plus demandées",
"Shortpages" => "Articles courts",
"Longpages" => "Articles longs",
"Newpages" => "Nouvelles pages",
"Ancientpages" => "Anciennes pages",
"Allpages" => "Toutes les pages",
- "Ipblocklist" => "Adresses IP bloquées",
+ "Ipblocklist" => "Adresses IP bloquées",
"Maintenance" => "Page de maintenance",
"Specialpages" => "", // ces pages doivent rester vides !
"Contributions" => "",
@@ -116,102 +118,102 @@
"Recentchangeslinked" => "",
"Movepage" => "",
"Booksources" => "Librairies en ligne",
-// "Categories" => "Page des catégories" // Looxix "Page categories"
+// "Categories" => "Page des catégories" // Looxix "Page categories"
"Export" => "Exporter par XML",
"Version" => "Version",
);
/* private */ $wgSysopSpecialPagesFr = array(
"Blockip" => "Bloquer une adresse IP",
- "Asksql" => "Accès SQL",
- "Undelete" => "Gérer les pages effacées"
+ "Asksql" => "Accès SQL",
+ "Undelete" => "Gérer les pages effacées"
);
/* private */ $wgDeveloperSpecialPagesFr = array(
- "Lockdb" => "Bloquer la base de données",
- "Unlockdb" => "Débloquer la base de données",
+ "Lockdb" => "Bloquer la base de données",
+ "Unlockdb" => "Débloquer la base de données",
);
/* private */ $wgAllMessagesFr = array(
# Bits of text used by many pages:
#
-"categories" => "Catégories de la page", // Looxix "Page categories",
-"category" => "catégorie", // Looxix "category",
-"category_header" => "Articles dans la catégorie \"$1\"", // Looxix "Articles in category \"$1\"",
-"subcategories" => "Sous-catégories", // Looxix "Subcategories",
+"categories" => "Catégories de la page", // Looxix "Page categories",
+"category" => "catégorie", // Looxix "category",
+"category_header" => "Articles dans la catégorie \"$1\"", // Looxix "Articles in category \"$1\"",
+"subcategories" => "Sous-catégories", // Looxix "Subcategories",
-"linktrail" => "/^([a-zàâçéèêîôû]+)(.*)\$/sD",
+"linktrail" => "/^([a-zàâçéèêîôû]+)(.*)\$/sD",
"mainpage" => "Accueil",
-"mainpagetext" => "Logiciel Wikipédia installé.",
-"about" => "À propos",
-"aboutwikipedia" => "À propos de Wikipédia",
-"aboutpage" => "Wikipédia:À propos",
+"mainpagetext" => "Logiciel $wgSitename installé.",
+"about" => "À propos",
+"aboutwikipedia" => "À propos de $wgSitename",
+"aboutpage" => "$wgMetaNamespace:À propos",
"help" => "Aide",
-"helppage" => "Wikipédia:Aide",
-"wikititlesuffix" => "Wikipédia",
+"helppage" => "$wgMetaNamespace:Aide",
+"wikititlesuffix" => "$wgSitename",
"bugreports" => "Rapport d'erreurs",
-"bugreportspage" => "Wikipédia:Rapport d'erreurs",
+"bugreportspage" => "$wgMetaNamespace:Rapport d'erreurs",
"sitesupport" => "Participer en faisant un don",
-"sitesupportpage" => "Wikipédia:Dons",
+"sitesupportpage" => "$wgMetaNamespace:Dons",
"faq" => "FAQ",
-"faqpage" => "Wikipédia:FAQ",
+"faqpage" => "$wgMetaNamespace:FAQ",
"edithelp" => "Aide",
-"edithelppage" => "Wikipédia:Comment éditer une page",
+"edithelppage" => "$wgMetaNamespace:Comment éditer une page",
"cancel" => "Annuler",
"qbfind" => "Rechercher",
-"qbbrowse" => "Défiler",
-"qbedit" => "Éditer",
+"qbbrowse" => "Défiler",
+"qbedit" => "Éditer",
"qbpageoptions" => "Page d'option",
"qbpageinfo" => "Page d'information",
"qbmyoptions" => "Mes options",
-"qbspecialpages" => "Pages spéciales",
+"qbspecialpages" => "Pages spéciales",
"moredotdotdot" => "Et plus...",
"mypage" => "Ma page",
"mytalk" => "Ma page de discussion",
-"currentevents" => "Actualités",
+"currentevents" => "Actualités",
"errorpagetitle" => "Erreur",
-"returnto" => "Revenir à la page $1.",
-"fromwikipedia" => "Un article de Wikipédia, l'encyclopédie libre.",
-"whatlinkshere" => "Références à cette page",
+"returnto" => "Revenir à la page $1.",
+"fromwikipedia" => "Un article de $wgSitename, l'encyclopéde libre.",
+"whatlinkshere" => "Références à cette page",
"help" => "Aide",
"search" => "Rechercher",
"history" => "Historique",
"printableversion" => "Version imprimable",
"editthispage" => "Modifier cette page",
"deletethispage" => "Supprimer cette page",
-"protectthispage" => "Protéger cette page",
-"unprotectthispage" => "Déprotéger cette page",
+"protectthispage" => "Protéger cette page",
+"unprotectthispage" => "Déprotéger cette page",
"newpage" => "Nouvelle page",
"talkpage" => "Page de discussion",
"postcomment" => "Ajouter un commentaire",
"articlepage" => "Voir l'article",
"subjectpage" => "Page sujet",
"userpage" => "Page utilisateur",
-"wikipediapage" => "Page méta",
+"wikipediapage" => "Page méta",
"imagepage" => "Page image",
"viewtalkpage" => "Page de discussion",
"otherlanguages" => "Autres langues",
-"redirectedfrom" => "(Redirigé depuis $1)",
-"lastmodified" => "Dernière modification de cette page : $1.",
-"viewcount" => "Cette page a été consultée $1 fois.",
+"redirectedfrom" => "(Redirigé depuis $1)",
+"lastmodified" => "Dernière modification de cette page : $1.",
+"viewcount" => "Cette page a été consultée $1 fois.",
"gnunote" => "Tous les textes sont disponibles sous les termes de la <a class=internal href='/wiki/GFDL'>Licence de documentation libre GNU</a>.",
-"printsubtitle" => "(de http://www.wikipedia.org)",
-"protectedpage" => "Page protégée",
-"administrators" => "Wikipédia:Administrateurs",
-"sysoptitle" => "Accès administrateur requis",
-"sysoptext" => "L'action que vous avez tentée ne peut être effectuée que par un utilisateur ayant le statut d'\"administrateur\".
+"printsubtitle" => "(de http://$wgServer)",
+"protectedpage" => "Page protégée",
+"administrators" => "$wgMetaNamespace:Administrateurs",
+"sysoptitle" => "Accès administrateur requis",
+"sysoptext" => "L'action que vous avez tentée ne peut être effectuée que par un utilisateur ayant le statut d'\"administrateur\".
Voir $1.",
-"developertitle" => "Accès développeur requis",
-"developertext" => "L'action que vous avez tentée ne peut être effectuée que par un utilisateur ayant le statut de \"développeur\".
+"developertitle" => "Accès développeur requis",
+"developertext" => "L'action que vous avez tentée ne peut être effectuée que par un utilisateur ayant le statut de \"développeur\".
Voir $1.",
"nbytes" => "$1 octets",
"go" => "Consulter",
"ok" => "OK",
-"sitetitle" => "Wikipédia",
-"sitesubtitle" => "L'encyclopédie libre",
-"retrievedfrom" => "Récupérée de \"$1\"",
+"sitetitle" => "$wgSitename",
+"sitesubtitle" => "L'encyclopédie libre",
+"retrievedfrom" => "Récupérée de \"$1\"",
"newmessages" => "Vous avez des $1.",
"newmessageslink" => "nouveaux messages",
"editsection" => "modifier",
@@ -219,33 +221,33 @@ Voir $1.",
"showtoc" => "montrer",
"hidetoc" => "cacher",
"thisisdeleted" => "Afficher ou restaurer $1?",
-"restorelink" => "$1 modifications effacées",
+"restorelink" => "$1 modifications effacées",
# Main script and global functions
#
"nosuchaction" => "Action inconnue",
-"nosuchactiontext" => "L'action spécifiée dans l'Url n'est pas reconnue par le logiciel Wikipédia.",
-"nosuchspecialpage" => "Page spéciale inexistante",
-"nospecialpagetext" => "Vous avez demandé une page spéciale qui n'est pas reconnue par le logiciel Wikipédia.",
+"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.",
# General errors
#
"error" => "Erreur",
-"databaseerror" => "Erreur base de données",
-"dberrortext" => "Erreur de syntaxe dans la base de données. Cette erreur peut être causée par une requête de recherche incorrecte (voir $5), ou une erreur dans le logiciel. La dernière requête traitée par la base de données était :
+"databaseerror" => "Erreur base de données",
+"dberrortext" => "Erreur de syntaxe dans la base de données. Cette erreur peut être causée par une requête de recherche incorrecte (voir $5), ou une erreur dans le logiciel. La dernière requête traitée par 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>\".",
-"noconnect" => "Désolé! Suite à des problèmes techniques, il est impossible de se connecter à la base de données pour le moment.", //"Connexion impossible à la base de données sur $1",
-"nodb" => "Sélection impossible de la base de données $1",
-"cachederror" => "Ceci est une copie de la page demandée et peut ne pas être à jour",
-"readonly" => "Mises à jour bloquées sur la base de données",
-"enterlockreason" => "Indiquez la raison du blocage, ainsi qu'une estimation de la durée de blocage ",
-"readonlytext" => "Les ajouts et mises à jour sur la base de données Wikipédia sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l'ordre. Voici la raison pour laquelle l'administrateur a bloqué la base :
+MySQL a renvoyé l'erreur \"<tt>$3: $4</tt>\".",
+"noconnect" => "Désolé! Suite à des problèmes techniques, il est impossible de se connecter à la base de données pour le moment.", //"Connexion impossible à la base de données sur $1",
+"nodb" => "Sélection impossible de la base de données $1",
+"cachederror" => "Ceci est une copie de la page demandée et peut ne pas être à jour",
+"readonly" => "Mises à jour bloquées sur la base de données",
+"enterlockreason" => "Indiquez la raison du blocage, ainsi qu'une estimation de la durée de blocage ",
+"readonlytext" => "Les ajouts et mises à jour sur la base de donnée$wgSitename sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l'ordre. Voici la raison pour laquelle l'administrateur a bloqué la base :
<p>$1",
-"missingarticle" => "La base de données n'a pas pu trouver le texte d'une page existante, dont le titre est \"$1\".
-Ce n'est pas une erreur de la base de données, mais plus probablement un bogue du logiciel Wikipédia.
-Veuillez rapporter cette erreur à un administrateur, en lui indiquant l'adresse de la page fautive.",
+"missingarticle" => "La base de données n'a pas pu trouver le texte d'une page existante, dont le titre est \"$1\".
+Ce n'est pas une erreur de la base de données, mais plus probablement un bogue du wiki.
+Veuillez rapporter cette erreur à un administrateur, en lui indiquant l'adresse de la page fautive.",
"internalerror" => "Erreur interne",
"filecopyerror" => "Impossible de copier \"$1\" vers \"$2\".",
"filerenameerror" => "Impossible de renommer \"$1\" en \"$2\".",
@@ -253,117 +255,117 @@ Veuillez rapporter cette erreur à un administrateur, en lui indiquant l'adresse
"filenotfound" => "Fichier \"$1\" introuvable.",
"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 l'image indiquée.",
+"badarticleerror" => "Cette action ne peut pas être effectuée sur cette page.",
+"cannotdelete" => "Impossible de supprimer la page ou l'image indiquée.",
"badtitle" => "Mauvais titre",
-"badtitletext" => "Le titre de la page demandée est invalide, vide ou le lien interlangue est invalide",
-"perfdisabled" => "Désolé! Cette fonctionnalité est temporairement désactivée
-car elle ralentit la base de données à un point tel que plus personne
+"badtitletext" => "Le titre de la page demandée est invalide, vide ou le lien interlangue est invalide",
+"perfdisabled" => "Désolé! Cette fonctionnalité est temporairement désactivée
+car elle ralentit la base de données à un point tel que plus personne
ne peut utiliser le wiki.",
"perfdisabledsub" => "Ceci est une copie de sauvegarde de $1:",
"viewsource" => "Voir le texte source",
-"protectedtext" => "Cette page a été bloquée pour empêcher sa modification. Consultez [[Wikipédia:Page protégée]] pour voir les différentes raisons possibles.",
+"protectedtext" => "Cette page a été bloquée pour empêcher sa modification. Consulter $wgSitename:Page protégée]] pour voir les différentes raisons possibles.",
# Login and logout pages
#
-"logouttitle" => "Déconnexion",
-"logouttext" => "Vous êtes à présent déconnecté(e).
-Vous pouvez continuer à utiliser Wikipédia de façon anonyme, ou vous reconnecter, éventuellement sous un autre nom.\n",
+"logouttitle" => "Déconnexion",
+"logouttext" => "Vous êtes à présent déconnecté(e).
+Vous pouvez continuer à utiliser $wgSitename de façon anonyme, ou vous reconnecter, éventuellement sous un autre nom.\n",
-"welcomecreation" => "<h2>Bienvenue, $1!</h2><p>Votre compte d'utilisateur a été créé.
-N'oubliez pas de personnaliser votre Wikipédia en consultant la page Préférences.",
+"welcomecreation" => "<h2>Bienvenue, $1!</h2><p>Votre compte d'utilisateur a été créé.
+N'oubliez pas de personnaliser votre $wgSitename en consultant la page Préférences.",
"loginpagetitle" => "Votre identifiant",
"yourname" => "Votre nom d'utilisateur",
"yourpassword" => "Votre mot de passe",
-"yourpasswordagain" => "Entrez à nouveau votre mot de passe",
+"yourpasswordagain" => "Entrez à nouveau votre mot de passe",
"newusersonly" => " (nouveaux utilisateurs uniquement)",
"remembermypassword" => "Se souvenir de mon mot de passe (cookie)",
-"loginproblem" => "<b>Problème d'identification.</b><br>Essayez à nouveau !",
-"alreadyloggedin" => "<font color=red><b>Utilisateur $1, vous êtes déjà identifié!</b></font><br>\n",
+"loginproblem" => "<b>Problème d'identification.</b><br>Essayez à nouveau !",
+"alreadyloggedin" => "<font color=red><b>Utilisateur $1, vous êtes déjà identifié!</b></font><br>\n",
"login" => "Identification",
"userlogin" => "Identification",
-"logout" => "Déconnexion",
-"userlogout" => "Déconnexion",
-"notloggedin" => "Non connecté",
-"createaccount" => "Créer un nouveau compte",
+"logout" => "Déconnexion",
+"userlogout" => "Déconnexion",
+"notloggedin" => "Non connecté",
+"createaccount" => "Créer un nouveau compte",
"createaccountmail" => "par courriel", // Looxix "by eMail",
"badretype" => "Les deux 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" => "Mon adresse électronique",
+"userexists" => "Le nom d'utilisateur que vous avez saisi est déjà utilisé. Veuillez en choisir un autre.",
+"youremail" => "Mon adresse électronique",
"yournick" => "Mon surnom (pour les signatures)",
-"emailforlost" => "Si vous égarez votre mot de passe, vous pouvez demander à ce qu'un nouveau vous soit envoyé à votre adresse électronique.",
-"loginerror" => "Problème d'identification",
+"emailforlost" => "Si vous égarez votre mot de passe, vous pouvez demander à ce qu'un nouveau vous soit envoyé à votre adresse électronique.",
+"loginerror" => "Problème d'identification",
"noname" => "Vous n'avez pas saisi de nom d'utilisateur.",
-"loginsuccesstitle" => "Identification réussie.",
-"loginsuccess" => "Vous êtes actuellement connecté(e) sur Wikipédia en tant que \"$1\".",
+"loginsuccesstitle" => "Identification réussie.",
+"loginsuccess" => "Vous êtes actuellement connecté sur $wgSitename 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.",
-"wrongpassword" => "Le mot de passe est incorrect. Essayez à nouveau.",
+Vérifiez que vous avez bien orthographié le nom, ou utilisez le formulaire ci-dessous pour créer un nouveau compte utilisateur.",
+"wrongpassword" => "Le mot de passe est incorrect. Essayez à nouveau.",
"mailmypassword" => "Envoyez-moi un nouveau mot de passe",
-"passwordremindertitle" => "Votre nouveau mot de passe sur Wikipédia",
-"passwordremindertext" => "Quelqu'un (probablement vous) ayant l'adresse IP $1 a demandé à ce qu'un nouveau mot de passe vous soit envoyé pour votre accès à Wikipédia.
-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.",
-"noemail" => "Aucune adresse électronique n'a été enregistrée pour l'utilisateur \"$1\".",
-"passwordsent" => "Un nouveau mot de passe a été envoyé à l'adresse électronique de l'utilisateur \"$1\".
-Veuillez vous identifier dès que vous l'aurez reçu.",
+"passwordremindertitle" => "Votre nouveau mot de passe sur $wgSitename",
+"passwordremindertext" => "Quelqu'un (probablement vous) ayant l'adresse IP $1 a demandé à ce qu'un nouveau mot de passe vous soit envoyé pour votre accès au wiki.
+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.",
+"noemail" => "Aucune adresse électronique n'a été enregistrée pour l'utilisateur \"$1\".",
+"passwordsent" => "Un nouveau mot de passe a été envoyé à l'adresse électronique de l'utilisateur \"$1\".
+Veuillez vous identifier dès que vous l'aurez reçu.",
# Edit pages
#
-"summary" => "Résumé",
+"summary" => "Résumé",
"subject" => "Sujet/titre", // Looxix "Subject/headline",
"minoredit" => "Modification mineure.",
"watchthis" => "Suivre cet article",
"savearticle" => "Sauvegarder",
-"preview" => "Prévisualiser",
-"showpreview" => "Prévisualisation",
-"blockedtitle" => "Utilisateur bloqué",
-"blockedtext" => "Votre compte utilisateur ou votre adresse IP ont été bloqués par $1 pour la raison suivante :<br>$2<p>Vous pouvez contacter $1 ou un des autres [[Wikipédia:Administrateurs|administateurs]] pour en discuter.",
-"whitelistedittitle" => "Login requis pour rédiger", // Looxix "Login required to edit",
-"whitelistedittext" => "Vous devez être [[Special:Userlogin|connecté]] pour pouvoir rédiger", // Looxix
+"preview" => "Prévisualiser",
+"showpreview" => "Prévisualisation",
+"blockedtitle" => "Utilisateur bloqué",
+"blockedtext" => "Votre compte utilisateur ou votre adresse IP ont été bloqués par $1 pour la raison suivante :<br>$2<p>Vous pouvez contacter $1 ou un des autres [[$wgMetaNamespace:Administrateurs|administateurs]] pour en discuter.",
+"whitelistedittitle" => "Login requis pour rédiger", // Looxix "Login required to edit",
+"whitelistedittext" => "Vous devez être [[Special:Userlogin|connecté]] pour pouvoir rédiger", // Looxix
"whitelistreadtitle" => "Login requis pour lire", // Looxix "Login required to read",
-"whitelistreadtext" => "Vous devez être [[Special:Userlogin|connecté]] pour pouvoir lire les articles", // Looxix
-"whitelistacctitle" => "Vous n'êtes pas autorisé à créer un compte", // Looxix
-"whitelistacctext" => "Pour pouvoir créer un compte sur ce Wiki vous devez être [[Special:Userlogin|connecté]] et avoir les permissions appropriées", // Looxix
-"accmailtitle" => "Mot de passe envoyé.", // Looxix "Password sent.",
-"accmailtext" => "Le mot de passe de '$1' a été envoyé à $2.", // Looxix
+"whitelistreadtext" => "Vous devez être [[Special:Userlogin|connecté]] pour pouvoir lire les articles", // Looxix
+"whitelistacctitle" => "Vous n'êtes pas autorisé à créer un compte", // Looxix
+"whitelistacctext" => "Pour pouvoir créer un compte sur ce Wiki vous devez être [[Special:Userlogin|connecté]] et avoir les permissions appropriées", // Looxix
+"accmailtitle" => "Mot de passe envoyé.", // Looxix "Password sent.",
+"accmailtext" => "Le mot de passe de '$1' a été envoyé à $2.", // Looxix
"newarticle" => "(Nouveau)",
"newarticletext" => "Saisissez ici le texte de votre article.",
-"anontalkpagetext" => "---- ''Ceci est la page de discussion pour un utilisateur anonyme qui n'a pas encore créé un compte ou qui ne l'utilise pas. Pour cette raison, nous devons utiliser l'[[adresse IP]] numérique pour l'identifier. Une adresse de ce type peut être partagée entre 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 future confusion à l'avenir.",
+"anontalkpagetext" => "---- ''Ceci est la page de discussion pour un utilisateur anonyme qui n'a pas encore créé un compte ou qui ne l'utilise pas. Pour cette raison, nous devons utiliser l'[[adresse IP]] numérique pour l'identifier. Une adresse de ce type peut être partagée entre 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 future confusion à l'avenir.",
"noarticletext" => "(Il n'y a pour l'instant aucun texte sur cette page)",
-"updated" => "(Mis à jour)",
+"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" => "La prévisualisation montre le texte de cette page tel qu'il apparaîtra une fois sauvegardé.",
+"previewnote" => "Attention, ce texte n'est qu'une prévisualisation et n'a pas encore été sauvegardé!",
+"previewconflict" => "La prévisualisation montre le texte de cette page tel qu'il apparaîtra une fois sauvegardé.",
"editing" => "modification de $1",
"section edit" => " (section)",
"comment edit" => " (commentaire)",
"editconflict" => "Conflit de modification : $1",
-"explainconflict" => "<b>Cette page a été sauvegardée après que vous avez commencé à la modifier.
-La zone d'édition supérieure contient le texte tel qu'il est enregistré actuellement dans la base de données. Vos modifications apparaissent dans la zone d'édition inférieure. Vous allez devoir apporter vos modifications au texte existant. Seul le texte de la zone supérieure sera sauvegardé.\n<p>",
+"explainconflict" => "<b>Cette page a été sauvegardée après que vous avez commencé à la modifier.
+La zone d'édition supérieure contient le texte tel qu'il est enregistré actuellement dans la base de données. Vos modifications apparaissent dans la zone d'édition inférieure. Vous allez devoir apporter vos modifications au texte existant. Seul le texte de la zone supérieure sera sauvegardé.\n<p>",
"yourtext" => "Votre texte",
-"storedversion" => "Version enregistrée",
-"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>\n",
-"yourdiff" => "Différences",
-"copyrightwarning" => "Toutes les contributions à Wikipédia sont considérées comme publiées sous les termes de la GNU Free Documentation Licence, une licence de documentation libre (Voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient édités et distribués à volonté, ne les envoyez pas. De même, merci de ne contribuer qu'en apportant vos propres écrits ou des écrits issus d'une source libre de droits. <b>N'UTILISEZ PAS DE TRAVAUX SOUS COPYRIGHT SANS AUTORISATION EXPRESSE!</b>",
+"storedversion" => "Version enregistrée",
+"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>\n",
+"yourdiff" => "Différences",
+"copyrightwarning" => "Toutes les contributions à $wgSitename sont considérées comme publiées sous les termes de la GNU Free Documentation Licence, une licence de documentation libre (Voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient édités et distribués à volonté, ne les envoyez pas. De même, merci de ne contribuer qu'en apportant vos propres écrits ou des écrits issus d'une source libre de droits. <b>N'UTILISEZ PAS DE TRAVAUX SOUS COPYRIGHT SANS AUTORISATION EXPRESSE!</b>",
"longpagewarning" => "AVERTISSEMENT : cette page a une longueur de $1 ko;
-quelques navigateurs gèrent mal les pages approchant ou dépassant 32 ko lors de leur rédaction.
-Peut-être serait-il mieux que vous divisiez la page en sections plus petites.", // Panoramix
-"readonlywarning" => "AVERTISSEMENT : cette page a été bloquée pour maintenance,
+quelques navigateurs gèrent mal les pages approchant ou dépassant 32 ko lors de leur rédaction.
+Peut-être serait-il mieux que vous divisiez la page en sections plus petites.", // Panoramix
+"readonlywarning" => "AVERTISSEMENT : cette page a été bloquée pour maintenance,
vous ne pourrez donc pas sauvegarder vos modifications maintenant. Vous pouvez copier le texte dans un fichier et le sauver pour plus tard.",
-"protectedpagewarning" => "AVERTISSEMENT : cette page a été bloquée.
+"protectedpagewarning" => "AVERTISSEMENT : cette page a été bloquée.
Seuls les utilisateurs ayant le statut d'administrateur peuvent la modifier. Soyez certain que
-vous suivez les <a href='/wiki/Wikipédia:Page protégée'>directives concernant les pages protégées</a>.",
+vous suivez les <a href='/wiki/$wgMetaNamespace:Page_protégée'>directives concernant les pages protégées</a>.",
# History pages
#
-"revhistory" => "Versions précédentes",
+"revhistory" => "Versions précédentes",
"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. Vérifiez l'URL que vous avez utilisée pour accéder à cette page.\n",
+"revnotfoundtext" => "La version précédente de cette page n'a pas pu être retrouvée. Vérifiez l'URL que vous avez utilisée pour accéder à cette page.\n",
"loadhist" => "Chargement de l'historique de la page",
"currentrev" => "Version actuelle",
@@ -372,12 +374,12 @@ vous suivez les <a href='/wiki/Wikipédia:Page protégée'>directives concernant le
"next" => "suiv",
"last" => "dern",
"orig" => "orig",
-"histlegend" => "Légende : (actu) = différence avec la version actuelle ,
-(dern) = différence avec la version précédente, M = modification mineure",
+"histlegend" => "Légende : (actu) = différence avec la version actuelle ,
+(dern) = différence avec la version précédente, M = modification mineure",
# Diffs
#
-"difference" => "(Différences entre les versions)",
+"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",
@@ -385,39 +387,39 @@ vous suivez les <a href='/wiki/Wikipédia:Page protégée'>directives concernant le
# Search results
#
-"searchresults" => "Résultat de la recherche",
-"searchhelppage" => "Wikipédia:Recherche",
-"searchingwikipedia" => "Chercher dans Wikipédia",
-"searchresulttext" => "Pour plus d'informations sur la recherche dans Wikipédia, voir $1.",
-"searchquery" => "Pour la requête \"$1\"",
-"badquery" => "Requête 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
+"searchresults" => "Résultat de la recherche",
+"searchhelppage" => "$wgMetaNamespace:Recherche",
+"searchingwikipedia" => "Chercher dans $wgSitename",
+"searchresulttext" => "Pour plus d'informations sur la recherche dans $wgSitename, voir $1.",
+"searchquery" => "Pour la requête \"$1\"",
+"badquery" => "Requête 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 requête.",
-"matchtotals" => "La requête \"$1\" correspond à $2 titre(s)
+et écailles\".
+Veuillez essayer une autre requête.",
+"matchtotals" => "La requête \"$1\" correspond à $2 titre(s)
d'article et au texte de $3 article(s).",
-"nogomatch" => "Aucune page avec ce titre n'existe, essai avec la recherche complète.",
+"nogomatch" => "Aucune page avec ce titre n'existe, essai avec la recherche complète.",
"titlematches" => "Correspondances dans les titres",
-"notitlematches" => "Aucun titre d'article ne contient le(s) mot(s) demandé(s)",
+"notitlematches" => "Aucun titre d'article ne contient le(s) mot(s) demandé(s)",
"textmatches" => "Correspondances dans les textes",
-"notextmatches" => "Aucun texte d'article ne contient le(s) mot(s) demandé(s)",
-"prevn" => "$1 précédents",
+"notextmatches" => "Aucun texte d'article ne contient le(s) mot(s) demandé(s)",
+"prevn" => "$1 précédents",
"nextn" => "$1 suivants",
"viewprevnext" => "Voir ($1) ($2) ($3).",
-"showingresults" => "Affichage de <b>$1</b> résultats à partir du #<b>$2</b>.",
-"showingresultsnum" => "Affichage de <b>$3</b> 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).",
+"showingresults" => "Affichage de <b>$1</b> résultats à partir du #<b>$2</b>.",
+"showingresultsnum" => "Affichage de <b>$3</b> 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" => "Recherche",
"powersearchtext" => "
Rechercher dans les espaces :<br>
$1<br>
$2 Inclure les page de redirections &nbsp; Rechercher $3 $9",
-"searchdisabled" => "<p>La fonction de recherche sur l'entièreté du texte a été temporairement désactivée à cause de la grande charge que cela impose au serveur. Nous espérons la rétablir prochainement lorsque nous disposerons d'un serveur plus puissant. En attendant, vous pouvez faire la recherche avec Google:</p>
+"searchdisabled" => "<p>La fonction de recherche sur l'entièreté du texte a été temporairement désactivée à cause de la grande charge que cela impose au serveur. Nous espérons la rétablir prochainement lorsque nous disposerons d'un serveur plus puissant. En attendant, vous pouvez faire la recherche avec Google:</p>
",
"googlesearch" => "<!-- SiteSearch Google -->
@@ -445,70 +447,70 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
# Preferences page
#
-"preferences" => "Préférences",
-"prefsnologin" => "Non connecté",
-"prefsnologintext" => "Vous devez être <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
-pour modifier vos préférences d'utilisateur.",
-"prefslogintext" => "Je suis connecté(e) en tant que $1 avec le numéro d'utilisateur $2.
-
-Voir [[Wikipédia:Aide pour les préférences]] pour les explications concernant les options.",
-"prefsreset" => "Les préférences ont été rétablies à partir de la version enregistrée.",
+"preferences" => "Préférences",
+"prefsnologin" => "Non connecté",
+"prefsnologintext" => "Vous devez être <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
+pour modifier vos préférences d'utilisateur.",
+"prefslogintext" => "Je suis connecté(e) en tant que $1 avec le numéro d'utilisateur $2.
+
+Voir [[$wgMetaNamespace:Aide pour les préférences]] pour les explications concernant les options.",
+"prefsreset" => "Les préférences ont été rétablies à partir de la version enregistrée.",
"qbsettings" => "Personnalisation de la barre outils",
"changepassword" => "Modification du mot de passe",
"skin" => "Apparence",
"math" => "Rendu des maths", // Looxix "Rendering math",
"dateformat" => "Format de date",
"math_failure" => "Erreur math", // Looxix "Failure toparse",
-"math_unknown_error" => "erreur indéterminée", // FvdP+Looxix "unknown error",
+"math_unknown_error" => "erreur indéterminée", // FvdP+Looxix "unknown error",
"math_unknown_function" => "fonction inconnue",
"math_lexing_error" => "erreur lexicale", // Looxxi "lexing error",
"math_syntax_error" => "erreur de syntaxe",
-"saveprefs" => "Enregistrer les préférences",
-"resetprefs" => "Rétablir les préférences",
+"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" => "Taille de la fenêtre d'édition",
-"rows" => "Rangées",
+"textboxsize" => "Taille de la fenêtre d'édition",
+"rows" => "Rangées",
"columns" => "Colonnes",
-"searchresultshead" => "Affichage des résultats de recherche",
-"resultsperpage" => "Nombre de réponses par page",
-"contextlines" => "Nombre de lignes par réponse",
-"contextchars" => "Nombre de caractères de contexte par ligne",
+"searchresultshead" => "Affichage des résultats de 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",
-"recentchangescount" => "Nombre de titres dans les modifications récentes",
-"savedprefs" => "Les préférences ont été sauvegardées.",
-"timezonetext" => "Si vous ne précisez pas de décalage horaire, c'est l'heure de l'Europe de l'ouest qui sera utilisée.",
+"recentchangescount" => "Nombre de titres dans les modifications récentes",
+"savedprefs" => "Les préférences ont été sauvegardées.",
+"timezonetext" => "Si vous ne précisez pas de décalage horaire, c'est l'heure de l'Europe de l'ouest qui sera utilisée.",
"localtime" => "Heure locale",
-"timezoneoffset" => "Décalage horaire",
+"timezoneoffset" => "Décalage horaire",
"servertime" => "Heure du serveur", //Looxix (Server time is now)
"guesstimezone" => "Utiliser la valeur du navigateur", //Looxix (Fill in from browser)
-"emailflag" => "Ne pas recevoir de courrier électronique<br> des autres utilisateurs",
-"defaultns" => "Par défaut, rechercher dans ces espaces :", //Looxix (Search in these namespaces by default)
+"emailflag" => "Ne pas recevoir de courrier électronique<br> des autres utilisateurs",
+"defaultns" => "Par défaut, rechercher dans ces espaces :", //Looxix (Search in these namespaces by default)
# Recent changes
#
"changes" => "modifications",
-"recentchanges" => "Modifications récentes",
-"recentchangestext" => "Suivez sur cette page les dernières modifications de Wikipédia.
-[[Wikipédia:Bienvenue|Bienvenue]] aux nouveaux participants!
-Jetez un coup d'&oelig;il sur ces pages&nbsp;: [[Wikipédia:FAQ|foire aux questions]],
-[[Wikipédia:Recommandations et règles à suivre|recommandations et règles à suivre]]
-(notamment [[Wikipédia:Règles de nommage|conventions de nommage]],
-[[Wikipédia:La neutralité de point de vue|la neutralité de point de vue]]),
-et [[Wikipédia:Les faux-pas les plus courants|les faux-pas les plus courants]].
-
-Si vous voulez que Wikipédia connaisse le succès, merci de ne pas y inclure pas de matériaux protégés par des [[Wikipédia:Copyright|copyrights]]. La responsabilité juridique pourrait en effet compromettre le projet. ",
-"rcloaderr" => "Chargement des dernières modifications",
-"rcnote" => "Voici les <strong>$1</strong> dernières modifications effectuées au cours des <strong>$2</strong> derniers jours.",
-"rcnotefrom" => "Voici les modifications effectuées depuis le <strong>$2</strong> (<b>$1</b> au maximum).",
+"recentchanges" => "Modifications récentes",
+"recentchangestext" => "Suivez sur cette page les dernières modifications de $wgSitename.
+[[$wgMetaNamespace:Bienvenue|Bienvenue]] aux nouveaux participants!
+Jetez un coup d'&oelig;il sur ces pages&nbsp;: [[$wgMetaNamespace:FAQ|foire aux questions]],
+[[$wgMetaNamespace:Recommandations et règles à suivre|recommandations et règles à suivre]]
+(notamment [[$wgMetaNamespace:Règles de nommage|conventions de nommage]],
+[[$wgMetaNamespace:La neutralité de point de vue|la neutralité de point de vue]]),
+et [[$wgMetaNamespace:Les faux-pas les plus courants|les faux-pas les plus courants]].
+
+Si vous voulez que $wgSitename connaisse le succès, merci de ne pas y inclure pas de matériaux protégés par des [[$wgMetaNamespace:Copyright|copyrights]]. La responsabilité juridique pourrait en effet compromettre le projet. ",
+"rcloaderr" => "Chargement des dernières modifications",
+"rcnote" => "Voici les <strong>$1</strong> dernières modifications effectuées au cours des <strong>$2</strong> derniers jours.",
+"rcnotefrom" => "Voici les modifications effectuées depuis le <strong>$2</strong> (<b>$1</b> au maximum).",
"rclistfrom" => "Afficher les nouvelles modifications depuis le $1.",
-# "rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 dernières heures / $3 derniers jours",
-# "rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours.",
-"rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours; $3 modifications mineures.", // Looxix
+# "rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 dernières heures / $3 derniers jours",
+# "rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours.",
+"rclinks" => "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours; $3 modifications mineures.", // Looxix
"rchide" => "in $4 form; $1 modifications mineures; $2 espaces secondaires; $3 modifications multiples.", // FIXME
-"rcliu" => "; $1 modifications par des contributeurs connectés",
+"rcliu" => "; $1 modifications par des contributeurs connectés",
"diff" => "diff",
"hist" => "hist",
"hide" => "cacher",
@@ -524,37 +526,37 @@ Si vous voulez que Wikipédia connaisse le succès, merci de ne pas y inclure pas
"upload" => "Copier sur le serveur",
"uploadbtn" => "Copier un fichier",
"uploadlink" => "Copier des images",
-"reupload" => "Copier à nouveau",
+"reupload" => "Copier à nouveau",
"reuploaddesc" => "Retour au formulaire.",
-"uploadnologin" => "Non connecté(e)",
-"uploadnologintext" => "Vous devez être <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
+"uploadnologin" => "Non connecté(e)",
+"uploadnologintext" => "Vous devez être <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
pour copier des fichiers sur le serveur.",
"uploadfile" => "Copier un fichier",
"uploaderror" => "Erreur",
"uploadtext" => "<strong>STOP !</strong> Avant de copier votre fichier sur le serveur,
-prenez connaissance des <a href=\"" .wfLocalUrlE( "Wikipédia:règles d'utilisation des images" ) . "\">règles d'utilisation des images</a> de Wikipédia et assurez-vous que vous les respectez.<br>N'oubliez pas de remplir la <a href=\"" .wfLocalUrlE( "Wikipédia:Page de description d'une image" ). "\">page de description de l'image</a> quand celle-ci sera sur le serveur.
-<p>Pour voir les images déjà placées sur le serveur ou pour effectuer une recherche parmi celles-ci,
-allez à la <a href=\"" . wfLocalUrlE( "Special:Imagelist" ) ."\">liste des images</a>.
-Les uploads et les suppressions sont listés dans le <a href=\"" .wfLocalUrlE( "Wikipédia:Journal_des_uploads" ) . "\">journal des uploads</a>.
-<p>Utilisez le formulaire ci-dessous pour copier sur le serveur de nouvelles images destinées à illustrer vos articles.
-Sur la plupart des navigateurs, vous verrez un bouton \"Browse...\" qui ouvre la fenêtre de dialogue standard de votre système d'exploitation pour l'ouverture des fichiers.
-Sélectionnez un fichier, son nom apparaîtra dans le champ situé à côté du bouton.
-Vous devez également confirmer, en cochant la case prévue à cet effet, que la copie de ce fichier ne viole aucun copyright.
+prenez connaissance des <a href=\"" .wfLocalUrlE( "$wgMetaNamespace:règles d'utilisation des images" ) . "\">règles d'utilisation des images</a> de $wgSitename et assurez-vous que vous les respectez.<br>N'oubliez pas de remplir la <a href=\"" .wfLocalUrlE( "$wgMetaNamespace:Page de description d'une image" ). "\">page de description de l'image</a> quand celle-ci sera sur le serveur.
+<p>Pour voir les images déjà placées sur le serveur ou pour effectuer une recherche parmi celles-ci,
+allez à la <a href=\"" . wfLocalUrlE( "Special:Imagelist" ) ."\">liste des images</a>.
+Les uploads et les suppressions sont listés dans le <a href=\"" .wfLocalUrlE( "$wgMetaNamespace:Journal_des_uploads" ) . "\">journal des uploads</a>.
+<p>Utilisez le formulaire ci-dessous pour copier sur le serveur de nouvelles images destinées à illustrer vos articles.
+Sur la plupart des navigateurs, vous verrez un bouton \"Browse...\" qui ouvre la fenêtre de dialogue standard de votre système d'exploitation pour l'ouverture des fichiers.
+Sélectionnez un fichier, son nom apparaîtra dans le champ situé à côté du bouton.
+Vous devez également confirmer, en cochant la case prévue à cet effet, que la copie de ce fichier ne viole aucun copyright.
Cliquez sur le bouton \"Envoyer\" pour terminer.
-Si votre connexion est lente, l'opération peut prendre un certain temps.
-<p>Les formats recommandés sont JPEG pour les photos, PNG
+Si votre connexion est lente, l'opération peut prendre un certain temps.
+<p>Les formats recommandés sont JPEG pour les photos, PNG
pour les dessins et les autres images, et OGG pour les fichiers sonores.
-Donnez à vos fichiers des noms descriptifs clairs, afin d'éviter toute confusion.
-Pour incorporer l'image dans un article, placez dans celui-ci un lien rédigé comme suit:
+Donnez à vos fichiers des noms descriptifs clairs, afin d'éviter toute confusion.
+Pour incorporer l'image dans un article, placez dans celui-ci un lien rédigé comme suit:
<b>[[image:nom_du_fichier.jpg]]</b> ou <b>[[image:nom_du_fichier.png|autre texte]]</b>
ou <b>[[media:nom_du_fichier.ogg]]</b> pour les sons.
-<p>N'oubliez pas que, comme toutes les pages de Wikipédia, les fichiers que vous copiez peuvent être modifiés ou supprimés par les autres utilisateurs s'ils estiment que cela est dans l'intérêt de l'encyclopédie. Sachez aussi que votre accès au serveur peut être bloqué si vous faites un mauvais usage du système.",
+<p>N'oubliez pas que, comme toutes les pages de $wgSitename, les fichiers que vous copiez peuvent être modifiés ou supprimés par les autres utilisateurs s'ils estiment que cela est dans l'intérêt de l'encyclopédie. Sachez aussi que votre accès au serveur peut être bloqué si vous faites un mauvais usage du système.",
"uploadlog" => "log d'upload", // FIXME
"uploadlogpage" => "Log_d'upload", // FIXME
-"uploadlogpagetext" => "Voici la liste des derniers fichiers copiés sur le serveur.
-L'heure indiquée est celle du serveur (UTC).
+"uploadlogpagetext" => "Voici la liste des derniers fichiers copiés sur le serveur.
+L'heure indiquée est celle du serveur (UTC).
<ul>
</ul>
",
@@ -562,44 +564,44 @@ L'heure indiquée est celle du serveur (UTC).
"filedesc" => "Description",
"filestatus" => "Statut du copyright",
"filesource" => "Source",
-"affirmation" => "Je déclare que le détenteur du copyright de ce fichier accepte de le diffuser selon les termes de la $1.",
-"copyrightpage" => "Wikipédia:Copyright",
-"copyrightpagename" => "licence Wikipédia",
-"uploadedfiles" => "Fichiers copiés",
+"affirmation" => "Je déclare que le détenteur du copyright de ce fichier accepte de le diffuser selon les termes de la $1.",
+"copyrightpage" => "$wgNamespace:Copyright",
+"copyrightpagename" => "licence $wgSitename",
+"uploadedfiles" => "Fichiers copiés",
"noaffirmation" => "Vous devez confirmer que la copie de ce fichier ne viole aucun copyright.",
-"ignorewarning" => "Ignorer l'avertissement et copier le fichier quand même.",
+"ignorewarning" => "Ignorer l'avertissement et copier le fichier quand même.",
"minlength" => "Les noms des images doivent comporter au moins trois lettres.",
-"badfilename" => "L'image a été renommée \"$1\".",
-"badfiletype" => "\".$1\" n'est pas un format recommandé pour les fichiers images.",
-"largefile" => "La taille maximale conseillée pour les images est de 100Ko.",
-"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.",
+"badfilename" => "L'image a été renommée \"$1\".",
+"badfiletype" => "\".$1\" n'est pas un format recommandé pour les fichiers images.",
+"largefile" => "La taille maximale conseillée pour les images est de 100Ko.",
+"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" => " \"$1\" copié sur le serveur",
+"uploadedimage" => " \"$1\" copié sur le serveur",
# Image list
#
"imagelist" => "Liste des images",
-"imagelisttext" => "Voici une liste de $1 images classées $2.",
-"getimagelist" => "Récupération de la liste des images",
+"imagelisttext" => "Voici une liste de $1 images classées $2.",
+"getimagelist" => "Récupération de la liste des images",
"ilshowmatch" => "Afficher toutes les images dont le nom contient ",
"ilsubmit" => "Chercher",
-"showlast" => "Afficher les $1 dernières images classées $2.",
+"showlast" => "Afficher les $1 dernières images classées $2.",
"all" => "toutes",
"byname" => "par nom",
"bydate" => "par date",
"bysize" => "par taille",
"imgdelete" => "suppr",
"imgdesc" => "descr",
-"imglegend" => "Légende: (descr) = afficher/modifier la description de l'image.",
+"imglegend" => "Légende: (descr) = afficher/modifier la description de l'image.",
"imghistory" => "Historique de l'image",
-"revertimg" => "rétab",
+"revertimg" => "rétab",
"deleteimg" => "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>.",
+"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" => "Liens vers l'image",
"linkstoimage" => "Les pages ci-dessous comportent un lien vers cette image:",
"nolinkstoimage" => "Aucune page ne comporte de lien vers cette image.",
@@ -609,40 +611,40 @@ cette ancienne version, (rétab) = rétablir cette ancienne version.
"statistics" => "Statistiques",
"sitestats" => "Statistiques du site",
"userstats" => "Statistiques utilisateur",
-"sitestatstext" => "La base de données contient actuellement <b>$1</b> pages.
+"sitestatstext" => "La base de données contient actuellement <b>$1</b> pages.
-Ce chiffre inclut les pages \"discussion\", les pages relatives à Wikipédia, les pages minimales (\"bouchons\"), 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>
-<b>$3</b> pages ont été consultées et <b>$4</b> pages modifiées
+Ce chiffre inclut les pages \"discussion\", les pages relatives à $wgSitename, les pages minimales (\"bouchons\"), 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>
+<b>$3</b> pages ont été consultées et <b>$4</b> pages modifiées
-depuis la mise à jour du logiciel (31 octobre 2002).
-Cela représente une moyenne de <b>$5</b> modifications par page et de <b>$6</b> consultations pour une modification.",
-"userstatstext" => "Il y a <b>$1</b> utilisateurs enregistrés.
+depuis la mise à jour du logiciel (31 octobre 2002).
+Cela représente une moyenne de <b>$5</b> modifications par page et de <b>$6</b> consultations pour une modification.",
+"userstatstext" => "Il y a <b>$1</b> utilisateurs enregistrés.
Parmi ceux-ci, <b>$2</b> ont le statut d'administrateur (voir $3).",
# Maintenance Page
#
"maintenance" => "Page de maintenance",
-"maintnancepagetext" => "Cette page inclut plusieurs utilitaires pour la maintenance quotidienne. Certains de ces outils ont tendance à charger la base de données; ne rechargez pas la page a chaque modification.",
-"maintenancebacklink" => "Retour à la page de maintenance",
+"maintnancepagetext" => "Cette page inclut plusieurs utilitaires pour la maintenance quotidienne. Certains de ces outils ont tendance à charger la base de données; ne rechargez pas la page a chaque modification.",
+"maintenancebacklink" => "Retour à la page de maintenance",
"disambiguations" => "Pages d'homonymie",
-"disambiguationspage" => "Wikipédia:Liens_aux_pages_d'homonymie",
-"disambiguationstext" => "Les articles suivants sont liés à une <i>page d'homonymie</i>. Or, ils devraient être liés au sujet.<br>Une page est considérée comme page d'homonymie si elle est liée à partir de $1.<br>Les liens à partir d'autres <i>espaces</i> ne sont pas pris en compte.",
+"disambiguationspage" => "$wgMetaNamespace:Liens_aux_pages_d'homonymie",
+"disambiguationstext" => "Les articles suivants sont liés à une <i>page d'homonymie</i>. Or, ils devraient être liés au sujet.<br>Une page est considérée comme page d'homonymie si elle est liée à partir de $1.<br>Les liens à partir d'autres <i>espaces</i> ne sont pas pris en compte.",
"doubleredirects" => "Double redirection",
-"doubleredirectstext" => "<b>Attention:</b> cette liste peut contenir des \"faux positifs\". Dans ce cas, c'est probablement la page du premier #REDIRECT contient aussi du texte.<br>Chaque ligne contient les liens à la 1re et 2e page de redirection, ainsi que la première ligne de cette dernière, qui donne normalement la \"vraie\" destination. Le premier #REDIRECT devrait lier vers cette destination.",
-"brokenredirects" => "Redirections cassées",
-"brokenredirectstext" => "Ces redirections mènent a une page qui n'existe pas.",
+"doubleredirectstext" => "<b>Attention:</b> cette liste peut contenir des \"faux positifs\". Dans ce cas, c'est probablement la page du premier #REDIRECT contient aussi du texte.<br>Chaque ligne contient les liens à la 1re et 2e page de redirection, ainsi que la première ligne de cette dernière, qui donne normalement la \"vraie\" destination. Le premier #REDIRECT devrait lier vers cette destination.",
+"brokenredirects" => "Redirections cassées",
+"brokenredirectstext" => "Ces redirections mènent a une page qui n'existe pas.",
"selflinks" => "Page avec un lien circulaire",
-"selflinkstext" => "Les pages suivantes contiennent un lien vers elles-mêmes, ce qui n'est pas permis.",
+"selflinkstext" => "Les pages suivantes contiennent un lien vers elles-mêmes, ce qui n'est pas permis.",
"mispeelings" => "Pages avec fautes d'orthographe",
-"mispeelingstext" => "Les pages suivantes contiennent une faute d'orthographe courante (la liste de celles-ci est sur $1). L'orthographe correcte est peut-être (ceci).",
+"mispeelingstext" => "Les pages suivantes contiennent une faute d'orthographe courante (la liste de celles-ci est sur $1). L'orthographe correcte est peut-être (ceci).",
"mispeelingspage" => "Liste de fautes d'orthographe courantes",
-# les 3 messages suivants ne sont plus utilisés (plus de page Special:Intl)
+# les 3 messages suivants ne sont plus utilisés (plus de page Special:Intl)
"missinglanguagelinks" => "Liens inter-langues manquants",
-"missinglanguagelinksbutton" => "Je n'ai pas trouvé de lien/langue pour cette page",
-"missinglanguagelinkstext" => "Ces articles ne lient pas à leur 'contrepartie' in $1. Les redirections et les liens ne sont pas affichés.",
+"missinglanguagelinksbutton" => "Je n'ai pas trouvé de lien/langue pour cette page",
+"missinglanguagelinkstext" => "Ces articles ne lient pas à leur 'contrepartie' in $1. Les redirections et les liens ne sont pas affichés.",
# Miscellaneous special pages
@@ -650,87 +652,87 @@ Parmi ceux-ci, <b>$2</b> ont le statut d'administrateur (voir $3).",
"orphans" => "Pages orphelines",
"lonelypages" => "Pages orphelines",
"unusedimages" => "Images orphelines",
-"popularpages" => "Pages les plus consultées",
+"popularpages" => "Pages les plus consultées",
"nviews" => "$1 consultations",
-"wantedpages" => "Pages les plus demandées",
-"nlinks" => "$1 références",
+"wantedpages" => "Pages les plus demandées",
+"nlinks" => "$1 références",
"allpages" => "Toutes les pages",
"randompage" => "Une page au hasard",
"shortpages" => "Articles courts",
"longpages" => "Articles longs",
"listusers" => "Liste des participants",
-"specialpages" => "Pages spéciales",
-"spheading" => "Pages spéciales",
-"sysopspheading" => "Pages spéciales à l'usage des administrateurs",
-"developerspheading" => "Pages spéciales à l'usage des développeurs",
-"protectpage" => "Protéger la page",
+"specialpages" => "Pages spéciales",
+"spheading" => "Pages spéciales",
+"sysopspheading" => "Pages spéciales à l'usage des administrateurs",
+"developerspheading" => "Pages spéciales à l'usage des développeurs",
+"protectpage" => "Protéger la page",
"recentchangeslinked" => "Suivi des liens",
-"rclsub" => "(des pages liées à \"$1\")",
-"debug" => "Déboguer",
+"rclsub" => "(des pages liées à \"$1\")",
+"debug" => "Déboguer",
"newpages" => "Nouvelles pages",
"ancientpages" => "Articles les plus anciens",
-"movethispage" => "Déplacer la page",
-"unusedimagestext" => "<p>N'oubliez pas que d'autres sites, comme certains Wikipédias non francophones, 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.",
-"booksources" => "Ouvrages de référence",
-"booksourcetext" => "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. Wikipédia n'étant liée à aucune de ces sociétés, elle n'a aucunement l'intention d'en faire la promotion.",
-"alphaindexline" => "$1 à $2",
+"movethispage" => "Déplacer la page",
+"unusedimagestext" => "<p>N'oubliez pas que d'autres sites, comme certains Wikipédias non francophones, 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.",
+"booksources" => "Ouvrages de référence",
+"booksourcetext" => "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. $wgSitename n'étant liée à aucune de ces sociétés, elle n'a aucunement l'intention d'en faire la promotion.",
+"alphaindexline" => "$1 à $2",
# Email this user
#
"mailnologin" => "Pas d'adresse",
-"mailnologintext" => "Vous devez être <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
-et avoir indiqué une adresse électronique valide dans vos <a href=\"" .
- wfLocalUrl( "Special:Preferences" ) . "\">préférences</a>
-pour pouvoir envoyer un message à un autre utilisateur.",
-"emailuser" => "Envoyer un message à cet utilisateur",
+"mailnologintext" => "Vous devez être <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
+et avoir indiqué une adresse électronique valide dans vos <a href=\"" .
+ wfLocalUrl( "Special:Preferences" ) . "\">préférences</a>
+pour pouvoir envoyer un message à un autre utilisateur.",
+"emailuser" => "Envoyer un message à cet utilisateur",
"emailpage" => "Email user",
-"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.",
-"noemailtitle" => "Pas d'adresse électronique",
-"noemailtext" => "Cet utilisateur n'a pas spécifié d'adresse électronique valide ou a choisi de ne pas recevoir de courrier électronique des autres utilisateurs.",
+"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.",
+"noemailtitle" => "Pas d'adresse électronique",
+"noemailtext" => "Cet utilisateur n'a pas spécifié d'adresse électronique valide ou a choisi de ne pas recevoir de courrier électronique des autres utilisateurs.",
-"emailfrom" => "Expéditeur",
+"emailfrom" => "Expéditeur",
"emailto" => "Destinataire",
"emailsubject" => "Objet",
"emailmessage" => "Message",
"emailsend" => "Envoyer",
-"emailsent" => "Message envoyé",
-"emailsenttext" => "Votre message a été envoyé.",
+"emailsent" => "Message envoyé",
+"emailsenttext" => "Votre message a été envoyé.",
# Watchlist
#
"watchlist" => "Liste de suivi",
"watchlistsub" => "(pour l'utilisateur \"$1\")",
"nowatchlist" => "Votre liste de suivi ne contient aucun article.",
-"watchnologin" => "Non connecté",
-"watchnologintext" => "Vous devez être <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
+"watchnologin" => "Non connecté",
+"watchnologintext" => "Vous devez être <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
pour modifier votre liste.",
-"addedwatch" => "Ajouté à la liste",
-"addedwatchtext" => "La page \"$1\" a été ajoutée à votre <a href=\"" .
+"addedwatch" => "Ajouté à la liste",
+"addedwatchtext" => "La page \"$1\" a été ajoutée à votre <a href=\"" .
wfLocalUrl( "Special:Watchlist" ) . "\">liste de suivi</a>.
-Les prochaines modifications de cette page et de la page discussion associée seront répertoriées ici, et la page apparaîtra <b>en gras</b> dans la <a href=\"" .
- wfLocalUrl( "Special:Recentchanges" ) . "\">liste des modifications récentes</a> pour être repérée plus facilement.</p>
+Les prochaines modifications de cette page et de la page discussion associée seront répertoriées ici, et la page apparaîtra <b>en gras</b> dans la <a href=\"" .
+ wfLocalUrl( "Special:Recentchanges" ) . "\">liste des modifications récentes</a> pour être repérée plus facilement.</p>
<p>Pour supprimer cette page de votre liste de suivi, cliquez sur \"Ne plus suivre\" dans le cadre de navigation.",
-"removedwatch" => "Supprimée de la liste de suivi",
-"removedwatchtext" => "La page \"$1\" a été supprimée de votre liste de suivi.",
+"removedwatch" => "Supprimée de la liste de suivi",
+"removedwatchtext" => "La page \"$1\" a été supprimée de votre liste de suivi.",
"watchthispage" => "Suivre cette page",
"unwatchthispage" => "Ne plus suivre",
"notanarticle" => "Aucun article",
-"watchnochange" => "Aucune des pages que vous suivez n'a été modifiée pendant la période affichée",
-// "watchdetails" => "($1 pages suivies, sans compter les pages de discussion; $2 pages en total modifiées depuis la limite; $3... <a href='$4'>afficher et modifier la liste complète</a>.)", // Looxix
-"watchdetails" => "Vous suivez $1 pages, sans compter les pages de discussion. <a href='$4'>Afficher et modifier la liste complète</a>.", // Looxix
-"watchmethod-recent" => "vérification des modifications récentes des pages suivies", // Looxix
-"watchmethod-list" => "vérification des pages suivies pour des modifications récentes", // Looxix
-"removechecked" => "Retirer de la liste de suivi les articles sélectionnés",
+"watchnochange" => "Aucune des pages que vous suivez n'a été modifiée pendant la période affichée",
+// "watchdetails" => "($1 pages suivies, sans compter les pages de discussion; $2 pages en total modifiées depuis la limite; $3... <a href='$4'>afficher et modifier la liste complète</a>.)", // Looxix
+"watchdetails" => "Vous suivez $1 pages, sans compter les pages de discussion. <a href='$4'>Afficher et modifier la liste complète</a>.", // Looxix
+"watchmethod-recent" => "vérification des modifications récentes des pages suivies", // Looxix
+"watchmethod-list" => "vérification des pages suivies pour des modifications récentes", // Looxix
+"removechecked" => "Retirer de la liste de suivi les articles sélectionnés",
"watchlistcontains" => "Votre liste de suivi contient $1 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.",
-"removingchecked" => "Les articles sélectionnés sont retirés de votre liste de suivi...",
+"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.",
+"removingchecked" => "Les articles sélectionnés sont retirés de votre liste de suivi...",
"couldntremove" => "Impossible de retirer l'article '$1'...",
-"iteminvalidname" => "Problème avec l'article '$1': le nom est invalide...",
-"wlnote" => "Ci-dessous se trouve les $1 dernières modifications depuis les <b>$2</b> dernières heures.", // Looxix
+"iteminvalidname" => "Problème avec l'article '$1': le nom est invalide...",
+"wlnote" => "Ci-dessous se trouve les $1 dernières modifications depuis les <b>$2</b> dernières heures.", // Looxix
# Delete/protect/revert
@@ -738,75 +740,75 @@ Les prochaines modifications de cette page et de la page discussion associée ser
"deletepage" => "Supprimer une page",
"confirm" => "Confirmer",
"excontent" => "contenant",
-"exbeforeblank" => "le contenu avant effacement était :",
+"exbeforeblank" => "le contenu avant effacement était :",
"exblank" => "page vide",
"confirmdelete" => "Confirmer la suppression",
"deletesub" => "(Suppression de \"$1\")",
-"historywarning" => "Attention: La page que vous êtes sur le point de supprimer à 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 [[Wikipédia:Recommandations Et Règles à Suivre|recommandations et règles à suivre]].",
+"historywarning" => "Attention: La page que vous êtes sur le point de supprimer à 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 [[$wgMetaNamespace:Recommandations Et Règles à Suivre|recommandations et règles à suivre]].",
"confirmcheck" => "Oui, je confirme la suppression.",
-"actioncomplete" => "Suppression effectuée",
-"deletedtext" => "\"$1\" a été supprimé.
-Voir $2 pour une liste des suppressions récentes.",
+"actioncomplete" => "Suppression effectuée",
+"deletedtext" => "\"$1\" a été supprimé.
+Voir $2 pour une liste des suppressions récentes.",
"deletedarticle" => "effacement de \"$1\"",
"dellogpage" => "Historique des effacements",
-"dellogpagetext" => "Voici la liste des suppressions récentes.
-L'heure indiquée est celle du serveur (UTC).
+"dellogpagetext" => "Voici la liste des suppressions récentes.
+L'heure indiquée est celle du serveur (UTC).
<ul>
</ul>
",
"deletionlog" => "historique des effacements",
-"reverted" => "Rétablissement de la version précédente",
+"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",
-"rollbacklink" => "révoquer",
-"rollbackfailed" => "La révocation a échoué",
-"cantrollback" => "Impossible de révoquer: dernier auteur est le seul à avoir modifié cet article",
-"alreadyrolled" => "Impossible de révoquer la dernière modification de [[$1]]
-par [[User:$2|$2]] ([[User talk:$2|Talk]]); quelqu'un d'autre à déjà modifer ou révoquer l'article.
-
-La dernière modificaion était de [[User:$3|$3]] ([[User talk:$3|Talk]]). ", //Looxix
+"imagereverted" => "La version précédente a été rétablie.",
+"rollback" => "révoquer modifications",
+"rollbacklink" => "révoquer",
+"rollbackfailed" => "La révocation a échoué",
+"cantrollback" => "Impossible de révoquer: dernier auteur est le seul à avoir modifié cet article",
+"alreadyrolled" => "Impossible de révoquer la dernière modification de [[$1]]
+par [[User:$2|$2]] ([[User talk:$2|Talk]]); quelqu'un d'autre à déjà modifer ou révoquer l'article.
+
+La dernière modificaion était de [[User:$3|$3]] ([[User talk:$3|Talk]]). ", //Looxix
# only shown if there is an edit comment
-"editcomment" => "Le résumé de la modification était: \"<i>$1</i>\".", //Looxix
-"revertpage" => "restitution de la dernière modification de $1",
+"editcomment" => "Le résumé de la modification était: \"<i>$1</i>\".", //Looxix
+"revertpage" => "restitution de la dernière modification de $1",
"protectlogpage" => "Log_de_protection",
-"protectlogtext" => "Voir les [[Wikipédia:Page protégée|directives concernant les pages protégées]].",
-"protectedarticle" => "a protégée [[$1]]",
-"unprotectedarticle" => "a déprotégé [[$1]]",
+"protectlogtext" => "Voir les [[$wgMetaNamespace:Page protégée|directives concernant les pages protégées]].",
+"protectedarticle" => "a protégée [[$1]]",
+"unprotectedarticle" => "a déprotégé [[$1]]",
# Undelete
#
-"undelete" => "Restaurer la page effacée",
-"undeletepage" => "Voir et restaurer la page effacée",
-"undeletepagetext" => "Ces pages ont été effacées et se trouvent dans la corbeille, elles sont toujours dans la base de donnée et peuvent être restaurées.
-La corbeille peut être effacée périodiquement.",
-
-"undeletearticle" => "Restaurer les articles effacés",
-"undeleterevisions" => "$1 révisions archivées", // Looxix "$1 revisions archived",
-"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.",
-"undeleterevision" => "Version effacée ($1)", // Looxix "Deleted revision as of $1",
+"undelete" => "Restaurer la page effacée",
+"undeletepage" => "Voir et restaurer la page effacée",
+"undeletepagetext" => "Ces pages ont été effacées et se trouvent dans la corbeille, elles sont toujours dans la base de donnée et peuvent être restaurées.
+La corbeille peut être effacée périodiquement.",
+
+"undeletearticle" => "Restaurer les articles effacés",
+"undeleterevisions" => "$1 révisions archivées", // Looxix "$1 revisions archived",
+"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.",
+"undeleterevision" => "Version effacée ($1)", // Looxix "Deleted revision as of $1",
"undeletebtn" => "Restaurer!",
-"undeletedarticle" => "restauré \"$1\"", // FvdP "restored \"$1\""
-"undeletedtext" => "L'article [[$1]] a été restauré avec succès.
-Voir [[Wikipedia:Trace des effacements]] pour la liste des suppressions et des restaurations récentes.",
+"undeletedarticle" => "restauré \"$1\"", // FvdP "restored \"$1\""
+"undeletedtext" => "L'article [[$1]] a été restauré avec succès.
+Voir [[$wgMetaNamespace:Trace des effacements]] pour la liste des suppressions et des restaurations récentes.",
# Contributions
#
"contributions" => "Contributions",
"mycontris" => "Mes contributions",
"contribsub" => "Pour $1",
-"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)", // FvdP " (top)"
+"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)", // FvdP " (top)"
# What links here
#
-"whatlinkshere" => "Pages liées",
+"whatlinkshere" => "Pages liées",
"notargettitle" => "Pas de cible",
"notargettext" => "Indiquez une page cible ou un utilisateur cible.",
"linklistsub" => "(Liste de liens)",
@@ -817,108 +819,107 @@ Voir [[Wikipedia:Trace des effacements]] pour la liste des suppressions et des r
# Block/unblock IP
#
"blockip" => "Bloquer une adresse IP",
-"blockiptext" => "Utilisez le formulaire ci-dessous pour bloquer l'accès en écriture à partir d'une adresse IP donnée.
-Une telle mesure ne doit être prise que pour empêcher le vandalisme et en accord avec [[Wikipédia:Recommandations et règles à suivre|recommandations et règles à suivre]].
-Donnez ci-dessous une raison précise (par exemple en indiquant les pages qui ont été vandalisées).",
+"blockiptext" => "Utilisez le formulaire ci-dessous pour bloquer l'accès en écriture à partir d'une adresse IP donnée.
+Une telle mesure ne doit être prise que pour empêcher le vandalisme et en accord avec [[$wgMetaNamespace:Recommandations et règles à suivre|recommandations et règles à suivre]].
+Donnez ci-dessous une raison précise (par exemple en indiquant les pages qui ont été vandalisées).",
"ipaddress" => "Adresse IP",
"ipbreason" => "Motif",
"ipbsubmit" => "Bloquer cette adresse",
"badipaddress" => "L'adresse IP n'est pas correcte.",
"noblockreason" => "Vous devez indiquer le motif du blocage.",
-"blockipsuccesssub" => "Blocage réussi",
-"blockipsuccesstext" => "L'adresse IP \"$1\" a été bloquée.
-<br>Vous pouvez consulter sur cette [[Special:Ipblocklist|page]] la liste des adresses IP bloquées.",
-"unblockip" => "Débloquer une adresse IP",
-"unblockiptext" => "Utilisez le formulaire ci-dessous pour rétablir l'accès en écriture
-à partir d'une adresse IP précédemment bloquée.",
-"ipusubmit" => "Débloquer cette adresse",
-"ipusuccess" => "Adresse IP \"$1\" débloquée",
-"ipblocklist" => "Liste des adresses IP bloquées",
-"blocklistline" => "$1, $2 a bloqué $3",
+"blockipsuccesssub" => "Blocage réussi",
+"blockipsuccesstext" => "L'adresse IP \"$1\" a été bloquée.
+<br>Vous pouvez consulter sur cette [[Special:Ipblocklist|page]] la liste des adresses IP bloquées.",
+"unblockip" => "Débloquer une adresse IP",
+"unblockiptext" => "Utilisez le formulaire ci-dessous pour rétablir l'accès en écriture
+à partir d'une adresse IP précédemment bloquée.",
+"ipusubmit" => "Débloquer cette adresse",
+"ipusuccess" => "Adresse IP \"$1\" débloquée",
+"ipblocklist" => "Liste des adresses IP bloquées",
+"blocklistline" => "$1, $2 a bloqué $3",
"blocklink" => "bloquer",
-"unblocklink" => "débloquer",
+"unblocklink" => "débloquer",
"contribslink" => "contribs",
-"autoblocker" => "Autobloqué parce que vous partagez une adresse IP avec \"$1\". Raison : \"$2\".",
+"autoblocker" => "Autobloqué parce que vous partagez une adresse IP avec \"$1\". Raison : \"$2\".",
"blocklogpage" => "Log de blocage",
"blocklogentry" => 'blocage de "$1"',
-"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" => 'déblocage de "$1"',
+"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" => 'déblocage de "$1"',
# 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.",
+"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 Wikipédia est verrouillée.
+"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 $wgSitename est verrouillée.
-<br>N'oubliez pas de la déverrouiller lorsque vous aurez terminé votre opération de maintenance.",
-"unlockdbsuccesstext" => "La base de données de Wikipédia est déverrouillée.",
+<br>N'oubliez pas de la déverrouiller lorsque vous aurez terminé votre opération de maintenance.",
+"unlockdbsuccesstext" => "La base de données de $wgSitename est déverrouillée.",
# SQL query
#
-"asksql" => "Requête SQL",
-"asksqltext" => "Utilisez le formulaire ci-dessous pour faire une requête directe sur la base de données de Wikipédia.
-Utilisez des guillemets simples ('comme ceci') pour délimiter les chaînes de caractères.
-Cette opération peut surcharger considérablement le serveur, faites en usage
-avec modération.",
-"sqlislogged" => "Veillez noter que toutes les requêtes sont loguées", // Looxix "Please note that all queries are logged.",
-"sqlquery" => "Saisir la requête",
-
-"querybtn" => "Envoyer la requête",
-"selectonly" => "Les requêtes autres que \"SELECT\" sont réservées aux développeurs de
-Wikipédia.",
-"querysuccessful" => "Requête réussie",
+"asksql" => "Requête SQL",
+"asksqltext" => "Utilisez le formulaire ci-dessous pour faire une requête directe sur la base de données de $wgSitename.
+Utilisez des guillemets simples ('comme ceci') pour délimiter les chaînes de caractères.
+Cette opération peut surcharger considérablement le serveur, faites en usage
+avec modération.",
+"sqlislogged" => "Veillez noter que toutes les requêtes sont loguées", // Looxix "Please note that all queries are logged.",
+"sqlquery" => "Saisir la requête",
+
+"querybtn" => "Envoyer la requête",
+"selectonly" => "Les requêtes autres que \"SELECT\" sont réservées aux développeurs du wiki.",
+"querysuccessful" => "Requête réussie",
# Move page
#
-"movepage" => "Déplacer un article",
-"movepagetext" => "Utilisez le formulaire ci-dessous pour renommer un article, en déplaçant toutes ses versions antérieures vers le nouveau nom.
-Le titre précédent deviendra une page de redirection vers le nouveau titre.
-Les liens vers l'ancien titre ne seront pas modifiés et la page discussion, si elle existe, ne sera pas déplacée.<br>
+"movepage" => "Déplacer un article",
+"movepagetext" => "Utilisez le formulaire ci-dessous pour renommer un article, en déplaçant toutes ses versions antérieures vers le nouveau nom.
+Le titre précédent deviendra une page de redirection vers le nouveau titre.
+Les liens vers l'ancien titre ne seront pas modifiés et la page discussion, si elle existe, ne sera pas déplacée.<br>
<b>ATTENTION!</b>
-Il peut s'agir d'un changement radical et inattendu pour un article souvent consulté;
-assurez-vous que vous en comprenez bien les conséquences avant de procéder.",
-"movepagetalktext" => "La page de discussion associé, si présente, sera automatiquement déplacée avec '''sauf si:'''
-*Vous déplacez 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 déplacer ou fusionner la page manuellement si vous le désirez.",
-
-"movearticle" => "Déplacer l'article",
-"movenologin" => "Non connecté",
-"movenologintext" => "Pour pouvoir déplacer un article, vous devez être <a href=\"" .
- wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
-en tant qu'utilisateur enregistré.",
+Il peut s'agir d'un changement radical et inattendu pour un article souvent consulté;
+assurez-vous que vous en comprenez bien les conséquences avant de procéder.",
+"movepagetalktext" => "La page de discussion associé, si présente, sera automatiquement déplacée avec '''sauf si:'''
+*Vous déplacez 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 déplacer ou fusionner la page manuellement si vous le désirez.",
+
+"movearticle" => "Déplacer l'article",
+"movenologin" => "Non connecté",
+"movenologintext" => "Pour pouvoir déplacer un article, vous devez être <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">connecté</a>
+en tant qu'utilisateur enregistré.",
"newtitle" => "Nouveau titre",
-"movepagebtn" => "Déplacer l'article",
-"pagemovedsub" => "Déplacement réussi",
-"pagemovedtext" => "L'article \"[[$1]]\" a été déplacé vers \"[[$2]]\".",
-"articleexists" => "Il existe déjà un article portant ce titre, ou le titre que vous avez choisi n'est pas valide.
+"movepagebtn" => "Déplacer l'article",
+"pagemovedsub" => "Déplacement réussi",
+"pagemovedtext" => "L'article \"[[$1]]\" a été déplacé vers \"[[$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
+"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. S'il vous plait, fusionnez les manuellement.",
-"movedto" => "déplacé vers",
-"movetalk" => "Déplacer aussi la page \"discussion\", s'il y a lieu.",
-"talkpagemoved" => "La page discussion correspondante a également été déplacée.",
-"talkpagenotmoved" => "La page discussion correspondante n'a <strong>pas</strong> été déplacée.",
+"movedto" => "déplacé vers",
+"movetalk" => "Déplacer aussi la page \"discussion\", s'il y a lieu.",
+"talkpagemoved" => "La page discussion correspondante a également été déplacée.",
+"talkpagenotmoved" => "La page discussion correspondante n'a <strong>pas</strong> été déplacée.",
"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 alores être importé dans un autre wiki fonctionnant avec le logiciel MediaWiki, transformé ou sauvegardé pour votre usage personnel.",
+"exporttext" => "Vous pouvez exporter en XML le texte et l'historique d'une page ou d'un ensemble de pages; le résultat peut alores être importé dans un autre wiki fonctionnant avec le logiciel MediaWiki, transformé ou sauvegardé pour votre usage personnel.",
"exportcuronly" => "Exporter uniquement la version courante sans l'historique",
# Namespace 8 related
@@ -927,7 +928,7 @@ sous le nouveau nom. S'il vous plait, fusionnez les manuellement.",
"allmessagestext" => "Ceci est la liste de tous les messages disponibles dans l'espace MediaWiki"
);
-class LanguageFr extends Language
+class LanguageFr extends LanguageUtf8
{
function getDefaultUserOptions()
@@ -956,14 +957,16 @@ class LanguageFr extends Language
function getNsIndex( $text )
{
- global $wgNamespaceNamesFr;
+ global $wgNamespaceNamesFr, $wgSitename;
foreach ( $wgNamespaceNamesFr as $i => $n )
{
if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
}
- if( 0 == strcasecmp( "Wikipedia", $text ) ) return 4;
- if( 0 == strcasecmp( "Discussion_Wikipedia", $text ) ) return 5;
+ if( $wgSitename == "Wikipédia" ) {
+ if( 0 == strcasecmp( "Wikipedia", $text ) ) return 4;
+ if( 0 == strcasecmp( "Discussion_Wikipedia", $text ) ) return 5;
+ }
return false;
}
@@ -1036,7 +1039,7 @@ class LanguageFr extends Language
function timeanddate( $ts, $adj = false )
{
- return $this->date( $ts, $adj ) . " à " . $this->time( $ts, $adj );
+ return $this->date( $ts, $adj ) . " à " . $this->time( $ts, $adj );
}
function getValidSpecialPages()
diff --git a/languages/LanguageGa.php b/languages/LanguageGa.php
index deadc10f7153..919cb61ae671 100755
--- a/languages/LanguageGa.php
+++ b/languages/LanguageGa.php
@@ -1,36 +1,18 @@
-<?
-#--------------------------------------------------------------------------
-# Constants
-#--------------------------------------------------------------------------
-
-# Magic words
-define("MAG_REDIRECT", 0);
-define("MAG_NOTOC", 1);
-define("MAG_START", 2);
-define("MAG_CURRENTMONTH", 3);
-define("MAG_CURRENTMONTHNAME", 4);
-define("MAG_CURRENTDAY", 5);
-define("MAG_CURRENTDAYNAME", 6);
-define("MAG_CURRENTYEAR", 7);
-define("MAG_CURRENTTIME", 8);
-define("MAG_NUMBEROFARTICLES", 9);
-define("MAG_CURRENTMONTHNAMEGEN", 10);
-define("MAG_MSG", 11);
-define("MAG_SUBST", 12);
-define("MAG_MSGNW", 13);
-define("MAG_NOEDITSECTION", 14);
-
-#--------------------------------------------------------------------------
-# Language-specific text
-#--------------------------------------------------------------------------
-
-# NOTE: To turn off "Current Events" in the sidebar,
-# set "currentevents" => "-"
-
-# The names of the namespaces can be set here, but the numbers
-# are magical, so don't change or move them! The Namespace class
-# encapsulates some of the magic-ness.
-#
+<?php
+
+/* Irish */
+
+/*
+(This version of LanguageGa.php originally dates from the first version of 23:20,
+14th February 2004. It was translated from LanguageEn.php and LanguageEo.php,
+using the standard Ó Dónaill and De Bhaldraithe dictionaries, the Oxford
+minidictionary and Ó Donnáile's computing wordlist. There are small mistakes
+abound here, but corrections should principally be made to the live version on
+Sourceforge (when that gets added.)
+*/
+
+# FIXME: Use $wgSitename, $wgMetaNamespace etc
+
/* private */ $wgNamespaceNamesGa = array(
-2 => "Media",
-1 => "Speisialta",
@@ -110,152 +92,6 @@ define("MAG_NOEDITSECTION", 14);
"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
);
-# Here, when possible, use Irish language names for languages
-
-/* private */ $wgLanguageNamesGa = array(
- "aa" => "Afar",
- "ab" => "Abkhazian",
- "af" => "Afrikaans", # Afracáinis
- "am" => "Amharic",
- "ar" => "&#8238;&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;&#8236; (Araby)", # Araibis
- "as" => "Assamese",
- "ay" => "Aymara",
- "az" => "Azerbaijani",
- "ba" => "Bashkir",
- "be" => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1080;",
- "bh" => "Bihara",
- "bi" => "Bislama",
- "bn" => "Bengali",
- "bo" => "Tibetan", # Tibéadis
- "br" => "Brezhoneg",
- "bs" => "Bosnian",
- "ca" => "Catal&#224;", # Catalóinis
- "ch" => "Chamoru",
- "co" => "Corsican",
- "cs" => "&#268;esk&#225;",
- "cy" => "Cymraeg", # Breatnais
- "da" => "Dansk", # Danmhairgis. Note two different subdomains.
- "dk" => "Dansk", # 'da' is correct for the language.
- "de" => "Deutsch", # Gearmáinis
- "dz" => "Bhutani",
- "el" => "&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940; (Ellenika)",
- "en" => "English", # Béarla
- "eo" => "Esperanto", # Espeirantó
- "es" => "Espa&#241;ol", # Spáinnis
- "et" => "Eesti",
- "eu" => "Euskara",
- "fa" => "&#8238;&#1601;&#1585;&#1587;&#1609;&#8236; (Farsi)",
- "fi" => "Suomi",
- "fj" => "Fijian", # Fidsis? Fiji= An Fhidsí.
- "fo" => "Faeroese",
- "fr" => "Fran&#231;ais", # Fraincis
- "fy" => "Frysk",
- "ga" => "Gaeilge", # Gaeilge
- "gl" => "Galician",
- "gn" => "Guarani",
- "gu" => "&#2711;&#2753;&#2716;&#2736;&#2750;&#2724;&#2752; (Gujarati)",
- "ha" => "Hausa",
- "he" => "&#1506;&#1489;&#1512;&#1497;&#1514; (Ivrit)",
- "hi" => "&#2361;&#2367;&#2344;&#2381;&#2342;&#2368; (Hindi)", # Hiondúis
- "hr" => "Hrvatski",
- "hu" => "Magyar", # Ungáiris
- "hy" => "Armenian", # Airméinis
- "ia" => "Interlingua",
- "id" => "Indonesia", # Indinéisis
- "ik" => "Inupiak",
- "is" => "&#205;slenska",
- "it" => "Italiano", # Iodáilis
- "iu" => "Inuktitut",
- "ja" => "&#26085;&#26412;&#35486; (Nihongo)", # Seapáinis
- "jv" => "Javanese", # Iavais? Java = An Iava.
- "ka" => "&#4325;&#4304;&#4320;&#4311;&#4309;&#4308;&#4314;&#4312; (Kartuli)",
- "kk" => "Kazakh",
- "kl" => "Greenlandic", # Graonlainnis
- "km" => "Cambodian",
- "kn" => "Kannada",
- "ko" => "&#54620;&#44397;&#50612; (Hangukeo)",
- "ks" => "Kashmiri",
- "kw" => "Kernewek",
- "ky" => "Kirghiz",
- "la" => "Latina", # Laidin
- "ln" => "Lingala",
- "lo" => "Laotian",
- "lt" => "Lietuvi&#371;",
- "lv" => "Latvian", # Laitvis
- "mg" => "Malagasy",
- "mi" => "Maori",
- "mk" => "Macedonian", # Macadóinis
- "ml" => "Malayalam",
- "mn" => "Mongolian", # Mongóilis
- "mo" => "Moldavian",
- "mr" => "Marathi",
- "ms" => "Bahasa Melayu",
- "my" => "Burmese", # Burmais? Burma = Burma
- "na" => "Nauru",
- "ne" => "&#2344;&#2375;&#2346;&#2366;&#2354;&#2368; (Nepali)", # Neipealis
- "nl" => "Nederlands", # Ollainnis
- "no" => "Norsk", # Ioruais
- "oc" => "Occitan",
- "om" => "Oromo",
- "or" => "Oriya",
- "pa" => "Punjabi",
- "pl" => "Polski", # Polainnis
- "ps" => "Pashto",
- "pt" => "Portugu&#234;s", # Portaingéilis
- "qu" => "Quechua",
- "rm" => "Rhaeto-Romance",
- "rn" => "Kirundi",
- "ro" => "Rom&#226;n&#259;",
- "ru" => "&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (Russkij)", # Rúisis
- "rw" => "Kinyarwanda",
- "sa" => "&#2360;&#2306;&#2360;&#2381;&#2325;&#2371;&#2340; (Samskrta)",
- "sd" => "Sindhi",
- "sg" => "Sangro",
- "sh" => "Serbocroatian", # ? Serbian = Serbis; Croatian = Cróitis.
- "si" => "Sinhalese",
- "simple" => "Simple English", # Béarla Simplí
- "sk" => "Slovak", # Slóvaicis
- "sl" => "Slovensko",
- "sm" => "Samoan",
- "sn" => "Shona",
- "so" => "Soomaali",
- "sq" => "Shqiptare",
- "sr" => "Srpski",
- "ss" => "Siswati",
- "st" => "Sesotho",
- "su" => "Sundanese",
- "sv" => "Svenska", # Sualainnis
- "sw" => "Kiswahili",
- "ta" => "Tamil",
- "te" => "Telugu",
- "tg" => "Tajik",
- "th" => "Thai",
- "ti" => "Tigrinya",
- "tk" => "Turkmen",
- "tl" => "Tagalog",
- "tn" => "Setswana",
- "to" => "Tonga",
- "tr" => "T&#252;rk&#231;e", # Tuircis
- "ts" => "Tsonga",
- "tt" => "Tatar",
- "tw" => "Twi",
- "ug" => "Uighur",
- "uk" => "&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072; (Ukrayins`ka)",
- "ur" => "Urdu",
- "uz" => "Uzbek",
- "vi" => "Vietnamese", # Vítneamis
- "vo" => "Volap&#252;k",
- "wo" => "Wolof",
- "xh" => "isiXhosa",
- "yi" => "Yiddish", # Giúdais
- "yo" => "Yoruba",
- "za" => "Zhuang",
- "zh" => "&#20013;&#25991; (Zhongwen)", # Sínis
- "zh-cn" => "&#20013;&#25991;(&#31616;&#20307;) (Simplified Chinese)", # Sínis Simplithe
- "zh-tw" => "&#20013;&#25991;(&#32321;&#20307;) (Traditional Chinese)", # Sínis Traidisiúnta
- "zu" => "Zulu"
-);
-
# Different spellings of days (with Dé) may be needed for some uses
/* private */ $wgWeekdayNamesGa = array(
@@ -274,7 +110,7 @@ define("MAG_NOEDITSECTION", 14);
"Mea", "Dei", "Samh", "Nol"
);
-# Are the following safe to translate?
+# The following exist for the purpose of being translated:
/* private */ $wgMagicWordsGa = array(
# ID CASE SYNONYMS
@@ -332,7 +168,8 @@ define("MAG_NOEDITSECTION", 14);
"Movepage" => "",
"Booksources" => "Leabharfhoinsí seachtraí",
# "Categories" => "Ranganna leathanaigh",
- "Export" => ""
+ "Export" => "XML Export",
+ "Version" => "Version",
);
/* private */ $wgSysopSpecialPagesGa = array(
@@ -1269,11 +1106,9 @@ air, nó is féidir leat é a coinnigh do do siamsa féin.",
"allmessagestext" => "Seo é liosta de na teachtaireachtaí go léir atá le fáil san roinn MediaWiki: ."
);
-#--------------------------------------------------------------------------
-# Internationalisation code
-#--------------------------------------------------------------------------
+include_once( "LanguageUtf8.php" );
-class Language {
+class LanguageGa extends LanguageUtf8 {
function getDefaultUserOptions () {
global $wgDefaultUserOptionsGa ;
@@ -1301,11 +1136,8 @@ class Language {
foreach ( $wgNamespaceNamesGa as $i => $n ) {
if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
}
- return false;
- }
-
- function specialPage( $name ) {
- return $this->getNsText( Namespace::getSpecial() ) . ":" . $name;
+ /* Fallback to English names for compatibility */
+ return Language::getNsIndex( $text );
}
function getQuickbarSettings() {
@@ -1333,31 +1165,11 @@ class Language {
return $wgUserTogglesGa;
}
- function getLanguageNames() {
- global $wgLanguageNamesGa;
- return $wgLanguageNamesGa;
- }
-
- function getLanguageName( $code ) {
- global $wgLanguageNamesGa;
- if ( ! array_key_exists( $code, $wgLanguageNamesGa ) ) {
- return "";
- }
- return $wgLanguageNamesGa[$code];
- }
-
function getMonthName( $key )
{
global $wgMonthNamesGa;
return $wgMonthNamesGa[$key-1];
}
-
- /* by default we just return base form */
- function getMonthNameGen( $key )
- {
- global $wgMonthNamesGa;
- return $wgMonthNamesGa[$key-1];
- }
function getMonthAbbreviation( $key )
{
@@ -1371,75 +1183,6 @@ class Language {
return $wgWeekdayNamesGa[$key-1];
}
- function userAdjust( $ts )
- {
- global $wgUser, $wgLocalTZoffset;
-
- $diff = $wgUser->getOption( "timecorrection" );
- if ( ! is_numeric( $diff ) ) {
- $diff = isset( $wgLocalTZoffset ) ? $wgLocalTZoffset : 0;
- }
- if ( 0 == $diff ) { return $ts; }
-
- $t = mktime( ( (int)substr( $ts, 8, 2) ) + $diff,
- (int)substr( $ts, 10, 2 ), (int)substr( $ts, 12, 2 ),
- (int)substr( $ts, 4, 2 ), (int)substr( $ts, 6, 2 ),
- (int)substr( $ts, 0, 4 ) );
- return date( "YmdHis", $t );
- }
-
- function date( $ts, $adj = false )
- {
- global $wgAmericanDates, $wgUser, $wgUseDynamicDates;
-
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- if ( $wgUseDynamicDates ) {
- $datePreference = $wgUser->getOption( 'date' );
- if ( $datePreference == 0 ) {
- $datePreference = $wgAmericanDates ? 1 : 2;
- }
- } else {
- $datePreference = $wgAmericanDates ? 1 : 2;
- }
-
- if ( $datePreference == 1 ) {
- # MDY
- $d = $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) .
- " " . (0 + substr( $ts, 6, 2 )) . ", " .
- substr( $ts, 0, 4 );
- } else if ( $datePreference == 2 ) {
- #DMY
- $d = (0 + substr( $ts, 6, 2 )) . " " .
- $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) . " " .
- substr( $ts, 0, 4 );
- } else {
- #YMD
- $d = substr( $ts, 0, 4 ) . " " . $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ) .
- " " . (0 + substr( $ts, 6, 2 ));
- }
-
- return $d;
- }
-
- function time( $ts, $adj = false )
- {
- if ( $adj ) { $ts = $this->userAdjust( $ts ); }
-
- $t = substr( $ts, 8, 2 ) . ":" . substr( $ts, 10, 2 );
- return $t;
- }
-
- function timeanddate( $ts, $adj = false )
- {
- return $this->time( $ts, $adj ) . ", " . $this->date( $ts, $adj );
- }
-
- function rfc1123( $ts )
- {
- return date( "D, d M Y H:i:s T", $ts );
- }
-
function getValidSpecialPages()
{
global $wgValidSpecialPagesGa;
@@ -1470,102 +1213,12 @@ class Language {
return $wgAllMessagesGa;
}
- function iconv( $in, $out, $string ) {
- # For most languages, this is a wrapper for iconv
- return iconv( $in, $out, $string );
- }
-
- function ucfirst( $string ) {
- # For most languages, this is a wrapper for ucfirst()
- return ucfirst( $string );
- }
-
- function checkTitleEncoding( $s ) {
- global $wgInputEncoding;
-
- # Check for UTF-8 URLs; Internet Explorer produces these if you
- # type non-ASCII chars in the URL bar or follow unescaped links.
- $ishigh = preg_match( '/[\x80-\xff]/', $s);
- $isutf = ($ishigh ? preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
- '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s ) : true );
-
- if( ($wgInputEncoding != "utf-8") and $ishigh and $isutf )
- return iconv( "UTF-8", $wgInputEncoding, $s );
-
- if( ($wgInputEncoding == "utf-8") and $ishigh and !$isutf )
- return utf8_encode( $s );
-
- # Other languages can safely leave this function, or replace
- # it with one to detect and convert another legacy encoding.
- return $s;
- }
-
- function stripForSearch( $in ) {
- # 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.
- return $in;
- }
-
+ function getMagicWords()
+ {
+ global $wgMagicWordsGa;
+ return $wgMagicWordsGa;
+ }
- function setAltEncoding() {
- # Some languages may have an alternate char encoding option
- # (Esperanto X-coding, Japanese furigana conversion, etc)
- # If 'altencoding' is checked in user prefs, this gives a
- # chance to swap out the default encoding settings.
- #global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding;
- }
-
- 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 $wgInputEncoding, $wgEditEncoding;
- if( $wgEditEncoding == "" or
- $wgEditEncoding == $wgInputEncoding ) {
- return $s;
- } else {
- return $this->iconv( $wgInputEncoding, $wgEditEncoding, $s );
- }
- }
-
- function recodeInput( $s ) {
- # Take the previous into account.
- global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding;
- if($wgEditEncoding != "") {
- $enc = $wgEditEncoding;
- } else {
- $enc = $wgOutputEncoding;
- }
- if( $enc == $wgInputEncoding ) {
- return $s;
- } else {
- return $this->iconv( $enc, $wgInputEncoding, $s );
- }
- }
-
- # For right-to-left language support
- function isRTL() { return false; }
-
- function getMagicWords()
- {
- global $wgMagicWordsGa;
- return $wgMagicWordsGa;
- }
-
- # Fill a MagicWord object with data from here
- function getMagic( &$mw )
- {
- $raw = $this->getMagicWords(); # don't worry, it's reference counted not deep copy
- $rawEntry = $raw[$mw->mId];
- $mw->mCaseSensitive = $rawEntry[0];
- $mw->mSynonyms = array_slice( $rawEntry, 1 );
- }
}
-include_once( "Language" . ucfirst( $wgLanguageCode ) . ".php" );
-
-?>
+?> \ No newline at end of file
diff --git a/languages/LanguageHi.php b/languages/LanguageHi.php
index b2a8a7504e4f..ef7543d3bf22 100644
--- a/languages/LanguageHi.php
+++ b/languages/LanguageHi.php
@@ -1,6 +1,4 @@
-<?php
-
-include( "LanguageUtf8.php" );
+<?
# NOTE: To turn off "Current Events" in the sidebar,
# set "currentevents" => "-"
@@ -10,16 +8,15 @@ include( "LanguageUtf8.php" );
# encapsulates some of the magic-ness.
#
/* private */ $wgNamespaceNamesHi = array(
- -2 => "Media",
-1 => "विशेष",
0 => "",
1 => "वारà¥à¤¤à¤¾",
2 => "सदसà¥à¤¯",
- 3 => "सदसà¥à¤¯_वारà¥à¤¤à¤¾",
+ 3 => "सदसà¥à¤¯ वारà¥à¤¤à¤¾",
4 => "विकिपीडिया",
- 5 => "विकिपीडिआ_वारà¥à¤¤à¤¾",
+ 5 => "विकिपीडिया वारà¥à¤¤à¤¾",
6 => "चितà¥à¤°",
- 7 => "चितà¥à¤°_वारà¥à¤¤à¤¾",
+ 7 => "चितà¥à¤° वारà¥à¤¤à¤¾",
8 => "MediaWiki",
9 => "MediaWiki_talk",
);
@@ -35,43 +32,85 @@ include( "LanguageUtf8.php" );
"दिसमà¥à¤¬à¤°"
);
+# All special pages have to be listed here: a description of ""
+# will make them not show up on the "Special Pages" page, which
+# is the right thing for some of them (such as the "targeted" ones).
+#
+/* private */ $wgValidSpecialPagesHi = array(
+ "Userlogin" => "",
+ "Userlogout" => "",
+ "Preferences" => "Set my user preferences",
+ "Watchlist" => "मेरी धà¥à¤¯à¤¾à¤¨à¤¸à¥‚ची",
+ "Recentchanges" => "हाल में बदले गये पनà¥à¤¨à¥‡",
+ "Upload" => "Upload image files",
+ "Imagelist" => "चितà¥à¤°à¥‹à¤‚ कि सूची",
+ "Listusers" => "Registered users",
+ "Statistics" => "Site statistics",
+ "Randompage" => "Random article",
+
+ "Lonelypages" => "अनाथ लेख",
+ "Unusedimages" => "अनाथ चितà¥à¤°",
+ "Popularpages" => "लोकपà¥à¤°à¤¿à¤¯ लेख",
+ "Wantedpages" => "सबसे चहीते लेख",
+ "Shortpages" => "अदीरà¥à¤˜ लेख",
+ "Longpages" => "दीरà¥à¤˜ लेख",
+ "Newpages" => "हाल में रचित लेख",
+ "Ancientpages" => "पà¥à¤°à¤¾à¤šà¥€à¤¨ लेख",
+ "Intl" => "अंतरभाषिय कडियाà¤",
+
+ "Allpages" => "All pages by title",
+
+ "Ipblocklist" => "Blocked IP addresses",
+ "Maintenance" => "Maintenance page",
+ "Specialpages" => "",
+ "Contributions" => "",
+ "Emailuser" => "",
+ "Whatlinkshere" => "",
+ "Recentchangeslinked" => "",
+ "Movepage" => "",
+ "Booksources" => "External book sources",
+ "Categories" => "Page categories",
+);
+
+
+
/* private */ $wgAllMessagesHi = array(
# Bits of text used by many pages:
#
"linktrail" => "/^([a-z]+)(.*)\$/sD",
"mainpage" => "मà¥à¤–à¥à¤¯ पृषà¥à¤ ",
-"about" => "अबाउट",
-"aboutwikipedia" => "विकिपीडिया के बारे में",
-"aboutpage" => "विकिपीडिया:अबाउट",
+"about" => "अबाउट",
+"aboutwikipedia" => "हिनà¥à¤¦à¥€ विकिपीडिया के बारे में",
+"aboutpage" => "विकिपीडिया:जानकारी",
"help" => "सहायता",
"helppage" => "विकिपीडिया:सहायता",
-"wikititlesuffix" => "विकिपीडिया",
-"bugreports" => "Bug reports",
-"bugreportspage" => "विकिपीडिया:Bug_reports",
-"faq" => "FAQ",
-"faqpage" => "विकिपीडिया:FAQ",
-"edithelp" => "Editing help",
-"edithelppage" => "विकिपीडिया:How_does_one_edit_a_page",
-"cancel" => "Cancel",
-"qbfind" => "Find",
-"qbbrowse" => "Browse",
-"qbedit" => "Edit",
-"qbpageoptions" => "Page options",
-"qbpageinfo" => "Page info",
-"qbmyoptions" => "My options",
+"wikititlesuffix" => "हिनà¥à¤¦à¥€ विकिपीडिया",
+"bugreports" => "बग रिपोरà¥à¤Ÿ ",
+"bugreportspage" => "विकिपीडिया:बग रिपोरà¥à¤Ÿ ",
+"faq" => "पà¥à¤°à¤¶à¥à¤¨à¤¾à¤µà¤²à¥€ - FAQ",
+"faqpage" => "विकिपीडिया:पà¥à¤°à¤¶à¥à¤¨à¤¾à¤µà¤²à¥€",
+"edithelp" => "बदलाव सहायता ",
+"edithelppage" => "विकिपीडिया:पृषà¥à¤  कैसे बदलें",
+"cancel" => "रदà¥à¤¦ करें - कैनà¥à¤¸à¤²",
+"qbfind" => "खोजें - फ़ाइनà¥à¤¡ ",
+"qbbrowse" => "देखें - बà¥à¤°à¤¾à¤‰à¥›",
+"qbedit" => "बदलें" - à¤à¤¡à¤¿à¤Ÿ ,
+"qbpageoptions" => "पृषà¥à¤  विकलà¥à¤ª - ओपà¥à¤¶à¤¨à¥à¤¸ ",
+"qbpageinfo" => "पृषà¥à¤  जानकारी",
+"qbmyoptions" => "मेरे विकलà¥à¤ª -ओपà¥à¤¶à¤¨à¥à¤¸ ",
"mypage" => "मेरा पृषà¥à¤ ",
"mytalk" => "मेरी बातें",
-"currentevents" => "Current events",
-"errorpagetitle" => "Error",
+"currentevents" => "-",
+"errorpagetitle" => "गलती - à¤à¤°à¤° ",
"returnto" => "लौटें $1.",
-"fromwikipedia" => "From Wikipedia, the free encyclopedia.",
-"whatlinkshere" => "Pages that link here",
+"fromwikipedia" => "हिनà¥à¤¦à¥€ विकिपीडिया निःशà¥à¤²à¥à¤• जà¥à¤žà¤¾à¤¨ संगà¥à¤°à¤¹ से .",
+"whatlinkshere" => "पृषà¥à¤  जो यहाठआते हैं",
"help" => "सहायता ",
"search" => "खोज ",
"go" => "जायें",
-"history" => "Older versions",
-"printableversion" => "Printable version",
+"history" => "पà¥à¤°à¤¾à¤¨à¥‡ आवरà¥à¤¤à¤¨ ",
+"printableversion" => "छापने लायक आवरà¥à¤¤à¤¨",
"editthispage" => "इस पृषà¥à¤  को बदलें",
"deletethispage" => "इस पृषà¥à¤  को हटायें",
"protectthispage" => "इस पृषà¥à¤  को सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करें",
@@ -88,17 +127,17 @@ include( "LanguageUtf8.php" );
"redirectedfrom" => "($1 से भेजा गया)",
"lastmodified" => "अनà¥à¤¤à¤¿à¤® परिवरà¥à¤¤à¤¨ $1.",
"viewcount" => "यह पृषà¥à¤  $1 बार देखा गया है",
-"gnunote" => "All text is available under the terms of the <a class=internal href='/wiki/GNU_FDL'>GNU Free Documentation License</a>.",
-"printsubtitle" => "(From http://www.wikipedia.org)",
+"gnunote" => "सभी सामगà¥à¤°à¥€ <a class=internal href='/wiki/GNU_FDL'>GNU Free Documentation License</a> की शरà¥à¤¤à¥‹à¤‚ के तहतॠउपलबà¥à¤§ की गई है.",
+"printsubtitle" => "(http://www.wikipedia.org से)",
"protectedpage" => "सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ पृषà¥à¤ ",
"administrators" => "विकिपीडिया:पà¥à¤°à¤¬à¤¨à¥à¤§à¤•",
-"sysoptitle" => "sysop आवशà¥à¤¯à¤• है",
+"sysoptitle" => "सिसओप होना आवशà¥à¤¯à¤• है",
"sysoptext" => "आप जो करना चाहते हैं‌ उसे केवल \"sysop\" सà¥à¤¤à¤° के सदसà¥à¤¯ कर सकते हैं. $1 देखें.",
-"developertitle" => "Developer आवशà¥à¤¯à¤• है",
+"developertitle" => "डेवेलपर होना आवशà¥à¤¯à¤• है",
"developertext" => "आप जो करना चाहते हैं‌ उसे केवल \"developer\" सà¥à¤¤à¤° के सदसà¥à¤¯ कर सकते हैं. $1 देखें.",
"nbytes" => "$1 bytes",
-"go" => "Go",
-"ok" => "OK",
+"go" => "जायें",
+"ok" => "ठीक है - OK",
"sitetitle" => "विकिपीडिया ",
"sitesubtitle" => "निःशà¥à¤²à¥à¤• जà¥à¤žà¤¾à¤¨ संगà¥à¤°à¤¹ ",
"retrievedfrom" => "\"$1\" से लिया गया",
@@ -107,7 +146,7 @@ include( "LanguageUtf8.php" );
# Main script and global functions
#
-"nosuchaction" => "à¤à¤¸à¤¾ कोई कारà¥à¤¯ नहीं है",
+"nosuchaction" => "à¤à¤¸à¤¾ कोई à¤à¤•à¥â€Œà¤¶à¤¨ नहीं है",
"nosuchactiontext" => "विकिपीडिया सौफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° में इस URL दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤§à¤¾à¤°à¤¿à¤¤ कोई कà¥à¤°à¤¿à¤¯à¤¾ नही है",
"nosuchspecialpage" => "à¤à¤¸à¤¾ कोई विशेष पृषà¥à¤  नहीं है",
"nospecialpagetext" => "आपने à¤à¤¸à¤¾ विशेष पृषà¥à¤  मांगा है जो विकिपीडिया सौफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° में नहीं है.",
@@ -116,16 +155,773 @@ include( "LanguageUtf8.php" );
# ........
"welcomecreation" => "<h2>सà¥à¤µà¤¾à¤—तमà¥â€Œ, $1!</h2><p>आपका अकाउनà¥à¤Ÿ बना दिया गया है.
-Don't forget to personalize your wikipedia preferences.",
+अपने पà¥à¤°à¥‡à¥žà¥‡à¤°à¥‡à¤¨à¥à¤¸à¥‡à¥› को परà¥à¤¸à¤¨à¤²à¤¾à¤‡à¥› करना न भूलें .",
+
+"loginpagetitle" => "यूज़र लौग इन",
-"loginpagetitle" => "User login",
"yourname" => "आपका नाम",
"yourpassword" => "आपका पासवरà¥à¤¡ ",
"yourpasswordagain" => "पासवरà¥à¤¡ दà¥à¤¬à¤¾à¤°à¤¾ लिखें",
-## ....... more messages .....
+# General errors
+#
+"error" => "Error",
+"databaseerror" => "Database error",
+"dberrortext" => "A database query syntax error has occurred.
+This could be because of an illegal search query (see $5),
+or it 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\".\n",
+"noconnect" => "Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server.",
+"nodb" => "Could not select database $1",
+"cachederror" => "The following is a cached copy of the requested page, and may not be up to date.",
+"readonly" => "Database locked",
+"enterlockreason" => "Enter a reason for the lock, including an estimate
+of when the lock will be released",
+"readonlytext" => "The Wikipedia 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" => "The database did not find the text of a page
+that it should have found, named \"$1\".
+
+<p>This is usually caused by following an outdated diff or history link to a
+page that has been deleted.
+
+<p>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.",
+"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 image 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.",
+"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's a saved copy from $1:",
+
+# Login and logout pages
+#
+"logouttitle" => "User logout",
+"logouttext" => "You are now logged out.
+You can continue to use Wikipedia anonymously, or you can log in
+again as the same or as a different user.\n",
+
+"welcomecreation" => "<h2>Welcome, $1!</h2><p>Your account has been created.
+Don't forget to personalize your wikipedia preferences.",
+
+"loginpagetitle" => "User login",
+"yourname" => "Your user name",
+"yourpassword" => "Your password",
+"yourpasswordagain" => "Retype password",
+"newusersonly" => " (new users only)",
+"remembermypassword" => "Remember my password across sessions.",
+"loginproblem" => "<b>There has been a problem with your login.</b><br>Try again!",
+"alreadyloggedin" => "<font color=red><b>User $1, you are already logged in!</b></font><br>\n",
+
+"areyounew" => "If you are new to Wikipedia and want to get a user account,
+enter a user name, then type and re-type a password.
+Your e-mail address is optional; if you lose your password you can request
+that it be to the address you give.<br>\n",
+
+"login" => "Log in",
+"userlogin" => "Log in",
+"logout" => "Log out",
+"userlogout" => "Log out",
+"notloggedin" => "Not logged in",
+"createaccount" => "Create new account",
+"createaccountmail" => "by eMail",
+"badretype" => "The passwords you entered do not match.",
+"userexists" => "The user name you entered is already in use. Please choose a different name.",
+"youremail" => "Your e-mail*",
+"yournick" => "Your nickname (for signatures)",
+"emailforlost" => "* Entering an email address is optional. But it enables people to
+contact you through the website without you having to reveal your
+email address to them, and it also helps you if you forget your
+password.",
+"loginerror" => "Login error",
+"noname" => "You have not specified a valid user name.",
+"loginsuccesstitle" => "Login successful",
+"loginsuccess" => "You are now logged in to Wikipedia as \"$1\".",
+"nosuchuser" => "There is no user by the name \"$1\".
+Check your spelling, or use the form below to create a new user account.",
+"wrongpassword" => "The password you entered is incorrect. Please try again.",
+"mailmypassword" => "Mail me a new password",
+"passwordremindertitle" => "Password reminder from Wikipedia",
+"passwordremindertext" => "Someone (probably you, from IP address $1)
+requested that we send you a new Wikipedia login password.
+The password for user \"$2\" is now \"$3\".
+You should log in and change your password now.",
+"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.",
+
+# Edit pages
+#
+"summary" => "Summary",
+"subject" => "Subject/headline",
+"minoredit" => "This is a minor edit",
+"watchthis" => "Watch this article",
+"savearticle" => "Save page",
+"preview" => "Preview",
+"showpreview" => "Show preview",
+"blockedtitle" => "User is blocked",
+"blockedtext" => "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
+[[Wikipedia:administrators|administrators]] to discuss the block.",
+"whitelistedittitle" => "Login required to edit",
+"whitelistedittext" => "You have to [[Special:Userlogin|login]] to edit articles.",
+"whitelistreadtitle" => "Login required to read",
+"whitelistreadtext" => "You have to [[Special:Userlogin|login]] to read articles.",
+"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.",
+"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 [[Wikipedia:Help|help page]] for more info).
+If you are here by mistake, just click your browser's '''back''' button.",
+"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)",
+"updated" => "(Updated)",
+"note" => "<strong>Note:</strong> ",
+"previewnote" => "Remember that this is only a preview, and has not yet been saved!",
+"previewconflict" => "This preview reflects the text in the upper
+text editing area as it will appear if you choose to save.",
+"editing" => "Editing $1",
+"sectionedit" => " (section)",
+"commentedit" => " (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\".\n<p>",
+"yourtext" => "Your text",
+"storedversion" => "Stored version",
+"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>\n",
+"yourdiff" => "Differences",
+"copyrightwarning" => "Please note that all contributions to Wikipedia are
+considered to be released under the GNU Free Documentation License
+(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>",
+"longpagewarning" => "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.",
+"readonlywarning" => "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.",
+"protectedpagewarning" => "WARNING: This page has been locked so that only
+users with sysop privileges can edit it. Be sure you are following the
+<a href='/wiki/Wikipedia:Protected_page_guidelines'>protected page
+guidelines</a>.",
+
+# History pages
+#
+"revhistory" => "Revision history",
+"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.\n",
+"loadhist" => "Loading page history",
+"currentrev" => "Current revision",
+"revisionasof" => "Revision as of $1",
+"cur" => "cur",
+"next" => "next",
+"last" => "last",
+"orig" => "orig",
+"histlegend" => "Legend: (cur) = difference with current version,
+(last) = difference with preceding version, M = minor edit",
+
+# Diffs
+#
+"difference" => "(Difference between revisions)",
+"loadingrev" => "loading revision for diff",
+"lineno" => "Line $1:",
+"editcurrent" => "Edit the current version of this page",
+
+# Search results
+#
+"searchresults" => "Search results",
+"searchhelppage" => "Wikipedia:Searching",
+"searchingwikipedia" => "Searching Wikipedia",
+"searchresulttext" => "For more information about searching Wikipedia, see $1.",
+"searchquery" => "For query \"$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 article titles
+and the text of $3 articles.",
+"nogomatch" => "No page with this exact title exists, trying full text search.",
+"titlematches" => "Article title matches",
+"notitlematches" => "No article title matches",
+"textmatches" => "Article text matches",
+"notextmatches" => "No article text matches",
+"prevn" => "previous $1",
+"nextn" => "next $1",
+"viewprevnext" => "View ($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>Note</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" => "Search",
+"powersearchtext" => "
+Search in namespaces :<br>
+$1<br>
+$2 List redirects &nbsp; Search for $3 $9",
+"blanknamespace" => "(Main)",
+
+# Preferences page
+#
+"preferences" => "Preferences",
+"prefsnologin" => "Not logged in",
+"prefsnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to set user preferences.",
+"prefslogintext" => "You are logged in as \"$1\".
+Your internal ID number is $2.
+
+See [[Wikipedia:User preferences help]] for help deciphering the options.",
+"prefsreset" => "Preferences have been reset from storage.",
+"qbsettings" => "Quickbar settings",
+"changepassword" => "Change password",
+"skin" => "Skin",
+"math" => "Rendering math",
+"dateformat" => "Date format",
+"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",
+"saveprefs" => "Save preferences",
+"resetprefs" => "Reset preferences",
+"oldpassword" => "Old password",
+"newpassword" => "New password",
+"retypenew" => "Retype new password",
+"textboxsize" => "Textbox dimensions",
+"rows" => "Rows",
+"columns" => "Columns",
+"searchresultshead" => "Search result settings",
+"resultsperpage" => "Hits to show per page",
+"contextlines" => "Lines to show per hit",
+"contextchars" => "Characters of context per line",
+"stubthreshold" => "Threshold for stub display",
+"recentchangescount" => "Number of titles in recent changes",
+"savedprefs" => "Your preferences have been saved.",
+"timezonetext" => "Enter number of hours your local time differs
+from server time (UTC).",
+"localtime" => "Local time display",
+"timezoneoffset" => "Offset",
+"servertime" => "Server time is now",
+"guesstimezone" => "Fill in from browser",
+"emailflag" => "Disable e-mail from other users",
+"defaultns" => "Search in these namespaces by default:",
+
+# Recent changes
+#
+"changes" => "changes",
+"recentchanges" => "Recent changes",
+"recentchangestext" => "Track the most recent changes to Wikipedia on this page.
+[[Wikipedia:Welcome,_newcomers|Welcome, newcomers]]!
+Please have a look at these pages: [[wikipedia:FAQ|Wikipedia FAQ]],
+[[Wikipedia:Policies and guidelines|Wikipedia policy]]
+(especially [[wikipedia:Naming conventions|naming conventions]],
+[[wikipedia:Neutral point of view|neutral point of view]]),
+and [[wikipedia:Most common Wikipedia faux pas|most common Wikipedia faux pas]].
+
+If you want to see Wikipedia succeed, it's very important that you don't add
+material restricted by others' [[wikipedia:Copyrights|copyrights]].
+The legal liability could really hurt the project, so please don't do it.
+See also the [http://meta.wikipedia.org/wiki/Special:Recentchanges recent meta discussion].",
+"rcloaderr" => "Loading recent changes",
+"rcnote" => "Below are the last <strong>$1</strong> changes in last <strong>$2</strong> days.",
+"rcnotefrom" => "Below are the changes since <b>$2</b> (up to <b>$1</b> shown).",
+"rclistfrom" => "Show new changes starting from $1",
+# "rclinks" => "Show last $1 changes in last $2 hours / last $3 days",
+# "rclinks" => "Show last $1 changes in last $2 days.",
+"rclinks" => "Show last $1 changes in last $2 days; $3 minor edits",
+"rchide" => "in $4 form; $1 minor edits; $2 secondary namespaces; $3 multiple edits.",
+"rcliu" => "; $1 edits from logged in users",
+"diff" => "diff",
+"hist" => "hist",
+"hide" => "hide",
+"show" => "show",
+"tableform" => "table",
+"listform" => "list",
+"nchanges" => "$1 changes",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload" => "Upload file",
+"uploadbtn" => "Upload file",
+"uploadlink" => "Upload images",
+"reupload" => "Re-upload",
+"reuploaddesc" => "Return to the upload form.",
+"uploadnologin" => "Not logged in",
+"uploadnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to upload files.",
+"uploadfile" => "Upload images, sounds, documents etc.",
+"uploaderror" => "Upload error",
+"uploadtext" => "<strong>STOP!</strong> Before you upload here,
+make sure to read and follow Wikipedia's <a href=\"" .
+wfLocalUrlE( "Wikipedia:Image_use_policy" ) . "\">image use policy</a>.
+<p>To view or search previously uploaded images,
+go to the <a href=\"" . wfLocalUrlE( "Special:Imagelist" ) .
+"\">list of uploaded images</a>.
+Uploads and deletions are logged on the <a href=\"" .
+wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">upload log</a>.
+<p>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.
+<p>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
+<b>[[image:file.jpg]]</b> or <b>[[image:file.png|alt text]]</b>
+or <b>[[media:file.ogg]]</b> for sounds.
+<p>Please note that as with Wikipedia 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" => "upload log",
+"uploadlogpage" => "Upload_log",
+"uploadlogpagetext" => "Below is a list of the most recent file uploads.
+All times shown are server time (UTC).
+<ul>
+</ul>
+",
+"filename" => "Filename",
+"filedesc" => "Summary",
+"affirmation" => "I affirm that the copyright holder of this file
+agrees to license it under the terms of the $1.",
+"copyrightpage" => "Wikipedia:Copyrights",
+"copyrightpagename" => "Wikipedia copyright",
+"uploadedfiles" => "Uploaded files",
+"noaffirmation" => "You must affirm that your upload does not violate
+any copyrights.",
+"ignorewarning" => "Ignore warning and save file anyway.",
+"minlength" => "Image names must be at least three letters.",
+"badfilename" => "Image name has been changed to \"$1\".",
+"badfiletype" => "\".$1\" is not a recommended image file format.",
+"largefile" => "It is recommended that images not exceed 100k in size.",
+"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.",
+"uploadwarning" => "Upload warning",
+"savefile" => "Save file",
+"uploadedimage" => "uploaded \"$1\"",
+
+# Image list
+#
+"imagelist" => "Image list",
+"imagelisttext" => "Below is a list of $1 images sorted $2.",
+"getimagelist" => "fetching image list",
+"ilshowmatch" => "Show all images with names matching",
+"ilsubmit" => "Search",
+"showlast" => "Show last $1 images sorted $2.",
+"all" => "all",
+"byname" => "by name",
+"bydate" => "by date",
+"bysize" => "by size",
+"imgdelete" => "del",
+"imgdesc" => "desc",
+"imglegend" => "Legend: (desc) = show/edit image description.",
+"imghistory" => "Image history",
+"revertimg" => "rev",
+"deleteimg" => "del",
+"imghistlegend" => "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" => "Image links",
+"linkstoimage" => "The following pages link to this image:",
+"nolinkstoimage" => "There are no pages that link to this image.",
+
+# Statistics
+#
+"statistics" => "Statistics",
+"sitestats" => "Site statistics",
+"userstats" => "User statistics",
+"sitestatstext" => "There are <b>$1</b> total pages in the database.
+This includes \"talk\" pages, pages about Wikipedia, minimal \"stub\"
+pages, redirects, and others that probably don't qualify as articles.
+Excluding those, there are <b>$2</b> pages that are probably legitimate
+articles.<p>
+There have been a total of <b>$3</b> page views, and <b>$4</b> page edits
+since the software was upgraded (July 20, 2002).
+That comes to <b>$5</b> average edits per page, and <b>$6</b> views per edit.",
+"userstatstext" => "There are <b>$1</b> registered users.
+<b>$2</b> of these are administrators (see $3).",
+
+# Maintenance Page
+#
+"maintenance" => "Maintenance page",
+"maintnancepagetext" => "This page includes several handy tools for everyday maintenance. Some of these functions tend to stress the database, so please do not hit reload after every item you fixed ;-)",
+"maintenancebacklink" => "Back to Maintenance Page",
+"disambiguations" => "Disambiguation pages",
+"disambiguationspage" => "Wikipedia: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" => "Double Redirects",
+"doubleredirectstext" => "<b>Attention:</b> This list may contain false positives. That usually means there is additional text with links below the first #REDIRECT.<br>\nEach row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" taget article, which the first redirect should point to.",
+"brokenredirects" => "Broken Redirects",
+"brokenredirectstext" => "The following redirects link to a non-existing article.",
+"selflinks" => "Pages with Self Links",
+"selflinkstext" => "The following pages contain a link to themselves, which they should not.",
+"mispeelings" => "Pages with misspellings",
+"mispeelingstext" => "The following pages contain a common misspelling, which are listed on $1. The correct spelling might be given (like this).",
+"mispeelingspage" => "List of common misspellings",
+"missinglanguagelinks" => "Missing Language Links",
+"missinglanguagelinksbutton" => "Find missing language links for",
+"missinglanguagelinkstext" => "These articles do <i>not</i> link to their counterpart in $1. Redirects and subpages are <i>not</i> shown.",
+
+
+# Miscellaneous special pages
+#
+"orphans" => "Orphaned pages",
+"lonelypages" => "Orphaned pages",
+"unusedimages" => "Unused images",
+"popularpages" => "Popular pages",
+"nviews" => "$1 views",
+"wantedpages" => "Wanted pages",
+"nlinks" => "$1 links",
+"allpages" => "All pages",
+"randompage" => "Random page",
+"shortpages" => "Short pages",
+"longpages" => "Long pages",
+"listusers" => "User list",
+"specialpages" => "Special pages",
+"spheading" => "Special pages for all users",
+"sysopspheading" => "For sysop use only",
+"developerspheading" => "For developer use only",
+"protectpage" => "Protect page",
+"recentchangeslinked" => "Related changes",
+"rclsub" => "(to pages linked from \"$1\")",
+"debug" => "Debug",
+"newpages" => "New pages",
+"ancientpages" => "Oldest articles",
+"intl" => "Interlanguage links",
+"movethispage" => "Move this page",
+"unusedimagestext" => "<p>Please note that other web sites
+such as the international Wikipedias may link to an image with
+a direct URL, and so may still be listed here despite being
+in active use.",
+"booksources" => "Book sources",
+"booksourcetext" => "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.
+Wikipedia is not affiliated with any of these businesses, and
+this list should not be construed as an endorsement.",
+"alphaindexline" => "$1 to $2",
+
+# Email this user
+#
+"mailnologin" => "No send address",
+"mailnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+and have a valid e-mail address in your <a href=\"" .
+ wfLocalUrl( "Special:Preferences" ) . "\">preferences</a>
+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.",
+"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",
+"emailsent" => "E-mail sent",
+"emailsenttext" => "Your e-mail message has been sent.",
+
+# Watchlist
+#
+"watchlist" => "My watchlist",
+"watchlistsub" => "(for user \"$1\")",
+"nowatchlist" => "You have no items on your watchlist.",
+"watchnologin" => "Not logged in",
+"watchnologintext" => "You must be <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to modify your watchlist.",
+"addedwatch" => "Added to watchlist",
+"addedwatchtext" => "The page \"$1\" has been added to your <a href=\"" .
+ wfLocalUrl( "Special:Watchlist" ) . "\">watchlist</a>.
+Future changes to this page and its associated Talk page will be listed there,
+and the page will appear <b>bolded</b> in the <a href=\"" .
+ wfLocalUrl( "Special:Recentchanges" ) . "\">list of recent changes</a> to
+make it easier to pick out.</p>
+
+<p>If you want to remove the page from your watchlist later, click \"Stop watching\" in the sidebar.",
+"removedwatch" => "Removed from watchlist",
+"removedwatchtext" => "The page \"$1\" has been removed from your watchlist.",
+"watchthispage" => "Watch this page",
+"unwatchthispage" => "Stop watching",
+"notanarticle" => "Not an article",
+"watchnochange" => "None of your watched items were edited in the time period displayed.",
+"watchdetails" => "($1 pages watched not counting talk pages;
+$2 total pages edited since cutoff;
+$3...
+<a href='$4'>show and edit complete list</a>.)",
+"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 pages.",
+"watcheditlist" => "Here's an alphabetical list of your
+watched 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.",
+"removingchecked" => "Removing requested items from watchlist...",
+"couldntremove" => "Couldn't remove item '$1'...",
+"iteminvalidname" => "Problem with item '$1', invalid name...",
+"wlnote" => "Below are the last $1 changes in the last <b>$2</b> hours.",
+
+
+# Delete/protect/revert
+#
+"deletepage" => "Delete page",
+"confirm" => "Confirm",
+"excontent" => "content was:",
+"exbeforeblank" => "content before blanking was:",
+"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
+[[Wikipedia:Policy]].",
+"confirmcheck" => "Yes, I really want to delete this.",
+"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.
+All times shown are server time (UTC).
+<ul>
+</ul>
+",
+"deletionlog" => "deletion log",
+"reverted" => "Reverted to earlier revision",
+"deletecomment" => "Reason for deletion",
+"imagereverted" => "Revert to earlier version was successful.",
+"rollback" => "Roll back edits",
+"rollbacklink" => "rollback",
+"rollbackfailed" => "Rollback failed",
+"cantrollback" => "Cannot revert edit; last contributor is only author of this article.",
+"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.
+
+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 to last edit by $1",
+
+# Undelete
+"undelete" => "Restore deleted page",
+"undeletepage" => "View and restore 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.",
+"undeletearticle" => "Restore deleted article",
+"undeleterevisions" => "$1 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.",
+"undeleterevision" => "Deleted revision as of $1",
+"undeletebtn" => "Restore!",
+"undeletedarticle" => "restored \"$1\"",
+"undeletedtext" => "The article [[$1]] has been successfully restored.
+See [[Wikipedia:Deletion_log]] for a record of recent deletions and restorations.",
+
+# Contributions
+#
+"contributions" => "User contributions",
+"mycontris" => "My contributions",
+"contribsub" => "For $1",
+"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)" ,
+
+# What links here
+#
+"whatlinkshere" => "What links here",
+"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 here:",
+"nolinkshere" => "No pages link to here.",
+"isredirect" => "redirect page",
+
+# Block/unblock IP
+#
+"blockip" => "Block IP address",
+"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 [[Wikipedia:Policy|Wikipedia policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).",
+"ipaddress" => "IP Address",
+"ipbreason" => "Reason",
+"ipbsubmit" => "Block this address",
+"badipaddress" => "The IP address is badly formed.",
+"noblockreason" => "You must supply a reason for the block.",
+"blockipsuccesssub" => "Block succeeded",
+"blockipsuccesstext" => "The IP address \"$1\" has been blocked.
+<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",
+"ipusuccess" => "IP address \"$1\" unblocked",
+"ipblocklist" => "List of blocked IP addresses",
+"blocklistline" => "$1, $2 blocked $3",
+"blocklink" => "block",
+"unblocklink" => "unblock",
+"contribslink" => "contribs",
+
+# 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 Wikipedia database has been locked.
+<br>Remember to remove the lock after your maintenance is complete.",
+"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
+
+# SQL query
+#
+"asksql" => "SQL query",
+"asksqltext" => "Use the form below to make a direct query of the
+
+Wikipedia database.
+Use single quotes ('like this') to delimit string literals.
+This can often add considerable load to the server, so please use
+this function sparingly.",
+"sqlislogged" => "Please note that all queries are logged.",
+"sqlquery" => "Enter query",
+"querybtn" => "Submit query",
+"selectonly" => "Queries other than \"SELECT\" are restricted to
+Wikipedia developers.",
+"querysuccessful" => "Query successful",
+
+# 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
+[[Special:Maintenance|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, if any, will be automatically moved along with it '''unless:'''
+*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" => "Move page",
+"movenologin" => "Not logged in",
+"movenologintext" => "You must be a registered user and <a href=\"" .
+ wfLocalUrl( "Special:Userlogin" ) . "\">logged in</a>
+to move a page.",
+"newtitle" => "To new title",
+"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 \"talk\" page as well, if applicable.",
+"talkpagemoved" => "The corresponding talk page was also moved.",
+"talkpagenotmoved" => "The corresponding talk page was <strong>not</strong> moved.",
+
);
+include_once( "LanguageUtf8.php" );
+
class LanguageHi extends LanguageUtf8 {
function getNamespaces() {
global $wgNamespaceNamesHi;
@@ -138,16 +934,12 @@ class LanguageHi extends LanguageUtf8 {
}
function getNsIndex( $text ) {
- global $wgNamespaceNamesHi, $wgNamespaceNamesEn;
+ global $wgNamespaceNamesHi;
foreach ( $wgNamespaceNamesHi as $i => $n ) {
- if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
- }
- # fallback
- foreach ( $wgNamespaceNamesEn as $i => $n ) {
- if ( 0 == strcasecmp( $n, $text ) ) { return $i; }
+ if ( 0 == strcmp( $n, $text ) ) { return $i; }
}
- return false;
+ return Language::getNsIndex( $text );
}
function getMonthName( $key )
@@ -165,6 +957,12 @@ class LanguageHi extends LanguageUtf8 {
return Language::getMessage($key);
}
+ function getValidSpecialPages()
+ {
+ global $wgValidSpecialPagesHi;
+ return $wgValidSpecialPagesHi;
+ }
+
}
?>
diff --git a/languages/LanguageId.php b/languages/LanguageId.php
new file mode 100644
index 000000000000..8ac9ed42a495
--- /dev/null
+++ b/languages/LanguageId.php
@@ -0,0 +1,9 @@
+<?php
+
+include_once( "LanguageMs.php" );
+
+class LanguageId extends LanguageMs {
+ /* Inherit everything. */
+}
+
+?> \ No newline at end of file
diff --git a/languages/LanguageUr.php b/languages/LanguageUr.php
new file mode 100644
index 000000000000..bed070fd314c
--- /dev/null
+++ b/languages/LanguageUr.php
@@ -0,0 +1,22 @@
+<?php
+
+# Stub for Urdu
+
+include_once( "LanguageUtf8.php" );
+
+class LanguageUr extends LanguageUtf8 {
+
+ function getDefaultUserOptions() {
+ $opt = Language::getDefaultUserOptions();
+ $opt["quickbar"] = 2; # Right-to-left
+ $opt["underline"] = 0; # Underline is hard to read in Arabic script
+ return $opt;
+ }
+
+ # For right-to-left language support
+ function isRTL() {
+ return true;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/languages/LanguageYi.php b/languages/LanguageYi.php
new file mode 100644
index 000000000000..b451a5e1f137
--- /dev/null
+++ b/languages/LanguageYi.php
@@ -0,0 +1,21 @@
+<?php
+
+# Stub for Yiddish
+
+include_once( "LanguageUtf8.php" );
+
+class LanguageYi extends LanguageUtf8 {
+
+ function getDefaultUserOptions() {
+ $opt = Language::getDefaultUserOptions();
+ $opt["quickbar"] = 2; # Right-to-left
+ return $opt;
+ }
+
+ # For right-to-left language support
+ function isRTL() {
+ return true;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/maintenance/InitialiseMessages.inc b/maintenance/InitialiseMessages.inc
index 6da89df8f564..6c8def52f649 100755
--- a/maintenance/InitialiseMessages.inc
+++ b/maintenance/InitialiseMessages.inc
@@ -6,6 +6,8 @@
function initialiseMessages( $overwrite = false) {
global $wgLang, $wgScript, $wgServer, $wgAllMessagesEn;
global $wgOut, $wgArticle, $wgUser;
+ global $wgMessageCache, $wgMemc, $wgDBname, $wgDatabaseMessages;
+ $wgMessageCache->disable();
$fname = "initialiseMessages";
$ns = NS_MEDIAWIKI;
@@ -131,6 +133,14 @@ function initialiseMessages( $overwrite = false) {
} else {
$wgArticle->insertNewArticle( $navText, '', 0, 0 );
}
+
+ if( $wgDatabaseMessages ) {
+ print "Clearing message cache...";
+ $wgMemc->delete( "$wgDBname:messages" );
+ print "Done.\n";
+ }
+
print "Finished\n";
}
+?> \ No newline at end of file
diff --git a/maintenance/archives/importTests.php b/maintenance/archives/importTests.php
index 2ca290999d47..ef751a759eaf 100644
--- a/maintenance/archives/importTests.php
+++ b/maintenance/archives/importTests.php
@@ -1,4 +1,12 @@
-<html>
+<?php
+
+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();
+
+?><html>
<head>
<title>Unit tests for UseMod-to-PediaWiki import script</title>
<meta http-equiv="Refresh" content="10;URL=importTests.php">
diff --git a/maintenance/archives/importUseModWiki.php b/maintenance/archives/importUseModWiki.php
index 5e033a55aa15..09eb025f5505 100644
--- a/maintenance/archives/importUseModWiki.php
+++ b/maintenance/archives/importUseModWiki.php
@@ -1,5 +1,11 @@
<?php
+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();
+
/*
Import data from a UseModWiki into a PediaWiki wiki
2003-02-09 Brion VIBBER <brion@pobox.com>
diff --git a/maintenance/archives/patch-linkscc.sql b/maintenance/archives/patch-linkscc.sql
index 49ffe5800c33..0f63e022e8fb 100644
--- a/maintenance/archives/patch-linkscc.sql
+++ b/maintenance/archives/patch-linkscc.sql
@@ -2,9 +2,13 @@
-- linkscc table used to cache link lists in easier to digest form
-- November 2003
--
+-- Update March 2004, changed lcc_title to binary to prevent data
+-- corruption problem
+--
-CREATE TABLE IF NOT EXISTS linkscc (
+DROP TABLE IF EXISTS linkscc;
+CREATE TABLE linkscc (
lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY,
- lcc_title VARCHAR(255) NOT NULL UNIQUE KEY,
- lcc_cacheobj MEDIUMBLOB NOT NULL);
-
+ lcc_title VARCHAR(255) BINARY NOT NULL UNIQUE KEY,
+ lcc_cacheobj MEDIUMBLOB NOT NULL
+);
diff --git a/maintenance/archives/patch-list.txt b/maintenance/archives/patch-list.txt
index 9e8b82b114ba..888b602abd1e 100644
--- a/maintenance/archives/patch-list.txt
+++ b/maintenance/archives/patch-list.txt
@@ -163,3 +163,8 @@ patch-rc-newindex.sql
* 2004-02-14: Adds the ipb_expiry field to ipblocks
patch-ipb_expiry.sql
+* 2004-03-10: Slight change to linkscc table (link data corruption bug)
+Run this again to clear out and redeclare the linkscc table.
+You may also want to rebuild your links...
+patch-linkscc.sql
+
diff --git a/maintenance/archives/upgradeWatchlist.php b/maintenance/archives/upgradeWatchlist.php
index 95e8e2f99ce4..1027bb879660 100644
--- a/maintenance/archives/upgradeWatchlist.php
+++ b/maintenance/archives/upgradeWatchlist.php
@@ -1,4 +1,11 @@
<?php
+
+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;
diff --git a/maintenance/importPhase2.php b/maintenance/importPhase2.php
new file mode 100644
index 000000000000..e0c54b676c32
--- /dev/null
+++ b/maintenance/importPhase2.php
@@ -0,0 +1,349 @@
+<?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.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+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";
+include_once( "../LocalSettings.php" );
+include_once( "../AdminSettings.php" );
+
+$wgDBuser = $wgDBadminuser;
+$wgDBpassword = $wgDBadminpassword;
+
+$sep = ( DIRECTORY_SEPARATOR == "\\" ) ? ";" : ":";
+ini_set( "include_path", "$IP$sep$include_path" );
+
+include_once( "Setup.php" );
+
+include_once( "../install-utils.inc" );
+include_once( "InitialiseMessages.inc" );
+include_once( "rebuildlinks.inc" );
+include_once( "rebuildrecentchanges.inc" );
+include_once( "rebuildtextindex.inc" );
+
+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_WRITE );
+
+ 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,inverse_timestamp)
+ 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,99999999999999-cur_timestamp
+ FROM {$this->olddb}.cur", DB_WRITE );
+ $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_WRITE );
+
+ 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,inverse_timestamp)
+ SELECT old_id,0,old_title,old_text,old_comment,
+ old_user,old_user_text,old_timestamp,old_minor_edit,'',99999999999999-old_timestamp
+ FROM {$this->olddb}.old", DB_WRITE );
+ $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_WRITE );
+
+ print "Importing user data...\n";
+ wfQuery( "INSERT INTO $newdb.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_WRITE );
+ $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_WRITE );
+
+ print "Importing watchlists...";
+ $res = wfQuery( "SELECT user_id,user_watch FROM {$this->olddb}.user WHERE user_watch != ''", DB_WRITE );
+ $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_WRITE );
+ }
+ }
+ 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_WRITE );
+ wfQuery( "DELETE FROM brokenlinks", DB_WRITE );
+
+ 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_WRITE );
+ $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_WRITE );
+ $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_WRITE );
+ $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_WRITE );
+ }
+ if( ++$n % 50 == 0 ) {
+ print "$n\n";
+ }
+ }
+ wfFreeResult( $res );
+ }
+
+ function rewriteUserOptions( $in )
+ {
+ $s = urldecode( $in );
+ $a = explode( "\n", $s );
+
+ foreach ( $a as $l ) {
+ 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_WRITE );
+ $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_WRITE );
+ if( ++$n % 50 == 0 ) {
+ print "$n\n";
+ }
+ }
+ wfFreeResult( $res );
+ }
+
+}
+
+class TitleCache {
+ var $hash = array();
+
+ function &fetch( $dbkey ) {
+ if( !isset( $hash[$dbkey] ) ) {
+ $hash[$dbkey] = Title::newFromDBkey( $dbkey );
+ }
+ return $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();
+
+?> \ No newline at end of file
diff --git a/maintenance/indexes.sql b/maintenance/indexes.sql
index 90155c0639b5..025d3122ca4c 100644
--- a/maintenance/indexes.sql
+++ b/maintenance/indexes.sql
@@ -27,14 +27,6 @@ ALTER TABLE old
ADD INDEX user_timestamp (old_user,inverse_timestamp),
ADD INDEX usertext_timestamp (old_user_text,inverse_timestamp);
-ALTER TABLE links
- ADD INDEX l_from (l_from),
- ADD INDEX l_to (l_to);
-
-ALTER TABLE brokenlinks
- ADD INDEX bl_from (bl_from),
- ADD INDEX bl_to (bl_to);
-
ALTER TABLE imagelinks
ADD INDEX il_from (il_from(10)),
ADD INDEX il_to (il_to(10));
diff --git a/maintenance/rebuildrecentchanges.inc b/maintenance/rebuildrecentchanges.inc
index acc82f5f7475..d14a4b9f34f9 100644
--- a/maintenance/rebuildrecentchanges.inc
+++ b/maintenance/rebuildrecentchanges.inc
@@ -5,29 +5,7 @@
function rebuildRecentChangesTablePass1()
{
- $sql = "DROP TABLE IF EXISTS recentchanges";
- wfQuery( $sql, DB_WRITE );
-
- $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_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',
- 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;";
+ $sql = "DELETE FROM recentchanges";
wfQuery( $sql, DB_WRITE );
print( "Loading from CUR table...\n" );
@@ -37,17 +15,18 @@ function rebuildRecentChangesTablePass1()
"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,0,cur_is_new,cur_id,0,0 FROM cur " .
- "ORDER BY cur_timestamp DESC LIMIT 5000";
+ "ORDER BY inverse_timestamp LIMIT 5000";
wfQuery( $sql, DB_WRITE );
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_bot,rc_new," .
- "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT old_timestamp,''," .
+ "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT old_timestamp,cur_timestamp," .
"old_user,old_user_text,old_namespace,old_title,old_comment," .
- "old_minor_edit,0,0,0,old_id,0 FROM old ORDER BY old_timestamp " .
- "DESC LIMIT 5000";
+ "old_minor_edit,0,0,cur_id,old_id,0 FROM old,cur " .
+ "WHERE old_namespace=cur_namespace AND old_title=cur_title ORDER BY old.inverse_timestamp " .
+ "LIMIT 5000";
wfQuery( $sql, DB_WRITE );
$sql = "SELECT rc_timestamp FROM recentchanges " .
@@ -67,50 +46,42 @@ function rebuildRecentChangesTablePass2()
print( "Updating links...\n" );
- $sql = "SELECT rc_namespace,rc_title,rc_timestamp FROM recentchanges " .
- "ORDER BY rc_namespace,rc_title,rc_timestamp DESC";
+ # 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 = wfQuery( $sql, DB_WRITE );
+ $lastCurId = 0;
+ $lastOldId = 0;
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, DB_WRITE );
- $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}' ORDER BY old_timestamp DESC";
- $res2 = wfQuery( $sql, DB_WRITE );
- $numRows = wfNumRows( $res2 );
+ $new = 0;
+ if( $obj->rc_cur_id != $lastCurId ) {
+ # Switch! Look up the previous last edit, if any
+ $lastCurId = IntVal( $obj->rc_cur_id );
+ $emit = wfInvertTimestamp( $obj->rc_timestamp );
+ $sql2 = "SELECT old_id FROM old,cur " .
+ "WHERE old_namespace=cur_namespace AND old_title=cur_title AND cur_id={$lastCurId} ".
+ "AND old.inverse_timestamp>'{$emit}' ORDER BY old.inverse_timestamp LIMIT 1";
+ $res2 = wfQuery( $sql2, DB_WRITE );
+ if( $row = wfFetchObject( $res2 ) ) {
+ $lastOldId = IntVal( $row->old_id );
+ } else {
+ # No previous edit
+ $lastOldId = 0;
+ $new = 1;
+ }
+ wfFreeResult( $res2 );
}
-
- if ( 0 != $numRows-- ) {
- $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, DB_WRITE );
+ if( $lastCurId == 0 ) {
+ print "Uhhh, something wrong? No curid\n";
} 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, DB_WRITE );
- }
-
- if ( 0 == ( ++$count % 500 ) ) {
- printf( "%d records processed.\n", $count );
+ $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}";
+ wfQuery( $sql3, DB_WRITE );
+ $lastOldId = IntVal( $obj->rc_this_oldid );
}
}
+ wfFreeResult( $res );
}
?>
diff --git a/maintenance/tables.sql b/maintenance/tables.sql
index c4a513338642..c76beeedfff6 100644
--- a/maintenance/tables.sql
+++ b/maintenance/tables.sql
@@ -9,7 +9,6 @@
-- file, please add an appropriate ALTER TABLE to update.php,
-- and increment the version number in Version.php.
-DROP TABLE IF EXISTS user;
CREATE TABLE user (
user_id int(5) unsigned NOT NULL auto_increment,
user_name varchar(255) binary NOT NULL default '',
@@ -20,15 +19,13 @@ CREATE TABLE user (
user_options blob NOT NULL default '',
user_touched char(14) binary NOT NULL default '',
UNIQUE KEY user_id (user_id)
-) TYPE=MyISAM PACK_KEYS=1;
-
-DROP TABLE IF EXISTS user_newtalk;
+) PACK_KEYS=1;
+
CREATE TABLE user_newtalk (
user_id int(5) NOT NULL default '0',
user_ip varchar(40) NOT NULL default ''
-) TYPE=MyISAM;
+);
-DROP TABLE IF EXISTS cur;
CREATE TABLE cur (
cur_id int(8) unsigned NOT NULL auto_increment,
cur_namespace tinyint(2) unsigned NOT NULL default '0',
@@ -47,9 +44,8 @@ CREATE TABLE cur (
cur_touched char(14) binary NOT NULL default '',
inverse_timestamp char(14) binary NOT NULL default '',
UNIQUE KEY cur_id (cur_id)
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS old;
CREATE TABLE old (
old_id int(8) unsigned NOT NULL auto_increment,
old_namespace tinyint(2) unsigned NOT NULL default '0',
@@ -63,9 +59,8 @@ CREATE TABLE old (
old_flags tinyblob NOT NULL default '',
inverse_timestamp char(14) binary NOT NULL default '',
UNIQUE KEY old_id (old_id)
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS archive;
CREATE TABLE archive (
ar_namespace tinyint(2) unsigned NOT NULL default '0',
ar_title varchar(255) binary NOT NULL default '',
@@ -76,48 +71,45 @@ CREATE TABLE archive (
ar_timestamp char(14) binary NOT NULL default '',
ar_minor_edit tinyint(1) NOT NULL default '0',
ar_flags tinyblob NOT NULL default ''
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS links;
CREATE TABLE links (
l_from varchar(255) binary NOT NULL default '',
- l_to int(8) unsigned NOT NULL default '0'
-) TYPE=MyISAM;
+ l_to int(8) unsigned NOT NULL default '0',
+ unique key l_from(l_from,l_to),
+ key (l_to)
+);
-DROP TABLE IF EXISTS brokenlinks;
CREATE TABLE brokenlinks (
bl_from int(8) unsigned NOT NULL default '0',
- bl_to varchar(255) binary NOT NULL default ''
-) TYPE=MyISAM;
+ bl_to varchar(255) binary NOT NULL default '',
+ unique key bl_from(bl_from,bl_to),
+ key (bl_to)
+);
-DROP TABLE IF EXISTS linkscc;
CREATE TABLE linkscc (
lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY,
- lcc_title VARCHAR(255) NOT NULL UNIQUE KEY,
+ lcc_title VARCHAR(255) binary NOT NULL UNIQUE KEY,
lcc_cacheobj MEDIUMBLOB NOT NULL
-) TYPE=MyISAM;
+);
-DROP TABLE IF EXISTS imagelinks;
CREATE TABLE imagelinks (
il_from varchar(255) binary NOT NULL default '',
il_to varchar(255) binary NOT NULL default ''
-) TYPE=MyISAM;
+);
-DROP TABLE IF EXISTS site_stats;
CREATE TABLE site_stats (
ss_row_id int(8) unsigned NOT NULL,
ss_total_views bigint(20) unsigned default '0',
ss_total_edits bigint(20) unsigned default '0',
ss_good_articles bigint(20) unsigned default '0',
UNIQUE KEY ss_row_id (ss_row_id)
-) TYPE=MyISAM;
+);
-DROP TABLE IF EXISTS hitcounter;
CREATE TABLE hitcounter (
hc_id INTEGER UNSIGNED NOT NULL
) TYPE=HEAP MAX_ROWS=25000;
-DROP TABLE IF EXISTS ipblocks;
CREATE TABLE ipblocks (
ipb_id int(8) NOT NULL auto_increment,
ipb_address varchar(40) binary NOT NULL default '',
@@ -128,9 +120,8 @@ CREATE TABLE ipblocks (
ipb_auto tinyint(1) NOT NULL default '0',
ipb_expiry char(14) binary NOT NULL default '',
UNIQUE KEY ipb_id (ipb_id)
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS image;
CREATE TABLE image (
img_name varchar(255) binary NOT NULL default '',
img_size int(8) unsigned NOT NULL default '0',
@@ -138,9 +129,8 @@ CREATE TABLE image (
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 ''
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS oldimage;
CREATE TABLE oldimage (
oi_name varchar(255) binary NOT NULL default '',
oi_archive_name varchar(255) binary NOT NULL default '',
@@ -149,9 +139,8 @@ CREATE TABLE oldimage (
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 ''
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS recentchanges;
CREATE TABLE recentchanges (
rc_timestamp varchar(14) binary NOT NULL default '',
rc_cur_time varchar(14) binary NOT NULL default '',
@@ -169,17 +158,15 @@ CREATE TABLE recentchanges (
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 ''
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS watchlist;
CREATE TABLE watchlist (
wl_user int(5) unsigned NOT NULL,
wl_namespace tinyint(2) unsigned NOT NULL default '0',
wl_title varchar(255) binary NOT NULL default '',
UNIQUE KEY (wl_user, wl_namespace, wl_title)
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS math;
CREATE TABLE math (
math_inputhash varchar(16) NOT NULL,
math_outputhash varchar(16) NOT NULL,
@@ -187,20 +174,18 @@ CREATE TABLE math (
math_html text,
math_mathml text,
UNIQUE KEY math_inputhash (math_inputhash)
-) TYPE=MyISAM;
+);
-- Table searchindex must be MyISAM for fulltext support
-DROP TABLE IF EXISTS searchindex;
CREATE TABLE searchindex (
si_page int(8) unsigned NOT NULL,
si_title varchar(255) NOT NULL default '',
si_text mediumtext NOT NULL default '',
UNIQUE KEY (si_page)
-) TYPE=MyISAM PACK_KEYS=1;
+) PACK_KEYS=1;
-DROP TABLE IF EXISTS interwiki;
CREATE TABLE interwiki (
iw_prefix char(32) NOT NULL,
iw_url char(127) NOT NULL,
diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc
new file mode 100644
index 000000000000..c1d1c72c2bd6
--- /dev/null
+++ b/maintenance/updaters.inc
@@ -0,0 +1,133 @@
+<?php
+
+function do_revision_updates() {
+ global $wgSoftwareRevision;
+ if ( $wgSoftwareRevision < 1001 ) {
+ update_passwords();
+ }
+}
+
+function update_passwords() {
+ 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_ipblocks_update() {
+ global $wgDatabase;
+
+ $do1 = $do2 = false;
+
+ if ( !$wgDatabase->fieldExists( "ipblocks", "ipb_id" ) ) {
+ $do1 = true;
+ }
+ if ( !$wgDatabase->fieldExists( "ipblocks", "ipb_expiry" ) ) {
+ $do2 = true;
+ }
+
+ if ( $do1 || $do2 ) {
+ echo "Updating ipblocks table... ";
+ if ( $do1 ) {
+ dbsource( "maintenance/archives/patch-ipblocks.sql", $wgDatabase );
+ }
+ if ( $do2 ) {
+ dbsource( "maintenance/archives/patch-ipb_expiry.sql", $wgDatabase );
+ }
+ echo "ok\n";
+ } else {
+ echo "...ipblocks is up to date.\n";
+ }
+
+}
+
+
+function do_interwiki_update() {
+ # Check that interwiki table exists; if it doesn't source it
+ global $wgDatabase;
+ if( $wgDatabase->tableExists( "interwiki" ) ) {
+ echo "...already have interwiki table\n";
+ return true;
+ }
+ echo "Creating interwiki table: ";
+ dbsource( "maintenance/archives/patch-interwiki.sql" );
+ echo "ok\n";
+ echo "Adding default interwiki definitions: ";
+ dbsource( "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->multiple_key == 0 ) {
+ echo "Updating indexes to 20031107: ";
+ dbsource( "maintenance/archives/patch-indexes.sql" );
+ echo "ok\n";
+ return true;
+ }
+ echo "...indexes seem up to 20031107 standards\n";
+ return false;
+}
+
+function do_linkscc_update() {
+ // Create linkscc if necessary
+ global $wgDatabase;
+ if( $wgDatabase->tableExists( "linkscc" ) ) {
+ $res = $wgDatabase->query( "SELECT lcc_title FROM linkscc WHERE 0 LIMIT 1" );
+ $flags = mysql_field_flags( $res, 0 );
+ if( strpos( $flags, "binary" ) !== false ) {
+ echo "...have linkscc table.\n";
+ return;
+ } else {
+ echo "...linkscc table possibly corrupt, redefining... ";
+ # fall through
+ }
+ }
+ echo "Adding linkscc table... ";
+ dbsource( "maintenance/archives/patch-linkscc.sql", $wgDatabase );
+ echo "ok\n";
+}
+
+function do_hitcounter_update() {
+ // Create hitcounter if necessary
+ global $wgDatabase;
+ if( $wgDatabase->tableExists( "hitcounter" ) ) {
+ echo "...have hitcounter table.\n";
+ } else {
+ echo "Adding hitcounter table... ";
+ dbsource( "maintenance/archives/patch-hitcounter.sql", $wgDatabase );
+ echo "ok\n";
+ }
+}
+
+function do_recentchanges_update() {
+ global $wgDatabase;
+ if ( !$wgDatabase->fieldExists( "recentchanges", "rc_type" ) ) {
+ echo "Adding rc_type, rc_moved_to_ns, rc_moved_to_title...";
+ dbsource( "maintenance/archives/patch-rc_type.sql" , $wgDatabase );
+ echo "ok\n";
+ }
+}
+
+?> \ No newline at end of file
diff --git a/rdf/recent.phtml b/rdf/recent.phtml
deleted file mode 100644
index f96ad2c64782..000000000000
--- a/rdf/recent.phtml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-include("Setup.php");
-header("Content-type: text/xml; charset=utf-8");
-echo "<?xml version=\"1.0\"?>";
-
-if( $style == "new" ) {
- $addl = " - " . wfMsg( "newpages");
-} else {
- $addl = "";
-}
-
-?>
-
-<rdf:RDF
-xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-xmlns="http://my.netscape.com/rdf/simple/0.9/">
-
-<channel>
-<title><?php echo iconv($wgInputEncoding, "utf-8", wfMsg("sitetitle") . $addl ) ?></title>
-<link><?php echo $wgServer ?></link>
-<description><?php echo iconv($wgInputEncoding, "utf-8", wfMsg("sitesubtitle") ) ?></description>
-</channel>
-
-<?php
-#<image>
-#<title>Wikipedia</title>
-#<url>...</url>
-#<link>http://wikipedia.org/</link>
-#</image>
-
-if(isset($limit)) {
- if( $limit < 1) $limit = 1;
- if( $tlimit > 500) $limit = 500;
-}
-if(!isset($limit)) $limit = 10;
-
-if($style == 'new') {
- # 10 newest articles
-$sql = "SELECT rc_title as cur_title, rc_comment as cur_comment FROM recentchanges,cur
-WHERE rc_cur_id=cur_id AND rc_new=1 AND rc_namespace=0 AND cur_is_redirect=0
-AND LENGTH(cur_text) > 75
-ORDER BY rc_timestamp DESC LIMIT {$limit}";
-} else {
- # 10 most recently edit articles that aren't frickin tiny
-$sql = "SELECT rc_title as cur_title,rc_comment as cur_comment FROM recentchanges,cur
-WHERE rc_cur_id=cur_id AND rc_namespace=0 AND rc_this_oldid=0 AND cur_is_redirect=0
-AND LENGTH(cur_text) > 150
-ORDER BY rc_timestamp DESC LIMIT {$limit}";
-}
-$res = wfQuery( $sql );
-
-while( $row = wfFetchObject( $res ) ) {
- $title = htmlspecialchars(
- iconv($wgInputEncoding, "utf-8",
- str_replace( "_", " ", $row->cur_title ) ) );
- $url = wfFullUrl( wfUrlencode( $row->cur_title ) );
- $description = "<description>" . iconv($wgInputEncoding, "utf-8",
- htmlspecialchars( $row->cur_comment )) . "</description>";
- echo "
-<item>
-<title>{$title}</title>
-<link>{$url}</link>
-{$description}
-</item>
-";
-}
-
-#<textinput>
-#<title>Search Wikipedia</title>
-#<description>Search Wikipedia articles</description>
-#<name>query</name>
-#<link>http://www.wikipedia.org/w/wiki.phtml?search=</link>
-#</textinput>
-?>
-
-</rdf:RDF> \ No newline at end of file
diff --git a/stylesheets/sticky.js b/stylesheets/sticky.js
index 56da81e77341..cf248c3e3606 100644
--- a/stylesheets/sticky.js
+++ b/stylesheets/sticky.js
@@ -15,7 +15,7 @@ lastY=10;YOffset=0;staticYOffset=10;refreshMS=25;
function setup(eID){
bw=new checkBrowser;
if(bw.ns4||bw.opera){MM_reloadPage(true);}
- var noFix=bw.ie4||bw.ns4||(bw.ns6&&bw.mac)||(bw.macie50)?true:false;
+ 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";}
diff --git a/stylesheets/wikibits.js b/stylesheets/wikibits.js
index d7dcf7acec78..f4dbaa76d2c1 100644
--- a/stylesheets/wikibits.js
+++ b/stylesheets/wikibits.js
@@ -1,5 +1,8 @@
// Wikipedia JavaScript support functions
+// 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 );
@@ -99,19 +102,29 @@ function addInfobox(infoText) {
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
&& (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1)
- && (clientPC.indexOf('khtml')==-1));
+ && (clientPC.indexOf('khtml')==-1) && (clientPC.indexOf('gecko')==-1));
if(!document.selection && !is_nav) {
+ infoText=escapeQuotesHTML(infoText);
document.write("<form name='infoform' id='infoform'>"+
- "<input size=80 id='infobox' name='infobox' value='"+
- infoText+"' READONLY></form>");
+ "<input size=80 id='infobox' name='infobox' value=\""+
+ infoText+"\" READONLY></form>");
}
}
function escapeQuotes(text) {
+ var re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
- text=text.replace(/'/g,"\\'");
- text=text.replace(/\n/g,"\\n");
+function escapeQuotesHTML(text) {
+ var re=new RegExp('"',"g");
+ text=text.replace(re,"&quot;");
return text;
}
@@ -132,8 +145,8 @@ function insertTags(tagOpen, tagClose, sampleText) {
} else {
document.selection.createRange().text = tagOpen + theSelection + tagClose;
}
- // Mozilla
- } else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
+ // Mozilla -- disabled because it induces a scrolling bug which makes it virtually unusable
+ } else if(false && txtarea.selectionStart || txtarea.selectionStart == '0') {
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
var myText = (txtarea.value).substring(startPos, endPos);
@@ -153,8 +166,9 @@ function insertTags(tagOpen, tagClose, sampleText) {
// Append at the end: Some people find that annoying
//txtarea.value += tagOpen + sampleText + tagClose;
//txtarea.focus();
- tagOpen=tagOpen.replace(/\n/g,"");
- tagClose=tagClose.replace(/\n/g,"");
+ var re=new RegExp("\\n","g");
+ tagOpen=tagOpen.replace(re,"");
+ tagClose=tagClose.replace(re,"");
document.infoform.infobox.value=tagOpen+sampleText+tagClose;
txtarea.focus();
}
diff --git a/update.php b/update.php
index 6c6db170491d..fb954f4b8e1a 100644
--- a/update.php
+++ b/update.php
@@ -4,6 +4,7 @@
#
include( "./install-utils.inc" );
+include_once( "./maintenance/updaters.inc" );
install_version_checks();
if ( ! ( is_readable( "./LocalSettings.php" )
@@ -19,6 +20,10 @@ include_once( "./AdminSettings.php" );
include( "$IP/Version.php" );
+if( $wgSitename == "MediaWiki" ) {
+ die( "You must set the site name in \$wgSitename before installation.\n\n" );
+}
+
if ( $wgUseTeX && ( ! is_executable( "./math/texvc" ) ) ) {
print "To use math functions, you must first compile texvc by\n" .
"running \"make\" in the math directory.\n";
@@ -74,6 +79,7 @@ function do_update_files() {
global $IP, $wgStyleSheetDirectory, $wgUploadDirectory, $wgLanguageCode, $wgDebugLogFile;
print "Copying files... ";
+ copyfile( ".", "LocalSettings.php", $IP );
copyfile( ".", "index.php", $IP );
copyfile( ".", "redirect.php", $IP );
# compatibility with older versions, can be removed in a year or so
@@ -97,8 +103,14 @@ function do_update_files() {
copyfile( "./images", "button_nowiki.png", $wgUploadDirectory );
copyfile( "./images", "button_sig.png", $wgUploadDirectory );
copyfile( "./images", "button_template.png", $wgUploadDirectory );
+ copyfile( "./images", "magnify-clip.png", $wgUploadDirectory );
+ copyfile( "./images", "Arr_.png", $wgUploadDirectory );
+ copyfile( "./images", "Arr_r.png", $wgUploadDirectory );
+ copyfile( "./images", "Arr_d.png", $wgUploadDirectory );
+ copyfile( "./images", "Arr_l.png", $wgUploadDirectory );
copyfile( "./languages", "Language.php", $IP );
+ copyfile( "./languages", "LanguageUtf8.php", $IP );
copyfile( "./languages", "Language" . ucfirst( $wgLanguageCode ) . ".php", $IP );
if( !empty( $wgDebugLogFile ) ) {
@@ -123,127 +135,4 @@ function do_update_files() {
print "ok\n";
}
-function do_revision_updates() {
- global $wgSoftwareRevision;
- if ( $wgSoftwareRevision < 1001 ) {
- update_passwords();
- }
-}
-
-function update_passwords() {
- 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_ipblocks_update() {
- global $wgDatabase;
-
- $do1 = $do2 = false;
-
- if ( !$wgDatabase->fieldExists( "ipblocks", "ipb_id" ) ) {
- $do1 = true;
- }
- if ( !$wgDatabase->fieldExists( "ipblocks", "ipb_expiry" ) ) {
- $do2 = true;
- }
-
- if ( $do1 || $do2 ) {
- echo "Updating ipblocks table... ";
- if ( $do1 ) {
- dbsource( "maintenance/archives/patch-ipblocks.sql", $wgDatabase );
- }
- if ( $do2 ) {
- dbsource( "maintenance/archives/patch-ipb_expiry.sql", $wgDatabase );
- }
- echo "ok\n";
- } else {
- echo "...ipblocks is up to date.\n";
- }
-
-}
-
-
-function do_interwiki_update() {
- # Check that interwiki table exists; if it doesn't source it
- global $wgDatabase;
- if( $wgDatabase->tableExists( "interwiki" ) ) {
- echo "...already have interwiki table\n";
- return true;
- }
- echo "Creating interwiki table: ";
- dbsource( "maintenance/archives/patch-interwiki.sql" );
- echo "ok\n";
- echo "Adding default interwiki definitions: ";
- dbsource( "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->multiple_key == 0 ) {
- echo "Updating indexes to 20031107: ";
- dbsource( "maintenance/archives/patch-indexes.sql" );
- echo "ok\n";
- return true;
- }
- echo "...indexes seem up to 20031107 standards\n";
- return false;
-}
-
-function do_linkscc_update() {
- // Create linkscc if necessary
- global $wgDatabase;
- if( $wgDatabase->tableExists( "linkscc" ) ) {
- echo "...have linkscc table.\n";
- } else {
- echo "Adding linkscc table... ";
- dbsource( "maintenance/archives/patch-linkscc.sql", $wgDatabase );
- echo "ok\n";
- }
-}
-
-function do_hitcounter_update() {
- // Create hitcounter if necessary
- global $wgDatabase;
- if( $wgDatabase->tableExists( "hitcounter" ) ) {
- echo "...have hitcounter table.\n";
- } else {
- echo "Adding hitcounter table... ";
- dbsource( "maintenance/archives/patch-hitcounter.sql", $wgDatabase );
- echo "ok\n";
- }
-}
-
-function do_recentchanges_update() {
- global $wgDatabase;
- if ( !$wgDatabase->fieldExists( "recentchanges", "rc_type" ) ) {
- echo "Adding rc_type, rc_moved_to_ns, rc_moved_to_title...";
- dbsource( "maintenance/archives/patch-rc_type.sql" , $wgDatabase );
- echo "ok\n";
- }
-}
-
?>