summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@localhost>2004-12-10 06:30:08 +0000
committernobody <nobody@localhost>2004-12-10 06:30:08 +0000
commitb6c9b15bbd1019cf469e94e4ff3387d778e5976e (patch)
tree09416e32730caa1374fa387ca00dc921b68c6a75
parentbfed84f2afdb77aaebaa017d8151226c0c300cf6 (diff)
parent9aff119a266ca37f390450fba1c4c7fc65b0e889 (diff)
This commit was manufactured by cvs2svn to create tag 'REL1_4beta2'.1.4.0beta2
-rw-r--r--RELEASE-NOTES157
-rw-r--r--UPGRADE135
-rw-r--r--config/index.php60
-rw-r--r--config/installer.php276
-rw-r--r--docs/design.doc8
-rw-r--r--extensions/Syslog.php136
-rw-r--r--includes/Article.php5
-rw-r--r--includes/CategoryPage.php5
-rw-r--r--includes/ChangesList.php2
-rw-r--r--includes/DatabasePostgreSQL.php2
-rw-r--r--includes/DefaultSettings.php26
-rw-r--r--includes/DifferenceEngine.php12
-rw-r--r--includes/EditPage.php10
-rw-r--r--includes/GlobalFunctions.php58
-rw-r--r--includes/ImageGallery.php37
-rw-r--r--includes/ImagePage.php39
-rw-r--r--includes/LoadBalancer.php22
-rwxr-xr-xincludes/MessageCache.php15
-rw-r--r--includes/OutputPage.php2
-rw-r--r--includes/Parser.php11
-rw-r--r--includes/RecentChange.php2
-rw-r--r--includes/Setup.php44
-rw-r--r--includes/Skin.php13
-rw-r--r--includes/SkinTemplate.php4
-rw-r--r--includes/SpecialAllmessages.php11
-rw-r--r--includes/SpecialBrokenRedirects.php2
-rw-r--r--includes/SpecialDoubleRedirects.php2
-rw-r--r--includes/SpecialListadmins.php50
-rw-r--r--includes/SpecialListusers.php67
-rw-r--r--includes/SpecialMakesysop.php5
-rw-r--r--includes/SpecialNewimages.php8
-rw-r--r--includes/SpecialPage.php13
-rw-r--r--includes/SpecialPreferences.php7
-rw-r--r--includes/SpecialRecentchangeslinked.php24
-rwxr-xr-xincludes/SpecialUncategorizedcategories.php36
-rwxr-xr-xincludes/SpecialUncategorizedpages.php5
-rw-r--r--includes/Title.php19
-rw-r--r--includes/User.php173
-rw-r--r--includes/normal/README21
-rw-r--r--includes/normal/UtfNormalGenerate.php5
-rw-r--r--includes/templates/Userlogin.php4
-rw-r--r--includes/zhtable/Makefile7
-rw-r--r--index.php4
-rw-r--r--install-utils.inc4
-rw-r--r--irc/rcdumper.php44
-rw-r--r--languages/Language.php71
-rw-r--r--languages/LanguageAf.php24
-rw-r--r--languages/LanguageBg.php4
-rw-r--r--languages/LanguageBn.php24
-rw-r--r--languages/LanguageCa.php28
-rw-r--r--languages/LanguageCs.php22
-rw-r--r--languages/LanguageCy.php34
-rw-r--r--languages/LanguageDa.php38
-rw-r--r--languages/LanguageDe.php30
-rw-r--r--languages/LanguageEs.php34
-rw-r--r--languages/LanguageEt.php24
-rw-r--r--languages/LanguageFa.php32
-rw-r--r--languages/LanguageFi.php22
-rw-r--r--languages/LanguageFo.php6
-rw-r--r--languages/LanguageFr.php4
-rw-r--r--languages/LanguageFy.php32
-rwxr-xr-xlanguages/LanguageGa.php42
-rw-r--r--languages/LanguageHe.php24
-rw-r--r--languages/LanguageHu.php24
-rw-r--r--languages/LanguageIa.php22
-rw-r--r--languages/LanguageIs.php2
-rw-r--r--languages/LanguageIt.php80
-rw-r--r--languages/LanguageJa.php12
-rw-r--r--languages/LanguageKo.php22
-rw-r--r--languages/LanguageLatin1.php12
-rw-r--r--languages/LanguageLi.php26
-rw-r--r--languages/LanguageLt.php8
-rw-r--r--languages/LanguageMs.php22
-rw-r--r--languages/LanguageNl.php32
-rw-r--r--languages/LanguageNo.php34
-rw-r--r--languages/LanguageOc.php36
-rw-r--r--languages/LanguagePl.php34
-rw-r--r--languages/LanguagePt.php28
-rw-r--r--languages/LanguageRo.php38
-rw-r--r--languages/LanguageRu.php26
-rw-r--r--languages/LanguageSc.php42
-rw-r--r--languages/LanguageSk.php22
-rw-r--r--languages/LanguageSl.php24
-rw-r--r--languages/LanguageSq.php32
-rw-r--r--languages/LanguageSr.php28
-rw-r--r--languages/LanguageSv.php22
-rw-r--r--languages/LanguageTa.php28
-rw-r--r--languages/LanguageTh.php32
-rw-r--r--languages/LanguageTt.php4
-rwxr-xr-xlanguages/LanguageUk.php28
-rw-r--r--languages/LanguageWa.php32
-rw-r--r--languages/LanguageZh.php30
-rw-r--r--languages/LanguageZh_cn.php36
-rw-r--r--languages/LanguageZh_tw.php26
-rw-r--r--languages/Names.php5
-rwxr-xr-xmaintenance/InitialiseMessages.inc46
-rw-r--r--maintenance/archives/importTests.php275
-rw-r--r--maintenance/archives/importUseModWiki.php486
-rw-r--r--maintenance/archives/patch-group-sysopfix.sql7
-rw-r--r--maintenance/archives/patch-rename-user_groups-and_rights.sql9
-rw-r--r--maintenance/archives/patch-rename-user_rights.sql5
-rw-r--r--maintenance/archives/patch-userlevels-defaultgroups.sql13
-rw-r--r--maintenance/archives/patch-userlevels-rights.sql5
-rw-r--r--maintenance/archives/patch-userlevels.sql20
-rw-r--r--maintenance/changeuser.sql16
-rw-r--r--maintenance/commandLine.inc2
-rw-r--r--maintenance/convertUtf8.php203
-rw-r--r--maintenance/importUseModWiki.php3
-rw-r--r--maintenance/initialdata.sql18
-rw-r--r--maintenance/interwiki.sql2
-rw-r--r--maintenance/recount.sql4
-rw-r--r--maintenance/tables.sql71
-rw-r--r--maintenance/update.php6
-rw-r--r--maintenance/updaters.inc40
-rw-r--r--maintenance/users.sql96
-rw-r--r--maintenance/wikipedia-interwiki.sql2
-rw-r--r--maintenance/wiktionary-interwiki.sql2
-rw-r--r--skins/CologneBlue.php3
-rw-r--r--skins/MonoBook.php5
-rw-r--r--skins/MySkin.php3
-rw-r--r--skins/Nostalgia.php3
-rw-r--r--skins/Standard.php3
-rw-r--r--skins/disabled/Amethyst.php3
-rw-r--r--skins/disabled/Chick.php3
-rw-r--r--skins/disabled/MonoBookTal.php3
-rw-r--r--skins/disabled/WikimediaWiki.php3
-rw-r--r--soap/client.php45
-rw-r--r--soap/index.php362
-rw-r--r--soap/nusoap.php5574
-rw-r--r--tests/.htaccess1
-rw-r--r--texvc.phtml165
131 files changed, 1574 insertions, 8869 deletions
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index a674ad86cbcc..a2c5fa6ab0cd 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -4,36 +4,125 @@ Security reminder: MediaWiki does not require PHP's register_globals
setting since version 1.2.0. If you have it on, turn it *off* if you can.
-== MediaWiki 1.4 BETA ==
-
-[Not everything is 100% working in beta yet, the installer needs fixes still.]
-
-Major changes from 1.3.x:
-* (?) Support for table prefixes for better sharing with other web apps
-* (?) PostgreSQL support
-* Optional article validation voting features
-* 'Recentchanges Patrol' to mark new edits that haven't yet been viewed
-* Support for faster C++ diff module (WikiDiff extension)
-* More scary link caching modes
-* Old manually maintained log pages replaced with searchable Special:Log
+== MediaWiki 1.4 BETA 2 ==
+
+''''' Thinking of using MySQL 4.1? Please read this first! '''''
+''''' Your PHP installation probably uses the OLD protocol '''''
+''''' http://dev.mysql.com/doc/mysql/en/Old_client.html '''''
+
+This is a beta release; while most things are working, there are some
+known problems and probably unknown problems. Don't run a public site
+on this beta unless you're willing to help with investigating and
+fixing any problems you encounter.
+
+CARELESS USE OF THIS CODE MAY RENDER YOU STERILE, GROW WEEDS IN YOUR
+YARD, AND FEED YOUR CAT TO A SEWER ALLIGATOR. DON'T SAY YOU WEREN'T
+WARNED, CAUSE WE WARNED YOU.
+
+If upgrading from an older release, see the file UPGRADING.
+
+=== New features ===
+
+* 'Recentchanges Patrol' to mark new edits that haven't yet been viewed.
+* New, searchable deletion/upload/protection logs
+* Image gallery generation (Special:Newimages and <gallery> tag)
+* SVG rasterization support (requires external support)
+* Users can select from the available localizations to override the
+ default user interface language.
+* Traditional/Simplified Chinese conversion support
+
+=== Installation and compatibility ===
+
+* The default MonoBook theme now works with PHP 5.0
+* Installation on systems with PHP's safe mode or other oddities
+ should work more reliably, as MonoBook no longer needs to
+ create a compiled template file for the wiki to run.
+* A table prefix may be specified, to avoid conflicts with other
+ web applications forced to share a database.
+* More thorough UTF-8 input validation; fixes non-ASCII uploaded
+ filenames from Safari.
+* Command-line database upgrade script.
+
+=== Customizability ===
+
+* Default user options can now be overridden in LocalSettings.
* Skins system more modular: templates and CSS are now in /skins/
-* New user preference for limitting the image size for images on image description
- pages
-* Error pages no more offer edit / talk / watch links (bug #502)
-* Allow user to preview article on first edit (bug #530)
-* New dark background skin named Amethyst (thanks Sorwena and Sorkhiri)
-* [[RFC 1234]] will now make an internal link (bug #479)
-* PhpTal skins shown bogus 'What links here' etc on special pages (bug #511)
-* Experimental code to manage user and group rights (Special:Userlevels)
-* UI language switching
-* Adding filter and username exact search match for Special:Listusers (bug #770)
-* Special:Listadmins outdated, use Special:Listusers instead (bug #857)
-* Traditional/Simplified Chinese conversion
-* New tag "<gallery>" to generate a table of image thumbnails
-* Installer die if it can not write LocalSettings.php (bug #733)
-* Various special pages no more show the rss/atom feed links (bug #705)
-* Support for external authentication plug-ins
-* ... and more!
+ New skins can be dropped into this directory and used immediately.
+* More extension hooks have been added.
+* Authentication plugin hook.
+* More internal code documentation, generated with phpdoc:
+ http://www.mediawiki.org/docs/html/
+
+=== Optimization ===
+
+* For many operations, MediaWiki 1.4 should run faster and use
+ less memory than MediaWiki 1.3. Page rendering is up to twice
+ as fast. (Use a PHP accelerator such as Turck MMCache for best
+ results with any PHP application, though!)
+* The parser cache no longer requires memcached, and is enabled
+ by default. This avoids a lot of re-rendering of pages that
+ have been shown recently, greatly speeding longer page views.
+* Support for compiled PHP modules to speed up page diff and
+ Unicode validation/normalization. (Requires ability to compile
+ and load PHP extensions).
+
+=== What isn't ready yet ===
+
+* A new user/groups permissions scheme has been held back to 1.5.
+* An experimental SOAP interface will be made available as an extension
+* PostgreSQL support is largely working, but search and installer
+ support are not complete. These are being actively worked on
+ and should come in later betas.
+* E-mail notification of watched page changes and verification of
+ user-submitted e-mail addresses is not yet included. If updates
+ are available, this may make it into later betas.
+* Log pages are not automatically imported into the new log table
+ at upgrade time. A script to import old text log entries is
+ incomplete, but may be available by the time 1.4 finishes.
+* UI messages may be broken in Latin-1 mode in this release due to some
+ minor breakage in the language selection module.
+
+=== Misc bugs fixed in beta 1 ===
+
+* (bug 95) Templates no longer limited to 5 inclusions per page
+* New user preference for limiting the image size for images on image description
+ pages
+* (bug 530) Allow user to preview article on first edit
+* (bug 479) [[RFC 1234]] will now make an internal link
+* (bug 511) PhpTal skins shown bogus 'What links here' etc on special pages
+* (bug 770) Adding filter and username exact search match for Special:Listusers
+* (bug 733) Installer die if it can not write LocalSettings.php
+* (bug 705) Various special pages no more show the rss/atom feed links
+* (bug 114) use category backlinks in Special:Recentchangeslinked
+
+=== Beta 2 fixes ===
+
+* (bug 987) Reverted bogus fix for bug 502
+* (bug 992) Fix enhanced recent changes in PHP5
+* (bug 1009) Fix Special:Makesysop when using table prefixes
+* (bug 1010) fix broken Commons image link on Classic & Cologne Blue
+* (bug 985) Fix auto-summary for section edits
+* (bug 995) Close <a> tag
+* (bug 1004) renamed norsk language links (twice)
+* Login works again when using an old-style default skin
+* Fix for load balancing mode, notify if using old settings format
+* (bug 1014) Missing image size option on old accounts handled gracefully
+* (bug 1027) Fix page moves with table prefix
+* (bug 1018) Some pages fail with stub threshold enabled
+* (bug 1024) Fix link to high-res image version on Image: pages
+* (bug 1016) Fix handling of lines omitting Image: in a <gallery> tag
+* security fix for image galleries
+* (bug 1039) Avoid error message in certain message cache failure modes
+* Fix string escaping with PostgreSQL
+* (bug 1015) [partial] -- use comment formatter on image gallery text
+* Allow customization of all UI languages
+* use $wgForceUIMsgAsContentMsg to make regular UI messages act as content
+* new user option for zh users to disable language conversion
+* Defer message cache initialization, shaving a few ms off file cache hits
+* Fixed Special:Allmessages when using table prefixes
+* (bug 996) Fix $wgWhitelistRead to work again
+* (bug 1028) fix page move over redirect to not fail on the unique index
+
=== Caveats ===
@@ -43,10 +132,6 @@ set $wgMimeType = "application/xhtml+xml"; to test for remaining problem
cases, but this is not recommended on live sites. (This must be set for
MathML to display properly in Mozilla.)
-The new 'MonoBook' skin is not compatible with PHP 5 due to bugs in the
-underlying PHPTAL library. It will be automatically disabled when running
-on PHP5; the older look and feel will be used instead.
-
For notes on 1.3.x and older releases, see HISTORY.
@@ -67,6 +152,12 @@ wikitech-l list:
http://mail.wikipedia.org/mailman/listinfo/mediawiki-l
+A low-traffic announcements-only list is also available:
+ http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
=== IRC help ===
diff --git a/UPGRADE b/UPGRADE
new file mode 100644
index 000000000000..230ca3eba289
--- /dev/null
+++ b/UPGRADE
@@ -0,0 +1,135 @@
+== The basic theory ==
+
+Basically, to upgrade a wiki you:
+* Back up your data! (See Backups! below)
+* Extract the new archive. If you can do this in a clean directory that's
+ great, but it should work to extract over the old files too. This may
+ be easier if you have images etc in place and don't want to move them
+ around, but remember to back up first!
+* Run the installer to upgrade the database schema.
+
+=== Web installer ===
+
+You can use the web-based installer wizard if you first remove the
+LocalSettings.php (and AdminSettings.php, if any) files; be sure to
+give the installer the same information as you did on the original
+install (language/encoding, database name, password, etc). This will
+also generate a fresh LocalSettings.php, which you may need to customize.
+
+You may change some settings during the install, but be very careful!
+Changing the encoding in particular will generally leave you with a
+lot of corrupt pages, particularly if your wiki is not in English.
+
+=== Command-line upgrade ===
+
+Additionally, as of 1.4.0 you can run an in-place upgrade script from
+the command line, keeping your existing LocalSettings.php. This requires
+that you create an AdminSettings.php giving an appropriate database user
+and password with privileges to modify the database structure.
+
+Once the new files are in place, go into the maintenance subdirectory and
+run the script:
+
+ php update.php
+
+See caveats below on upgrading from 1.3.x or earlier.
+
+
+== Backups! ==
+
+To upgrade an existing MediaWiki installation, first BACK UP YOUR WIKI!
+If something goes wrong, you want to be able to start again.
+
+Your image files, configuration, etc can simply be copied or archived as
+you would any other files. (Make sure that the contents of your
+LocalSettings.php are not accidentally make public, as this contains
+a database password.)
+
+To back up the database, use the tools provided by your service provider
+(if applicable) or the standard mysqldump program.
+
+For general help on mysqldump:
+http://dev.mysql.com/doc/mysql/en/mysqldump.html
+
+WARNING: If using MySQL 4.1.x, mysqldump's charset conversion may in
+some cases damage data in your wiki. If necessary, set the charset
+option to 'latin1' to avoid the conversion. Fore more info see:
+http://mail.wikipedia.org/pipermail/wikitech-l/2004-November/026359.html
+
+
+== Caveats ==
+
+=== Upgrading from 1.4beta1 ===
+
+There are no database changes from beta1; just update the files.
+
+
+=== Upgrading from 1.3.x ===
+
+This should generally go smoothly.
+
+If you keep your LocalSettings.php, you may need to change the style paths
+to match the newly rearranged skin modules. Change these lines:
+ $wgStylePath = "$wgScriptPath/stylesheets";
+ $wgStyleDirectory = "$IP/stylesheets";
+ $wgLogo = "$wgStylePath/images/wiki.png";
+
+to this:
+ $wgStylePath = "$wgScriptPath/skins";
+ $wgStyleDirectory = "$IP/skins";
+ $wgLogo = "$wgStylePath/common/images/wiki.png";
+
+
+Note that the 1.3 beta releases included a potential vulnerability if PHP
+is configured with register_globals on and the includes directory is
+served to the web. For general safety, turn register_globals *off* if you
+don't _really_ need it for another package.
+
+If your hosting provider turns it on and you can't turn it off yourself,
+send them a kind note explaining that it can expose their servers and their
+customers to attacks.
+
+
+=== Upgrading from 1.2.x ===
+
+If you've been using the MediaWiki: namespace for custom page templates,
+note that things are a little different. The Template: namespace has been
+added which is more powerful -- templates can include parameters for
+instance.
+
+Any MediaWiki: entries that are not used by the software will be automatically
+moved to Template: entries at upgrade time. Be sure to go through and check
+that everything is working properly.
+
+Also, be sure to pick the correct character encoding -- some languages were
+only available in Latin-1 on 1.2.x and are now available for Unicode as well.
+If you want to upgrade an existing wiki from Latin-1 to Unicode you'll have
+to dump the database to SQL, run it through iconv or another conversion tool,
+and restore it. Sorry.
+
+
+=== Upgrading from 1.1.x or earlier ===
+
+This is less thoroughly tested, but should work.
+
+You need to specify the *admin* database username and password to the
+installer in order for it to successfully upgrade the database structure.
+You may wish to manually change the GRANTs later.
+
+If you have a very old database (earlier than organized MediaWiki releases
+in late August 2003) you may need to manually run some of the update SQL
+scripts in maintenance/archives before the installer is able to pick up
+with remaining updates.
+
+
+=== Upgrading from UseModWiki or old "phase 2" Wikipedia code ===
+
+There is a semi-maintained UseModWiki to MediaWiki conversion script at
+maintenance/importUseModWiki.php; it may require tweaking and customization
+to work for you.
+
+Install a new MediaWiki first, then use the conversion script which will
+output SQL statements; direct these to a file and then run that into your
+database.
+
+You will have to rebuild the links tables etc after importing.
diff --git a/config/index.php b/config/index.php
index 67e878911127..8cf8c6b52295 100644
--- a/config/index.php
+++ b/config/index.php
@@ -321,6 +321,7 @@ print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</t
$conf->DBuser = importPost( "DBuser", "wikiuser" );
$conf->DBpassword = importPost( "DBpassword" );
$conf->DBpassword2 = importPost( "DBpassword2" );
+ $conf->DBprefix = importPost( "DBprefix" );
$conf->RootPW = importPost( "RootPW" );
$conf->LanguageCode = importPost( "LanguageCode", "en" );
$conf->SysopName = importPost( "SysopName", "WikiSysop" );
@@ -342,6 +343,9 @@ if( $conf->DBpassword == "" ) {
if( $conf->DBpassword != $conf->DBpassword2 ) {
$errs["DBpassword2"] = "Passwords don't match!";
}
+if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) {
+ $errs["DBprefix"] = "Invalid table prefix";
+}
if( $conf->SysopPass == "" ) {
$errs["SysopPass"] = "Must not be blank";
@@ -394,6 +398,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
eval($local);
$wgDBadminuser = "root";
$wgDBadminpassword = $conf->RootPW;
+ $wgDBprefix = $conf->DBprefix;
$wgCommandLineMode = true;
$wgUseDatabaseMessages = false; /* FIXME: For database failure */
require_once( "includes/Setup.php" );
@@ -510,12 +515,14 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
print "<li>Creating tables...";
dbsource( "../maintenance/tables.sql", $wgDatabase );
dbsource( "../maintenance/interwiki.sql", $wgDatabase );
- dbsource( "../maintenance/archives/patch-userlevels-defaultgroups.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)" );
+ $wgDatabase->insert( 'site_stats',
+ array( 'ss_row_id' => 1,
+ 'ss_total_views' => 0,
+ 'ss_total_edits' => 0,
+ 'ss_good_articles' => 0 ) );
# setting up the db user
if( $conf->Root ) {
print "<li>Granting user permissions...</li>\n";
@@ -539,32 +546,19 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
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();
+ $titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) );
$now = wfTimestampNow();
$won = wfInvertTimestamp( $now );
- foreach( $logs as $page => $text ) {
- $logTitle = $wgDatabase->strencode( $wgLang->ucfirst( str_replace( " ", "_", wfMsgNoDB( $page ) ) ) );
- $logText = $wgDatabase->strencode( 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,cur_user,cur_user_text) " .
- "VALUES (0,'$title','" .
- wfStrencode( wfMsg( "mainpagetext" ) . "\n\n" . wfMsg( "mainpagedocfooter" ) ) .
- "','$now','$won','$now',0,'MediaWiki default')";
- $wgDatabase->query( $sql, $fname );
+ $wgDatabase->insert( 'cur',
+ array( 'cur_namespace' => $titleobj->getNamespace(),
+ 'cur_title' => $titleobj->getDBkey(),
+ 'cur_text' => wfMsg( 'mainpagetext' ) . "\n\n" .
+ wfMsg( 'mainpagedocfooter' ),
+ 'cur_timestamp' => $now,
+ 'inverse_timestamp' => $won,
+ 'cur_touched' => $now,
+ 'cur_user' => 0,
+ 'cur_user_text' => 'MediaWiki default' ) );
print "<li><pre>";
initialiseMessages();
@@ -767,6 +761,16 @@ if( count( $errs ) ) {
you can specify new accounts/databases to be created.
</dt>
+ <dd><?php
+ aField( $conf, "DBprefix", "Database table prefix" );
+ ?></dd>
+ <dt>
+ <p>If you need to share one database between multiple wikis, or
+ MediaWiki and another web application, you may choose to
+ add a prefix to all the table names to avoid conflicts.</p>
+
+ <p>Avoid exotic characters; something like <tt>mw_</tt> is good.</p>
+ </dt>
<dd>
<?php
@@ -914,6 +918,7 @@ if ( \$wgCommandLineMode ) {
\$wgDBname = \"{$slconf['DBname']}\";
\$wgDBuser = \"{$slconf['DBuser']}\";
\$wgDBpassword = \"{$slconf['DBpassword']}\";
+\$wgDBprefix = \"{$slconf['DBprefix']}\";
## To allow SQL queries through the wiki's Special:Askaql page,
## uncomment the next lines. THIS IS VERY INSECURE. If you want
@@ -925,6 +930,7 @@ if ( \$wgCommandLineMode ) {
# \$wgDBsqluser = \"sqluser\";
# \$wgDBsqlpassword = \"sqlpass\";
+# If you're on MySQL 3.x, this next line must be FALSE:
\$wgDBmysql4 = \$wgEnablePersistentLC = {$conf->DBmysql4};
## Shared memory settings
diff --git a/config/installer.php b/config/installer.php
deleted file mode 100644
index 237c7a3f21eb..000000000000
--- a/config/installer.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?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
-
-
-/**
- * This is to be the fancy new installer package for MediaWiki,
- * which will work with table prefixes, both MySQL and PostgreSQL, and
- * ideally such wacky things as text-based install as well as web.
- *
- * It's not done yet.
- *
- * @todo finish...
- * @package MediaWiki
- * @subpackage Installer
- */
-
-$IP = ".."; # Just to suppress notices, not for anything useful
-define( "MEDIAWIKI", true );
-define( "MEDIAWIKI_INSTALL", true );
-require_once( "../includes/Defines.php" );
-require_once( "../includes/DefaultSettings.php" );
-require_once( "../includes/MagicWord.php" );
-require_once( "../includes/Namespace.php" );
-require_once( "../install-utils.inc" );
-require_once( "../maintenance/updaters.inc" );
-require_once( "../maintenance/convertLinks.inc" );
-require_once( "../maintenance/archives/moveCustomMessages.inc" );
-
-class InstallInterface {
- function message( $text ) {
- echo $text . "\n";
- }
-
- function warning( $text ) {
- echo "** $text **\n";
- }
-
- function formatLink( $url, $text = '' ) {
- if( $text ) {
- return "$text ($url)";
- } else {
- return $url;
- }
- }
-
- function showHeader() {
- global $wgVersion;
- echo "MediaWiki $wgVersion installation\n\n";
- }
-}
-
-class Installer {
- var $settings = array();
-
- function Installer( &$interface ) {
- $this->ui =& $interface;
- }
-
- function runInstall() {
- $this->ui->showHeader();
- $this->preInstallChecks();
- }
-
- function override( $var, $value ) {
- $this->settings[$var] = $value;
- }
-
- function preInstallChecks() {
- $checks = array(
- 'checkConfigured',
- 'checkInstalled',
- 'checkWritable',
- 'checkPHP',
- 'checkGlobals',
- 'checkSafeMode',
- 'checkSAPI',
- 'checkMemory',
- 'checkZlib',
- 'checkImageMagick',
- 'checkGD'
- );
- foreach( $checks as $check ) {
- if( !$this->$check() ) {
- $this->ui->warning( "Installation aborted." );
- return false;
- }
- }
- }
-
- function checkConfigured() {
- if( file_exists( "../LocalSettings.php" ) || file_exists( "../AdminSettings.php" ) ) {
- $this->ui->warning( "Already configured." );
- return false;
- }
- return true;
- }
-
- function checkInstalled() {
- if( file_exists( "./LocalSettings.php" ) || file_exists( "./AdminSettings.php" ) ) {
- $this->ui->warning( "Already configured; move LocalSettings.php from this directory to the parent dir and take the wiki for a spin." );
- return false;
- }
- return true;
- }
-
- function checkWritable() {
- if( !is_writable( "." ) ) {
- $this->ui->warning( "<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>" );
-
- return false;
- }
- return true;
- }
-
- function checkPHP() {
- $ver = phpversion();
- if( version_compare( $ver, "4.1.2", "lt" ) ) {
- $this->ui->warning( "Your version of PHP ($ver) is too old and will probably not work. We try to support 4.1.2 and above, but a current 4.3 or 5.0 release is preferred." );
- return false;
- }
- $this->ui->message( "PHP version $ver, ok" );
- if( version_compare( $ver, "gte", "5.0" ) ) {
- $this->ui->warning( "A PHP5-compatible version of the PHPTAL template system is not yet bundled. To get the regular default page layout, you will need to manually install a development snapshot. (The wiki will function normally using an older layout if you do not.)" );
- }
- return true;
- }
-
- function checkGlobals() {
- if( ini_get( 'register_globals' ) ) {
- $this->ui->warning( "PHP's " .
- $this->ui->formatLink( "http://php.net/register_globals", "register_globals" ) .
- "option is enabled." .
- "MediaWiki will work correctly, but this setting
- increases your exposure to potential security vulnerabilities in PHP-based
- software running on your server. <b>You should disable it if you are able.</b>" );
- }
- return true;
- }
-
- function checkSafeMode() {
- if( ini_get( 'safe_mode' ) ) {
- $this->ui->warning( "PHP's
- <a href='http://www.php.net/features.safe-mode'>safe mode</a> is active!</b>
- You will likely have problems caused by this. You may need to make the
- 'images' subdirectory writable or specify a TMP environment variable pointing to
- a writable temporary directory owned by you, since safe mode breaks the system
- temporary directory." );
- $this->ui->message( "...due to safe mode restrictions, uploads will use flat directory mode if enabled." );
- $this->override( 'wgHashedUploadDirectory', true );
- } else {
- $this->ui->message( "PHP is not running in safe mode (this is good!)" );
- $this->ui->message( "...uploads will use hashed directory tree mode if enabled." );
- }
- return true;
- }
-
- function checkSAPI() {
- $sapi = php_sapi_name();
- $this->ui->message( "PHP server API is $sapi..." );
- switch( $sapi ) {
- case "apache":
- case "apache2handler":
- $this->ui->message( "...ok, using pretty URLs (<tt>index.php/Page_Title</tt>)" );
- break;
- case "cgi":
- case "cgi-fcgi":
- case "apache2filter":
- $this->ui->message( "using ugly URLs (<tt>index.php?title=Page_Title</tt>)" );
- $this->override( 'prettyURLs', false );
- # FIXME
- break;
- default:
- $this->ui->message( "unknown; using pretty URLs (<tt>index.php/Page_Title</tt>), if you have trouble change this in <tt>LocalSettings.php</tt>" );
- }
- return true;
- }
-
- function checkMemory() {
- $memlimit = ini_get( "memory_limit" );
- if( empty( $memlimit ) ) {
- $this->ui->message( "PHP is configured with no <tt>memory_limit</tt>." );
- return true;
- } else {
- $this->ui->message( "PHP's <tt>memory_limit</tt> is $memlimit... " );
- $n = IntVal( $memlimit );
- if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) {
- $n = IntVal( $m[1] * (1024*1024) );
- }
- if( $n < 20*1024*1024 ) {
- if( false === ini_set( "memory_limit", "20M" ) ) {
- $this->ui->warning( "...failed to raise the limit to 20M; you may have problems" );
- } else {
- $this->ui->message( "...raising limit to 20M" );
- $this->override( 'raiseMemory', true );
- }
- }
- return true;
- }
- }
-
- function checkZlib() {
- $zlib = function_exists( "gzencode" );
- if( $zlib ) {
- $this->ui->message( "Have zlib support; enabling output compression." );
- # This is a runtime thing, we're just letting the user know about it?
- } else {
- $this->ui->message( "No zlib support." );
- }
- return true;
- }
-
- function checkImageMagick() {
- $imcheck = array( "/usr/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" );
- foreach( $imcheck as $dir ) {
- $im = "$dir/convert";
- if( file_exists( $im ) ) {
- $this->ui->message( "Found ImageMagick: <tt>$im</tt>; image thumbnailing will be enabled if you enable uploads." );
- $this->override( "wgImageMagick", $im );
- $this->override( "wgUseImageResize", true );
- break;
- }
- }
- return true;
- }
-
- function checkGD() {
- $gd = function_exists( "imagejpeg" );
- if( $gd ) {
- $this->ui->message( "Found GD graphics library built-in, image thumbnailing will be enabled if you enable uploads" );
- $this->override( "wgUseImageResize", true );
- } else {
- if( !isset( $this->settings['wgUseImageResize'] ) ) {
- $this->warning( "Couldn't find GD library or ImageMagick; image thumbnailing disabled." );
- }
- }
- return true;
- }
-
-
-}
-
-$ui =& new InstallInterface();
-$i =& new Installer( $ui );
-$i->runInstall();
-
-?> \ No newline at end of file
diff --git a/docs/design.doc b/docs/design.doc
index af1ee3054abb..8adff443f08f 100644
--- a/docs/design.doc
+++ b/docs/design.doc
@@ -118,9 +118,11 @@ Naming/coding conventions:
values wpName ("p" for "POST").
- Be kind to your release manager and don't use CVS keywords (Id,
- Revision, etc.) to mark file versions; they make merging code between
- different branches a pain for older versions (<1.12.x) of CVS, and
- are kind of sketchy for versions after that.
+ Revision, etc.) to mark file versions. They make merging code
+ between different branches a pain for CVS, and are kind of sketchy
+ for versions after that. (Yes, you can use the '-kk' flag so that
+ merges ignore keywords, but that messes up binary files. See
+ https://www.cvshome.org/docs/manual/cvs-1.11.18/cvs_5.html#SEC64).
\ No newline at end of file
diff --git a/extensions/Syslog.php b/extensions/Syslog.php
deleted file mode 100644
index d499bb955079..000000000000
--- a/extensions/Syslog.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/* Syslog.php -- an extension to log events to the system logger
- * Copyright 2004 Evan Prodromou <evan@wikitravel.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @author Evan Prodromou <evan@wikitravel.org>
- * @package MediaWiki
- * @subpackage Extensions
- */
-
-if (defined('MEDIAWIKI')) {
-
- # Setup globals
-
- if (!isset($wgSyslogIdentity)) {
- $wgSyslogIdentity = $wgDBname;
- }
- if (!isset($wgSyslogFacility)) {
- $wgSyslogFacility = LOG_USER;
- }
-
- # Hook for article protection
-
- function syslogArticleProtect(&$article, &$user, $protect, &$reason, &$moveonly) {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' " .
- (($protect) ? "protected" : "unprotected") . " article '" .
- $title->getPrefixedText() .
- "' for '" . $reason . "' " . (($moveonly) ? "(moves only)" : "") );
- return true;
- }
-
- # Hook for article deletion
-
- function syslogArticleDelete(&$article, &$user, &$reason) {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' deleted '" .
- $title->getPrefixedText() .
- "' for '" . $reason . "' ");
- return true;
- }
-
- # Hook for article save
-
- function syslogArticleSave(&$article, &$user, &$text, $summary,
- $isminor, $iswatch, $section)
- {
- $title = $article->mTitle;
- syslog(LOG_NOTICE, "User '" . $user->getName() . "' saved '" .
- $title->getPrefixedText() .
- "' with comment '" . $summary . "' ");
- return true;
- }
-
- # Hook for IP & user blocks
-
- function syslogBlockIp(&$block, &$user) {
- syslog(LOG_NOTICE, "User '" . $user->getName() .
- "' blocked '" . (($block->mUser) ? $block->mUser : $block->mAddress) .
- "' for '" . $block->mReason . "' until '" . $block->mExpiry . "'");
- return true;
- }
-
- function syslogEmailUser(&$to, &$from, &$subject, &$text) {
- syslog(LOG_INFO, "Email sent from '$from' to '$to' with subject '$subject'");
- }
-
- # Hook for unwatch
-
- function syslogUnwatch(&$user, &$article) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' stopped watching '" .
- $article->mTitle->getPrefixedText() . "'");
- }
-
- # Hook for login
-
- function syslogUserLogin(&$user) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' logged in");
- return true;
- }
-
- # Hook for logout
-
- function syslogUserLogout(&$user) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' logged out");
- return true;
- }
-
- # Hook for watch
-
- function syslogWatch(&$user, &$article) {
- syslog(LOG_INFO, "User '" . $user->getName() . "' started watching '" .
- $article->mTitle->getPrefixedText() . "'");
- }
-
- # Setup -- called once environment is configured
-
- function setupSyslog() {
-
- global $wgSyslogIdentity, $wgSyslogFacility, $_syslogId;
- global $wgHooks;
-
- openlog($wgSyslogIdentity, LOG_ODELAY | LOG_PID, $wgSyslogFacility);
-
- $wgHooks['UserLoginComplete'][] = 'syslogUserLogin';
- $wgHooks['UserLogout'][] = 'syslogUserLogout';
- $wgHooks['BlockIpComplete'][] = 'syslogBlockIp';
- $wgHooks['ArticleProtectComplete'][] = 'syslogArticleProtect';
- $wgHooks['ArticleDeleteComplete'][] = 'syslogArticleDelete';
- $wgHooks['ArticleSaveComplete'][] = 'syslogArticleSave';
- $wgHooks['EmailUserComplete'][] = 'syslogEmailUser';
- $wgHooks['WatchArticleComplete'][] = 'syslogWatch';
- $wgHooks['UnwatchArticleComplete'][] = 'syslogUnwatch';
-
- return true;
- }
-
- # Add to global list of extensions
-
- $wgExtensionFunctions[] = setupSyslog;
-}
-
-?> \ No newline at end of file
diff --git a/includes/Article.php b/includes/Article.php
index 0ad959cac938..42a368f4d83b 100644
--- a/includes/Article.php
+++ b/includes/Article.php
@@ -1956,11 +1956,6 @@ class Article {
$called = true;
if($this->isFileCacheable()) {
$touched = $this->mTouched;
- if( $this->mTitle->getPrefixedDBkey() == wfMsg( 'mainpage' ) ) {
- # Expire the main page quicker
- $expire = wfUnix2Timestamp( time() - 3600 );
- $touched = max( $expire, $touched );
- }
$cache = new CacheManager( $this->mTitle );
if($cache->isFileCacheGood( $touched )) {
global $wgOut;
diff --git a/includes/CategoryPage.php b/includes/CategoryPage.php
index 42dae594c5f1..cb749cf4f304 100644
--- a/includes/CategoryPage.php
+++ b/includes/CategoryPage.php
@@ -5,8 +5,11 @@
*
* @package MediaWiki
*/
+
+if( !defined( 'MEDIAWIKI' ) )
+ die();
-if ( $wgCategoryMagicGallery )
+if( $wgCategoryMagicGallery )
require_once('ImageGallery.php');
/**
diff --git a/includes/ChangesList.php b/includes/ChangesList.php
index 0986209bb2d2..7e9807b2b905 100644
--- a/includes/ChangesList.php
+++ b/includes/ChangesList.php
@@ -397,7 +397,7 @@ class ChangesList {
$blockLink='';
if ( ( 0 == $rc_user ) && $wgUser->isAllowed('block') ) {
$blockLinkPage = Title::makeTitle( NS_SPECIAL, 'Blockip' );
- $blockLink = $this->skin->makeKnownLink( $blockLinkPage,
+ $blockLink = $this->skin->makeKnownLinkObj( $blockLinkPage,
$message['blocklink'], 'ip='.$rc_user_text );
}
diff --git a/includes/DatabasePostgreSQL.php b/includes/DatabasePostgreSQL.php
index 21dc994eb660..a42ae7bde12a 100644
--- a/includes/DatabasePostgreSQL.php
+++ b/includes/DatabasePostgreSQL.php
@@ -259,7 +259,7 @@ class DatabasePgsql extends Database {
}
function strencode( $s ) {
- return addslashes( $s );
+ return pg_escape_string( $s );
}
/**
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index c4eb85c462f8..d2d39613f844 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -19,7 +19,7 @@ if( defined( 'MEDIAWIKI' ) ) {
* MediaWiki version number
* @global string $wgVersion
*/
-$wgVersion = '1.4-beta0';
+$wgVersion = '1.4beta2';
/**
* Name of the site.
@@ -842,14 +842,26 @@ $wgBrowserBlackList = array(
# $wgLocaltimezone = 'PST8PDT';
# $wgLocaltimezone = 'Europe/Sweden';
# $wgLocaltimezone = 'CET';
+$wgLocaltimezone = null;
-# User level management
-# The number is the database id of a group you want users to be attached by
-# default. A better interface should be coded [av]
-$wgAnonGroupId = 1;
-$wgLoggedInGroupId = 2;
+/*
+When translating messages with wfMsg(), it is not always clear what should
+be considered UI messages and what shoud be content messages.
+
+For example, for regular wikipedia site like en, there should be only one
+'mainpage', therefore when getting the link of 'mainpage', we should
+treate it as content of the site and call wfMsgForContent(), while for
+rendering the text of the link, we call wfMsg(). The code in default
+behaves this way. However, sites like common do offer different versions
+of 'mainpage' and the like for different languages. This array provides a
+way to override the default behavior. For example, to allow language specific
+mainpage and community portal, set
+
+$wgForceUIMsgAsContentMsg = array( 'mainpage', 'portal-url' );
+
+*/
+$wgForceUIMsgAsContentMsg = array();
-$wgWhitelistRead = array ( ':Accueil', ':Main_Page');
/**
* Authentication plugin.
diff --git a/includes/DifferenceEngine.php b/includes/DifferenceEngine.php
index a4793f7703f3..f15ce99cef4d 100644
--- a/includes/DifferenceEngine.php
+++ b/includes/DifferenceEngine.php
@@ -215,7 +215,7 @@ class DifferenceEngine {
}
function getDiff( $otext, $ntext, $otitle, $ntitle ) {
- global $wgUseExternalDiffEngine;
+ global $wgUseExternalDiffEngine, $wgContLang;
$out = "
<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>
<tr>
@@ -224,6 +224,9 @@ class DifferenceEngine {
</tr>
";
+ $otext = $wgContLang->segmentForDiff($otext);
+ $ntext = $wgContLang->segmentForDiff($ntext);
+ $difftext='';
if ( $wgUseExternalDiffEngine ) {
# For historical reasons, external diff engine expects
# input text to be HTML-escaped already
@@ -232,15 +235,16 @@ class DifferenceEngine {
if( !function_exists( 'wikidiff_do_diff' ) ) {
dl('php_wikidiff.so');
}
- $out .= wikidiff_do_diff( $otext, $ntext, 2 );
+ $difftext = wikidiff_do_diff( $otext, $ntext, 2 );
} else {
$ota = explode( "\n", str_replace( "\r\n", "\n", $otext ) );
$nta = explode( "\n", str_replace( "\r\n", "\n", $ntext ) );
$diffs =& new Diff( $ota, $nta );
$formatter =& new TableDiffFormatter();
- $out .= $formatter->format( $diffs );
+ $difftext = $formatter->format( $diffs );
}
- $out .= "</table>\n";
+ $difftext = $wgContLang->unsegmentForDiff($difftext);
+ $out .= $difftext."</table>\n";
return $out;
}
diff --git a/includes/EditPage.php b/includes/EditPage.php
index e7ccb3415fad..17c2bbf4aef3 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -292,11 +292,11 @@ class EditPage {
$s = wfMsg('editingsection', $this->mTitle->getPrefixedText() );
}
if(!$this->preview) {
- $sectitle=preg_match("/^=+(.*?)=+/mi",
- $this->textbox1,
- $matches);
- if( !empty( $matches[1] ) ) {
- $this->summary = "/* ". trim($matches[1])." */ ";
+ preg_match( "/^(=+)(.+)\\1/mi",
+ $this->textbox1,
+ $matches );
+ if( !empty( $matches[2] ) ) {
+ $this->summary = "/* ". trim($matches[2])." */ ";
}
}
} else {
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 943fe152abd3..524ee08412d3 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -342,9 +342,14 @@ function wfMsg( $key ) {
* Get a message from anywhere, for the content
*/
function wfMsgForContent( $key ) {
+ global $wgForceUIMsgAsContentMsg;
$args = func_get_args();
array_shift( $args );
- return wfMsgReal( $key, $args, true, true );
+ $forcontent = true;
+ if( is_array( $wgForceUIMsgAsContentMsg ) &&
+ in_array( $key, $wgForceUIMsgAsContentMsg ) )
+ $forcontent = false;
+ return wfMsgReal( $key, $args, true, $forcontent );
}
/**
@@ -360,9 +365,14 @@ function wfMsgNoDB( $key ) {
* Get a message from the language file, for the content
*/
function wfMsgNoDBForContent( $key ) {
+ global $wgForceUIMsgAsContentMsg;
$args = func_get_args();
array_shift( $args );
- return wfMsgReal( $key, $args, false, true );
+ $forcontent = true;
+ if( is_array( $wgForceUIMsgAsContentMsg ) &&
+ in_array( $key, $wgForceUIMsgAsContentMsg ) )
+ $forcontent = false;
+ return wfMsgReal( $key, $args, false, $forcontent );
}
@@ -378,46 +388,16 @@ function wfMsgReal( $key, $args, $useDB, $forContent=false ) {
$fname = 'wfMsgReal';
wfProfileIn( $fname );
- if( $forContent ) {
- /**
- * Message is needed for page content, and needs
- * to be consistent with the site's configured
- * language. It might be part of a page title,
- * or a link, or text that will go into the
- * parser cache and be served back to other
- * visitors.
- */
- $cache = &$wgMessageCache;
- $lang = &$wgContLang;
- } else {
- /**
- * Message is for display purposes only.
- * The user may have selected a conversion-based
- * language variant or a separate user interface
- * language; if so use that.
- */
- if ( is_object( $wgContLang ) ) {
- if( in_array( $wgLanguageCode, $wgContLang->getVariants() ) ) {
- $cache = &$wgMessageCache;
- $lang = &$wgLang;
- } else {
- $cache = false;
- $lang = &$wgLang;
- }
+ if( is_object( $wgMessageCache ) ) {
+ $message = $wgMessageCache->get( $key, $useDB, $forContent );
+ }
+ else {
+ if( $forContent ) {
+ $lang = &$wgContLang;
} else {
- $cache = false;
- $lang = false;
+ $lang = &$wgLang;
}
- }
-
- if( is_object( $cache ) ) {
- $message = $cache->get( $key, $useDB, $forContent );
- } else {
- if ( !is_object( $lang ) ) {
- $lang = new Language;
- }
-
wfSuppressWarnings();
$message = $lang->getMessage( $key );
wfRestoreWarnings();
diff --git a/includes/ImageGallery.php b/includes/ImageGallery.php
index 7a8c6e01aa6a..44177d62a8f0 100644
--- a/includes/ImageGallery.php
+++ b/includes/ImageGallery.php
@@ -33,10 +33,10 @@ class ImageGallery
* Add an image to the gallery.
*
* @param Image $image Image object that is added to the gallery
- * @param string $text Additional text to be shown. The name and size of the image are always shown.
+ * @param string $html Additional HTML text to be shown. The name and size of the image are always shown.
*/
- function add( $image, $text='' ) {
- $this->mImages[] = array( &$image, $text );
+ function add( $image, $html='' ) {
+ $this->mImages[] = array( &$image, $html );
}
/**
@@ -90,27 +90,48 @@ class ImageGallery
$name = $img->getName();
$nt = $img->getTitle();
+ // Not an image. Just print the name and skip.
+ if ( $nt->getNamespace() != NS_IMAGE ) {
+ $s .= '<td valign="top" width="150px" style="background-color:#F0F0F0;">' .
+ htmlspecialchars( $nt->getText() ) . '</td>' . (($i%4==3) ? "</tr>\n" : '');
+ $i++;
+
+ continue;
+ }
+
//TODO
//$ul = $sk->makeLink( $wgContLang->getNsText( Namespace::getUser() ) . ":{$ut}", $ut );
- $nb = $this->mShowBytes ?
- wfMsg( "nbytes", $wgLang->formatNum( $img->getSize() ) ) . '<br />' :
+ if( $this->mShowBytes ) {
+ if( $img->exists() ) {
+ $nb = wfMsg( 'nbytes', $wgLang->formatNum( $img->getSize() ) );
+ } else {
+ $nb = wfMsg( 'filemissing' );
+ }
+ $nb = htmlspecialchars( $nb ) . '<br />';
+ } else {
+ $nb = '';
+ }
+
'' ;
$textlink = $this->mShowFilename ?
- $sk->makeKnownLinkObj( $nt, Language::truncate( $nt->getText(), 20, '...' ) ) . '<br />' :
+ $sk->makeKnownLinkObj( $nt, htmlspecialchars( $wgLang->truncate( $nt->getText(), 20, '...' ) ) ) . '<br />' :
'' ;
$s .= ($i%4==0) ? '<tr>' : '';
$s .= '<td valign="top" width="150px" style="background-color:#F0F0F0;">' .
'<table width="100%" height="150px">'.
'<tr><td align="center" valign="center" style="background-color:#F8F8F8;border:solid 1px #888888;">' .
- $sk->makeKnownLinkObj( $nt, '<img src="'.$img->createThumb(120,120).'" alt="">' ) . '</td></tr></table> ' .
+ $sk->makeKnownLinkObj( $nt, '<img src="'.$img->createThumb(120,120).'" alt="" />' ) . '</td></tr></table> ' .
$textlink . $text . $nb;
- $s .= '</td>' . (($i%4==3) ? '</tr>' : '');
+ $s .= "</td>\n" . (($i%4==3) ? "</tr>\n" : '');
$i++;
}
+ if( $i %4 != 0 ) {
+ $s .= "</tr>\n";
+ }
$s .= '</table>';
return $s;
diff --git a/includes/ImagePage.php b/includes/ImagePage.php
index dc7c67fbf09f..5819bcee0872 100644
--- a/includes/ImagePage.php
+++ b/includes/ImagePage.php
@@ -6,6 +6,9 @@
/**
*
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
require_once( 'Image.php' );
/**
@@ -39,11 +42,19 @@ class ImagePage extends Article {
{
global $wgOut, $wgUser, $wgImageLimits, $wgRequest, $wgUseImageResize;
$this->img = Image::newFromTitle( $this->mTitle );
- $url = $this->img->getViewURL();
+ $full_url = $this->img->getViewURL();
$anchoropen = '';
$anchorclose = '';
- if ( $wgUseImageResize && $wgUser->getOption( 'imagesize' ) != '' ) {
- $max = $wgImageLimits[ intval( $wgUser->getOption( 'imagesize' ) ) ];
+ if ( $wgUseImageResize ) {
+ if( $wgUser->getOption( 'imagesize' ) == '' ) {
+ $sizeSel = User::getDefaultOption( 'imagesize' );
+ } else {
+ $sizeSel = IntVal( $wgUser->getOption( 'imagesize' ) );
+ }
+ if( !isset( $wgImageLimits[$sizeSel] ) ) {
+ $sizeSel = User::getDefaultOption( 'imagesize' );
+ }
+ $max = $wgImageLimits[$sizeSel];
$maxWidth = $max[0];
$maxHeight = $max[1];
}
@@ -59,26 +70,25 @@ class ImagePage extends Article {
$height = $this->img->getHeight();
$msg = wfMsg('showbigimage', $width, $height, intval( $this->img->getSize()/1024 ) );
if ( $width > $maxWidth && $wgUseImageResize ) {
- $anchoropen = "<a href=\"{$url}\">";
- $anchorclose = "<br>{$msg}</a>";
-
- $url = $this->img->createThumb( $maxWidth );
$height = floor( $height * $maxWidth / $width );
$width = $maxWidth;
}
if ( $height > $maxHeight && $wgUseImageResize ) {
- $anchoropen = "<a href=\"{$url}\">";
- $anchorclose = "<br>{$msg}</a>";
-
$width = floor( $width * $maxHeight / $height );
$height = $maxHeight;
+ }
+ if ( $width != $this->img->getWidth() || $height != $this->img->getHeight() ) {
$url = $this->img->createThumb( $width );
+ $anchoropen = "<a href=\"{$full_url}\">";
+ $anchorclose = "<br>{$msg}</a>";
+ } else {
+ $url = $full_url;
}
- $s = "<div class=\"fullImageLink\">" . $anchoropen .
+ $s = '<div class="fullImageLink">' . $anchoropen .
"<img border=\"0\" src=\"{$url}\" width=\"{$width}\" height=\"{$height}\" alt=\"" .
- htmlspecialchars( $wgRequest->getVal( 'image' ) )."\" />" . $anchorclose . "</div>";
+ htmlspecialchars( $wgRequest->getVal( 'image' ) ).'" />' . $anchorclose . '</div>';
} else {
- $s = "<div class=\"fullMedia\">".$sk->makeMediaLink($this->img->getName(),"")."</div>";
+ $s = "<div class=\"fullMedia\">" . $sk->makeMediaLink( $this->img->getName(),'' ) . '</div>';
}
$wgOut->addHTML( $s );
if($this->img->fromSharedDirectory) {
@@ -132,7 +142,8 @@ class ImagePage extends Article {
$imagelinks = $dbr->tableName( 'imagelinks' );
$sql = "SELECT cur_namespace,cur_title FROM $imagelinks,$cur WHERE il_to=" .
- $dbr->addQuotes( $this->mTitle->getDBkey() ) . " AND il_from=cur_id";
+ $dbr->addQuotes( $this->mTitle->getDBkey() ) . " AND il_from=cur_id"
+ . " LIMIT 500"; # quickie emergency brake
$res = $dbr->query( $sql, DB_SLAVE, "Article::imageLinks" );
if ( 0 == $dbr->numRows( $res ) ) {
diff --git a/includes/LoadBalancer.php b/includes/LoadBalancer.php
index 9813c2af42fe..7ea09fcab646 100644
--- a/includes/LoadBalancer.php
+++ b/includes/LoadBalancer.php
@@ -191,7 +191,7 @@ class LoadBalancer {
}
if ( !$retVal && $this->isOpen( $index ) ) {
- $conn =& $this->mConnections( $index );
+ $conn =& $this->mConnections[$index];
wfDebug( "Waiting for slave #$index to catch up...\n" );
$result = $conn->masterPosWait( $this->mWaitForFile, $this->mWaitForPos, MASTER_WAIT_TIMEOUT );
@@ -303,15 +303,19 @@ class LoadBalancer {
* @private
*/
function reallyOpenConnection( &$server ) {
- extract( $server );
- # Get class for this database type
- $class = 'Database' . ucfirst( $type );
- if ( !class_exists( $class ) ) {
- require_once( "$class.php" );
- }
+ if( !is_array( $server ) ) {
+ wfDebugDieBacktrace( 'You must update your load-balancing configuration. See DefaultSettings.php entry for $wgDBservers.' );
+ }
+
+ extract( $server );
+ # Get class for this database type
+ $class = 'Database' . ucfirst( $type );
+ if ( !class_exists( $class ) ) {
+ require_once( "$class.php" );
+ }
- # Create object
- return new $class( $host, $user, $password, $dbname, 1, $flags );
+ # Create object
+ return new $class( $host, $user, $password, $dbname, 1, $flags );
}
function reportConnectionError( &$conn )
diff --git a/includes/MessageCache.php b/includes/MessageCache.php
index 8f0fd46327a8..714f462544e7 100755
--- a/includes/MessageCache.php
+++ b/includes/MessageCache.php
@@ -23,6 +23,7 @@ class MessageCache
var $mMemcKey, $mKeys, $mParserOptions, $mParser;
var $mExtensionMessages;
var $mInitialised = false;
+ var $mDeferred = true;
function initialise( &$memCached, $useDB, $expiry, $memcPrefix) {
$fname = 'MessageCache::initialise';
@@ -44,7 +45,12 @@ class MessageCache
$this->mParser = new Parser;
wfProfileOut( $fname.'-parser' );
- $this->load();
+ # When we first get asked for a message,
+ # then we'll fill up the cache. If we
+ # can return a cache hit, this saves
+ # some extra milliseconds
+ $this->mDeferred = true;
+
wfProfileOut( $fname );
}
@@ -113,6 +119,7 @@ class MessageCache
}
}
wfProfileOut( $fname );
+ $this->mDeferred = false;
return $success;
}
@@ -221,6 +228,10 @@ class MessageCache
if( !$this->mInitialised ) {
return "&lt;$key&gt;";
}
+ # If cache initialization was deferred, start it now.
+ if( $this->mDeferred ) {
+ $this->load();
+ }
$message = false;
if( !$this->mDisable && $useDB ) {
@@ -230,7 +241,7 @@ class MessageCache
}
# Try the cache
- if( $this->mUseCache && $this->mCache && array_key_exists( $title, $this->mCache ) ) {
+ if( $this->mUseCache && is_array( $this->mCache ) && array_key_exists( $title, $this->mCache ) ) {
$message = $this->mCache[$title];
}
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index 31eb28d1e7d0..667cd7825226 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -525,8 +525,6 @@ class OutputPage {
$this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );
$this->setRobotpolicy( 'noindex,nofollow' );
$this->setArticleRelated( false );
- $this->suppressQuickbar();
-
$this->enableClientCache( false );
$this->mRedirect = '';
diff --git a/includes/Parser.php b/includes/Parser.php
index 2c7027959cf7..e4fbb8c7c142 100644
--- a/includes/Parser.php
+++ b/includes/Parser.php
@@ -959,7 +959,9 @@ class Parser
wfProfileIn( $fname );
$sk =& $this->mOptions->getSkin();
- $linktrail = wfMsgForContent('linktrail');
+ global $wgContLang;
+ $linktrail = $wgContLang->linkTrail();
+
$bits = preg_split( EXT_LINK_BRACKETED, $text, -1, PREG_SPLIT_DELIM_CAPTURE );
$s = $this->replaceFreeExternalLinks( array_shift( $bits ) );
@@ -3083,7 +3085,12 @@ class Parser
} else {
$label = '';
}
- $ig->add( Image::newFromTitle( $nt ), $label );
+
+ # FIXME: Use the full wiki parser and add its links
+ # to the page's links.
+ $html = $this->mOptions->mSkin->formatComment( $label );
+
+ $ig->add( Image::newFromTitle( $nt ), $html );
$wgLinkCache->addImageLinkObj( $nt );
}
return $ig->toHTML();
diff --git a/includes/RecentChange.php b/includes/RecentChange.php
index 7b96bbd5f758..248cb2fa2231 100644
--- a/includes/RecentChange.php
+++ b/includes/RecentChange.php
@@ -76,7 +76,7 @@ class RecentChange
$this->mExtra = $extra;
}
- function getTitle()
+ function &getTitle()
{
if ( $this->mTitle === false ) {
$this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
diff --git a/includes/Setup.php b/includes/Setup.php
index 1f351c316a7b..aa9fa0d86786 100644
--- a/includes/Setup.php
+++ b/includes/Setup.php
@@ -239,28 +239,29 @@ if( $wgCommandLineMode ) {
wfProfileOut( $fname.'-User' );
wfProfileIn( $fname.'-language2' );
-function setupLangObj(&$langclass, $langcode) {
+function setupLangObj(&$langclass) {
global $wgUseLatin1, $IP;
-
if( ! class_exists( $langclass ) ) {
- # Default to English/UTF-8
- require_once( "$IP/languages/LanguageUtf8.php" );
- $langclass = 'LanguageUtf8';
+ # Default to English/UTF-8, or for non-UTF-8, to latin-1
+ $baseclass = 'LanguageUtf8';
+ if( $wgUseLatin1 )
+ $baseclass = 'LanguageLatin1';
+ require_once( "$IP/languages/$baseclass.php" );
+ $lc = strtolower(substr($langclass, 8));
+ $snip = "
+ class $langclass extends $baseclass {
+ function getVariants() {
+ return array(\"$lc\");
+ }
+
+ }";
+
+ eval($snip);
}
$lang = new $langclass();
- if ( !is_object($lang) ) {
- print "No language class ($wgLang)\N";
- }
- if( $wgUseLatin1 ) {
- # For non-UTF-8 latin-1 downconversion
- require_once( "$IP/languages/LanguageLatin1.php" );
- $xxx = new LanguageLatin1( $lang );
- unset( $lang );
- $lang = $xxx;
- }
return $lang;
}
@@ -270,8 +271,7 @@ function setupLangObj(&$langclass, $langcode) {
$wgContLanguageCode = $wgLanguageCode;
$wgContLangClass = 'Language' . str_replace( '-', '_', ucfirst( $wgContLanguageCode ) );
-$wgContLang = setupLangObj( $wgContLangClass, $wgContLangClass );
-$n = get_class($wgContLang);
+$wgContLang = setupLangObj( $wgContLangClass );
// set default user option from content language
if( !$wgUser->mDataLoaded ) {
@@ -286,10 +286,12 @@ $wgLangClass = 'Language'. str_replace( '-', '_', ucfirst( $wgLanguageCode ) );
if( $wgLangClass == $wgContLangClass ) {
$wgLang = &$wgContLang;
} else {
- require_once("$IP/languages/$wgLangClass.php");
- $wgLang = setupLangObj( $wgLangClass, $wgLanguageCode );
-}
+ wfSuppressWarnings();
+ include_once("$IP/languages/$wgLangClass.php");
+ wfRestoreWarnings();
+ $wgLang = setupLangObj( $wgLangClass );
+}
wfProfileOut( $fname.'-language' );
wfProfileIn( $fname.'-MessageCache' );
@@ -356,7 +358,7 @@ $wgMsgParserOptions = ParserOptions::newFromUser($wgUser);
wfSeedRandom();
# Placeholders in case of DB error
-$wgTitle = Title::newFromText( wfMsgForContent( 'badtitle' ) );
+$wgTitle = Title::makeTitle( NS_SPECIAL, 'Error' );
$wgArticle = new Article($wgTitle);
wfProfileOut( $fname.'-misc2' );
diff --git a/includes/Skin.php b/includes/Skin.php
index 186a883d3688..4978cdbe38ac 100644
--- a/includes/Skin.php
+++ b/includes/Skin.php
@@ -83,7 +83,8 @@ class Skin {
/**#@-*/
function Skin() {
- $this->linktrail = wfMsgForContent('linktrail');
+ global $wgContLang;
+ $this->linktrail = $wgContLang->linkTrail();
# Cache option lookups done very frequently
$options = array( 'highlightbroken', 'hover' );
@@ -534,9 +535,12 @@ class Skin {
if ( $wgOut->isArticleRelated() ) {
if ( $wgTitle->getNamespace() == Namespace::getImage() ) {
$name = $wgTitle->getDBkey();
- $link = htmlspecialchars( Image::wfImageUrl( $name ) );
- $style = $this->getInternalLinkAttributes( $link, $name );
- $s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
+ $image = new Image( $wgTitle->getDBkey() );
+ if( $image->exists() ) {
+ $link = htmlspecialchars( $image->getURL() );
+ $style = $this->getInternalLinkAttributes( $link, $name );
+ $s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
+ }
}
# This will show the "Approve" link if $wgUseApproval=true;
if ( isset ( $wgUseApproval ) && $wgUseApproval )
@@ -1402,7 +1406,6 @@ class Skin {
if ( $s->cur_is_redirect OR $s->cur_namespace != 0 ) {
$size = $threshold*2 ; # Really big
}
- $dbr->freeResult( $res );
} else {
$size = $threshold*2 ; # Really big
}
diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php
index 4082c67587d8..6298debc66c6 100644
--- a/includes/SkinTemplate.php
+++ b/includes/SkinTemplate.php
@@ -451,14 +451,14 @@ class SkinTemplate extends Skin {
$fname = 'SkinTemplate::buildContentActionUrls';
wfProfileIn( $fname );
- global $wgTitle, $wgUser, $wgOut, $wgRequest, $wgUseValidation;
+ global $wgTitle, $wgUser, $wgRequest, $wgUseValidation;
$action = $wgRequest->getText( 'action' );
$section = $wgRequest->getText( 'section' );
$oldid = $wgRequest->getVal( 'oldid' );
$diff = $wgRequest->getVal( 'diff' );
$content_actions = array();
- if( $this->iscontent and !$wgOut->isQuickbarSuppressed() ) {
+ if( $this->iscontent ) {
$nskey = $this->getNameSpaceKey();
$is_active = !Namespace::isTalk( $wgTitle->getNamespace()) ;
diff --git a/includes/SpecialAllmessages.php b/includes/SpecialAllmessages.php
index 1fe5408d3f04..38c827ae6058 100644
--- a/includes/SpecialAllmessages.php
+++ b/includes/SpecialAllmessages.php
@@ -13,12 +13,6 @@ function wfSpecialAllmessages() {
global $wgLanguageCode, $wgContLanguageCode, $wgContLang;
global $wgUseDatabaseMessages;
- if($wgLanguageCode != $wgContLanguageCode &&
- !in_array($wgLanguageCode, $wgContLang->getVariants())) {
- $err = wfMsg('allmessagesnotsupportedUI', $wgLanguageCode);
- $wgOut->addHTML( $err );
- return;
- }
if(!$wgUseDatabaseMessages) {
$wgOut->addHTML(wfMsg('allmessagesnotsupportedDB'));
return;
@@ -118,9 +112,10 @@ function makeHTMLText( $messages ) {
NS_MEDIAWIKI => array(),
NS_MEDIAWIKI_TALK => array()
);
- $sql = "SELECT cur_namespace,cur_title FROM cur WHERE cur_namespace IN (" . NS_MEDIAWIKI . ", " . NS_MEDIAWIKI_TALK . ")";
$dbr =& wfGetDB( DB_SLAVE );
- $res = $dbr->query( $sql );
+ $res = $dbr->select( 'cur',
+ array( 'cur_namespace', 'cur_title' ),
+ "cur_namespace IN (" . NS_MEDIAWIKI . ", " . NS_MEDIAWIKI_TALK . ")" );
while( $s = $dbr->fetchObject( $res ) ) {
$pageExists[$s->cur_namespace][$s->cur_title] = true;
}
diff --git a/includes/SpecialBrokenRedirects.php b/includes/SpecialBrokenRedirects.php
index a42415405e03..d94d405bc9f1 100644
--- a/includes/SpecialBrokenRedirects.php
+++ b/includes/SpecialBrokenRedirects.php
@@ -18,7 +18,7 @@ require_once('QueryPage.php');
class BrokenRedirectsPage extends PageQueryPage {
function getName() {
- return 'brokenredirects';
+ return 'BrokenRedirects';
}
function isExpensive( ) { return true; }
diff --git a/includes/SpecialDoubleRedirects.php b/includes/SpecialDoubleRedirects.php
index 1f21a3f232ff..41091ceb50d3 100644
--- a/includes/SpecialDoubleRedirects.php
+++ b/includes/SpecialDoubleRedirects.php
@@ -18,7 +18,7 @@ require_once('QueryPage.php');
class DoubleRedirectsPage extends PageQueryPage {
function getName() {
- return 'doubleredirects';
+ return 'DoubleRedirects';
}
function isExpensive( ) { return true; }
diff --git a/includes/SpecialListadmins.php b/includes/SpecialListadmins.php
index 63e9e5fc660d..fba15ed7b741 100644
--- a/includes/SpecialListadmins.php
+++ b/includes/SpecialListadmins.php
@@ -1,23 +1,51 @@
<?php
/**
- * This old a redirect to Special:Listusers that now implement a filter
- * by user groups. The listadmins special page is now deprecated but kept
- * for backward compatibility.
- *
+ *
* @package MediaWiki
* @subpackage SpecialPage
- * @deprecated
*/
/**
- * Just redirect to Special:Listusers.
- * Kept for backward compatibility.
+ *
*/
-function wfSpecialListadmins() {
- global $wgOut;
- $t = Title::makeTitle( NS_SPECIAL, "Listusers" );
- $wgOut->redirect ($t->getFullURL());
+require_once("QueryPage.php");
+
+/**
+ * This class is used to get a list of users flagged with "sysop" right.
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+class ListAdminsPage extends PageQueryPage {
+
+ function getName() {
+ return 'Listadmins';
+ }
+
+ function sortDescending() {
+ return false;
+ }
+
+ function getSQL() {
+ $dbr =& wfGetDB( DB_SLAVE );
+ $user = $dbr->tableName( 'user' );
+ $user_rights = $dbr->tableName( 'user_rights' );
+ $userspace = Namespace::getUser();
+ return "SELECT ur_rights as type,{$userspace} as namespace,".
+ "user_name as title, user_name as value ".
+ "FROM {$user} ,{$user_rights} WHERE user_id=ur_user AND ur_rights LIKE '%sysop%'";
+ }
}
+/**
+ * constructor
+ */
+function wfSpecialListadmins() {
+ list( $limit, $offset ) = wfCheckLimits();
+
+ $sla = new ListAdminsPage();
+
+ return $sla->doQuery( $offset, $limit );
+}
?>
diff --git a/includes/SpecialListusers.php b/includes/SpecialListusers.php
index a44901b390fc..6f2e3617822f 100644
--- a/includes/SpecialListusers.php
+++ b/includes/SpecialListusers.php
@@ -38,87 +38,20 @@ require_once("QueryPage.php");
* @subpackage SpecialPage
*/
class ListUsersPage extends QueryPage {
- var $requestedGroup = '';
var $requestedUser = '';
function getName() {
return "Listusers";
}
function isSyndicated() { return false; }
-
- /**
- * Show a drop down list to select a group as well as a user name
- * search box.
- * @TODO: localize
- */
- function getPageHeader( ) {
- global $wgScript;
-
- // Various variables used for the form
- $action = htmlspecialchars( $wgScript );
- $title = Title::makeTitle( NS_SPECIAL, 'Listusers' );
- $special = htmlspecialchars( $title->getPrefixedDBkey() );
-
- // form header
- $out = '<form method="get" action="'.$action.'">' .
- '<input type="hidden" name="title" value="'.$special.'" />' .
- 'Group: <select name="group">' .
-
- // get all group names and id
- $dbr = & wfGetDB( DB_SLAVE );
- $group = $dbr->tableName( 'group' );
- $sql = "SELECT group_id, group_name FROM $group;";
- $result = $dbr->query($sql);
-
- // we want a default empty group
- $out.= '<option value=""></option>';
-
- // build the dropdown list menu using datas from the database
- while($agroup = $dbr->fetchObject( $result )) {
- $selected = ($agroup->group_id == $this->requestedGroup) ? " selected " : "" ;
- $out.= '<option value="'.$agroup->group_id.'" '.$selected.'>'.$agroup->group_name.'</option>';
- }
- $out .= '</select> ';
-
- $out .= 'User: <input type="text" name="username" /> ';
-
- // OK button, end of form.
- $out .= '<input type="submit" /></form>';
- // congratulations the form is now build
- return $out;
- }
function getSQL() {
$dbr =& wfGetDB( DB_SLAVE );
- /* system showing possible actions for users
$user = $dbr->tableName( 'user' );
$user_rights = $dbr->tableName( 'user_rights' );
$userspace = Namespace::getUser();
return "SELECT ur_rights as type, $userspace as namespace, user_name as title, " .
"user_name as value FROM $user LEFT JOIN $user_rights ON user_id = ur_user";
- */
- /** Show groups instead */
- $user = $dbr->tableName( 'user' );
- $group = $dbr->tableName( 'group' );
- $user_groups = $dbr->tableName( 'user_groups' );
-
- $userspace = Namespace::getUser();
- $sql = "SELECT group_name as type, $userspace AS namespace, user_name AS title, user_name as value " .
- "FROM $user LEFT JOIN $user_groups ON user_id =ug_user " .
- "LEFT JOIN $group ON ug_group = group_id ";
-
- if($this->requestedGroup != '') {
- $sql .= "WHERE group_id= '$this->requestedGroup' ";
- if($this->requestedUser != '') {
- $sql .= "AND user_name = '$this->requestedUser' ";
- }
- } else {
- if($this->requestedUser !='') {
- $sql .= "WHERE user_name = '$this->requestedUser' ";
- }
- }
-
- return $sql;
}
function sortDescending() {
diff --git a/includes/SpecialMakesysop.php b/includes/SpecialMakesysop.php
index 57eb11ba307f..b26c983d58f7 100644
--- a/includes/SpecialMakesysop.php
+++ b/includes/SpecialMakesysop.php
@@ -6,9 +6,6 @@
* @deprecated
*/
-wfDebugDieBacktrace('Use SpecialUserlevels instead !!'); // [av]
-
-
/**
*
*/
@@ -213,7 +210,7 @@ class MakesysopForm {
} else {
#$sql = "UPDATE $user_rights SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
#$dbw->query($sql);
- $dbw->replace( $user_rights, array( array( 'ur_user', 'ur_rights' )),
+ $dbw->replace( 'user_rights', array( array( 'ur_user', 'ur_rights' )),
array( 'ur_user' => $id, 'ur_rights' => $newrights ) , $fname );
$wgMemc->delete( "$dbName:user:id:$id" );
diff --git a/includes/SpecialNewimages.php b/includes/SpecialNewimages.php
index 91865509aba3..dede20425124 100644
--- a/includes/SpecialNewimages.php
+++ b/includes/SpecialNewimages.php
@@ -51,7 +51,7 @@ function wfSpecialNewimages() {
$sk = $wgUser->getSkin();
$cap = wfMsg( 'ilshowmatch' );
$sub = wfMsg( 'ilsubmit' );
- $titleObj = Title::makeTitle( NS_SPECIAL, 'Imagelist' );
+ $titleObj = Title::makeTitle( NS_SPECIAL, 'Newimages' );
$action = $titleObj->escapeLocalURL( "sort={$sort}&limit={$limit}" );
$wgOut->addHTML( "<form id=\"imagesearch\" method=\"post\" action=\"" .
@@ -60,7 +60,7 @@ function wfSpecialNewimages() {
htmlspecialchars( $wpIlMatch ) . "\" /> " .
"<input type='submit' name=\"wpIlSubmit\" value=\"{$sub}\" /></form>" );
$nums = array( 50, 100, 250, 500 );
- $here = $wgContLang->specialPage( 'Imagelist' );
+ $here = $wgContLang->specialPage( 'Newimages' );
$fill = '';
$first = true;
@@ -72,10 +72,10 @@ function wfSpecialNewimages() {
"sort=bydate&limit={$num}&wpIlMatch=" . urlencode( $wpIlMatch ) );
}
$text = wfMsg( 'showlast', $fill, $bydate );
- $wgOut->addHTML( $text."</p>\n" );
+ $wgOut->addHTML( $text."\n" );
$i=0;
- $res = $dbr->query( $sql, 'wfSpecialImagelist' );
+ $res = $dbr->query( $sql, 'wfSpecialNewimages' );
$gallery = new ImageGallery();
diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php
index 9b9c51efd0ef..521aa21dbf8c 100644
--- a/includes/SpecialPage.php
+++ b/includes/SpecialPage.php
@@ -41,6 +41,7 @@ $wgSpecialPages = array(
'Randompage' => new SpecialPage( 'Randompage' ),
'Lonelypages' => new SpecialPage( 'Lonelypages' ),
'Uncategorizedpages'=> new SpecialPage( 'Uncategorizedpages' ),
+ 'Uncategorizedcategories'=> new SpecialPage( 'Uncategorizedcategories' ),
'Unusedimages' => new SpecialPage( 'Unusedimages' )
);
@@ -83,15 +84,13 @@ $wgSpecialPages = array_merge($wgSpecialPages, array (
'Blockip' => new SpecialPage( 'Blockip', 'block' ),
'Asksql' => new SpecialPage( 'Asksql', 'asksql' ),
'Undelete' => new SpecialPage( 'Undelete', 'delete' ),
- // Makesysop is obsolete, replaced by Special:Userlevels [av]
- # 'Makesysop' => new SpecialPage( 'Makesysop', 'userrights' ),
+ 'Makesysop' => new SpecialPage( 'Makesysop', 'userrights' ),
# Special:Import is half-written
# "Import" => new SpecialPage( "Import", "sysop" ),
'Lockdb' => new SpecialPage( 'Lockdb', 'siteadmin' ),
'Unlockdb' => new SpecialPage( 'Unlockdb', 'siteadmin' ),
- 'Sitesettings' => new SpecialPage( 'Sitesettings', 'siteadmin' ),
- 'Userlevels' => new SpecialPage( 'Userlevels', 'userrights' ),
+# 'Sitesettings' => new SpecialPage( 'Sitesettings', 'siteadmin' ),
));
/**
@@ -263,11 +262,7 @@ class SpecialPage
if ( $this->mRestriction == "" ) {
return true;
} else {
- if ( in_array( $this->mRestriction, $user->getRights() ) ) {
- return true;
- } else {
- return false;
- }
+ return $user->isAllowed( $this->mRestriction );
}
}
diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php
index 6d9e60219a7d..962cc33e8832 100644
--- a/includes/SpecialPreferences.php
+++ b/includes/SpecialPreferences.php
@@ -5,6 +5,9 @@
* @subpackage SpecialPage
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/* to get a list of languages in setting user's language preference */
require_once('languages/Names.php');
@@ -320,7 +323,7 @@ class PreferencesForm {
global $wgUser, $wgOut, $wgLang, $wgContLang, $wgUseDynamicDates, $wgValidSkinNames;
global $wgAllowRealName, $wgImageLimits;
global $wgLanguageNames, $wgDisableLangConversion;
-
+ global $wgContLanguageCode;
$wgOut->setPageTitle( wfMsg( 'preferences' ) );
$wgOut->setArticleRelated( false );
$wgOut->setRobotpolicy( 'noindex,nofollow' );
@@ -414,7 +417,7 @@ class PreferencesForm {
global $IP;
/* only add languages that have a file */
$langfile="$IP/languages/Language".str_replace('-', '_', ucfirst($code)).".php";
- if(file_exists($langfile)) {
+ if(file_exists($langfile) || $code == $wgContLanguageCode) {
$sel = ($code == $this->mUserLanguage)? 'selected="selected"' : '';
$wgOut->addHtml("\t<option value=\"$code\" $sel>$code - $name</option>\n");
}
diff --git a/includes/SpecialRecentchangeslinked.php b/includes/SpecialRecentchangeslinked.php
index 6a86012d8c9d..90299237c1e5 100644
--- a/includes/SpecialRecentchangeslinked.php
+++ b/includes/SpecialRecentchangeslinked.php
@@ -65,13 +65,23 @@ function wfSpecialRecentchangeslinked( $par = NULL ) {
$cmq = 'AND cur_minor_edit=0';
} else { $cmq = ''; }
- extract( $dbr->tableNames( 'cur', 'links' ) );
-
- $sql = "SELECT cur_id,cur_namespace,cur_title,cur_user,cur_comment," .
- "cur_user_text,cur_timestamp,cur_minor_edit,cur_is_new FROM $links, $cur " .
- "WHERE cur_timestamp > '{$cutoff}' {$cmq} AND l_to=cur_id AND l_from=$id " .
- "GROUP BY cur_id,cur_namespace,cur_title,cur_user,cur_comment,cur_user_text," .
- "cur_timestamp,cur_minor_edit,cur_is_new,inverse_timestamp ORDER BY inverse_timestamp LIMIT {$limit}";
+ // If target is a Category, use categorylinks and invert from and to
+ if ( $nt->getNamespace() == NS_CATEGORY ) {
+ extract( $dbr->tableNames( 'cur', 'categorylinks' ) );
+ $catkey = $dbr->addQuotes( $nt->getDBKey() );
+ $sql = "SELECT cur_id,cur_namespace,cur_title,cur_user,cur_comment," .
+ "cur_user_text,cur_timestamp,cur_minor_edit,cur_is_new FROM $categorylinks, $cur " .
+ "WHERE cur_timestamp > '{$cutoff}' {$cmq} AND cl_from=cur_id AND cl_to=$catkey " .
+ "GROUP BY cur_id,cur_namespace,cur_title,cur_user,cur_comment,cur_user_text," .
+ "cur_timestamp,cur_minor_edit,cur_is_new,inverse_timestamp ORDER BY inverse_timestamp LIMIT {$limit}";
+ } else {
+ extract( $dbr->tableNames( 'cur', 'links' ) );
+ $sql = "SELECT cur_id,cur_namespace,cur_title,cur_user,cur_comment," .
+ "cur_user_text,cur_timestamp,cur_minor_edit,cur_is_new FROM $links, $cur " .
+ "WHERE cur_timestamp > '{$cutoff}' {$cmq} AND l_to=cur_id AND l_from=$id " .
+ "GROUP BY cur_id,cur_namespace,cur_title,cur_user,cur_comment,cur_user_text," .
+ "cur_timestamp,cur_minor_edit,cur_is_new,inverse_timestamp ORDER BY inverse_timestamp LIMIT {$limit}";
+ }
$res = $dbr->query( $sql, $fname );
$wgOut->addHTML("&lt; ".$sk->makeKnownLinkObj($nt, "", "redirect=no" )."<br />\n");
diff --git a/includes/SpecialUncategorizedcategories.php b/includes/SpecialUncategorizedcategories.php
new file mode 100755
index 000000000000..af24c824b0df
--- /dev/null
+++ b/includes/SpecialUncategorizedcategories.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+
+/**
+ *
+ */
+require_once( "SpecialUncategorizedpages.php" );
+
+/**
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+class UncategorizedCategoriesPage extends UncategorizedPagesPage {
+ function getName() {
+ return "Uncategorizedcategories";
+ }
+}
+
+/**
+ * constructor
+ */
+function wfSpecialUncategorizedcategories() {
+ list( $limit, $offset ) = wfCheckLimits();
+
+ $lpp = new UncategorizedCategoriesPage();
+ $lpp->requestedNamespace = NS_CATEGORY;
+
+ return $lpp->doQuery( $offset, $limit );
+}
+
+?>
diff --git a/includes/SpecialUncategorizedpages.php b/includes/SpecialUncategorizedpages.php
index 2d56ce9df6c5..b8d2cd9bc62d 100755
--- a/includes/SpecialUncategorizedpages.php
+++ b/includes/SpecialUncategorizedpages.php
@@ -16,7 +16,8 @@ require_once( "QueryPage.php" );
* @subpackage SpecialPage
*/
class UncategorizedPagesPage extends PageQueryPage {
-
+ var $requestedNamespace = 0;
+
function getName() {
return "Uncategorizedpages";
}
@@ -36,7 +37,7 @@ class UncategorizedPagesPage extends PageQueryPage {
return "SELECT 'Uncategorizedpages' as type, cur_namespace AS namespace, cur_title AS title, cur_title AS value " .
"FROM $cur LEFT JOIN $categorylinks ON cur_id=cl_from ".
- "WHERE cl_from IS NULL AND cur_namespace=0 AND cur_is_redirect=0";
+ "WHERE cl_from IS NULL AND cur_namespace=$this->requestedNamespace AND cur_is_redirect=0";
}
}
diff --git a/includes/Title.php b/includes/Title.php
index 43f8e78cee4c..0c5bc6b23fd3 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -837,7 +837,7 @@ class Title {
/** If anon users can create an account,
they need to reach the login page first! */
if( $wgUser->isAllowed( 'createaccount' )
- && $this->mId == NS_SPECIAL
+ && $this->getNamespace() == NS_SPECIAL
&& $this->getText() == 'Userlogin' ) {
return true;
}
@@ -1359,7 +1359,8 @@ class Title {
# Fixing category links (those without piped 'alternate' names) to be sorted under the new title
$dbw =& wfGetDB( DB_MASTER );
- $sql = "UPDATE categorylinks SET cl_sortkey=" . $dbw->addQuotes( $nt->getPrefixedText() ) .
+ $categorylinks = $dbw->tableName( 'categorylinks' );
+ $sql = "UPDATE $categorylinks SET cl_sortkey=" . $dbw->addQuotes( $nt->getPrefixedText() ) .
" WHERE cl_from=" . $dbw->addQuotes( $this->getArticleID() ) .
" AND cl_sortkey=" . $dbw->addQuotes( $this->getPrefixedText() );
$dbw->query( $sql, 'SpecialMovepage::doSubmit' );
@@ -1404,6 +1405,12 @@ class Title {
$dbw =& wfGetDB( DB_MASTER );
$links = $dbw->tableName( 'links' );
+ # Delete the old redirect. We don't save it to history since
+ # by definition if we've got here it's rather uninteresting.
+ # We have to remove it so that the next step doesn't trigger
+ # a conflict on the unique namespace+title index...
+ $dbw->delete( 'cur', array( 'cur_id' => $newid ), $fname );
+
# Change the name of the target page:
$dbw->update( 'cur',
/* SET */ array(
@@ -1416,12 +1423,11 @@ class Title {
);
$wgLinkCache->clearLink( $nt->getPrefixedDBkey() );
- # Repurpose the old redirect. We don't save it to history since
- # by definition if we've got here it's rather uninteresting.
-
+ # Recreate the redirect, this time in the other direction.
$redirectText = $wgMwRedir->getSynonym( 0 ) . ' [[' . $nt->getPrefixedText() . "]]\n";
- $dbw->update( 'cur',
+ $dbw->insert( 'cur',
/* SET */ array(
+ 'cur_id' => $newid,
'cur_touched' => $dbw->timestamp($now),
'cur_timestamp' => $dbw->timestamp($now),
'inverse_timestamp' => $won,
@@ -1437,7 +1443,6 @@ class Title {
'cur_is_redirect' => 1,
'cur_is_new' => 1
),
- /* WHERE */ array( 'cur_id' => $newid ),
$fname
);
diff --git a/includes/User.php b/includes/User.php
index d9aa940dde6e..d9e50a08d1a4 100644
--- a/includes/User.php
+++ b/includes/User.php
@@ -9,7 +9,6 @@
*
*/
require_once( 'WatchedItem.php' );
-require_once( 'Group.php' );
# Number of characters in user_token field
define( 'USER_TOKEN_LENGTH', 32 );
@@ -31,9 +30,6 @@ class User {
var $mToken;
var $mRealName;
var $mHash;
- /** Array of group id the user belong to */
- var $mGroups;
- /**#@-*/
/** Construct using User:loadDefaults() */
function User() {
@@ -152,7 +148,6 @@ class User {
$this->mRealName = $this->mEmail = '';
$this->mPassword = $this->mNewpassword = '';
$this->mRights = array();
- $this->mGroups = array();
// Getting user defaults only if we have an available language
if( isset( $wgContLang ) ) {
@@ -177,9 +172,18 @@ class User {
* a language object.
*/
function loadDefaultFromLanguage(){
- $fname = 'User::loadDefaultFromLanguage';
- wfProfileIn( $fname );
-
+ $this->mOptions = User::getDefaultOptions();
+ }
+
+ /**
+ * Combine the language default options with any site-specific options
+ * and add the default language variants.
+ *
+ * @return array
+ * @static
+ * @access private
+ */
+ function getDefaultOptions() {
/**
* Site defaults will override the global/language defaults
*/
@@ -193,9 +197,24 @@ class User {
$defOpt['variant'] = $variant;
$defOpt['language'] = $variant;
- $this->mOptions = $defOpt;
-
- wfProfileOut();
+ return $defOpt;
+ }
+
+ /**
+ * Get a given default option value.
+ *
+ * @param string $opt
+ * @return string
+ * @static
+ * @access public
+ */
+ function getDefaultOption( $opt ) {
+ $defOpts = User::getDefaultOptions();
+ if( isset( $defOpts[$opt] ) ) {
+ return $defOpts[$opt];
+ } else {
+ return '';
+ }
}
/**
@@ -345,7 +364,7 @@ class User {
* Load a user from the database
*/
function loadFromDatabase() {
- global $wgCommandLineMode, $wgAnonGroupId, $wgLoggedInGroupId;
+ global $wgCommandLineMode;
$fname = "User::loadFromDatabase";
if ( $this->mDataLoaded || $wgCommandLineMode ) {
return;
@@ -356,14 +375,7 @@ class User {
/** Anonymous user */
if(!$this->mId) {
- /** Get rights */
- $anong = Group::newFromId($wgAnonGroupId);
- if (!$anong)
- wfDebugDieBacktrace("Please update your database schema "
- ."and populate initial group data from "
- ."maintenance/archives patches");
- $anong->loadFromDatabase();
- $this->mRights = explode(',', $anong->getRights());
+ $this->mRights = array();
$this->mDataLoaded = true;
return;
} # the following stuff is for non-anonymous users only
@@ -382,29 +394,18 @@ class User {
$this->decodeOptions( $s->user_options );
$this->mTouched = wfTimestamp(TS_MW,$s->user_touched);
$this->mToken = $s->user_token;
-
- // Get groups id
- $res = $dbr->select( 'user_groups', array( 'ug_group' ), array( 'ug_user' => $this->mId ) );
-
- while($group = $dbr->fetchRow($res)) {
- $this->mGroups[] = $group[0];
- }
-
- // add the default group for logged in user
- $this->mGroups[] = $wgLoggedInGroupId;
-
- $this->mRights = array();
- // now we merge groups rights to get this user rights
- foreach($this->mGroups as $aGroupId) {
- $g = Group::newFromId($aGroupId);
- $g->loadFromDatabase();
- $this->mRights = array_merge($this->mRights, explode(',', $g->getRights()));
- }
-
- // array merge duplicate rights which are part of several groups
- $this->mRights = array_unique($this->mRights);
- $dbr->freeResult($res);
+ /* FIXME */
+ $res = $dbr->select('user_rights',
+ array( 'ur_rights' ),
+ array( 'ur_user' => $this->mId ) );
+ $s = $dbr->fetchObject( $res );
+ if( $s ) {
+ $this->mRights = explode( ',', $s->ur_rights );
+ } else {
+ $this->mRights = array();
+ }
+ $dbr->freeResult( $res );
}
$this->mDataLoaded = true;
@@ -586,52 +587,28 @@ class User {
$this->invalidateCache();
}
- function getGroups() {
- $this->loadFromDatabase();
- return $this->mGroups;
- }
-
- function setGroups($groups) {
- $this->loadFromDatabase();
- $this->mGroups = $groups;
- $this->invalidateCache();
- }
-
/**
* Check if a user is sysop
- * Die with backtrace. Use User:isAllowed() instead.
- * @deprecated
*/
function isSysop() {
- /**
$this->loadFromDatabase();
if ( 0 == $this->mId ) { return false; }
return in_array( 'sysop', $this->mRights );
- */
- wfDebugDieBacktrace("User::isSysop() is deprecated. Use User::isAllowed() instead");
}
- /** @deprecated */
function isDeveloper() {
- /**
$this->loadFromDatabase();
if ( 0 == $this->mId ) { return false; }
return in_array( 'developer', $this->mRights );
- */
- wfDebugDieBacktrace("User::isDeveloper() is deprecated. Use User::isAllowed() instead");
}
- /** @deprecated */
function isBureaucrat() {
- /**
$this->loadFromDatabase();
if ( 0 == $this->mId ) { return false; }
return in_array( 'bureaucrat', $this->mRights );
- */
- wfDebugDieBacktrace("User::isBureaucrat() is deprecated. Use User::isAllowed() instead");
}
/**
@@ -654,7 +631,36 @@ class User {
*/
function isAllowed($action='') {
$this->loadFromDatabase();
- return in_array( $action , $this->mRights );
+ if( in_array( $action , $this->mRights ) ) {
+ return true;
+ }
+
+ global $wgWhitelistRead;
+ $groupRights = array(
+ 'asksql' => 'nobody',
+ 'siteadmin' => 'developer',
+ 'userrights' => 'bureaucrat',
+ 'patrol' => 'sysop',
+ 'protect' => 'sysop',
+ 'delete' => 'sysop',
+ 'rollback' => 'sysop',
+ 'block' => 'sysop',
+ 'editinterface' => 'sysop',
+ 'move' => 'user',
+ 'read' => empty( $wgWhitelistRead ) ? '*' : 'user',
+ 'createaccount' => '*' );
+
+ if( array_key_exists( $action, $groupRights ) ) {
+ $group = $groupRights[$action];
+ if( $group == 'user' ) {
+ return ($this->getId() != 0 );
+ } elseif( $group == '*' ) {
+ return true;
+ } else {
+ return in_array( $group, $this->mRights );
+ }
+ }
+ return false;
}
/**
@@ -838,20 +844,6 @@ class User {
$dbw->set( 'user_rights', 'ur_rights', implode( ',', $this->mRights ),
'ur_user='. $this->mId, $fname );
$wgMemc->delete( "$wgDBname:user:id:$this->mId" );
-
- // delete old groups
- $dbw->delete( 'user_groups', array( 'ug_user' => $this->mId), $fname);
-
- // save new ones
- foreach ($this->mGroups as $group) {
- $dbw->replace( 'user_groups',
- array(array('ug_user','ug_group')),
- array(
- 'ug_user' => $this->mId,
- 'ug_group' => $group
- ), $fname
- );
- }
}
/**
@@ -931,15 +923,6 @@ class User {
'ur_rights' => implode( ',', $this->mRights )
), $fname
);
-
- foreach ($this->mGroups as $group) {
- $dbw->insert( 'user_groups',
- array(
- 'ug_user' => $this->mId,
- 'ug_group' => $group
- ), $fname
- );
- }
}
function spreadBlock() {
@@ -988,7 +971,7 @@ class User {
}
function getPageRenderingHash() {
- global $wgContLang;
+ global $wgContLang;
if( $this->mHash ){
return $this->mHash;
}
@@ -1005,10 +988,10 @@ class User {
$confstr .= '!' . $this->getOption( 'date' );
$confstr .= '!' . $this->getOption( 'numberheadings' );
$confstr .= '!' . $this->getOption( 'language' );
- // add in language variant option if there are multiple variants
- // supported by the language object
- if(sizeof($wgContLang->getVariants())>1) {
- $confstr .= '!' . $this->getOption( 'variant' );
+ // add in language specific options, if any
+ $extra = $wgContLang->getExtraHashOptions();
+ foreach( $extra as $e ) {
+ $confstr .= '!' . $this->getOption( $e );
}
$this->mHash = $confstr;
diff --git a/includes/normal/README b/includes/normal/README
index 3424507d6f27..f8207a1b2e3e 100644
--- a/includes/normal/README
+++ b/includes/normal/README
@@ -32,3 +32,24 @@ have been changed or you remove it.
data from from the net if necessary. If it reports failure, something is
going wrong!
+
+== Benchmarks ==
+
+Run 'make bench' to download some sample texts from Wikipedia and run some
+cheap benchmarks of some of the functions. Take all numbers with large
+grains of salt.
+
+
+== PHP module extension ==
+
+There's an experimental PHP extension module which wraps the ICU library's
+normalization functions. This is *MUCH* faster than doing this work in pure
+PHP code. This is in the 'normal' directory in MediaWiki's CVS extensions
+module. It is known to work with PHP 4.3.8 and 5.0.2 on Linux/x86 but hasn't
+been thoroughly tested on other configurations.
+
+If the php_normal.so module is loaded in php.ini, the normalization functions
+will automatically use it. If you can't (or don't want to) load it in php.ini,
+you may be able to load it using the dl() function before include()ing or
+require()ing UtfNormal.php, and it will be picked up.
+
diff --git a/includes/normal/UtfNormalGenerate.php b/includes/normal/UtfNormalGenerate.php
index 65128b706e66..efe25de5641e 100644
--- a/includes/normal/UtfNormalGenerate.php
+++ b/includes/normal/UtfNormalGenerate.php
@@ -26,6 +26,11 @@
*/
/** */
+
+if( php_sapi_name() != 'cli' ) {
+ die( "Run me from the command line please.\n" );
+}
+
require_once 'UtfNormalUtil.php';
$in = fopen("DerivedNormalizationProps.txt", "rt" );
diff --git a/includes/templates/Userlogin.php b/includes/templates/Userlogin.php
index 05da76a10191..b9d00d1edb72 100644
--- a/includes/templates/Userlogin.php
+++ b/includes/templates/Userlogin.php
@@ -1,5 +1,9 @@
<?php
+if( !defined( 'MEDIAWIKI' ) ) die();
+
+require_once( 'includes/SkinTemplate.php' );
+
/**
* HTML template for Special:Userlogin form
* @package MediaWiki
diff --git a/includes/zhtable/Makefile b/includes/zhtable/Makefile
index 372109b65290..0cfbb00c3bfe 100644
--- a/includes/zhtable/Makefile
+++ b/includes/zhtable/Makefile
@@ -2,9 +2,8 @@
# Creating the file ZhConversion.php used for Simplified/Traditional
# Chinese conversion. It gets the basic conversion table from the Unihan
# database, and construct the phrase tables using phrase libraries in
-# the SCIM packages. There are also special tables used to for adjustment.
-# Some data in the file simp2trad.manual was taken from the following
-# paper:
+# the SCIM packages and the libtabe package. There are also special
+# tables used to for adjustment.
#
GREP = LANG=zh_CN.UTF8 grep
@@ -42,7 +41,7 @@ wordlist: phrase_lib.txt EZ.txt.in tsi.src
iconv -c -f big5 -t utf8 tsi.src | $(SED) 's/# //g' | $(SED) 's/[ ][0-9].*//' > wordlist
$(SED) 's/\(.*\)\t[0-9][0-9]*.*/\1/' phrase_lib.txt | $(SED) '1,5d' >>wordlist
$(SED) '1,/BEGIN_TABLE/d' EZ.txt.in | colrm 1 8 | $(SED) 's/\t.*//' | $(GREP) "^...*" >> wordlist
- sort wordlist | uniq | $(SED) 's/ //g' > t
+ cat wordlist | $(SED) '/[a-zA-Z]/d' | sort | uniq | $(SED) 's/ //g' > t
mv t wordlist
printutf8: printutf8.c
diff --git a/index.php b/index.php
index 1de29771604f..5486408c2ebe 100644
--- a/index.php
+++ b/index.php
@@ -31,10 +31,6 @@ OutputPage::setEncodings(); # Not really used yet
$action = $wgRequest->getVal( "action", "view" );
$title = $wgRequest->getVal( "title" );
-# Placeholders in case of DB error
-$wgTitle = Title::newFromText( wfMsgForContent( "badtitle" ) );
-$wgArticle = new Article($wgTitle);
-
$action = strtolower( trim( $action ) );
if ($wgRequest->getVal( "printable" ) == "yes") {
$wgOut->setPrintable();
diff --git a/install-utils.inc b/install-utils.inc
index 1fb2cc8e82b9..105818d4004d 100644
--- a/install-utils.inc
+++ b/install-utils.inc
@@ -72,12 +72,14 @@ function replacevars( $ins ) {
$varnames = array(
"wgDBserver", "wgDBname", "wgDBintlname", "wgDBuser",
"wgDBpassword", "wgDBsqluser", "wgDBsqlpassword",
- "wgDBadminuser", "wgDBadminpassword"
+ "wgDBadminuser", "wgDBadminpassword", "wgDBprefix"
);
foreach ( $varnames as $var ) {
global $$var;
$ins = str_replace( '{$' . $var . '}', $$var, $ins );
+ $ins = str_replace( '/*$' . $var . '*/`', '`' . $$var, $ins );
+ $ins = str_replace( '/*$' . $var . '*/', $$var, $ins );
}
return $ins;
}
diff --git a/irc/rcdumper.php b/irc/rcdumper.php
index 002b046a7961..2913350e1faf 100644
--- a/irc/rcdumper.php
+++ b/irc/rcdumper.php
@@ -4,7 +4,7 @@
Example command-line:
php rcdumper.php | irc -d -c \#channel-to-join nick-of-bot some.irc.server
where irc is the name of the ircII executable.
-The name of the IRC server should match $ircServer below.
+The name of the the IRC should match $ircServer below.
*/
$ircServer = "irc.freenode.net";
@@ -48,34 +48,35 @@ if ( empty($options['b']) ) {
if (isset($args[0]) && isset($args[1])) {
$lowest = $args[0];
$highest = $args[1];
- #$what = $args[0][0];
- #$highest = $args[0][1];
}
-#sleep(30);
-$res = $dbr->query( "SELECT rc_timestamp FROM $recentchanges ORDER BY rc_timestamp DESC LIMIT 1" );
-$row = $dbr->fetchObject( $res );
-$oldTimestamp = $row->rc_timestamp;
+$res = wfQuery( "SELECT MAX(rc_id) as m FROM recentchanges", DB_READ );
+$row = wfFetchObject( $res );
+$oldId = $row->m;
$serverCount = 0;
while (1) {
- $res = $dbr->query( "SELECT * FROM $recentchanges WHERE rc_timestamp>'$oldTimestamp' ORDER BY rc_timestamp" );
+ $res = wfQuery( "SELECT rc_this_oldid,rc_timestamp,rc_user_text,rc_namespace,rc_title,rc_comment,rc_minor,
+ rc_bot,rc_new,rc_cur_id,rc_last_oldid,rc_type,rc_moved_to_ns,rc_moved_to_title,rc_id,
+ cur_text, old_text, old_flags FROM recentchanges LEFT OUTER JOIN old ON rc_last_oldid=old_id
+ LEFT OUTER JOIN cur ON rc_cur_id=cur_id WHERE rc_id>'$oldId' $bots
+ ORDER BY rc_timestamp", DB_READ );
+
$rowIndex = 0;
- while ( $row = $dbr->fetchObject( $res ) ) {
- if ( ++$serverCount % 20 == 0 ) {
- print "/server $ircServer\n";
- }
+ while ( $row = wfFetchObject( $res ) ) {
+ $oldtext = $row->old_text;
+ if (strstr($row->old_flags, "gzip"))
+ $oldtext = gzinflate($oldtext);
+ $szdiff = strlen($row->cur_text) - strlen($oldtext);
+ if ($szdiff >= 0)
+ $szdiff = "+$szdiff";
$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;
-// }
+ $comment = $row->rc_comment;
$bad = array("\n", "\r");
$empty = array("", "");
$comment = str_replace($bad, $empty, $comment);
@@ -83,7 +84,6 @@ while (1) {
$a = $title[0];
if ($a < 'A' || $a > 'Z')
$a = 'Z';
- #if ((isset($highest)) && (($what == "<" && $a > "$highest") || ($what == ">" && $a <= "$highest")))
if ((isset($highest) && ($a > $highest)) || (isset($lowest) && $a <= $lowest))
continue;
$user = str_replace($bad, $empty, $row->rc_user_text);
@@ -99,18 +99,18 @@ while (1) {
}
$url = str_replace($stupid_urlencode, $haha_take_that, $url);
$title = str_replace("_", " ", $title);
- # see http://www.irssi.org/?page=docs&doc=formats for some colour codes. prefix is \003,
+ # see http://www.irssi.org/?page=docs&doc=formats for some colour codes. prefix is \003,
# no colour (\003) switches back to the term default
$comment = preg_replace("/\/\* (.*) \*\/(.*)/", "\00315\$1\003 - \00310\$2\003", $comment);
$fullString = "\00314[[\00307$title\00314]]\0034 $flag\00310 " .
- "\00302$url\003 \0035*\003 \00303$user\003 \0035*\003 \00310$comment\003\n";
+ "\00302$url\003 \0035*\003 \00303$user\003 \0035*\003 ($szdiff) \00310$comment\003\n";
if ( $channel ) {
$fullString = "$channel\t$fullString";
}
print( $fullString );
- $oldTimestamp = $row->rc_timestamp;
- sleep(2);
+ $oldId = max( $row->rc_id, $oldId );
+ sleep(1);
}
sleep(5);
}
diff --git a/languages/Language.php b/languages/Language.php
index f43024f54b61..2d78acfe9eda 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -530,7 +530,7 @@ Your account has been created. Don't forget to change your {{SITENAME}} preferen
'yournick' => 'Your nickname (for signatures)',
'emailforlost' => "Fields marked with a star (*) are optional. Storing an email address enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.<br /><br />Your real name, if you choose to provide it, will be used for giving you attribution for your work.",
-'prefs-help-userdata' => '* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br/>
+'prefs-help-userdata' => '* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br />
* <strong>Email</strong> (optional): Enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.',
'loginerror' => 'Login error',
@@ -689,7 +689,7 @@ Please check the URL you used to access this page.\n",
'next' => 'next',
'last' => 'last',
'orig' => 'orig',
-'histlegend' => 'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br/>
+'histlegend' => 'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br />
Legend: (cur) = difference with current version,
(last) = difference with preceding version, M = minor edit.',
'history_copyright' => '-',
@@ -1016,6 +1016,7 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
'validate' => 'Validate page',
'lonelypages' => 'Orphaned pages',
'uncategorizedpages' => 'Uncategorized pages',
+'uncategorizedcategories' => 'Uncategorized categories',
'unusedimages' => 'Unused images',
'popularpages' => 'Popular pages',
'nviews' => '$1 views',
@@ -1356,8 +1357,8 @@ for a newer revision, but also keep your other settings for this article in
this revision, just select which option you intend to <i>change</i>, and
merging will fill in the other options with your previous settings.',
'val_noop' => 'No opinion',
-'val_percent' => '<b>$1%</b><br>($2 of $3 points<br>by $4 users)',
-'val_percent_single' => '<b>$1%</b><br>($2 of $3 points<br>by one user)',
+'val_percent' => '<b>$1%</b><br />($2 of $3 points<br />by $4 users)',
+'val_percent_single' => '<b>$1%</b><br />($2 of $3 points<br />by one user)',
'val_total' => 'Total',
'val_version' => 'Version',
'val_tab' => 'Validate',
@@ -1443,13 +1444,14 @@ article [[Train]].
'allmessages' => 'All system messages',
'allmessagestext' => 'This is a list of all system messages available in the MediaWiki: namespace.',
-'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:AllMessages at this site.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:AllMessages at this site. ',
'allmessagesnotsupportedDB' => 'Special:AllMessages not supported because wgUseDatabaseMessages is off.',
# Thumbnails
'thumbnail-more' => 'Enlarge',
'missingimage' => "<b>Missing image</b><br /><i>$1</i>\n",
+'filemissing' => 'File missing',
# Special:Import
'import' => 'Import pages',
@@ -2036,7 +2038,16 @@ class Language {
return $word;
}
-
+ # languages like Chinese need to be segmented in order for the diff
+ # to be of any use
+ function segmentForDiff( $text ) {
+ return $text;
+ }
+ # and unsegment to show the result
+ function unsegmentForDiff( $text ) {
+ return $text;
+ }
+
# convert text to different variants of a language. the automatic
# conversion is done in autoConvert(). here we parse the text
# marked with -{}-, which specifies special conversions of the
@@ -2157,20 +2168,29 @@ class Language {
function getPreferredVariant() {
global $wgUser;
-
+
+ $lang ='';
+
// if user logged in, get in from user's preference
- if( $wgUser->getID() != 0 )
- return $wgUser->getOption( 'variant' );
-
+ if( $wgUser->getID() != 0 ) {
+ $lang = $wgUser->getOption( 'variant' );
+ }
+ if($lang != '')
+ return $lang;
+
// if we have multiple variants for this langauge,
- // pick the first one as default
+ // pick the first one that's not utf8 (it could be
+ // utf8 if the language does not have a language file)
$v = $this->getVariants();
- if( !empty( $v ) )
- return $v{0};
-
- // otherwise there should really be just one variant,
+ if( !empty( $v ) ) {
+ $lang = $v[0];
+ }
+ if($lang != '')
+ return $lang;
+
// get it from the class name
$lang = strtolower( substr( get_class( $this ), 8 ) );
+
return $lang;
}
@@ -2202,6 +2222,27 @@ class Language {
}
}
}
+
+ /*
+ returns an array of extra options used by User::getPageRenderHash()
+ */
+ function getExtraHashOptions() {
+ return array();
+ }
+
+ /**
+ * A regular expression to match legal word-trailing characters
+ * which should be merged onto a link of the form [[foo]]bar.
+ * FIXME
+ *
+ * @return string
+ * @access public
+ */
+ function linkTrail() {
+ $trail = $this->getMessage( 'linktrail' );
+ if( empty( $trail ) ) $trail = Language::linkTrail();
+ return $trail;
+ }
}
# This should fail gracefully if there's not a localization available
diff --git a/languages/LanguageAf.php b/languages/LanguageAf.php
index 284a2169ebb4..a2abccfd3619 100644
--- a/languages/LanguageAf.php
+++ b/languages/LanguageAf.php
@@ -286,13 +286,13 @@ moenie vergeet om jou persoonlike voorkeure te stel nie.",
"yourpasswordagain" => "Tik weer jou wagwoord in",
"newusersonly" => " (slegs nuwe gebruikers)",
"remembermypassword" => "Onthou my wagwoord oor sessies.",
-"loginproblem" => "<b>Daar was probleme met jou intekening.</b><br>Probeer weer.",
-"alreadyloggedin" => "<font color=red><b>Gebruiker $1, jy is reeds ingeteken.</b></font><br>\n",
+"loginproblem" => "<b>Daar was probleme met jou intekening.</b><br />Probeer weer.",
+"alreadyloggedin" => "<font color=red><b>Gebruiker $1, jy is reeds ingeteken.</b></font><br />\n",
"areyounew" => "Indien jy nuut is by {{SITENAME}}, en ingeteken,
voer jou gebruikersnaam en wagwoord in.
Jou e-pos is opsioneel; indien jy jou wagwoord vergeet, kan jy vra dat dit na
-die e-pos adres gestuur word.<br>\n",
+die e-pos adres gestuur word.<br />\n",
"login" => "Teken in",
"userlogin" => "Teken in",
@@ -331,7 +331,7 @@ Teken asseblief in na jy dit ontvang het.",
"showpreview" => "Wys voorskou",
"blockedtitle" => "Gebruiker is geblokkeer",
"blockedtext" => "Jou gebruikersnaam of IP-adres is deur $1 geblokkeer:
-<br>''$2''<p>Jy mag $1 of een van die ander [[{{ns:4}}:administreerders|administreerders]] kontak
+<br />''$2''<p>Jy mag $1 of een van die ander [[{{ns:4}}:administreerders|administreerders]] kontak
om dit te bespreek.",
"newarticle" => "(Nuut)",
"newarticletext" =>
@@ -359,7 +359,7 @@ As jy dit stoor, sal enige wysigings sedert hierdie wysiging verloor word.</stro
"yourdiff" => "Wysigings",
"copyrightwarning" => "Alle bydraes aan {{SITENAME}} word beskou as beskikbaar gestel onder
die ''GNU Free Documentation License'' (lees $1 vir meer inligting).
-As jy nie wil hê dat jou werk ongemagtig gewysig of versprei mag word nie, moet jy dit nie hier indien nie.<br>
+As jy nie wil hê dat jou werk ongemagtig gewysig of versprei mag word nie, moet jy dit nie hier indien nie.<br />
Jy belowe ons ook dat jy dit self geskryf het, of verkry het van 'n bron wat toelaat dat dit hier mag wees.<br />
<strong>Moenie werk beskerm deur kopiereg sonder toestemming indien nie!</strong>",
"longpagewarning" => "Waarskuwing: hierdie bladsy is $1 kilogrepe lank; sekere blaaiers
@@ -413,8 +413,8 @@ woorde wat nie geindekseer word nie, of spesifisering van meer as een woord (sle
bevat, word gewys).",
"powersearch" => "Soek",
"powersearchtext" => "
-Search in namespaces :<br>
-$1<br>
+Search in namespaces :<br />
+$1<br />
$2 List redirects Search for $3 $9", #fixMe
@@ -571,7 +571,7 @@ Volg asseblief hierdie skakel: ($2) na die beskrywingsbladsy en vul inligting in
"deleteimg" => "skrap",
"deleteimgcompletely" => "skrap",
"imghistlegend" => "Legende: (huidig) = dit is die huidige prent, (skrap) = skrap hierdie ou weergawe, (gaan terug) = gaan terug na hierdie ou weergawe.
-<br><i>Kliek die datum om die prent te sien wat op daardie datum gelaai is</i>.",
+<br /><i>Kliek die datum om die prent te sien wat op daardie datum gelaai is</i>.",
"imagelinks" => "Prentskakels",
"linkstoimage" => "Die volgende bladsye gebruik hierdie prent:",
"nolinkstoimage" => "Daar is geen bladsye wat hierdie prent gebruik nie.",
@@ -597,9 +597,9 @@ Dit werk uit op gemiddeld <b>$5</b> veranderings per bladsy, en bladsye word <b>
"maintenancebacklink" => "Terug na die instandhoudingsbladsy",
"disambiguations" => "Bladsye wat onduidelikhede opklaar",
"disambiguationspage" => "{{ns:4}}:Links_to_disambiguating_pages",
-"disambiguationstext" => "Die volgende artikels skakel na 'n <i>bladsy wat onduidelikhede opklaar</i>. Hulle behoort eerder na die relevante onderwerp te skakel.<br>'n Bladsy word gesien as een wat onduidelikhede opklaar as $1 daarna toe skakel.<br>Skakels van ander naamkontekste is <i>nie</i> hier gelys nie.",
+"disambiguationstext" => "Die volgende artikels skakel na 'n <i>bladsy wat onduidelikhede opklaar</i>. Hulle behoort eerder na die relevante onderwerp te skakel.<br />'n Bladsy word gesien as een wat onduidelikhede opklaar as $1 daarna toe skakel.<br />Skakels van ander naamkontekste is <i>nie</i> hier gelys nie.",
"doubleredirects" => "Dubbele aansture",
-"doubleredirectstext" => "<b>Let op:</b> Hierdie lys bevat moontlik false positiewe. Dit beteken gewoonlik dat daar nog teks met skakels onder die eerste #REDIRECT is.<br>\nElke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste reël van van die tweede aanstuurteks, wat gewoonlik die \"regte\" teikenbladsy gee waarna die eerste aanstuur behoort te wys.",
+"doubleredirectstext" => "<b>Let op:</b> Hierdie lys bevat moontlik false positiewe. Dit beteken gewoonlik dat daar nog teks met skakels onder die eerste #REDIRECT is.<br />\nElke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste reël van van die tweede aanstuurteks, wat gewoonlik die \"regte\" teikenbladsy gee waarna die eerste aanstuur behoort te wys.",
"brokenredirects" => "Stukkende aansture",
"brokenredirectstext" => "Die volgende aansture skakel na 'n bladsy wat nie bestaan nie.",
"selflinks" => "Bladsye met selfskakels",
@@ -760,7 +760,7 @@ Vul 'n spesifieke rede hier onder in (haal byvoorbeeld spesifieke bladsye wat ge
"noblockreason" => "Jy moet 'n rede vir die blokkering gee.",
"blockipsuccesssub" => "Blokkering het geslaag",
"blockipsuccesstext" => "Die IP-adres \"$1\" is geblok.
-<br>Kyk na [[Special:Ipblocklist|IP block list]] vir 'n oorsig van blokkerings.",
+<br />Kyk na [[Special:Ipblocklist|IP block list]] vir 'n oorsig van blokkerings.",
"unblockip" => "Maak IP-adres oop",
"unblockiptext" => "Gebruik die vorm hier onder om skryftoegang te herstel vir 'n voorheen geblokkeerde IP-adres.",
"ipusubmit" => "Maak hierdie adres oop",
@@ -787,7 +787,7 @@ Bevestig asseblief dat dit is wat jy wil doen.",
"lockdbsuccesssub" => "Databasissluit het geslaag",
"unlockdbsuccesssub" => "Databasisslot is verwyder",
"lockdbsuccesstext" => "Die {{SITENAME}} databasis is gesluit.
-<br>Onthou om dit te ontsluit wanneer jou onderhoud afgehandel is.",
+<br />Onthou om dit te ontsluit wanneer jou onderhoud afgehandel is.",
"unlockdbsuccesstext" => "Die {{SITENAME}} databasis is ontsluit.",
# SQL query
diff --git a/languages/LanguageBg.php b/languages/LanguageBg.php
index 753a7513d84f..89ddbc4c5e5e 100644
--- a/languages/LanguageBg.php
+++ b/languages/LanguageBg.php
@@ -469,7 +469,7 @@ MySQL дава грешка \"$3: $4\".\n",
'yourrealname' => 'Вашето иÑтинÑко име*',
'yournick' => 'ВашиÑÑ‚ пÑевдоним (за подпиÑи)',
'emailforlost' => '* Полетата, отбелÑзани ÑÑŠÑ Ð·Ð²ÐµÐ·Ð´Ð° (*), Ñа незадължителни. ПоÑочването на електронна поща позволÑва на хората да Ñе Ñвържат Ñ Ð’Ð°Ñ, без да Ñе налага да им Ñъобщавате адреÑа Ñи, а Ñъщо може да Ñе използва, за да Ви Ñе изпрати нова парола, ако Ñлучайно забравите Ñегашната Ñи.<br /><br /> Ðко поÑочите иÑтинÑкото Ñи име, на него ще бъдат припиÑани Вашите приноÑи.',
-'prefs-help-userdata' => '* <strong>ИÑтинÑко име</strong> (незадължително): ако го поÑочите, на него ще бъдат припиÑани Вашите приноÑи.<br/>
+'prefs-help-userdata' => '* <strong>ИÑтинÑко име</strong> (незадължително): ако го поÑочите, на него ще бъдат припиÑани Вашите приноÑи.<br />
* <strong>Електронна поща</strong> (незадължително): позволÑва на хората да Ñе Ñвържат Ñ Ð’Ð°Ñ, без да Ñе налага да им Ñъобщавате адреÑа Ñи, а Ñъщо може да Ñе използва, за да Ви Ñе изпрати нова парола, ако Ñлучайно забравите Ñегашната Ñи.',
'loginerror' => 'Грешка при влизане',
'nocookiesnew' => "ПотребителÑката Ñметка бе Ñъздадена, но вÑе още не Ñте влезли. {{SITENAME}} използва биÑквитки при влизане на потребителите. МолÑ, разрешете биÑквитките във Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, тъй като те Ñа забранени, и Ñлед това влезте Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñкото Ñи име и парола.",
@@ -620,7 +620,7 @@ MySQL дава грешка \"$3: $4\".\n",
'next' => 'Ñлед',
'last' => 'поÑл',
'orig' => 'ориг',
-'histlegend' => 'Разлики: направете отметки в кутийките Ñрещу верÑиите, които желаете да Ñравните, и натиÑнете "Enter" или бутона отдолу.<br/>
+'histlegend' => 'Разлики: направете отметки в кутийките Ñрещу верÑиите, които желаете да Ñравните, и натиÑнете "Enter" или бутона отдолу.<br />
Легенда: (<b>тек</b>) = разлика Ñ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ‚Ð° верÑиÑ,
(<b>поÑл</b>) = разлика Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° верÑиÑ, <b>Ðœ</b>&nbsp;=&nbsp;малка промÑна',
diff --git a/languages/LanguageBn.php b/languages/LanguageBn.php
index c8818899929e..8de6ab89a4bf 100644
--- a/languages/LanguageBn.php
+++ b/languages/LanguageBn.php
@@ -307,13 +307,13 @@ Don't forget to personalize your wikipedia preferences.",
"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",
+"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",
+that it be to the address you give.<br />\n",
"login" => "Log in",
"userlogin" => "Log in",
@@ -357,7 +357,7 @@ Please log in again after you receive it.",
"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
+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" =>
@@ -393,7 +393,7 @@ If you save it, any changes made since this revision will be lost.</strong>\n",
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>
+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>",
@@ -462,8 +462,8 @@ 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>
+Search in namespaces :<br />
+$1<br />
$2 List redirects &nbsp; Search for $3 $9",
@@ -612,7 +612,7 @@ created and by whom, and anything else you may know about it.",
"deleteimgcompletely" => "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>.",
+<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.",
@@ -640,9 +640,9 @@ That comes to <b>$5</b> average edits per page, and <b>$6</b> views per edit.",
"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.",
+"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.",
+"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",
@@ -839,7 +839,7 @@ pages that were vandalized).",
"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.",
+<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.",
@@ -872,7 +872,7 @@ Please confirm that this is what you intend to do.",
"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.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
# SQL query
diff --git a/languages/LanguageCa.php b/languages/LanguageCa.php
index 7f991257dbf1..10705982fccc 100644
--- a/languages/LanguageCa.php
+++ b/languages/LanguageCa.php
@@ -129,8 +129,8 @@
"tog-editwidth" => "La caixa d'edició té l'ample màxim",
"tog-editondblclick" => "Edita pàgines amb un doble clic (JavaScript)",
"tog-editsection"=>"Enable section editing via [edit] links",
-"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br> on section titles (JavaScript)",
-"tog-showtoc"=>"Show table of contents<br>(for articles with more than 3 headings)",
+"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br /> on section titles (JavaScript)",
+"tog-showtoc"=>"Show table of contents<br />(for articles with more than 3 headings)",
"tog-watchdefault" => "Vigila articles nous i modificats",
"tog-minordefault" => "Marca totes les edicions com menors per defecte",
"tog-previewontop" => "Show preview before edit box and not after it",
@@ -291,14 +291,14 @@ Recordeu personalitzar les vostres preferències del {{SITENAME}}.",
"yourpasswordagain" => "Repetiu la contrasenya",
"newusersonly" => " (només usuaris nous)",
"remembermypassword" => "Vull que recordis la meva contrasenya entre sessions.",
-"loginproblem" => "<b>Hi ha hagut un problema amb l'entrada.</b><br>Proveu-ho de nou!",
-"alreadyloggedin" => "<font color=red><b>Benvingut, usuari $1!</b></font><br>\n",
+"loginproblem" => "<b>Hi ha hagut un problema amb l'entrada.</b><br />Proveu-ho de nou!",
+"alreadyloggedin" => "<font color=red><b>Benvingut, usuari $1!</b></font><br />\n",
"areyounew" => "Si sou nou a la {{SITENAME}} en català, i
voleu tenir un compte d'usuari, ingresseu un nom d'usuari,
i teclegeu i repetiu una contrasenya.
La vostra direcció electrònica és opcional: si perdeu o oblideu la
-contrasenya, podeu demanar que s'enviï a la direcció que vulgueu<br>\n",
+contrasenya, podeu demanar que s'enviï a la direcció que vulgueu<br />\n",
"login" => "Registre/Entrada",
"userlogin" => "Registre/Entrada",
"logout" => "Sortida",
@@ -336,7 +336,7 @@ Entreu-hi de nou després de rebre-la.cibas.",
"showpreview" => "Mostra previsualizació",
"blockedtitle" => "L'usuari està bloquejat",
"blockedtext" => "El vostre nombre d'usuari o direcció IP ha estat bloquejada per $1.
-La raó és la que segueix:<br>$2<p>Podeu contactar amb l'administrador per discutir el bloqueig.",
+La raó és la que segueix:<br />$2<p>Podeu contactar amb l'administrador per discutir el bloqueig.",
"newarticle" => "(Nou)",
"newarticletext" => "Poseu el text per la pàgina nova ací.",
"noarticletext" => "(En aquest moment, a aquesta pàgina, no hi ha text)",
@@ -361,7 +361,7 @@ Si la graveu, els canvis fets des d'eixa revisió es perdran.</strong>\n",
es consideren fetes públiques sota la llicència de documentació lliure GNU
(mostra detalls a $1).
Si no desitgeu que la gent corregeixi els vostres escrits sense pietat
-i els distribueixi lliurement, llavors no els poseu ací. <br>
+i els distribueixi lliurement, llavors no els poseu ací. <br />
També ens heu d'assegurar que tot plegat és obra vostra i que sou l'amo dels drets d'autor, o els heu copiat des del domini públic
o una altra font lliura.
<strong>NO EMPREU ESCRITS AMB COPYRIGHT SENSE PERMÃS!</strong>",
@@ -416,8 +416,8 @@ que no es troben a l'índex, o per especificar més d'una paraula a cercar( nomÃ
que contenen tots els termes d'una recerca apareixeran en el resultat).",
"powersearch" => "Recerca",
"powersearchtext" => "
-Cerca en espais de nom :<br>
-$1<br>
+Cerca en espais de nom :<br />
+$1<br />
$2 Llista redireccions Cerca $3 $9",
# Preferences page
@@ -582,7 +582,7 @@ i l'autor, i qualsevol altra cosa que pugueu saber al respecte.",
"deleteimgcompletely" => "borr",
"imghistlegend" => "Simbologia: (act) = aquesta és la imatge actual, (esb) = esborra
aquesta versió antiga, (rev) = reverteix a aquesta versió antiga.
-<br><i>Cliqueu a la data per veure la imatge carregada en aquesta data</i>.",
+<br /><i>Cliqueu a la data per veure la imatge carregada en aquesta data</i>.",
"imagelinks" => "Enllaços a la imatge",
"linkstoimage" => "Les següents pàgines enllacen a aquesta imatge:",
"nolinkstoimage" => "No hi ha pàgines que enllacen aquesta imatge.",
@@ -614,13 +614,13 @@ sobrecarregar la base de dades, així que si us plau, no torneu a carregar la pÃ
"disambiguationspage" => "{{ns:4}}:Enllaços a pàgines de desambiguació",
"disambiguationstext" => "Els següents articles enllacen a una<i>pàgina de desambiguació</i>. Haurien d'enllaçar al tema apropiat.
-<br>Una pàgina és considerada una pàgina de desambiguació si és enllaçada des de $1.<br>Enllaços des d'altres espais de nom (Com Viquipè
+<br />Una pàgina és considerada una pàgina de desambiguació si és enllaçada des de $1.<br />Enllaços des d'altres espais de nom (Com Viquipè
dia: o usuari:) <i>no</i> són llistats ací.",
"doubleredirects" => "Redireccions Dobles",
"doubleredirectstext" => "<b>Atenció:</b> aquest llistat pot contenir falsos positius. Això normalment significa que hi ha text
-addicional amb enllaços sota el primer #REDIRECT.<br>\nCada fila conté enllaços al segon i tercer redireccionament, així com la primera línia del
+addicional amb enllaços sota el primer #REDIRECT.<br />\nCada fila conté enllaços al segon i tercer redireccionament, així com la primera línia del
segon redireccionament, la qual cosa dóna normalment l'article \"real\", al que el primer redireccionamet hauria d'apuntar.",
"selflinks" => "Pàgines amb autoenllaços",
@@ -807,7 +807,7 @@ quines pàgines en concret estan sent vandalitzades).",
"noblockreason" => "Heu de donar un motiu per al bloqueig.",
"blockipsuccesssub" => "S'ha bloquejat amb èxit",
"blockipsuccesstext" => "La direcció IP \"$1\" ha estat bloquejada.
-<br>Vegeu [[Especial:llistat d'IP bloquejades|llistat d'IPs bloquejades]] per revisar bloquejos.",
+<br />Vegeu [[Especial:llistat d'IP bloquejades|llistat d'IPs bloquejades]] per revisar bloquejos.",
"unblockip" => "Desbloqueja direcció IP",
"unblockiptext" => "Empreu el següent formulari per restaurar
l'accés a l'escriptura a una direcció IP prèviament bloquejada.",
@@ -840,7 +840,7 @@ Confirmeu que això és el que voleu fer.",
"lockdbsuccesssub" => "S'ha assolit el bloqueig de la base de dades",
"unlockdbsuccesssub" => "S'ha extret el bloqueig de la base de dades",
"lockdbsuccesstext" => "S'ha bloquejat la base de dades de la {{SITENAME}}.
-<br>Recordeu-vos-en d'extreure el bloqueig havent acabant el manteniment.",
+<br />Recordeu-vos-en d'extreure el bloqueig havent acabant el manteniment.",
"unlockdbsuccesstext" => "La base de dades de la {{SITENAME}} ha estat desbloquejada.",
# SQL query
diff --git a/languages/LanguageCs.php b/languages/LanguageCs.php
index 90bc5819d47f..142ee1a5c648 100644
--- a/languages/LanguageCs.php
+++ b/languages/LanguageCs.php
@@ -266,8 +266,8 @@ Můžete pracovat ve Wikipedii anonymně, nebo se přihlásit znovu jako stejný
"yourpasswordagain" => "Napište heslo znovu",
"newusersonly" => " (pouze noví uživatelé)",
"remembermypassword" => "Pamatuj si mé heslo od seance k seanci.",
-"loginproblem" => "<b>Nastal problém při vašem přihlášení.</b><br>Zkuste to znovu!",
-"alreadyloggedin" => "<font color=\"red\"><b>Uživateli $1, již jste přihlášen!</b></font><br>\n",
+"loginproblem" => "<b>Nastal problém při vašem přihlášení.</b><br />Zkuste to znovu!",
+"alreadyloggedin" => "<font color=\"red\"><b>Uživateli $1, již jste přihlášen!</b></font><br />\n",
"login" => "Přihlašte se", #FIXME, what exactly do the following go to?
"userlogin" => "Přihlašte se",
@@ -303,7 +303,7 @@ DoporuÄujeme, abyste se nyní pÅ™ihlásil a radÄ›ji zmÄ›nil heslo.", #FIXME
"showpreview" => "Ukaž náhled", #FIXME eh?
"blockedtitle" => "Uživatel odblokován", #FIXME cu 'Konto forbarita'?
"blockedtext" => "Váš úÄet nebo IP-adresa byly odblokovány osobou ,
-která popsala příÄinu takto:<br><p>Máte právo se spojit se správcem systému a prodiskutovat odblokování.", #FIXME - sistemestro?
+která popsala příÄinu takto:<br /><p>Máte právo se spojit se správcem systému a prodiskutovat odblokování.", #FIXME - sistemestro?
"newarticle" => "(Nový)",
"newarticletext" => "Vložte sem text nového Älánku.", #FIXME?
"noarticletext" => "(Článek zatím neobsahuje text)", #FIXME
@@ -366,8 +366,8 @@ která popsala příÄinu takto:<br><p>Máte právo se spojit se správcem systÃ
"nonefound" => "<strong>Poznámka</strong>: neúspěšné hledání zaviňuje Äasto zadání slov, které nejsou v indexu, nebo mnoha slov najednou (jen stránky, které obsahují vÅ¡echna zadaná slova, se objeví ve výsledku).",
"powersearch" => "Sercu",
#"powersearchtext" => "Hledej"
-#Sercu en sekcioj: :<br>
-#<br>
+#Sercu en sekcioj: :<br />
+#<br />
# Kun alidirektiloj &nbsp; Sercu ",
# Preferences page
@@ -508,7 +508,7 @@ Věnuj pozornost následujícímu odkazu: ($2) na stránku popisu a napiš pár
"deleteimg" => "for",
"deleteimgcompletely" => "for",
"imghistlegend" => "(nun) = toto je souÄasná verze souboru, (for) = odstranit tuto starou verzi, (res) = obnovit starou verzi.
-<br><i>Click on date to see image uploaded on that date</i>.",
+<br /><i>Click on date to see image uploaded on that date</i>.",
"imagelinks" => "Odkazy k souboru ",
"linkstoimage" => "K souboru odkazují tyto stránky:",
"nolinkstoimage" => "Žádná stránka neodkazuje na tento soubor.",
@@ -534,9 +534,9 @@ To je v průměru jedna stránka na <b></b> návštěv, a na <b></b> redakcí.",
"maintenancebacklink" => "Návrat k nástrojům",
"disambiguations" => "Å patnÄ› odkázané oddÄ›lovaÄe ",
"disambiguationspage" => "Wikipedie:OddÄ›lovaÄe",
-"disambiguationstext" => "Tyto stránky odkazují na <i>stránkový oddÄ›lovaÄ</i>. MÄ›ly by místo toho odkazovat na správný subjekt.<br>Bereme do úvahy stránky, které odkazují na oddÄ›lovaÄ.<br>Odkazy na sekci neÄlánkových souborů <i>ne</i> se zapisují zde.",
+"disambiguationstext" => "Tyto stránky odkazují na <i>stránkový oddÄ›lovaÄ</i>. MÄ›ly by místo toho odkazovat na správný subjekt.<br />Bereme do úvahy stránky, které odkazují na oddÄ›lovaÄ.<br />Odkazy na sekci neÄlánkových souborů <i>ne</i> se zapisují zde.",
"doubleredirects" => "Dvojité přesměrování",
-"doubleredirectstext" => "<b>Pozor:</b> Může se stát, že tento seznam bude obsahovat falešné pozitivy. Všeobecně to znamená, že existuje další text s odkazy po #REDIERCT.<br>
+"doubleredirectstext" => "<b>Pozor:</b> Může se stát, že tento seznam bude obsahovat falešné pozitivy. Všeobecně to znamená, že existuje další text s odkazy po #REDIERCT.<br />
Každý řádek ukazuje odkaz k prvnímu a druhému pÅ™esmÄ›rování, plus první řádek textu druhého pÅ™esmÄ›rování, který vÅ¡eobecnÄ› ukazuje \"skuteÄný\" hlavní Älánek, na který odkazuje první pÅ™esmÄ›rování.",
"brokenredirects" => "Přerušené přesměrování",
"brokenredirectstext" => "Tato pÅ™esmÄ›rování se vztahují na neexistující Älánky.",
@@ -630,7 +630,7 @@ a bude poÄítány v seznamu tvých Oblíbených.
"confirm" => "Potvrdit",
"confirmdelete" => "Potvrdit odstranění",
"deletesub" => "(Odstraňuje se \"$1\")",
-"confirmdeletetext" => "Odstraníš Älánek nebo soubor a smažeÅ¡ celou jeho historii z databáze.<br>
+"confirmdeletetext" => "Odstraníš Älánek nebo soubor a smažeÅ¡ celou jeho historii z databáze.<br />
PotvrÄ prosím, že to opravdu chceÅ¡, že si uvÄ›domujeÅ¡ důsledky a že dodržujeÅ¡ [[Wikipedie:Pravidla o odstraňování]].",
"confirmcheck" => "Ano, jsem naprosto jist, že chci toto odstranit.",
"actioncomplete" => "Provedeno",
@@ -691,7 +691,7 @@ Níže objasni pÅ™esný důvod (napÅ™. uveÄ stránku, která se stala terÄem v
"noblockreason" => "Nutno uvést důvod zablokování.",
"blockipsuccesssub" => "Úspěšné zablokování",
"blockipsuccesstext" => "Adresa IP \"$1\" je zablokována.
-<br>Viz [[Special:Ipblocklist|seznam zablokování IP]].",
+<br />Viz [[Special:Ipblocklist|seznam zablokování IP]].",
"unblockip" => "Zrušit blokování adresy IP",
"unblockiptext" => "Tímto formulářem možno obnovit právo blokované adresy IP opět přispívat do wikipedie.",
"ipusubmit" => "Zrušit blokování adresy",
@@ -716,7 +716,7 @@ Níže objasni pÅ™esný důvod (napÅ™. uveÄ stránku, která se stala terÄem v
"lockdbsuccesssub" => "Databáze uzamknuta",
"unlockdbsuccesssub" => "Databáze odemknuta",
"lockdbsuccesstext" => "Databáze wikipedie je uzamknuta.
-<br>Nezapomeň ji odemknout po opravách.",
+<br />Nezapomeň ji odemknout po opravách.",
"unlockdbsuccesstext" => "Databáze wikipedie je odemknuta.",
# SQL query
diff --git a/languages/LanguageCy.php b/languages/LanguageCy.php
index e0b0d1bb926f..d5d721fbb33f 100644
--- a/languages/LanguageCy.php
+++ b/languages/LanguageCy.php
@@ -325,8 +325,8 @@ Adroddwch hwn i gweinyddwr os gwelwch yn dda, a cofiwch sylwi'r URL.",
"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>
+"wrong_wfQuery_params" => "Incorrect parameters to wfQuery()<br />
+Function: $1<br />
Query: $2
",
"viewsource" => "Gwyliwch y ffynhonnell",
@@ -348,10 +348,10 @@ Gallwch chi defnyddio'r Wicipedia yn anhysbys, neu gallwch chi mewngofnodi eto f
"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",
+"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",
+"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.",
@@ -416,7 +416,7 @@ Allweddair defnyddwr \"$2\" rwan yw \"$3\". Ddylwch chi mewngofnodi rwan a newid
"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
+"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.",
@@ -450,10 +450,10 @@ Fydd rhaid i chi ymsoddi eich newidiadau i mewn i'r testun sydd mewn bod.
"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>
+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>
+"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
@@ -507,8 +507,8 @@ Mae'n tebygol roedd hyn am achos yr ydych wedi trio chwilio a gair gyda llai na
sydd ddim yn cael eu mynegai.",
"powersearch" => "Chwilio",
"powersearchtext" => "
-Edrychwch mewn lle-enw:<br>
-$1<br>
+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" => "
@@ -524,9 +524,9 @@ border=\"0\" ALT=\"Google\"></A>
<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
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -688,7 +688,7 @@ Dilynwch y cyswllt hon: ($2) i'r tudalen disgrifiad a llenwch gwybodaeth amdano'
"deleteimg" => "dil",
"deleteimgcompletely" => "dil",
"imghistlegend" => "Eglurhad: (cyf) = hon yw'r delwedd cyfoes, (dil) = dilewch yr hen fersiwn hon, (dych) = dychwelio i hen fersiwn hon.
-<br><i>Cliciwch ar dyddiad i weld y delwedd ag oedd llwythiad ar y dyddiad hon</i>.",
+<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. ",
@@ -712,9 +712,9 @@ Sef <b>$5</b> golygiadau pob tudalen, ar gyfartaledd, a <b>$6</b> golygon o bob
"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.",
+"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.",
+"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",
@@ -913,7 +913,7 @@ Llenwch rheswm am y bloc, isod (e.e. enwch y tudalennau a oedd wedi fandalo).",
"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.",
+<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",
@@ -956,7 +956,7 @@ Please confirm that this is what you intend to do.",
"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.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The database has been unlocked.",
# SQL query -- left untranslated
diff --git a/languages/LanguageDa.php b/languages/LanguageDa.php
index dbf21a1df32c..a6b968ce2bee 100644
--- a/languages/LanguageDa.php
+++ b/languages/LanguageDa.php
@@ -154,13 +154,13 @@ require_once( "LanguageUtf8.php" );
"tog-highlightbroken" => "Brug røde henvisninger til tomme sider",
"tog-justify" => "Justér afsnit",
"tog-hideminor" => "Skjul mindre ændringer i seneste ændringer listen",
-"tog-usenewrc" => "Udvidet seneste ændringer liste<br>(ikke for alle browsere)",
+"tog-usenewrc" => "Udvidet seneste ændringer liste<br />(ikke for alle browsere)",
"tog-numberheadings" => "Automatisk nummerering af overskrifter",
"tog-showtoolbar" => "Vis værktøjslinje til redigering",
"tog-editondblclick" => "Redigér sider med dobbeltklik (JavaScript)",
"tog-editsection"=>"Redigér afsnit ved hjælp af [redigér]-henvisning",
-"tog-editsectiononrightclick"=>"Redigér afsnit ved at højreklikke<br> på afsnittets titel (JavaScript)",
-"tog-showtoc"=>"Vis indholdsfortegnelse<br>(for artikler med mere end tre afsnit)",
+"tog-editsectiononrightclick"=>"Redigér afsnit ved at højreklikke<br /> på afsnittets titel (JavaScript)",
+"tog-showtoc"=>"Vis indholdsfortegnelse<br />(for artikler med mere end tre afsnit)",
"tog-rememberpassword" => "Husk adgangskode til næste besøg",
"tog-editwidth" => "Redigeringsboksen har fuld bredde",
"tog-watchdefault" => "Overvåg nye og ændrede artikler",
@@ -364,9 +364,9 @@ oprettet. Glem ikke at personliggøre dine Wikipedia-indstillinger.",
"newusersonly" => " (kun nye brugere)",
"remembermypassword" => "Husk min adgangskode til næste gang.",
"loginproblem" => "<b>Der har været et problem med at få dig logget
-på.</b><br>Prøv igen!",
+på.</b><br />Prøv igen!",
"alreadyloggedin" => "<font color=red><b>Bruger $1, du er allerede logget
-på!</b></font><br>\n",
+på!</b></font><br />\n",
"login" => "Log på",
"userlogin" => "Log på",
@@ -412,16 +412,16 @@ Du bør logge på og ændre din adgangskode straks efter, du har modtaget den.",
"showpreview" => "Forhåndsvisning",
"blockedtitle" => "Brugeren er blokeret",
"blockedtext" => "Dit brugernavn eller din IP-adresse er blevet blokeret af
-$1. Begrundelsen er denne:<br>$2<p>Du kan kontakte $1
+$1. Begrundelsen er denne:<br />$2<p>Du kan kontakte $1
eller en af de andre [[Wikipedia:Administratorer|administratorer]] for at diskutere blokeringen.
Din IP-adresse er $3.
Sørg venligst for at inkludere dette nummer i alle henvendelser til en administrator.
",
"newarticle" => "(Ny)",
-"newarticletext" => "Der er på nuværende tidspunkt ingen tekst på denne side.<br>
+"newarticletext" => "Der er på nuværende tidspunkt ingen tekst på denne side.<br />
Du kan begynde en artikel ved at skrive i boksen herunder.
-(se [[Wikipedia:Hjælp|hjælpen]] for yderligere information).<br>
+(se [[Wikipedia:Hjælp|hjælpen]] for yderligere information).<br />
Hvis det ikke var din mening, så tryk på '''Tilbage''' eller '''Back''' knappen.",
"anontalkpagetext" => "---- ''Dette er en diskussionsside for en anonym bruger der
ikke har oprettet en konto endnu eller ikke bruger den. Vi er derfor nødt til at
@@ -461,7 +461,7 @@ overskrevet.</strong>\n",
at betragte som udgivet under GNU Free Documentation License
(se $1 for detaljer).
Hvis du ikke vil have din tekst redigeret uden nåde og kopieret efter
-forgodtbefindene, så skal du ikke lægge det her.<br>
+forgodtbefindene, så skal du ikke lægge det her.<br />
Du lover os også, at du skrev teksten selv, kopierede fra en
public domain eller lignende fri ressource.
<strong>LÆG ALDRIG MATERIALE HER SOM ER BESKYTTET AF ANDRES OPHAVSRET UDEN
@@ -533,8 +533,8 @@ der ikke er indekseret, eller ved at specificere mere end et søgeord (da kun
sider der indeholder alle søgeordene vil blive fundet).",
"powersearch" => "Søg",
"powersearchtext" => "
-Søg i navnerum :<br>
-$1<br>
+Søg i navnerum :<br />
+$1<br />
$2 List omdirigeringer &nbsp; Søg efter $3 $9",
"searchdisabled" => "<p>Søgefunktionen er midlertidigt afbrudt på grund af
for stort pres på serveren; vi håber vi kan sætte den på igen når vi har
@@ -552,9 +552,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -735,7 +735,7 @@ og af hvem, og andre ting du ved om filen.",
"deleteimgcompletely" => "slet",
"imghistlegend" => "Forklaring: (nuværende) = dette er det nuværende billede,
(slet) = slet denne gamle version, (gendan) = gendan en gammel version.
-<br><i>Klik på en dato for at se billedet, som er lagt op den dag</i>.",
+<br /><i>Klik på en dato for at se billedet, som er lagt op den dag</i>.",
"imagelinks" => "Billedehenvisninger",
"linkstoimage" => "De følgende sider henviser til dette billede:",
"nolinkstoimage" => "Der er ingen sider der henviser til dette billede.",
@@ -770,12 +770,12 @@ hver gang du har rettet en enkelt ting ;-)",
"disambiguationspage" => "Wikipedia:Henvisninger til artikler med flertydige titler",
"disambiguationstext" => "De følgende artikler henviser til
<i>artikler med flertydige titler</i>. De skulle henvise til en ikke-flertydig
-titel i stedet for.<br>En artikel bliver behandlet som flertydig, hvis den er
-henvist fra $1.<br>Henvisninger fra andre navnerum er <i>ikke</i> listet her.",
+titel i stedet for.<br />En artikel bliver behandlet som flertydig, hvis den er
+henvist fra $1.<br />Henvisninger fra andre navnerum er <i>ikke</i> listet her.",
"doubleredirects" => "Dobbelte omdirigeringer",
"doubleredirectstext" => "<b>Bemærk:</b> Denne liste kan indeholde forkerte
resultater. Det er som regel, fordi siden indeholder ekstra tekst under den
-første #REDIRECT.<br>\nHver linje indeholder henvisninger til den første og den
+første #REDIRECT.<br />\nHver linje indeholder henvisninger til den første og den
anden omdirigering, og den første linje fra den anden omdirigeringstekst,
det giver som regel den \"rigtige\" målartikel, som den første omdirigering
skulle have peget på.",
@@ -1012,7 +1012,7 @@ sider der har været udsat for vandalisme).",
"noblockreason" => "Du skal angive en begrundelse for denne blokering.",
"blockipsuccesssub" => "Blokering udført med success",
"blockipsuccesstext" => "\"$1\" er blevet blokeret.
-<br>Se [[Speciel:Ipblocklist|IP blokeringslisten]] for alle blokeringer.",
+<br />Se [[Speciel:Ipblocklist|IP blokeringslisten]] for alle blokeringer.",
"unblockip" => "Ophæv blokering af bruger",
"unblockiptext" => "Brug formularen herunder for at gendanne skriveadgangen
for en tidligere blokeret IP-adresse eller bruger.",
@@ -1046,7 +1046,7 @@ Bekræft venligst at du har til hensigt at gøre dette.",
"lockdbsuccesssub" => "Databasen er nu låst",
"unlockdbsuccesssub" => "Databasen er nu låst op",
"lockdbsuccesstext" => "Wikipediadatabasen er låst.
-<br>Husk at fjerne låsen når du er færdig med din vedligeholdelse.",
+<br />Husk at fjerne låsen når du er færdig med din vedligeholdelse.",
"unlockdbsuccesstext" => "Wikipediadatabasen er låst op.",
# SQL query
diff --git a/languages/LanguageDe.php b/languages/LanguageDe.php
index 650ae726600d..bb9c7ed90ed1 100644
--- a/languages/LanguageDe.php
+++ b/languages/LanguageDe.php
@@ -339,7 +339,7 @@ gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
"cannotdelete" => "Kann spezifizierte Seite oder Artikel nicht löschen. (Wurde möglicherweise schon von jemand anderem gelöscht.)",
"badtitle" => "Ungültiger Titel",
"badtitletext" => "Der Titel der angeforderten Seite war ungültig, leer, oder ein ungültiger Sprachlink von einem anderen Wiki.",
-"perfdisabled" => "Diese Funktion wurde wegen Überlastung des Servers vorübergehend deaktiviert. Versuchen Sie es bitte zwischen 02:00 und 14:00 UTC noch einmal<br>(Aktuelle Serverzeit : ".date("H:i:s")." UTC).",
+"perfdisabled" => "Diese Funktion wurde wegen Überlastung des Servers vorübergehend deaktiviert. Versuchen Sie es bitte zwischen 02:00 und 14:00 UTC noch einmal<br />(Aktuelle Serverzeit : ".date("H:i:s")." UTC).",
"perfdisabledsub" => "Hier ist eine gespeicherte Kopie von $1:",
"perfcached" => "Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell:",
"wrong_wfQuery_params" => "Falsche Parameter für wfQuery()<br />
@@ -368,8 +368,8 @@ Vergessen Sie nicht, Ihre Einstellungen anzupassen.",
"yourpasswordagain" => "Passwort wiederholen",
"newusersonly" => " (nur für neue Mitglieder)",
"remembermypassword" => "Dauerhaftes einloggen",
-"loginproblem" => "<b>Es gab ein Problem mit Ihrer Anmeldung.</b><br>Bitte versuchen Sie es nochmal!",
-"alreadyloggedin" => "<font color=red><b>Benutzer $1, Sie sind bereits angemeldet!</b></font><br>\n",
+"loginproblem" => "<b>Es gab ein Problem mit Ihrer Anmeldung.</b><br />Bitte versuchen Sie es nochmal!",
+"alreadyloggedin" => "<font color=red><b>Benutzer $1, Sie sind bereits angemeldet!</b></font><br />\n",
"login" => "Anmelden",
"loginprompt" => "Um sich bei {{SITENAME}} anmelden zu können, müssen Cookies aktiviert sein.",
@@ -416,7 +416,7 @@ Bitte melden Sie sich an, sobald Sie es erhalten.",
"showpreview" => "Vorschau zeigen",
"blockedtitle" => "Benutzer ist blockiert",
"blockedtext" => "Ihr Benutzername oder Ihre IP-Adresse wurde von $1 blockiert.
-Als Grund wurde angegeben:<br>$2<p>Bitte kontaktieren Sie den Administrator, um über die Blockierung zu sprechen.",
+Als Grund wurde angegeben:<br />$2<p>Bitte kontaktieren Sie den Administrator, um über die Blockierung zu sprechen.",
"whitelistedittitle" => "Zum Bearbeiten ist es erforderlich angemeldet zu sein",
"whitelistedittext" => "Sie müssen sich [[Spezial:Userlogin|hier anmelden]] um Artikel bearbeiten zu können.",
"whitelistreadtitle" => "Zum Lesen ist es erforderlich angemeldet zu sein",
@@ -487,7 +487,7 @@ Benutzer mit Sysop-Rechten bearbeitet werden kann. Beachten Sie bitte die
"last" => "Letzte",
"orig" => "Original",
"histlegend" => "Diff Auswahl: Die Boxen der gewünschten
-Versionen markieren und 'Enter' drücken oder den Button unten klicken/alt-v.<br/>
+Versionen markieren und 'Enter' drücken oder den Button unten klicken/alt-v.<br />
Legende:
(Aktuell) = Unterschied zur aktuellen Version,
(Letzte) = Unterschied zur vorherigen Version,
@@ -532,8 +532,8 @@ Sie die Volltextsuche oder legen Sie den Artikel <a href=\"$1\">neu</a> an. ",
Erfolglose Suchanfragen werden häufig verursacht durch den Versuch, nach 'gewöhnlichen' Worten zu suchen; diese sind nicht indiziert.",
"powersearch" => "Suche",
"powersearchtext" => "
-Suche in Namensräumen :<br>
-$1<br>
+Suche in Namensräumen :<br />
+$1<br />
$2 Zeige auch REDIRECTs &nbsp; Suche nach $3 $9",
"searchdisabled" => "<p>Entschuldigung! Die Volltextsuche wurde wegen Überlastung temporär deaktiviert. Derweil können Sie die folgende Google Suche verwenden, die allerdings nicht den aktuellen Stand wiederspiegelt.<p>
@@ -549,9 +549,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio name
+<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>
+}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -609,8 +609,8 @@ Ihre interne ID-Nummer ist $2.",
"changes" => "Änderungen",
"recentchanges" => "Letzte Änderungen",
"recentchangestext" => "
-Diese Seite wird beim Laden automatisch aktualisiert. Angezeigt werden Seiten, die zuletzt bearbeitet wurden, sowie die Zeit und der Name des Autors.<br>
-Falls Sie neu bei {{SITENAME}} sind, lesen Sie bitte die [[Project:Willkommen|Willkommensseite]] und [[Project:Erste Schritte|Erste Schritte]].<br>
+Diese Seite wird beim Laden automatisch aktualisiert. Angezeigt werden Seiten, die zuletzt bearbeitet wurden, sowie die Zeit und der Name des Autors.<br />
+Falls Sie neu bei {{SITENAME}} sind, lesen Sie bitte die [[Project:Willkommen|Willkommensseite]] und [[Project:Erste Schritte|Erste Schritte]].<br />
Wenn Sie möchten, dass {{SITENAME}} zu einem Erfolg wird, dann fügen Sie bitte keine Texte hinzu, die dem [[Project:Urheberrechte beachten|Urheberrecht]] anderer unterliegen. Dies könnte dem Projekt sonst schweren Schaden zufügen.",
"rcloaderr" => "Lade Letzte Änderungen",
"rcnote" => "Hier sind die letzten <b>$1</b> Änderungen der letzten <b>$2</b> Tage. (<b>N</b> - Neuer Artikel; <b>M</b> - kleine Änderung)",
@@ -737,7 +737,7 @@ Davon haben <b>$2</b> Administrator-Rechte (siehe $3).",
"maintenancebacklink" => "Zurück zur Wartungsseite",
"disambiguations" => "Begriffsklärungsseiten",
"disambiguationspage" => "Project:Begriffsklärung",
-"disambiguationstext" => "Die folgenden Artikel verweisen auf eine <i>Seite zur Begriffsklärung</i>. Sie sollten statt dessen auf die eigentlich gemeinte Seite verweisen.<br>Eine Seite wird als Begriffsklärungsseite behandelt, wenn $1 auf sie verweist.<br>Verweise aus Namensräumen werden hier <i>nicht</i> aufgelistet.",
+"disambiguationstext" => "Die folgenden Artikel verweisen auf eine <i>Seite zur Begriffsklärung</i>. Sie sollten statt dessen auf die eigentlich gemeinte Seite verweisen.<br />Eine Seite wird als Begriffsklärungsseite behandelt, wenn $1 auf sie verweist.<br />Verweise aus Namensräumen werden hier <i>nicht</i> aufgelistet.",
"doubleredirects" => "Doppelte Redirects",
"doubleredirectstext" => "<b>Achtung:</b> Diese Liste kann \"falsche Positive\" enthalten. Das ist dann der Fall, wenn ein Redirect außer dem Redirect-Verweis noch weiteren Text mit anderen Verweisen enthält. Letztere sollten dann entfernt werden.",
"brokenredirects" => "Kaputte Redirects",
@@ -935,7 +935,7 @@ Bitte tragen Sie den Grund für die Blockade ein.",
"noblockreason" => "Sie müssen einen Grund für die Blockade angeben.",
"blockipsuccesssub" => "Blockade erfolgreich",
"blockipsuccesstext" => "Die IP-Adresse \"$1\" wurde blockiert.
-<br>Auf [[Spezial:Ipblocklist|IP block list]] ist eine Liste der Blockaden.",
+<br />Auf [[Spezial:Ipblocklist|IP block list]] ist eine Liste der Blockaden.",
"unblockip" => "IP-Adresse freigeben",
"unblockiptext" => "Benutzen Sie das Formular, um eine blockierte IP-Adresse freizugeben.",
"ipusubmit" => "Diese Adresse freigeben",
@@ -961,7 +961,7 @@ Bitte tragen Sie den Grund für die Blockade ein.",
"lockdbsuccesssub" => "Datenbank wurde erfolgreich gesperrt",
"unlockdbsuccesssub" => "Datenbank wurde erfolgreich freigegeben",
"lockdbsuccesstext" => "Die {{SITENAME}}-Datenbank wurde gesperrt.
-<br>Bitte geben Sie die Datenbank wieder frei, sobald die Wartung abgeschlossen ist.",
+<br />Bitte geben Sie die Datenbank wieder frei, sobald die Wartung abgeschlossen ist.",
"unlockdbsuccesstext" => "Die {{SITENAME}}-Datenbank wurde freigegeben.",
# SQL query
@@ -1009,7 +1009,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",
+"missingimage" => "<b>Fehlendes Bild</b><br /><i>$1</i>\n",
#Tooltips:
'tooltip-atom' => 'Atom-Feed von dieser Seite',
diff --git a/languages/LanguageEs.php b/languages/LanguageEs.php
index 3483da449a0f..45fee284a229 100644
--- a/languages/LanguageEs.php
+++ b/languages/LanguageEs.php
@@ -142,8 +142,8 @@ require_once( "LanguageUtf8.php" );
"tog-editwidth" => "La caja de edición tiene el ancho máximo",
"tog-editondblclick" => "Editar páginas con doble click (JavaScript)",
"tog-editsection"=>"Habilitar la edicion de secciones usando el enlace [editar]",
-"tog-editsectiononrightclick"=>"Habilitar la edición de secciones presionando el boton de la derecha<br> en los titulos de secciones (JavaScript)",
-"tog-showtoc"=>"Mostrar la tabla de contenidos<br>(para paginas con mas de 3 encabezados)",
+"tog-editsectiononrightclick"=>"Habilitar la edición de secciones presionando el boton de la derecha<br /> en los titulos de secciones (JavaScript)",
+"tog-showtoc"=>"Mostrar la tabla de contenidos<br />(para paginas con mas de 3 encabezados)",
"tog-watchdefault" => "Vigilar artículos nuevos y modificados",
"tog-minordefault" => "Marcar todas las ediciones como menores por defecto",
"tog-previewontop" => "Mostrar la previsualización antes de la caja de edición en lugar de después",
@@ -336,8 +336,8 @@ No olvides perzonalizar tus preferencia de $wgSitename.",
"yourpasswordagain" => "Repite tu contraseña",
"newusersonly" => " (sólo usuarios nuevos)",
"remembermypassword" => "Quiero que recuerden mi contraseña entre sesiones.",
-"loginproblem" => "<b>Hubo un problema con tu entrada.</b><br>¡Inténtalo otra vez!",
-"alreadyloggedin" => "<font color=red><b>Usuario $1, ya entraste!</b></font><br>\n",
+"loginproblem" => "<b>Hubo un problema con tu entrada.</b><br />¡Inténtalo otra vez!",
+"alreadyloggedin" => "<font color=red><b>Usuario $1, ya entraste!</b></font><br />\n",
"login" => "Registrarse/Entrar",
"userlogin" => "Registrarse/Entrar",
@@ -378,7 +378,7 @@ 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 [[$wgMetaNamespace: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" => "$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.",
@@ -407,15 +407,15 @@ 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 $wgSitename
+"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
-y los distribuya libremente, entonces no los pongas aquí. <br>
+y los distribuya libremente, entonces no los pongas aquí. <br />
También tú nos aseguras que escribiste esto tú mismo y
eres dueño de los derechos de autor, o lo copiaste desde el dominio público
u otra fuente libre.
- <strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong><br>",
+ <strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong><br />",
"longpagewarning" => "ADVERTENCIA: Esta página tiene un tamaño de $1 kilobytes; algunos navegadores pueden tener problemas editando páginas de 32kb o más.
Por favor considera la posibilidad de descomponer esta página en secciones más pequeñas.",
"readonlywarning" => "ADVERTENCIA: La base de datos ha sido bloqueada para mantenimiento, así que no podrás grabar tus modificaciones en este momento.
@@ -476,8 +476,8 @@ que no están en el índice, o por especificar más de una palabra para buscar (
que contengan todos los términos de una búsqueda aparecerán en el resultado).",
"powersearch" => "Búsqueda",
"powersearchtext" => "
-Buscar en espacios de nombre :<br>
-$1<br>
+Buscar en espacios de nombre :<br />
+$1<br />
$2 Listar redirecciones Buscar $3 $9",
"searchdisabled" => "<p>Búsqueda en todo el texto ha sido desactivada temporalmente
debido a carga alta del servidor; esperamos tenerla otra vez en linea despues de algunas actualizaciones de
@@ -495,9 +495,9 @@ border=\"0\" ALT=\"Google\"></A>
<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
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -676,7 +676,7 @@ creado y por quién, y cualquier otra cosa que puedas saber al respecto.",
"deleteimgcompletely" => "borr",
"imghistlegend" => "Simbología: (act) = esta es la imagen actual, (borr) = borrar
esta versión antigua, (rev) = revertir a esta versión antigua.
-<br><i>Click en la fecha para ver imagen subida en esa fecha</i>.",
+<br /><i>Click en la fecha para ver imagen subida en esa fecha</i>.",
"imagelinks" => "Enlaces a la imagen",
"linkstoimage" => "Las siguientes páginas enlazan a esta imagen:",
"nolinkstoimage" => "No hay páginas que enlacen a esta imagen.",
@@ -704,9 +704,9 @@ de los cuales <b>$2</b> son administradores (ver $3).",
"maintenancebacklink" => "Volver a la Página de Mantenimiento",
"disambiguations" => "Páginas de desambiguación",
"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í.",
+"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.",
+"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",
"brokenredirectstext" => "Las redirecciones siguientes enlazan a un artículo que no existe.",
"selflinks" => "Páginas con autoenlaces",
@@ -909,7 +909,7 @@ ls páginas en particular que han sido objeto de vandalismo desde la dirección
"noblockreason" => "Debes dar una razón para el bloqueo.",
"blockipsuccesssub" => "Bloqueo exitoso",
"blockipsuccesstext" => "La direccion IP \"$1\" ha sido bloqueada.
-<br>Ver [[Especial:Ipblocklist|lista de IP bloqueadas]] para revisar bloqueos.",
+<br />Ver [[Especial:Ipblocklist|lista de IP bloqueadas]] para revisar bloqueos.",
"unblockip" => "Desbloquear dirección IP",
"unblockiptext" => "Usa el formulario que sigue para restaurar el
acceso de escritura a una dirección IP previamente bloqueada.",
@@ -937,7 +937,7 @@ acceso de escritura a una dirección IP previamente bloqueada.",
"lockdbsuccesssub" => "El bloqueo se ha realizado con éxito",
"unlockdbsuccesssub" => "El desbloqueo se ha realizado con éxito",
"lockdbsuccesstext" => "La base de datos de $wgSitename ha sido bloqueada.
-<br>Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.",
+<br />Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.",
"unlockdbsuccesstext" => "La base de datos de $wgSitename ha sido desbloqueada.",
# SQL query
diff --git a/languages/LanguageEt.php b/languages/LanguageEt.php
index a7ff1684e057..8ef962827c35 100644
--- a/languages/LanguageEt.php
+++ b/languages/LanguageEt.php
@@ -286,12 +286,12 @@ Võite kasutada Vikipeediat anonüümselt või uuesti sisse logida sama või tei
"yourpasswordagain" => "Sisestage parool uuesti",
"newusersonly" => " (ainult uued kasutajad)",
"remembermypassword" => "Parooli meeldejätmine tulevasteks seanssideks.",
-"loginproblem" => "<b>Sisselogimine ei õnnestunud.</b><br>Proovige uuesti!",
-"alreadyloggedin" => "<font color=red><b>Kasutaja $1, Te olete juba sisse loginud!</b></font><br>\n",
+"loginproblem" => "<b>Sisselogimine ei õnnestunud.</b><br />Proovige uuesti!",
+"alreadyloggedin" => "<font color=red><b>Kasutaja $1, Te olete juba sisse loginud!</b></font><br />\n",
"areyounew" => "Kui olete Vikipeedias uustulnuk ja tahate saada kasutajakontot, siis
sisestage kasutajanimi, seejärel parool (kaks korda).
-E-posti aadress ei ole kohustuslik; kui Te kaotate oma parooli, võite lasta selle saata Teie poolt antud aadressil.<br>\n",
+E-posti aadress ei ole kohustuslik; kui Te kaotate oma parooli, võite lasta selle saata Teie poolt antud aadressil.<br />\n",
"login" => "Logi sisse",
"userlogin" => "Logi sisse",
@@ -330,7 +330,7 @@ Pärast parooli saamist palun logige sisse.",
"showpreview" => "Näita eelvaadet",
"blockedtitle" => "Kasutaja on blokeeritud",
"blockedtext" => "Teie kasutajanime või IP-aadressi blokeeris $1.
-Tema põhjendus on järgmine:<br>''$2''<p>Küsimuse arutamiseks võite pöörduda $1 või mõne teise
+Tema põhjendus on järgmine:<br />''$2''<p>Küsimuse arutamiseks võite pöörduda $1 või mõne teise
[[Vikipeedia:administraatorid|administraatori]] poole.",
"newarticle" => "(Uus)",
"newarticletext" =>
@@ -359,7 +359,7 @@ Kui Te selle salvestate, siis kõik Teie tehtud muudatused lähevad kaduma.</str
"yourdiff" => "Erinevused",
"copyrightwarning" => "Pidage silmas, et kõik Vikipeediale tehtud kaastööd loetakse avaldatuks vastavalt litsentsile GNU Free Documentation License
(üksikasjad on leheküljel $1).
-Kui Te ei soovi, et Teie poolt kirjutatut halastamatult redigeeritakse ja omal äranägemisel kasutatakse, siis ärge seda siia salvestage.<br>
+Kui Te ei soovi, et Teie poolt kirjutatut halastamatult redigeeritakse ja omal äranägemisel kasutatakse, siis ärge seda siia salvestage.<br />
Te kinnitate ka, et kirjutasite selle ise või võtsite selle kopeerimiskitsenduseta allikast.
<strong>ÄRGE SAATKE AUTORIÕIGUSEGA KAITSTUD MATERJALI ILMA LOATA!</strong>",
"longpagewarning" => "HOIATUS: Selle lehekülje pikkus ületab $1 kilobaiti. Mõne brauseri puhul valmistab raskusi 32 kilobaidile läheneva pikkusega lehekülgede redigeerimine. Palun kaaluge selle lehekülje sisu jaotamist lühemate lehekülgede vahel.",
@@ -415,8 +415,8 @@ ning $3 artikli tekstis.",
või kasutatakse mitut otsingusõna (tulemina ilmuvad ainult leheküljed, mis sisaldavad kõiki otsingusõnu).",
"powersearch" => "Otsi",
"powersearchtext" => "
-Otsing nimeruumidest :<br>
-$1<br>
+Otsing nimeruumidest :<br />
+$1<br />
$2 Loetle ümbersuunamisi &nbsp; Otsi $3 $9",
@@ -555,7 +555,7 @@ created and by whom, and anything else you may know about it.",
"deleteimgcompletely" => "del",
"imghistlegend" => "Legend: (viim) = see on pildi viimane versioon, (del) = kustuta
see vana versioon, (taas) = taasta see vana versioon.
-<br><i>Click on date to see image uploaded on that date</i>.",
+<br /><i>Click on date to see image uploaded on that date</i>.",
"imagelinks" => "Image links",
"linkstoimage" => "Sellele pildile viitavad järgmised leheküljed:",
"nolinkstoimage" => "Selle pildile ei viita ükski lehekülg.",
@@ -583,9 +583,9 @@ Nende hulgas on <b>$2</b> administraatorit (vt $3).",
"maintenancebacklink" => "Tagasi hooldusleheküljele",
"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.",
+"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.",
+"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" => "Iseendale viitavad leheküljed",
@@ -769,7 +769,7 @@ pages that were vandalized).",
"noblockreason" => "You must supply a reason for the block.",
"blockipsuccesssub" => "Block succeeded",
"blockipsuccesstext" => "IP-aadress \"$1\" on blokeeritud.
-<br>See [[Special:Ipblocklist|IP block list]] to review blocks.",
+<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.",
@@ -802,7 +802,7 @@ Please confirm that this is what you intend to do.",
"lockdbsuccesssub" => "Andmebaas kirjutuskaitse all",
"unlockdbsuccesssub" => "Kirjutuspääs taastatud",
"lockdbsuccesstext" => "Vikipeedia andmebaas on nüüd kirjutuskaitse all.
-<br>Kui Teie hooldustöö on läbi, ärge unustage taastada kirjutuspääs!",
+<br />Kui Teie hooldustöö on läbi, ärge unustage taastada kirjutuspääs!",
"unlockdbsuccesstext" => "Vikipeedia andmebaasi kirjutuspääs on taastatud.",
# SQL query
diff --git a/languages/LanguageFa.php b/languages/LanguageFa.php
index d66d91aca6a2..18815487b9ca 100644
--- a/languages/LanguageFa.php
+++ b/languages/LanguageFa.php
@@ -129,8 +129,8 @@ require_once("LanguageUtf8.php");
"tog-showtoolbar"=>"نمایش نوار ابزار جعبه‌ی ویرایش",
"tog-editondblclick" => "ویرایش صÙحه‌ها با دوکلیک (جاوااسکریپت)",
"tog-editsection"=>"به کار انداختن ویرایش قسمت‌ها از طریق پیوندهای [ویرایش]",
-"tog-editsectiononrightclick"=>"به کار انداختن ویرایش قسمت‌ها با کلیک راست<br>روی عناوین قسمت‌ها (جاوااسکریپت)",
-"tog-showtoc"=>"نمایش Ùهرست مندرجات<br>(برای مقالات با بیش از Û³ سرÙصل)",
+"tog-editsectiononrightclick"=>"به کار انداختن ویرایش قسمت‌ها با کلیک راست<br />روی عناوین قسمت‌ها (جاوااسکریپت)",
+"tog-showtoc"=>"نمایش Ùهرست مندرجات<br />(برای مقالات با بیش از Û³ سرÙصل)",
"tog-rememberpassword" => "کلمه‌ی عبور برای نشست‌های بعدی بماند",
"tog-editwidth" => "عرض جعبه‌ی ویرایش کامل باشد",
"tog-watchdefault" => "اÙزودن صÙحاتی Ú©Ù‡ ویرایش می‌کند به Ùهرست تعقیبات",
@@ -306,8 +306,8 @@ The administrator who locked it offered this explanation:
"perfdisabled" => "شرمنده! این امکان موÙقتاً برداشته شده چون پایگاه داده را چنان کند می‌کند
Ú©Ù‡ هیچ کس نمی‌تواند از ویکی استÙاده کند.",
"perfdisabledsub" => "این نسخه‌ی ذخیره‌شده‌ای از $1 است: ",
-"wrong_wfQuery_params" => "پارامترهای wfQuery() نادرست است<br>
-تابع: $1<br>
+"wrong_wfQuery_params" => "پارامترهای wfQuery() نادرست است<br />
+تابع: $1<br />
پرس‌وجو: $2
",
"viewsource" => "نمایش مبدأ",
@@ -333,8 +333,8 @@ The administrator who locked it offered this explanation:
"yourpasswordagain" => "کلمه‌ی عبور را دوباره وارد کنید",
"newusersonly" => " (Ùقط کاربران جدید)",
"remembermypassword" => "کلمه‌ی عبور بین نشست‌ها به خاطر سپرده شود.",
-"loginproblem" => "<b>ورود شما به سیستم با مشکلی مواجه شد.</b><br>دوباره تلاش کنید!",
-"alreadyloggedin" => "<font color=red><b>کاربر $1, شما از قبل وارد سیستم شده‌اید!</b></font><br>\n",
+"loginproblem" => "<b>ورود شما به سیستم با مشکلی مواجه شد.</b><br />دوباره تلاش کنید!",
+"alreadyloggedin" => "<font color=red><b>کاربر $1, شما از قبل وارد سیستم شده‌اید!</b></font><br />\n",
"login" => "ورود به سیستم",
"loginprompt" => "برای ورود به ویکی‌پدیا باید cookieها را Ùعال کنید.",
@@ -409,7 +409,7 @@ You should log in and change your password now.",
"showpreview" => "پیش‌نمایش نمایش یابد",
"blockedtitle" => "کاربر بسته شده است",
"blockedtext" => "نام کاربری یا نشانی IP شما توسط $1 بسته شده است.
-دلیل داده‌شده این است:<br>''$2''<p>شما می‌توانید با $1 یا یکی از
+دلیل داده‌شده این است:<br />''$2''<p>شما می‌توانید با $1 یا یکی از
[[ویکی‌پدیا:مدیران|مدیران]] تماس بگیرید و در این باره صحبت کنید.
توجه کنید Ú©Ù‡ شما نمی‌توانید از امکان «Ùرستادن پست الکترونیکی به این کاربر» استÙاده کنید مگر اینکه نشانی پست الکترونیکی
@@ -472,7 +472,7 @@ You should log in and change your password now.",
تحت اجازه‌نامه‌ی مستندات آزاد گنو منتشر می‌شوند
(برای جزئیات بیشتر به $1 مراجعه کنید).
اگر نمی‌خواهد نوشته‌هایتان بیرحمانه ویرایش شده و به دلخواه توزیع شود،
-اینجا Ù†Ùرستیدشان.<br>
+اینجا Ù†Ùرستیدشان.<br />
همینطور شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با
مالکیت عمومی یا مشابه آن برداشته‌اید.
<strong>کارهای دارای حق انحصاری تکثیر (کپی‌رایت) را بی اجازه Ù†Ùرستید!</strong>",
@@ -539,8 +539,8 @@ which are not indexed, or by specifying more than one search term (only pages
containing all of the search terms will appear in the result).",
"powersearch" => "جستجو",
"powersearchtext" => "
-جستجو در Ùضاهای نام :<br>
-$1<br>
+جستجو در Ùضاهای نام :<br />
+$1<br />
$2 تغییرمسیرها Ùهرست شوند &nbsp; جستجو برای $3 $9",
"searchdisabled" => "<p>شرمنده! جستجوی کل متن موقتاً از کار انداخته شده, for performance reasons. In the meantime, you can use the Google search below, which may be out of date.</p>
@@ -555,7 +555,7 @@ border=\"0\" ALT=\"Ú¯ÙˆÚ¯Ù„\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"جستجوی گوگل\">
<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=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>
@@ -736,7 +736,7 @@ you may be blocked from uploading if you abuse the system.",
"deleteimgcompletely" => "حذÙ",
"imghistlegend" => "شرح: (Ùعلی) = این تصویر Ùعلی است، (حذÙ) = این
نسخه‌ی قدیمی حذ٠شود، (برگرد) = برگرداندن به این نسخه‌ی قدیمی.
-<br><i>برای دیدن تصویر بار شده در تاریخ مشخص، روی تاریخ کلیک کنید</i>.",
+<br /><i>برای دیدن تصویر بار شده در تاریخ مشخص، روی تاریخ کلیک کنید</i>.",
"imagelinks" => "پیوند‌های تصاویر",
"linkstoimage" => "این صÙحات به این تصویر پیوند دارند:",
"nolinkstoimage" => "هیچ صÙحه‌ای به این تصویر پیوند ندارد.",
@@ -764,9 +764,9 @@ you may be blocked from uploading if you abuse the system.",
"disambiguations" => "صÙحات رÙع ابهام",
"disambiguationspage" => "ویکی‌پدیا:پیوند به صÙحات رÙع ابهام",
"disambiguationstext" => "مقاله‌های زیر به یک <i>صÙحه‌ی رÙع ابهام</i> پیوند دارند. به جای این، این صÙحات باید به
-They should link to the appropriate topic instead.<br>A page is treated as dismbiguation if it is linked from $1.<br>Links from other namespaces are <i>not</i> listed here.",
+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" => "تغییرمسیرهای دوتایی",
-"doubleredirectstext" => "<b>توجه:</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.",
+"doubleredirectstext" => "<b>توجه:</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" => "تغییرمسیرهای خراب",
"brokenredirectstext" => "تغییرمسیرهای زیر به یک صÙحه‌ی ناموجود پیوند دارند.",
"selflinks" => "صÙحات با پیوند به خود",
@@ -982,7 +982,7 @@ by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled bac
"noblockreason" => "شما باید دلیلی برای بستن مشخص کنید.",
"blockipsuccesssub" => "بستن با موÙقیت انجام شد",
"blockipsuccesstext" => "«$1» بسته شده است.
-<br>برای بررسی بسته‌شدن‌ها، به [[ویژه:ÙهرستIPهای‌بسته|Ùهرست IPهای بسته]] مراجعه کنید.",
+<br />برای بررسی بسته‌شدن‌ها، به [[ویژه:ÙهرستIPهای‌بسته|Ùهرست IPهای بسته]] مراجعه کنید.",
"unblockip" => "باز کردن کاربر",
"unblockiptext" => "برای باز گرداندن دسترسی نوشتن به یک نشانی IP یا نام کاربری بسته‌شده
از Ùرم زیر استÙاده کنید.",
@@ -1022,7 +1022,7 @@ Please confirm that this is what you intend to do.",
"lockdbsuccesssub" => "Ù‚ÙÙ„ کردن پایگاه داده با موÙقیت انجام شد",
"unlockdbsuccesssub" => "Ù‚ÙÙ„ پایگاه داده برداشته شد",
"lockdbsuccesstext" => "پایگاه داده Ù‚ÙÙ„ شد.
-<br>Ùراموش نکنید Ú©Ù‡ پس از اتمام نگهداری Ù‚ÙÙ„ را بردارید.",
+<br />Ùراموش نکنید Ú©Ù‡ پس از اتمام نگهداری Ù‚ÙÙ„ را بردارید.",
"unlockdbsuccesstext" => "پایگاه داده از Ù‚ÙÙ„ در آمد.",
# SQL query
diff --git a/languages/LanguageFi.php b/languages/LanguageFi.php
index 9f0d821223ca..9a5508f7b349 100644
--- a/languages/LanguageFi.php
+++ b/languages/LanguageFi.php
@@ -283,8 +283,8 @@ Käyttäjätunnuksesi on luotu.
"yourpasswordagain" => "Salasana uudelleen",
"newusersonly" => " (vain uudet käyttäjät)",
"remembermypassword" => "Muista salasana saman yhteyden istunnoissa",
-"loginproblem" => "<b>Sisäänkirjautumisessasi oli ongelmia.</b><br>Yritä uudelleen!",
-"alreadyloggedin" => "<font color=red><b>Käyttäjä $1, olet jo kirjautunut sisään!</b></font><br>\n",
+"loginproblem" => "<b>Sisäänkirjautumisessasi oli ongelmia.</b><br />Yritä uudelleen!",
+"alreadyloggedin" => "<font color=red><b>Käyttäjä $1, olet jo kirjautunut sisään!</b></font><br />\n",
"notloggedin" => "Et ole kirjautunut",
"login" => "Kirjaudu sisään",
@@ -323,7 +323,7 @@ sähköpostiosoitteeseen. Kirjaudu sisään uudestaan, kun olet saanut sen.",
"showpreview" => "Esikatsele",
"blockedtitle" => "Pääsy käyttäjältä estetty",
"blockedtext" => "$1 on estänyt pääsysi Wikpediaan joko käyttäjänimesi tai IP-osoitteesi perusteella.
-Syynä tähän on:<br>''$2''<p>Ota yhteyttä henkilöön $1 tai johonkuhun
+Syynä tähän on:<br />''$2''<p>Ota yhteyttä henkilöön $1 tai johonkuhun
muuhun [[{{ns:project}}:ylläpitäjät|ylläpitäjään]] keskustellaksesi estosta.",
"newarticle" => "(uusi)",
"newarticletext" => "Olet seurannut linkkiä sivulle, jota ei ole vielä olemassa.Luodaksesi sivun, kirjoita alla olevaan laatikkoon (katso [[{{ns:project}}:Ohje|ohjeesta]] lisätietoja). Jos tarkoituksesi ei ole luoda uutta sivua, paina selaimesi '''back'''-painiketta.",
@@ -348,7 +348,7 @@ Jos tallennat sen, kaikki tämän version jälkeen tehdyt muutokset katoavat.</s
"copyrightwarning" => "Huomaa, että kaikki {{grammar:illative|{{SITENAME}}}} tehtävät tuotokset
katsotaan julkaistuksi GNU Free Documentation -lisenssin mukaisesti
(katso sivulta $1 yksityiskohtia). Jos et halua, että kirjoitustasi
-muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi.<br>
+muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi.<br />
Lupaa myös, että kirjoitit tämän itse, tai kopioit sen jostain vapaasta lähteestä.
<strong>ÄLÄ KÄYTÄ TEKIJÄNOIKEUDEN ALAISTA MATERIAALIA ILMAN LUPAA!</strong>",
"longpagewarning" => "VAROITUS: Tämän sivun tekstiosuus on $1 kilotavua pitkä. Joillakin selaimilla voi olla vaikeuksia yli 32 kilotavun kokoisten sivujen muokkaamisessa. Harkitse, voisiko sivun jakaa pienempiin osiin.",
@@ -403,8 +403,8 @@ joita ei indeksoida, tai useamman kuin yhden hakutermin määrittelemisestä (va
joilla on kaikki hakutermin sanat, näkyvät tuloksissa).",
"powersearch" => "Etsi",
"powersearchtext" => "
-Haku nimiavaruuksista:<br>
-$1<br>
+Haku nimiavaruuksista:<br />
+$1<br />
$2 Listaa uudelleenohjaukset &nbsp; Etsi $3 $9",
# Preferences page
@@ -568,7 +568,7 @@ mistä se on peräisin, milloin se on luotu, kuka sen loi ja mahdollisesti muita
"deleteimgcompletely" => "poista",
"imghistlegend" => "Merkinnät: (nyk.) = nykyinen kuva, (poista) = poista
tämä vanha versio, (palauta) = palauta kuva tähän vanhaan versioon.
-<br><i>Klikkaa päiväystä nähdäksesi silloin tallennettu kuva</i>.",
+<br /><i>Klikkaa päiväystä nähdäksesi silloin tallennettu kuva</i>.",
"imagelinks" => "Kuvalinkit",
"linkstoimage" => "Seuraavilta sivuilta on linkki tähän kuvaan:",
"nolinkstoimage" => "Tähän kuvaan ei ole linkkejä miltään sivulta.",
@@ -597,9 +597,9 @@ Keskimäärin sivua on muokattu <b>$5</b> kertaa, ja muokkausta kohden sivua on
"maintenancebacklink" => "Takaisin ylläpitosivulle",
"disambiguations" => "Tarkennussivu",
"disambiguationspage" => "{{ns:project}}:Linkkejä_tarkennussivuihin",
-"disambiguationstext" => "Seuraavat artikkelit linkittävät <i>tarkennussivuun</i>. Sen sijasta niiden pitäisi linkittää asianomaiseen aiheeseen.<br>Sivua kohdellaan tarkennussivuna jos siihen on linkki sivulta $1.<br>Linkkejä muihin nimiavaruuksiin <i>ei</i> ole listattu tässä.",
+"disambiguationstext" => "Seuraavat artikkelit linkittävät <i>tarkennussivuun</i>. Sen sijasta niiden pitäisi linkittää asianomaiseen aiheeseen.<br />Sivua kohdellaan tarkennussivuna jos siihen on linkki sivulta $1.<br />Linkkejä muihin nimiavaruuksiin <i>ei</i> ole listattu tässä.",
"doubleredirects" => "Kaksinkertaiset uudelleenohjaukset",
-"doubleredirectstext" => "<b>Huomio:</b> Tässä listassa saattaa olla virheitä. Yleensä kyseessä on sivu, jossa ensimmäisen #REDIRECT:in jälkeen on tekstiä.<br>\nJokaisella rivillä on linkit ensimmäiseen ja toiseen uudelleenohjaukseen sekä toisen uudelleenohjauksen kohteen ensimmäiseen riviin, eli yleensä \"oikeaan\" kohteeseen, johon ensimmäisen uudelleenohjauksen pitäisi osoittaa.",
+"doubleredirectstext" => "<b>Huomio:</b> Tässä listassa saattaa olla virheitä. Yleensä kyseessä on sivu, jossa ensimmäisen #REDIRECT:in jälkeen on tekstiä.<br />\nJokaisella rivillä on linkit ensimmäiseen ja toiseen uudelleenohjaukseen sekä toisen uudelleenohjauksen kohteen ensimmäiseen riviin, eli yleensä \"oikeaan\" kohteeseen, johon ensimmäisen uudelleenohjauksen pitäisi osoittaa.",
"brokenredirects" => "Virheelliset uudelleenohjaukset",
"brokenredirectstext" => "Seuraavat uudelleenohjaukset on linkitetty artikkeleihin, joita ei ole olemassa.",
"selflinks" => "Sivut, jotka linkittävät itseensä",
@@ -761,7 +761,7 @@ Ilmoita syy alapuolella (esimerkiksi lista vandalisoiduista sivuista).",
"noblockreason" => "Sinun täytyy antaa syy estämiselle.",
"blockipsuccesssub" => "Esto onnistui",
"blockipsuccesstext" => "IP-osoite \"$1\" on estetty.
-<br>Katso [[Erityissivut:Ipblocklist|IP-estolista]] katsellaksesi estoja.",
+<br />Katso [[Erityissivut:Ipblocklist|IP-estolista]] katsellaksesi estoja.",
"unblockip" => "Poista IP-osoitteen muokkausesto",
"unblockiptext" => "Käytä allaolevaa lomaketta poistaaksesi kirjoitusesto aikaisemmin estetyltä IP-osoitteelta.",
"ipusubmit" => "Poista tämän osoitteen esto",
@@ -786,7 +786,7 @@ Ilmoita syy alapuolella (esimerkiksi lista vandalisoiduista sivuista).",
"lockdbsuccesssub" => "Tietokannan lukitseminen onnistui",
"unlockdbsuccesssub" => "Tietokannan vapauttaminen onnistui",
"lockdbsuccesstext" => "Wikipedia-tietokanta on lukittu.
-<br>Muista vapauttaa tietokanta ylläpitotoimenpiteiden jälkeen.",
+<br />Muista vapauttaa tietokanta ylläpitotoimenpiteiden jälkeen.",
"unlockdbsuccesstext" => "Wikipedia-tietokanta on vapautettu.",
# SQL query
diff --git a/languages/LanguageFo.php b/languages/LanguageFo.php
index 7c2cca89d5cc..522c2114094a 100644
--- a/languages/LanguageFo.php
+++ b/languages/LanguageFo.php
@@ -168,13 +168,13 @@ require_once( 'LanguageUtf8.php');
"tog-highlightbroken" => "Brúka reyða ávísing til tómar síður",
"tog-justify" => "Stilla greinpart",
"tog-hideminor" => "Goym minni broytingar í seinast broytt listanum", # Skjul mindre ændringer i seneste ændringer listen
-"tog-usenewrc" => "víðka seinastu broytingar lista<br>(ikki til alla kagarar)",
+"tog-usenewrc" => "víðka seinastu broytingar lista<br />(ikki til alla kagarar)",
"tog-numberheadings" => "Sjálvtalmerking av yvirskrift",
"tog-showtoolbar" => "Vís amboðslinju í rætting",
"tog-editondblclick" => "Rætta síðu við at tvíklikkja (JavaScript)",
"tog-editsection" =>"Rætta greinpart við hjálp av [rætta]-ávísing",
-"tog-editsectiononrightclick"=>"Rætta greinpart við at høgraklikkja<br> á yvirskrift av greinparti (JavaScript)",
-"tog-showtoc"=>"Vís innihaldsyvurlit<br>(Til greinir við meira enn trimun greinpartum)",
+"tog-editsectiononrightclick"=>"Rætta greinpart við at høgraklikkja<br /> á yvirskrift av greinparti (JavaScript)",
+"tog-showtoc"=>"Vís innihaldsyvurlit<br />(Til greinir við meira enn trimun greinpartum)",
"tog-rememberpassword" => "Minst til loyniorð næstu ferð",
"tog-editwidth" => "Rættingarkassin hevur fulla breid",
"tog-watchdefault" => "Vaka yvur nýggjum og broyttum greinum",
diff --git a/languages/LanguageFr.php b/languages/LanguageFr.php
index 322ad3ac5195..bbef9a3aa4ec 100644
--- a/languages/LanguageFr.php
+++ b/languages/LanguageFr.php
@@ -1032,8 +1032,8 @@ Tapez le nom de l'utilisateur dans la boite et pressez le bouton pour lui donner
'val_clear_old' => 'Supprimer mes données de validation pour $1',
'val_merge_old' => 'Utiliser mes précédents choix pour les choix marqués \'Sans opinion\'',
'val_noop' => 'Sans opinion',
-'val_percent' => '<b>$1%</b><br>($2 sur $3 points<br>par $4 utilisateurs)',
-'val_percent_single' => '<b>$1%</b><br>($2 sur $3 points<br>par un utilisateur)',
+'val_percent' => '<b>$1%</b><br />($2 sur $3 points<br />par $4 utilisateurs)',
+'val_percent_single' => '<b>$1%</b><br />($2 sur $3 points<br />par un utilisateur)',
'val_total' => 'Total',
'val_version' => 'Version',
'val_tab' => 'Valider',
diff --git a/languages/LanguageFy.php b/languages/LanguageFy.php
index 5770b779b346..dbf347a0a7d3 100644
--- a/languages/LanguageFy.php
+++ b/languages/LanguageFy.php
@@ -319,8 +319,8 @@ Ferjit net se oan jo foarkar oan te passen.",
"yourpasswordagain" => "Jo wachtwurd (nochris)",
"newusersonly" => " (allinnich foar nije brûkers)",
"remembermypassword" => "Oare kear fansels oanmelde.",
-"loginproblem" => "<b>Der wie wat mis mei jo oanmelden.</b><br>Besykje it nochris, a.j.w.",
-"alreadyloggedin" => "<font color=red><b>Brûker $1, jo binne al oanmeld!</b></font><br>\n",
+"loginproblem" => "<b>Der wie wat mis mei jo oanmelden.</b><br />Besykje it nochris, a.j.w.",
+"alreadyloggedin" => "<font color=red><b>Brûker $1, jo binne al oanmeld!</b></font><br />\n",
"login" => "Oanmelde",
"userlogin" => "Oanmelde",
"logout" => "Ofmelde",
@@ -331,7 +331,7 @@ Ferjit net se oan jo foarkar oan te passen.",
"userexists" => "Dy brûkersname wurdt al brûkt. Besykje in oarenien.",
"youremail" => "Jo e-postadres (*).",
"yournick" => "Jo alias (foar sinjaturen)",
-"emailforlost" => "* In e-postadres hoecht net.<br>
+"emailforlost" => "* In e-postadres hoecht net.<br />
Mar it helpt, soenen jo jo wachtwurd ferjitte.
En mei in e-postadres kinne oaren fan de web siden contact mei jo krije,
sûnder dat se dat adres witte. (Dat leste kin ek wer útset by de instellings.)",
@@ -367,7 +367,7 @@ Please log in again after you receive it.",
"showpreview" => "Oerlêze foar de side fêstlein is",
"blockedtitle" => "Brûker is útsletten troch",
"blockedtext" => "Jo brûkersname of Ynternet-adres is útsletten.
-As reden is opjûn:<br>''$2''<p>As jo wolle, kinne jo hjiroer kontakt op nimme meid de behearder.
+As reden is opjûn:<br />''$2''<p>As jo wolle, kinne jo hjiroer kontakt op nimme meid de behearder.
(Om't in Ynternet-adressen faak mar foar ien sessie tawiisd wurde, kin it wêze
dat it eins gjit om in oar dy't deselde tagongferskaffer hat as jo hawwe. As it jo
@@ -416,7 +416,7 @@ Soenen jo dizze fêstlizze, dan is al wat sûnt dy tiid feroare is kwyt.</strong
as fallend ûnder de GNU Iepen Dokumentaasje Lisinsje
(sjoch fierders: \"$1\").
As jo net wolle dat jo skriuwen ûnferbidlik oanpast en frij ferspraat wurdt,
-dan is it baas, en set it net op de $wgSitename.<br>
+dan is it baas, en set it net op de $wgSitename.<br />
Jo ferklare ek dat jo dit sels skreaun hawwe, of it oernaam hawwe út in
publyk eigendom of in oare iepen boarne.
<strong><big>Foeg gjin wurk ûnder auteursrjocht ta sûnder tastimming!</big></strong>",
@@ -481,8 +481,8 @@ wurden syke wurde, allinnich siden fûn wurde wêr't <b>alle</b> worden op fûn
"powersearch" => "Sykje",
"powersearchtext" => "
-Sykje in nammeromten :<br>
-$1<br>
+Sykje in nammeromten :<br />
+$1<br />
$2 List trochferwizings &nbsp; Sykje nei \"$3\" \"$9\"",
"searchdisabled" => "<p>Op it stuit stjit it trochsykjen fan tekst net oan, om't de
@@ -501,9 +501,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Sykje mei Google\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<input type=hidden name=domains value=\"{$wgServer}\"><br /><input type=radio
name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch
-value=\"{$wgServer}\" checked> $wgSitename <br>
+value=\"{$wgServer}\" checked> $wgSitename <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -679,7 +679,7 @@ en wat jo fierder mar oan ynformaasje hawwe.",
"deleteimgcompletely" => "wisk",
"imghistlegend" => "Utlis: (no) = dit is it hjoeddeiske ôfbyld,
(wisk) = wiskje dizze âldere ferzje, (tebek) = set ôfbyld tebek nei dizze âldere ferzje.
-<br><i>Fia de datum kinne jo it ôfbyld dat doe oanbean besjen</i>.",
+<br /><i>Fia de datum kinne jo it ôfbyld dat doe oanbean besjen</i>.",
"imagelinks" => "Ofbyldkeppelings",
"linkstoimage" => "Dizze siden binne keppele oan it ôfbyld:",
@@ -690,9 +690,9 @@ en wat jo fierder mar oan ynformaasje hawwe.",
"statistics" => "Statistyk",
"sitestats" => "Side statistyk",
"userstats" => "Brûker statistyk",
-"sitestatstext" => "It tal fan siden in de $wgSitename is: <b>$2</b>.<br>
+"sitestatstext" => "It tal fan siden in de $wgSitename is: <b>$2</b>.<br />
(Oerlissiden, siden oer de $wgSitename, oare bysûndere siden, stobben en
-trochferwizings yn de databank binne dêrby net meiteld.)<br>
+trochferwizings yn de databank binne dêrby net meiteld.)<br />
It tal fan siden in de databank is: <b>$1</b>.
<p>
Der is <b>$3</b> kear in side opfrege, en <b>$4</b> kear in side bewurke,
@@ -715,12 +715,12 @@ eltse oanpassing daalks in fernijde side op.",
"disambiguationspage" => "$wgMetaNamespace:trochferwizing",
"disambiguationstext" => "Dizze siden binne keppele fia in
[[$wgMetaNamespace:trochferwizing]].
-Se soenen mei de side sels keppele wurde moatte.<br>
+Se soenen mei de side sels keppele wurde moatte.<br />
(Allinnich siden út deselde nammeromte binne oanjûn.)",
"doubleredirects" => "Dûbele trochverwizings",
"doubleredirectstext" => "<b>Let op!</b> Der kinne missen yn dizze list stean!
-Dat komt dan ornaris troch oare keppelings ûnder de \"#REDIRECT\".<br>
+Dat komt dan ornaris troch oare keppelings ûnder de \"#REDIRECT\".<br />
Eltse rigel jout keppelings nei de earste en twadde trochverwizing, en dan de earste regel fan
de twadde trochferwizing, wat it \"echte\" doel wêze moat.",
@@ -932,7 +932,7 @@ Meld de krekte reden! Begelyk, neam de siden dy't oantaaste waarden.",
"badipaddress" => "Dy brûker bestiet net",
"noblockreason" => "Jo moatte de krekte reden opjaan.",
"blockipsuccesssub" => "Utsluting slagge",
-"blockipsuccesstext" => "Brûker \"$1\" is útsletten.<br>
+"blockipsuccesstext" => "Brûker \"$1\" is útsletten.<br />
(List fan [[Wiki:Ipblocklist|útslette brûkers]].)",
"unblockip" => "Lit brûker der wer yn",
"unblockiptext" => "Brûk dizze fjilden om in brûker wer skriuwtagong te jaan.",
@@ -965,7 +965,7 @@ Befêstigje dat dit is wat jo wolle.",
"lockdbsuccesssub" => "Databank is 'Net-skriuwe'",
"unlockdbsuccesssub" => "Database is skriuwber",
"lockdbsuccesstext" => "De $wgSitename databank is 'Net-skriuwe' makke.
-<br>Tink derom en meitsje de databank skriuwber as jo ûnderhâld ree is.",
+<br />Tink derom en meitsje de databank skriuwber as jo ûnderhâld ree is.",
"unlockdbsuccesstext" => "De $wgSitename databank is skriuwber makke.",
# SQL query
diff --git a/languages/LanguageGa.php b/languages/LanguageGa.php
index 0f389e8643d0..34fb8d7988c2 100755
--- a/languages/LanguageGa.php
+++ b/languages/LanguageGa.php
@@ -184,8 +184,8 @@ DISCUSSION!
"tog-numberheadings" => "Uimhrigh ceannteidil go huathoibrí­och",
"tog-editondblclick" => "Cuir leathanaigh in eagar le roghna dúbailte (JavaScript)",
"tog-editsection"=>"Cumasaigh eagarthóireacht mí­r le lúibí­ní­ [athraithe]",
-"tog-editsectiononrightclick"=>"Cumasaigh eagarthóireacht mí­r le deas-roghna<br> ar ceannteidil (JavaScript)",
-"tog-showtoc"=>"Déan liosta na ceannteideal<br>(do ailt le ní­os mó ná 3 ceannteidil)",
+"tog-editsectiononrightclick"=>"Cumasaigh eagarthóireacht mí­r le deas-roghna<br /> ar ceannteidil (JavaScript)",
+"tog-showtoc"=>"Déan liosta na ceannteideal<br />(do ailt le ní­os mó ná 3 ceannteidil)",
"tog-rememberpassword" => "Cuimhnigh mo focal faire",
"tog-editwidth" => "Cuir uasméid ar an mbosca eagair",
"tog-watchdefault" => "Breathnaigh ar leathanaigh a d'athraigh tú",
@@ -416,8 +416,8 @@ san oideasra MediaWiki. De ghnáth, tarlaí­onn sé sin nuair a leantar nasc st
teideal idirtheangach no idir-Wiki nasctha go mí­cheart.",
"perfdisabled" => "Tá brón orainnn! Mhí­chumasaí­odh an gné seo go sealadach chun luas an bunachair sonraí­ a chosaint.",
"perfdisabledsub" => "Seo cóip i dtaisce ó $1:",
-"wrong_wfQuery_params" => "Paraiméadair mí­chearta don wfQuery()<br>
-Feidhm: $1<br>
+"wrong_wfQuery_params" => "Paraiméadair mí­chearta don wfQuery()<br />
+Feidhm: $1<br />
Órdú: $2
",
'perfcached' => 'Fuarthas na sonraí seo as dtaisce, agus is dócha nach bhfuil siad reatha:',
@@ -446,13 +446,13 @@ Ná déan dearmad do sainroghanna phearsanta a athrú.",
"yourpasswordagain" => "Athiontráil d'fhocal faire",
"newusersonly" => " (D'úsáideoirí­ úrnua amháin)",
"remembermypassword" => "Cuimhnigh m'fhocal faire.",
-"loginproblem" => "<b>Bhí­ fadhb leis an logáil isteach.</b><br>Déan iarracht eile!",
-"alreadyloggedin" => "<font color=red><b>A húsáideoir $1, tá tú logáilte isteach cheana féin!</b></font><br>\n",
+"loginproblem" => "<b>Bhí­ fadhb leis an logáil isteach.</b><br />Déan iarracht eile!",
+"alreadyloggedin" => "<font color=red><b>A húsáideoir $1, tá tú logáilte isteach cheana féin!</b></font><br />\n",
"areyounew" => "Má tá tú i do núí­osach chuig an Vicipéid agus tá cuntas úsáideora ag teastáil uait,
iontráil ainm úsáideora, agus ansin iontráil agus athiontráil focal faire.
Níl an seoladh rí­omhphoist ach rud roghnach; dá scríobhfá d'fhocal faire, is feidir leat a iarradh
-go seolfar é chuig an seoladh rí­omhphoist a thug tú.<br>\n",
+go seolfar é chuig an seoladh rí­omhphoist a thug tú.<br />\n",
"login" => "Log ann",
'loginprompt' => "Tá chomhaid aithintáin (<i>cookies</i>) riachtanach chun logáil isteach san {{SITENAME}} a dhéanamh.",
@@ -470,7 +470,7 @@ go seolfar é chuig an seoladh rí­omhphoist a thug tú.<br>\n",
"emailforlost" => "* Níl na boscaí le réalt (*) ach roghnach. Le seoladh ríomhphoist i dtaisce, ba féidir le daoine teagmhail a dhéanamh leat
trí­d an suí­omh gan do sheoladh rí­omhphoist a nochtaigh dóibh. Ina theannta sin,
is cabhair é má dheanfá dearmad ar d'fhocal faire.<br /><br />Má toghaíonn tú d'ainm ceart a chur isteach, úsáidfear é chun do chuid dreachtaí a chur i leith tusa",
-'prefs-help-userdata' => '* <strong>Ainm ceart</strong> (roghnach): má toghaíonn tú é sin a chur ar fáil, úsáidfear é chun do chuid dreachtaí a chur i leith tusa.<br/>
+'prefs-help-userdata' => '* <strong>Ainm ceart</strong> (roghnach): má toghaíonn tú é sin a chur ar fáil, úsáidfear é chun do chuid dreachtaí a chur i leith tusa.<br />
* <strong>Ríomhphost</strong> (roghnach): Ba féidir le daoine teagmháil a dhéanamh leat gan do sheoladh ríomhphoist
a thaispeáint dóibh, agus ba féidir focal faire nua a sheol chugat má dhéanfá dearmad air.',
"loginerror" => "Earráid leis an logáil isteach",
@@ -531,7 +531,7 @@ Agus atá sé agat, logáil isteach arí­s leis le do thoil.",
"showpreview" => "Reamhspléach",
"blockedtitle" => "Tá an úsáideoir seo faoi chosc",
"blockedtext" => "Chuir $1 cosc ar d'ainm úsáideora nó do seoladh IP.
-Seo é an cúis a thugadh:<br>''$2''<p>Is féidir leat teagmháil a dhéanamh le $1 nó le ceann eile de na
+Seo é an cúis a thugadh:<br />''$2''<p>Is féidir leat teagmháil a dhéanamh le $1 nó le ceann eile de na
[[$wgMetaNamespace:Riarthóirí­|riarthóirí­]] chun an cosc a phléigh.
Tabhair faoi deara nach bhfuil cead agat an gné \"cuir rí­omhphost chuig an úsáideoir seo\" a úsáid
@@ -590,7 +590,7 @@ Dá shábhálfá é, caillfear aon athrú a rinneadh ó shin an eagrán seo.</st
"copyrightwarning" => "Tabhair faoi deara go scaoilí­tear gach dréacht chuig an Vicipéid maidir lena tearmaí­ an <i>GNU Free Documentation License</i>
(tuilleadh eolais ag $1).
Muna aontaíonn tú go cuirfear do chuid scrí­bhinn in eagar go héadrócaireach agus go athdálfar é gan teorainn,
-ná tabhair isteach é anseo.<br>
+ná tabhair isteach é anseo.<br />
Ina theannta sin, geallann tú duinn go scrí­obh tusa féin an rud seo, nó go chóipeáil tú é as
fhoinse atá gan chóipcheart.
<strong>Nà TABHAIR ISTEACH OBAIR ATà FAOI CHÓIPCHEART GAN CEAD!</strong>",
@@ -617,7 +617,7 @@ Cinntigh an URL a d'úsáid tú chun an leathanach seo a rochtain.\n",
"next" => "lns",
"last" => "rmh",
"orig" => "bun",
-'histlegend' => "Difríochtaí a roghnú: marcáil na boscaí de na eagráin atá ag teastail uait á cuir i gcomparáid, agus brúigh Iontráil nó an cnaipe ag bun an leathanaigh.<br/>
+'histlegend' => "Difríochtaí a roghnú: marcáil na boscaí de na eagráin atá ag teastail uait á cuir i gcomparáid, agus brúigh Iontráil nó an cnaipe ag bun an leathanaigh.<br />
Eochair: (rth) = difrí­ocht leis an eagrán reatha,
(rmh) = difrí­ocht leis an eagrán roimhe, M = mionathrú",
@@ -660,8 +660,8 @@ a nach bhfuil innéacsaí­tear, nó nuair a ceisteann tú ní­os mó ná téar
taispeáintear sna toraidh ach na leathanaigh ina bhfuil go leoir na téarmaí­ cuardaigh).",
"powersearch" => "Cuardaigh",
"powersearchtext" => "
-Cuardaigh sna hainmranna :<br>
-$1<br>
+Cuardaigh sna hainmranna :<br />
+$1<br />
$2 Cuir athsheolaidh in áireamh &nbsp; Cuardaigh ar $3 $9",
"searchdisabled" => "<p>Tá brón orainn! Mhí­chumasaí­odh an cuardach téacs iomlán go sealadach chun luas an suí­mh
a chosaint. Idir an dá linn, is féidir leat an cuardach Google anseo thí­os a úsáid - b'fhéidir go bhfuil sé as dáta.</p>",
@@ -680,7 +680,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
<input type=hidden name=domains value=\"{$wgServer}\">
-<br><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br>
+<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>
@@ -870,7 +870,7 @@ chruthaí­odh é agus rud eile ar bith tá 'fhios agat faoi.",
"deleteimgcompletely" => "scr",
"imghistlegend" => "Eochair: (rth) = seo é an eagrán reatha, (scr) = scrios an
sean-eagrán seo, (ath) = athúsáid an sean-eagrán seo.
-<br><i>Bruigh an dáta chun feach ar an í­omhá mar a suaslódálaí­odh é ar an dáta sin</i>.",
+<br /><i>Bruigh an dáta chun feach ar an í­omhá mar a suaslódálaí­odh é ar an dáta sin</i>.",
"imagelinks" => "Naisc í­omhá",
"linkstoimage" => "Is iad na leathanaigh seo a leanas a nascaí­onn chuig an í­omhá seo:",
"nolinkstoimage" => "Ní­l aon leathanach ann a nascaí­onn chuig an í­omhá seo.",
@@ -901,11 +901,11 @@ chrí­ochnaí­onn tú ;-)",
"disambiguations" => "Leathanaigh easathbhrí­ochais",
"disambiguationspage" => "Vicipéid:Naisc_go_leathanaigh_easathbhrí­ochais",
"disambiguationstext" => "Nascaí­onn na ailt seo a leanas go <i>leathanach easathbhrí­ochais</i>. Ba chóir dóibh nasc a
-dhéanamh leis an ábhar oiriúnach ina áit.<br>Tugtar an teideal easathbhrí­ochais ar leathanach má bhfuil násc aige
-ó $1.<br><i>Ní­</i> cuirtear naisc ó ranna eile ar an liosta seo.",
+dhéanamh leis an ábhar oiriúnach ina áit.<br />Tugtar an teideal easathbhrí­ochais ar leathanach má bhfuil násc aige
+ó $1.<br /><i>Ní­</i> cuirtear naisc ó ranna eile ar an liosta seo.",
"doubleredirects" => "Athsheolaidh Dúbailte",
"doubleredirectstext" => "<b>Tabhair faoi deara:</b> B'fheidir go bhfuil toraidh bréagacha ar an liosta seo.
-De ghnáth cí­allaí­onn sé sin go bhfuil téacs breise le naisc thí­os sa chéad #REDIRECT no #ATHSHEOLADH.<br>\n Sa gach
+De ghnáth cí­allaí­onn sé sin go bhfuil téacs breise le naisc thí­os sa chéad #REDIRECT no #ATHSHEOLADH.<br />\n Sa gach
sraith tá náisc chuig an chéad is an dara athsheoladh, chomh maith le chéad lí­ne an dara téacs athsheolaidh. De ghnáth
tugann sé sin an sprioc-alt \"fí­or\".",
"brokenredirects" => "Athsheolaidh Briste",
@@ -1149,7 +1149,7 @@ leathanaigh áirithe a rinne an duine damáiste ar).",
"noblockreason" => "Ní mór duit cúis a thabhairt don cosc.",
"blockipsuccesssub" => "D'éirigh leis an cosc",
"blockipsuccesstext" => "Choisceadh \"$1\".
-<br>Féach ar [[Speisialta:Ipblocklist|Liosta coisc IP]] chun coisc a athbhreithnigh.",
+<br />Féach ar [[Speisialta:Ipblocklist|Liosta coisc IP]] chun coisc a athbhreithnigh.",
"unblockip" => "Bain an cosc den úsáideoir",
"unblockiptext" => "Úsáid an foirm anseo thí­os chun bealach scrí­ofa a thabhairt ar ais go seoladh
IP nó ainm úsáideora a raibh coiscthe roimhe seo.",
@@ -1238,8 +1238,8 @@ hathrú, ach ba mhaith leat do roghanna eile don alt a chosaint, ná roghnaigh
rud ar bith ach amháin an rogha ba mhaith leat a <i>athrú</i>, agus le
cumaisc líonfar na roghanna eile de réir na roghanna a raibh agat roimhe ré.',
'val_noop' => 'Gan tuairim',
-'val_percent' => '<b>$1%</b><br>($2 de $3 pointí<br>a rinne $4 úsáideoirí)',
-'val_percent_single' => '<b>$1%</b><br>($2 de $3 pointí<br>a rinne aon úsáideoir)',
+'val_percent' => '<b>$1%</b><br />($2 de $3 pointí<br />a rinne $4 úsáideoirí)',
+'val_percent_single' => '<b>$1%</b><br />($2 de $3 pointí<br />a rinne aon úsáideoir)',
'val_total' => 'Iomlán',
'val_version' => 'Leagan',
'val_tab' => 'Seiceáil an bhailíocht',
diff --git a/languages/LanguageHe.php b/languages/LanguageHe.php
index d9d8efbf8e2f..362a8173ddfa 100644
--- a/languages/LanguageHe.php
+++ b/languages/LanguageHe.php
@@ -124,8 +124,8 @@ require_once("LanguageUtf8.php");
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "ערוך ×“×¤×™× ×‘×œ×—×™×¦×” כפולה (דורש ×’'×ווה סקריפט)",
"tog-editsection"=>"Enable section editing via [edit] links",
-"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br> on section titles (JavaScript)",
-"tog-showtoc"=>"Show table of contents<br>(for articles with more than 3 headings",
+"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br /> on section titles (JavaScript)",
+"tog-showtoc"=>"Show table of contents<br />(for articles with more than 3 headings",
"tog-rememberpassword" => "זכור ×ת ×”×¡×™×¡×ž× ×©×œ×™ ×‘×¤×¢×ž×™× ×”×‘×ות",
"tog-editwidth" => "תיבת העריכה ברוחב מל×",
"tog-watchdefault" => "עקוב ×חרי מ××ž×¨×™× ×©×¢×¨×›×ª×™ ×ו יצרתי",
@@ -292,8 +292,8 @@ $1",
"yourpasswordagain" => "הקש ×¡×™×¡×ž× ×©× ×™×ª",
"newusersonly" => " (רק ×× ×ת/×” משתמש חדש)",
"remembermypassword" => "זכור ×ת ×”×¡×™×¡×ž× ×©×œ×™ ×‘×¤×¢× ×”×‘××”.",
-"loginproblem" => "<b>×רעה שגי××” בכניסה ל×תר. </b><br>!נסה שנית",
-"alreadyloggedin" => "<font color=red><b> משתמש $1, כבר ביצעת כניסה ל×תר!</b></font><br>\n",
+"loginproblem" => "<b>×רעה שגי××” בכניסה ל×תר. </b><br />!נסה שנית",
+"alreadyloggedin" => "<font color=red><b> משתמש $1, כבר ביצעת כניסה ל×תר!</b></font><br />\n",
"login" => "כניסה לחשבון",
"userlogin" => "כניסה לחשבון",
@@ -332,7 +332,7 @@ $1",
"showpreview" => "הר××” תצוגה מקדימה",
"blockedtitle" => "המשתמש חסו×",
"blockedtext" => "×©× ×”×ž×©×ª×ž×© ×ו כתובת ×”-IP שלך נחסמו על-ידי $1.
-הסיבה שניתנה ×”×™×:<br>''$2''<p>×תה יכול ליצור קשר ×¢× $1 ×ו ×חד מ[[ויקיפדיה:מפעילי_מערכת]] כדי לדון בחסימה.",
+הסיבה שניתנה ×”×™×:<br />''$2''<p>×תה יכול ליצור קשר ×¢× $1 ×ו ×חד מ[[ויקיפדיה:מפעילי_מערכת]] כדי לדון בחסימה.",
"newarticle" => "(חדש)",
"newarticletext" => "כתוב ×›×ן ×ת הטקסט עבור הדף החדש:",
"anontalkpagetext" => " ---- ''זהו דף שיחה של משתמש/ת ש×ין לו/×” חשבון במערכת ומזוהה רק לפי כתובת ×”-IP שלו/×”. יתכן ודף ×–×” ישותף ×¢× ×ž×©×ª×ž×©×™× ×× ×•× ×™×ž×™×™× ×חרי×''",
@@ -404,8 +404,8 @@ $1",
"nonefound" => "×œ× × ×ž×¦×ו מ××ž×¨×™× ×¢× ×ª×•×›×Ÿ תו××, ×× × ×•×“×ו ×©×”×™×§×©×ª× ×ת החיפוש נכונה. ×× ×כן ×”×§×©×ª× × ×›×•× ×” ××– נסו ×ולי לחפש × ×•×©× ×›×œ×œ×™ יותר.",
"powersearch" => "חפש",
"powersearchtext" => "
-חפש במרחבי ש×:<br>
-$1<br>
+חפש במרחבי ש×:<br />
+$1<br />
$2 הצג ×’× ×“×¤×™ הפנייה
$3 $9",
"blanknamespace" => "(ר×שי)",
@@ -544,7 +544,7 @@ $3 $9",
"deleteimg" => "מחק",
"deleteimgcompletely" => "מחק",
"imghistlegend" => "×ž×§×¨× (נוכ) = זו התמונה הנוכחית, (מחק) = מחק גירסה ישנה זו, (חזור) חזור לגירסה ישנה זו.
-<br><i>הקש על ת×ריך לר×ות ×ת התמונה שהועלתה בת×ריך ×–×”</i>.",
+<br /><i>הקש על ת×ריך לר×ות ×ת התמונה שהועלתה בת×ריך ×–×”</i>.",
"imagelinks" => "קישורי תמונות",
"linkstoimage" => "×”×“×¤×™× ×”×‘××™× ×ž×©×ª×ž×©×™× ×‘×ª×ž×•× ×” זו:",
"nolinkstoimage" => "×ין ×“×¤×™× ×”×ž×©×ª×ž×©×™× ×‘×ª×ž×•× ×” זו.",
@@ -569,9 +569,9 @@ $3 $9",
"maintenancebacklink" => "חזרה לדף התחזוקה",
"disambiguations" => "דפי רב-משמעות",
"disambiguationspage" => "ויקיפדיה:דפי_רב_משמעות",
-"disambiguationstext" => "המ××ž×¨×™× ×©×œ×”×œ×Ÿ ×ž×¦×‘×™×¢×™× ×ל <i>דפי רב-משמעות</i>. תפקיד ×“×¤×™× ×לה ×”×•× ×œ×”×¤× ×•×ª לדף ×”× ×•×©× ×”×¨×œ×•×•× ×˜×™.<br>×נו ×ž×ª×™×™×—×¡×™× ×œ×“×£ כרב-משמעות ×× ×ž×¦×‘×™×¢ ×ליו $1.<br>×§×™×©×•×¨×™× ×”×ž×’×™×¢×™× ×ל דף ממרחבי ×©× ××—×¨×™× <i>××™× ×</i> ×ž×•×¦×’×™× ×›×ן.",
+"disambiguationstext" => "המ××ž×¨×™× ×©×œ×”×œ×Ÿ ×ž×¦×‘×™×¢×™× ×ל <i>דפי רב-משמעות</i>. תפקיד ×“×¤×™× ×לה ×”×•× ×œ×”×¤× ×•×ª לדף ×”× ×•×©× ×”×¨×œ×•×•× ×˜×™.<br />×נו ×ž×ª×™×™×—×¡×™× ×œ×“×£ כרב-משמעות ×× ×ž×¦×‘×™×¢ ×ליו $1.<br />×§×™×©×•×¨×™× ×”×ž×’×™×¢×™× ×ל דף ממרחבי ×©× ××—×¨×™× <i>××™× ×</i> ×ž×•×¦×’×™× ×›×ן.",
"doubleredirects" => "הפניות כפולות",
-"doubleredirectstext" => "<b>×©×™× ×œ×‘:</b> רשימה זו עלולה לכלול ×“×¤×™× ×©× ×ž×¦×ו בטעות. ×–×ת ×ומרת, ×©×‘×“×¤×™× ×©× ×ž×¦×ו ישנו טקסט נוסף ×¢× ×§×™×©×•×¨×™× ×ž×ª×—×ª ל-#REDIRECT הר×שון.<br>\nכל שורה מכילה קישור להפנייה הר×שונה והשנייה, וכן ×ת שורת הטקסט הר×שונה של ההפניה השניה, שלרוב × ×ž×¦× ×‘×” היעד ×”×מיתי של ההפניה, ×ליו ×מורה ההפניה הר×שונה להצביע.",
+"doubleredirectstext" => "<b>×©×™× ×œ×‘:</b> רשימה זו עלולה לכלול ×“×¤×™× ×©× ×ž×¦×ו בטעות. ×–×ת ×ומרת, ×©×‘×“×¤×™× ×©× ×ž×¦×ו ישנו טקסט נוסף ×¢× ×§×™×©×•×¨×™× ×ž×ª×—×ª ל-#REDIRECT הר×שון.<br />\nכל שורה מכילה קישור להפנייה הר×שונה והשנייה, וכן ×ת שורת הטקסט הר×שונה של ההפניה השניה, שלרוב × ×ž×¦× ×‘×” היעד ×”×מיתי של ההפניה, ×ליו ×מורה ההפניה הר×שונה להצביע.",
"brokenredirects" => "הפניות ×œ× ×ª×§×™× ×•×ª",
"brokenredirectstext" => "ההפניות שלהלן מצביעות למ××ž×¨×™× ×©××™× × ×§×™×™×ž×™×:",
"selflinks" => "×“×¤×™× ×”×ž×§×•×©×¨×™× ×œ×¢×¦×ž×",
@@ -727,7 +727,7 @@ $3 $9",
"noblockreason" => ".עליך לציין סיבה לחסימה",
"blockipsuccesssub" => "החסימה הצליחה",
"blockipsuccesstext" => "הכתובת \"$1\" נחסמה.
-<br>ר××” ×ת [[מיוחד:רשימת כתובות IP חסומות|רשימת הכתובות החסומות]] כדי לצפות בחסימות",
+<br />ר××” ×ת [[מיוחד:רשימת כתובות IP חסומות|רשימת הכתובות החסומות]] כדי לצפות בחסימות",
"unblockip" => "שחרר כתובת IP",
"unblockiptext" => "השתמש בטופס שלהלן בכדי להחזיר הרש×ות כתיבה לכתובת IP חסומה.",
"ipusubmit" => "שחרר כתובת זו",
@@ -754,7 +754,7 @@ $3 $9",
"lockdbsuccesssub" => "נעילת בסיס-×”× ×ª×•× ×™× ×”×¦×œ×™×—×”",
"unlockdbsuccesssub" => "שוחררה הנעילה מבסיס-הנתוני×",
"lockdbsuccesstext" => "בסיס-×”× ×ª×•× ×™× ×©×œ ויקיפדיה ננעל.
-<br>זכור לשחרר ×ת הנעילה ל×חר שפעולת התחזוקה הסתיימה.",
+<br />זכור לשחרר ×ת הנעילה ל×חר שפעולת התחזוקה הסתיימה.",
"unlockdbsuccesstext" => "שוחררה הנעילה מבסיס-×”× ×ª×•× ×™× ×©×œ ויקיפדיה",
# SQL query
diff --git a/languages/LanguageHu.php b/languages/LanguageHu.php
index 8c315bbec6f8..e7e7e7c59440 100644
--- a/languages/LanguageHu.php
+++ b/languages/LanguageHu.php
@@ -364,8 +364,8 @@ Ne felejtsd el átnézni a személyes $wgSitename beállításaidat.",
"yourpasswordagain" => "Jelszavad ismét",
"newusersonly" => " (csak új felhasználóknak)",
"remembermypassword" => "Jelszó megjegyzése a használatok között.",
-"loginproblem" => "<b>Valami probléma van a belépéseddel.</b><br>Kérlek próbáld ismét!",
-"alreadyloggedin" => "<font color=red><b>Kedves $1, már be vagy lépve!</b></font><br>\n",
+"loginproblem" => "<b>Valami probléma van a belépéseddel.</b><br />Kérlek próbáld ismét!",
+"alreadyloggedin" => "<font color=red><b>Kedves $1, már be vagy lépve!</b></font><br />\n",
"login" => "Belépés",
"userlogin" => "Belépés",
@@ -410,7 +410,7 @@ Lépj be a levélben található adatokkal.",
"showpreview" => "Előnézet megtekintése",
"blockedtitle" => "A felhasználó le van tiltva",
"blockedtext" => "A felhasználói neved vagy IP számod $1 letiltotta.
-Az indoklás:<br>''$2''
+Az indoklás:<br />''$2''
<p>Felveheted a kapcsolatot $1 adminnal vagy bármely más
[[{$wgMetaNamespace}:adminisztrátorok|adminisztrátorral]] hogy megvitasd a letiltást.",
"whitelistedittitle" => "A szerkesztéshez be kell lépned",
@@ -459,7 +459,7 @@ módosítás elvész.</strong>\n",
$wgSitenameBA küldött anyag a GNU Szabad Dokumentum Licenc alatti
publikálásnak számít (lásd $1 a részletekért).
Ha nem akarod, hogy az írásod könyörtelenül módosíthassák vagy
-tetszés szerint terjesszék, akkor ne küldd be ide.<br>
+tetszés szerint terjesszék, akkor ne küldd be ide.<br />
A beküldéssel együtt azt is garantálod hogy mindezt saját
magad írtad, vagy másoltad be egy szabadon elérhető vagy
közkincs (public domain) forrásból.
@@ -533,8 +533,8 @@ rendszer nem indexel fel, vagy több független keresési szó szerepeltetése
végeredményben).",
"powersearch" => "Keresés",
"powersearchtext" => "
-Keresés a névterekben:<br>
-$1<br>
+Keresés a névterekben:<br />
+$1<br />
$2 Ãtirányítások listája &nbsp; Keresés:$3 $9",
"searchdisabled" => "<p>Elnézésed kérjük, de a teljes szöveges keresés terhelési okok miatt átmenetileg nem használható. Ezidő alatt használhatod a lenti Google keresést, mely viszont lehetséges, hogy nem teljesen friss adatokkal dolgozik.</p>
@@ -550,7 +550,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br>
+<input type=hidden name=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>
@@ -742,7 +742,7 @@ más információ amit meg tudsz adni.",
"imghistlegend" => "Jelmagyarázat: (akt) = ez az aktuális kép,
(töröl) = ezen régi változat törlése,
(régi) = visszaállás erre a régi változatra.
-<br><i>Klikkelj a dátumra hogy megnézhesd az akkor felküldött képet</i>.",
+<br /><i>Klikkelj a dátumra hogy megnézhesd az akkor felküldött képet</i>.",
"imagelinks" => "Kép hivatkozások",
"linkstoimage" => "Az alábbi lapok hivatkoznak erre a képre:",
"nolinkstoimage" => "Erre a képre nem hivatkozik lap.",
@@ -772,9 +772,9 @@ Ebből <b>$2</b> darab adminisztrátor (lásd $3).",
"maintenancebacklink" => "Vissza a karbantartás lapra",
"disambiguations" => "Egyértelműsítő lapok",
"disambiguationspage" => "{$wgMetaNamespace}:Egyértelműsítő lapok",
-"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.",
+"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.",
+"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",
@@ -990,7 +990,7 @@ pages that were vandalized).",
"noblockreason" => "You must supply a reason for the block.",
"blockipsuccesssub" => "Block succeeded",
"blockipsuccesstext" => "The IP address \"$1\" has been blocked.
-<br>See [[Speciális:Ipblocklist|IP block list]] to review blocks.",
+<br />See [[Speciális: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.",
@@ -1031,7 +1031,7 @@ Please confirm that this is what you intend to do.",
"unlockdbsuccesssub" => "Database lock removed",
"lockdbsuccesstext" => "The Wikipedia database has been locked.
-<br>Remember to remove the lock after your maintenance is complete.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
# SQL query
diff --git a/languages/LanguageIa.php b/languages/LanguageIa.php
index 146c746c52f8..d3c3040ccbdd 100644
--- a/languages/LanguageIa.php
+++ b/languages/LanguageIa.php
@@ -301,8 +301,8 @@ Non oblida personalisar Wikipedia secundo tu preferentias.",
"yourpasswordagain" => "Confirmar contrasigno",
"newusersonly" => " (solmente pro nove usatores)",
"remembermypassword" => "Recordar contrasigno inter sessiones.",
-"loginproblem" => "<b>Occurreva problemas pro initiar tu session.</b><br>Tenta de nove!",
-"alreadyloggedin" => "<font color=red><b>Usator $1, tu session ja es aperte!</b></font><br>\n",
+"loginproblem" => "<b>Occurreva problemas pro initiar tu session.</b><br />Tenta de nove!",
+"alreadyloggedin" => "<font color=red><b>Usator $1, tu session ja es aperte!</b></font><br />\n",
"login" => "Aperir session",
"userlogin" => "Aperir session",
@@ -343,7 +343,7 @@ Per favor initia un session post reciper lo.",
"showpreview" => "Monstrar previsualisation",
"blockedtitle" => "Le usator es blocate",
"blockedtext" => "Tu nomine de usator o adresse de IP ha essite blocate per $1.
-Le motivo presentate es iste:<br>''$2''<p>Tu pote contactar $1 o un del altere
+Le motivo presentate es iste:<br />''$2''<p>Tu pote contactar $1 o un del altere
[[Wikipedia:administratores|administratores]] pro discuter le bloco.",
"newarticle" => "(Nove)",
"newarticletext" =>
@@ -377,7 +377,7 @@ Si tu lo salvara, tote le modificationes facite post iste revision essera perdit
considerate public secundo le terminos del Licentia de Documentation Libere GNU
(vide plus detalios in $1).
Si tu non vole que tu scripto sia modificate impietosemente e redistribuite
-a voluntate, alora non lo edita hic.<br>
+a voluntate, alora non lo edita hic.<br />
Additionalmente, tu nos garanti que tu es le autor de tu contributiones,
o que tu los ha copiate de un ressource libere de derectos.
<strong>NON USA MATERIAL COPERITE PER DERECTOS DE AUTOR (COPYRIGHT) SIN AUTORISATION EXPRESSE!</strong>",
@@ -441,8 +441,8 @@ terminos de recerca (solmente le paginas que contine tote le terminos
de recerca apparera in le resultato).",
"powersearch" => "Recercar",
"powersearchtext" => "
-Recerca in contextos :<br>
-$1<br>
+Recerca in contextos :<br />
+$1<br />
$2 Listar redireciones &nbsp; Recercar pro $3 $9",
@@ -621,7 +621,7 @@ a su proposito.",
"deleteimgcompletely" => "elim",
"imghistlegend" => "Legend: (actu) = iste es le imagine actual, (elim) = elimina
iste version antique, (rev) = reverte a iste version antique.
-<br><i>Clica super le data pro vider le imagine cargate in ille die.</i>",
+<br /><i>Clica super le data pro vider le imagine cargate in ille die.</i>",
"imagelinks" => "Ligamines al imagine",
"linkstoimage" => "Le paginas sequente se liga a iste imagine:",
"nolinkstoimage" => "Necun pagina se liga a iste imagine.",
@@ -652,12 +652,12 @@ non preme \"Reload\" post cata item reparate. ;-)",
"disambiguations" => "Paginas de disambiguation",
"disambiguationspage" => "Wikipedia:Ligamines_a_paginas_de_disambiguation",
"disambiguationstext" => "Le articulos sequente se liga a un <i>pagina de disambiguation</i>.
-Illos deberea ligar se directemente al topico appropriate.<br>
+Illos deberea ligar se directemente al topico appropriate.<br />
Un pagina es tractate como un pagina de disambiguation si existe un ligamine
a illo in $1. Ligamines de altere contextos <i>non</i> es listate hic.",
"doubleredirects" => "Redirectiones duple",
"doubleredirectstext" => "<b>Attention:</b> Iste lista pote continer items false.
-Illo generalmente significa que il ha texto additional con ligamines sub le prime #REDIRECT.<br>
+Illo generalmente significa que il ha texto additional con ligamines sub le prime #REDIRECT.<br />
Cata linea contine ligamines al prime e secunde redirection, assi como le prime linea del
secunde texto de redirection, generalmente exhibiente le articulo scopo \"real\",
al qual le prime redirection deberea referer se.",
@@ -842,7 +842,7 @@ specific que ha essite vandalisate).",
"noblockreason" => "Tu debe fornir un motivo pro le blocage.",
"blockipsuccesssub" => "Blocage con successo",
"blockipsuccesstext" => "Le adresse IP \"$1\" ha essite blocate.
-<br>Vide [[Special:Ipblocklist|Lista de IPs blocate]] pro revider le blocages.",
+<br />Vide [[Special:Ipblocklist|Lista de IPs blocate]] pro revider le blocages.",
"unblockip" => "Disblocar adresse IP",
"unblockiptext" => "Usa le formulario infra pro restaurar le accesso de scriptura
a un adresse de IP blocate previemente.",
@@ -875,7 +875,7 @@ Per favor confirma que iste es tu intention.",
"lockdbsuccesssub" => "Base de datos blocate con successo",
"unlockdbsuccesssub" => "Base de datos disblocate con successo",
"lockdbsuccesstext" => "Le base de datos de Wikipedia ha essite blocate.
-<br>Rememora te de disblocar lo post completar tu mantenentia.",
+<br />Rememora te de disblocar lo post completar tu mantenentia.",
"unlockdbsuccesstext" => "Le base de datos de Wikipedia ha essite disblocate.",
# SQL query
diff --git a/languages/LanguageIs.php b/languages/LanguageIs.php
index ea0db217cd5b..c34c753f54cd 100644
--- a/languages/LanguageIs.php
+++ b/languages/LanguageIs.php
@@ -802,7 +802,7 @@ You should log in and change your password now.",
# $1<br />
# $2 List redirects &nbsp; Search for $3 $9",
'preferences' => "Stillingar",
-'prefs-help-userdata' => "* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br/>
+'prefs-help-userdata' => "* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br />
* <strong>Email</strong> (optional): Enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.",
#'prefs-misc' => "Misc settings",
diff --git a/languages/LanguageIt.php b/languages/LanguageIt.php
index d70caee7574e..2eca2837e5d1 100644
--- a/languages/LanguageIt.php
+++ b/languages/LanguageIt.php
@@ -115,20 +115,20 @@
"tog-hover" => "Mostra etichetta sui wiki-links",
"tog-underline" => "Sottolinea links",
-"tog-highlightbroken" => "Evidenzia i links che puntano ad<br>articoli ancora da scrivere",
+"tog-highlightbroken" => "Evidenzia i links che puntano ad<br />articoli ancora da scrivere",
"tog-justify" => "Paragrafo: giustificato",
-"tog-hideminor" => "Nascondi le modifiche minori<br>nella pagina \"Modifiche recenti\"",
+"tog-hideminor" => "Nascondi le modifiche minori<br />nella pagina \"Modifiche recenti\"",
"tog-usenewrc" => "Enhanced recent changes (not for all browsers)",
-"tog-numberheadings" => "Auto-numerazione dei<br>titoli di paragrafo",
+"tog-numberheadings" => "Auto-numerazione dei<br />titoli di paragrafo",
"tog-showtoolbar" => "Show edit toolbar",
-"tog-editondblclick" => "Doppio click per modificare l'articolo<br>(richiede JavaScript)",
+"tog-editondblclick" => "Doppio click per modificare l'articolo<br />(richiede JavaScript)",
"tog-editsection"=>"Enable section editing via [edit] links",
-"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br> on section titles (JavaScript)",
-"tog-showtoc"=>"Show table of contents<br>(for articles with more than 3 headings)",
-"tog-rememberpassword" => "Ricorda la password<br>(non limitare a una sessione<br>- richiede uso di cookies)",
-"tog-editwidth" => "Casella di edizione ampliata<br>alla massima larghezza",
+"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br /> on section titles (JavaScript)",
+"tog-showtoc"=>"Show table of contents<br />(for articles with more than 3 headings)",
+"tog-rememberpassword" => "Ricorda la password<br />(non limitare a una sessione<br />- richiede uso di cookies)",
+"tog-editwidth" => "Casella di edizione ampliata<br />alla massima larghezza",
"tog-watchdefault" => "Notifica articoli nuovi e modificati",
-"tog-minordefault" => "Indica ogni modifica come minore<br>(solo come predefinito)",
+"tog-minordefault" => "Indica ogni modifica come minore<br />(solo come predefinito)",
"tog-previewontop" => "Show preview before edit box and not after it",
"tog-nocache" => "Disable page caching",
# dates
@@ -250,11 +250,11 @@ MySQL ha restituito un errore \"<tt>$3: $4</tt>\".",
"nodb" => "Selezione del database $1 fallita",
"readonly" => "Accesso al database temporaneamente disabilitato",
"enterlockreason" => "Fornisci una spiegazione sui motivi del blocco, includendo le probabili data ed ora di riattivazione o di rimozione del blocco.",
-"readonlytext" => "Il database di Wikipedia è al momento bloccato, e non consente nuove immissioni né modifiche, molto probabilmente per manutenzione server, nel qual caso il database sarà presto di nuovo completamente accessibile.<br>
+"readonlytext" => "Il database di Wikipedia è al momento bloccato, e non consente nuove immissioni né modifiche, molto probabilmente per manutenzione server, nel qual caso il database sarà presto di nuovo completamente accessibile.<br />
L'amministratore di sistema che ha imposto il blocco, ha lasciato questa nota:
<p>:$1",
-"missingarticle" => "Il database non ha trovato il testo di una pagina, che invece avrebbe dovuto trovare, intitolata \"$1\".<br>
-Questo non è un errore del database, ma più probabilmente un problema del software.<br>
+"missingarticle" => "Il database non ha trovato il testo di una pagina, che invece avrebbe dovuto trovare, intitolata \"$1\".<br />
+Questo non è un errore del database, ma più probabilmente un problema del software.<br />
Per favore, segnalate l'accaduto ad un amministratore di sistema, segnalando la URL e l'ora dell'incidente.",
"internalerror" => "Errore interno",
"filecopyerror" => "Non è stato possibile copiare il file \"$1\" come \"$2\".",
@@ -267,7 +267,7 @@ Per favore, segnalate l'accaduto ad un amministratore di sistema, segnalando la
"cannotdelete" => "Impossibile cancellare la pagina o l'immagine richiesta.",
"badtitle" => "Titolo non corretto",
"badtitletext" => "La pagina richiesta non è disponibile, potrebbe essere non valida, vuota, o potrebbe trattarsi di un errore in un link interlinguistico o fra diverse versioni di Wikipedia.",
-"perfdisabled" => "Siamo davvero rammaricati, ma questa funzionalità è temporaneamente disabilitata durante le ore di maggiore accesso al database, per ragioni di accessibilità al resto del sito!<br>Torna fra le 02:00 e le 14:00 UTC e riprova.<br><br>Grazie.",
+"perfdisabled" => "Siamo davvero rammaricati, ma questa funzionalità è temporaneamente disabilitata durante le ore di maggiore accesso al database, per ragioni di accessibilità al resto del sito!<br />Torna fra le 02:00 e le 14:00 UTC e riprova.<br /><br />Grazie.",
# Login and logout pages
#
@@ -275,7 +275,7 @@ Per favore, segnalate l'accaduto ad un amministratore di sistema, segnalando la
"logouttext" => "Logout effettuato.
Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo IP resterà riconoscibile), oppure puoi nuovamente richiedere il login con il precedente username, oppure come uno diverso.\n",
-"welcomecreation" => "<h2>Benvenuto, $1!</h2><p>Il tuo account è stato creato con successo.<br>Grazie per aver scelto di far crescere Wikipedia con il tuo aiuto.<br>Per rendere Wikipedia più tua, e per usarla più scorrevolmente, non dimenticare di personalizzare le tue preferenze.",
+"welcomecreation" => "<h2>Benvenuto, $1!</h2><p>Il tuo account è stato creato con successo.<br />Grazie per aver scelto di far crescere Wikipedia con il tuo aiuto.<br />Per rendere Wikipedia più tua, e per usarla più scorrevolmente, non dimenticare di personalizzare le tue preferenze.",
"loginpagetitle" => "Login",
"yourname" => "Il tuo user name",
@@ -283,8 +283,8 @@ Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo
"yourpasswordagain" => "Ripeti la password",
"newusersonly" => " (solo per nuovi Utenti)",
"remembermypassword" => "Ricorda la mia password per più sessioni (richiede uso dei cookies).",
-"loginproblem" => "<b>Si è verificato un errore durante il tuo tentativo di login.</b><br>Riprova, sarai più fortunato!",
-"alreadyloggedin" => "<font color=red><b>Ehi, Utente $1, hai già fatto il login, sei già connesso al nostro server!</b></font><br>\n",
+"loginproblem" => "<b>Si è verificato un errore durante il tuo tentativo di login.</b><br />Riprova, sarai più fortunato!",
+"alreadyloggedin" => "<font color=red><b>Ehi, Utente $1, hai già fatto il login, sei già connesso al nostro server!</b></font><br />\n",
"login" => "Log in",
"userlogin" => "Log in",
@@ -292,7 +292,7 @@ Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo
"userlogout" => "Log out",
"createaccount" => "Crea nuovo account",
"badretype" => "Le password che hai immesso non coincidono, sono diverse fra loro.",
-"userexists" => "Siamo spiacenti.<br>Lo user name che hai scelto è già usato da un altro Utente.<br>Ti preghiamo perciò di voler scegliere uno user name diverso.",
+"userexists" => "Siamo spiacenti.<br />Lo user name che hai scelto è già usato da un altro Utente.<br />Ti preghiamo perciò di voler scegliere uno user name diverso.",
"youremail" => "La tua e-mail",
"yournick" => "Il tuo diminutivo o soprannome (per le firme)",
"emailforlost" => "Se per caso ti dimenticassi della tua password, ne potresti ricevere una nuova di zecca presso la casella e-mail che ci hai indicato.",
@@ -300,9 +300,9 @@ Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo
"noname" => "Lo user name indicato non è valido, non è possibile creare un account a questo nome.",
"loginsuccesstitle" => "Login effettuato con successo!",
"loginsuccess" => "Sei stato ammesso alla connessione al server di Wikipedia con il nome utente di \"$1\".",
-"nosuchuser" => "Attenzione<br><br>a seguito di verifica, non ci risulta alcun Utente con il nome di \"$1\".<br><br>
+"nosuchuser" => "Attenzione<br /><br />a seguito di verifica, non ci risulta alcun Utente con il nome di \"$1\".<br /><br />
Controlla per favore il nome digitato, oppure usa il modulo qui sotto per creare un nuovo user account.",
-"wrongpassword" => "La password immessa non è corretta.<br><br>Riprova, per favore.",
+"wrongpassword" => "La password immessa non è corretta.<br /><br />Riprova, per favore.",
"mailmypassword" => "Spediscimi una nuova password in posta elettronica",
"passwordremindertitle" => "Servizio Password Reminder di Wikipedia",
"passwordremindertext" => "Qualcuno (probabilmente tu, con indirizzo IP $1)
@@ -322,8 +322,8 @@ Per favore, fai subito un log in non appena la ricevi.",
"preview" => "Anteprima",
"showpreview" => "Visualizza Anteprima",
"blockedtitle" => "Questo User name corrisponde purtroppo ad un Utente che è stato disabilitato alla modifica degli articoli.",
-"blockedtext" => "Il tuo User name o il tuo indirizzo IP sono stati bloccati da $1.<br>
-La motivazione del blocco è la seguente:<br>:''$2''<p>Se lo desideri, puoi contattare $1, o uno degli altri [[Wikipedia:administrators|amministratori]] per discutere del blocco.",
+"blockedtext" => "Il tuo User name o il tuo indirizzo IP sono stati bloccati da $1.<br />
+La motivazione del blocco è la seguente:<br />:''$2''<p>Se lo desideri, puoi contattare $1, o uno degli altri [[Wikipedia:administrators|amministratori]] per discutere del blocco.",
"newarticle" => "(Nuovo)",
"newarticletext" => "Scrivi qui il tuo testo.",
"noarticletext" => "(Questo articolo è vuoto, potresti gentilmente iniziare l'articolo, oppure richiedere la cancellazione di questa pagina)",
@@ -333,17 +333,17 @@ La motivazione del blocco è la seguente:<br>:''$2''<p>Se lo desideri, puoi cont
"previewconflict" => "Questa anteprima rappresenta il testo nella casella di edizione di sopra, l'articolo apparirà in questa forma se sceglierai di salvare la pagina ora.",
"editing" => "Modifica di $1",
"editconflict" => "Conflitto di edizione: $1",
-"explainconflict" => "Qualcun altro ha salvato una sua versione dell'articolo nel tempo in cui tu stavi preparando la tua versione.<br>
+"explainconflict" => "Qualcun altro ha salvato una sua versione dell'articolo nel tempo in cui tu stavi preparando la tua versione.<br />
La casella di modifica di sopra contiene il testo dell'articolo nella sua forma attuale (cioè il testo attualmente online). Le tue modifiche sono invece contenute nella casella di modifica inferiore.
Dovrai inserire, se lo desideri, le tue modifiche nel testo esistente, e perciò scriverle nella casella di sopra.
<b>Soltanto</b> il testo nella casella di sopra sarà salvato se premerai il bottone \"Salva\".\n<p>",
"yourtext" => "Il tuo testo",
"storedversion" => "Versione in archivio",
-"editingold" => "<strong>ATTENZIONE: Stai modificando una versione dell'articolo non aggiornata.<br>
+"editingold" => "<strong>ATTENZIONE: Stai modificando una versione dell'articolo non aggiornata.<br />
Se la salvi così, tutti i cambiamenti apportati dopo questa revisione verranno persi per sempre.</strong>\n",
"yourdiff" => "Differenze",
"copyrightwarning" => "Nota, per favore, che tutti i contributi a Wikipedia si considerano rilasciati sotto licenza di tipo GNU Free Documentation License (vedi $1 per maggiori dettagli).
-Se non vuoi che il tuo testo possa essere modificato e ridistribuito da chiunque senza pietà e senza altri limiti, allora non inviarlo a Wikipedia, ma realizza piuttosto un tuo sito web personale.<br>
+Se non vuoi che il tuo testo possa essere modificato e ridistribuito da chiunque senza pietà e senza altri limiti, allora non inviarlo a Wikipedia, ma realizza piuttosto un tuo sito web personale.<br />
Con l'invio di questo testo stai garantendo, a tua responsabilità, che il testo è stato scritto da te personalmente ed originalmente, oppure che è stato copiato da una fonte di publico dominio, o da una simile fonte, oppure che hai ottenuto espressa autorizzazione ad usare questo testo e che puoi dimostrarlo.
<strong>NON USARE MATERIALE COPERTO DA DIRITTO DI AUTORE (COPYRIGHT - (c)) IN MANCANZA DI ESPRESSA AUTORIZZAZIONE!!!</strong>",
@@ -382,7 +382,7 @@ Controlla per favore la URL che hai usato per accedere a questa pagina.\n",
Questo potrebbe dipendere dall'aver ricercato una parola di meno di tre caratteri.
Oppure potresti aver scritto male la richiesta, per esempio \"pesce and and azzurro\".
Per favore, riprova.",
-"matchtotals" => "La ricerca per la voce \"$1\" ha trovato<br>$2 riscontri nei titoli degli articoli e<br>$3 riscontri nei testi degli articoli.",
+"matchtotals" => "La ricerca per la voce \"$1\" ha trovato<br />$2 riscontri nei titoli degli articoli e<br />$3 riscontri nei testi degli articoli.",
"titlematches" => "Nei titoli degli articoli",
"notitlematches" => "Voce richiesta non trovata in titoli di articolo",
"textmatches" => "Nel testo degli articoli ",
@@ -394,8 +394,8 @@ Per favore, riprova.",
"nonefound" => "<strong>Nota</strong>: la ricerca di parole troppo comuni, come \"avere\" o \"essere\", che non sono indicizzate, può causare un esito negativo, così come indicare più di un termine da ricercare (solo le pagine che contengano tutti i termini ricercati verrebbero infatti visualizzate fra i risultati).",
"powersearch" => "Ricerca",
"powersearchtext" => "
-Cerca fra i campi :<br>
-$1<br>
+Cerca fra i campi :<br />
+$1<br />
$2 Elenca i redirects &nbsp; cerca per $3 $9",
@@ -430,7 +430,7 @@ Il tuo numero identificativo (ID) interno è $2.",
"timezonetext" => "Immetti il numero di ore di differenza fra la tua ora locale e la ora del server (UTC).",
"localtime" => "Ora Locale",
"timezoneoffset" => "Offset",
-"emailflag" => "Nascondi la mia e-mail<br>agli altri utenti",
+"emailflag" => "Nascondi la mia e-mail<br />agli altri utenti",
# Recent changes
#
@@ -483,7 +483,7 @@ Uploads e cancellazioni delle immagini sono registrati nello
[[Project:Upload_log|upload log]].
Usa il modulo sottostante per caricare nuovi files immagine da utilizzare per arricchire ed illustrare i tuoi articoli.
-Sulla maggior parte dei browsers, dovresti vedere un bottone con la scritta \"Browse...\" (oppure \"Sfoglia...\", che aprirà una comune finestra di dialogo.<br>
+Sulla maggior parte dei browsers, dovresti vedere un bottone con la scritta \"Browse...\" (oppure \"Sfoglia...\", che aprirà una comune finestra di dialogo.<br />
Scegliendo uno dei files sul tuo PC, il nome di questo file verrà scritto in automatico nella casella di testo a fianco al bottone.<p>
'''Devi anche selezionare la casellina nella quale affermi che con questo upload non stai violando nessun copyright.'''
@@ -520,7 +520,7 @@ Tutti i tempi indicati sono calcolati sul fuso orario del server (UTC).
"largefile" => "Il peso raccomandato per le immagini deve essere inferiore a 100kb.",
"successfulupload" => "Caricamento completato",
"fileuploaded" => "File \"$1\" correttamente caricato sul server.
-Segui questo link: ($2) per modificare la pagina di descrizione del file che hai appena caricato, e immetti subito le informazioni che ritieni opportune (cosa rappresenta, dove lo hai trovato, chi lo ha creato e quando, etc) oltre ad una nota circa la situazione di copyright sul file.<br>Non omettere la nota sul copyright, o il file verrebbe cancellato molto presto. ",
+Segui questo link: ($2) per modificare la pagina di descrizione del file che hai appena caricato, e immetti subito le informazioni che ritieni opportune (cosa rappresenta, dove lo hai trovato, chi lo ha creato e quando, etc) oltre ad una nota circa la situazione di copyright sul file.<br />Non omettere la nota sul copyright, o il file verrebbe cancellato molto presto. ",
"uploadwarning" => "Avviso di Upload",
"savefile" => "Salva file",
"uploadedimage" => "caricato \"$1\"",
@@ -545,7 +545,7 @@ Segui questo link: ($2) per modificare la pagina di descrizione del file che hai
"deleteimg" => "canc",
"deleteimgcompletely" => "canc",
"imghistlegend" => "Legenda: (cur) = immagine corrente, (canc) = cancella questa vecchia versione, (ripr) = ripristina questa vecchia versione come versione attuale.
-<br><i>Clicca su una data per vedere tutte le immagini che sono state caricate in quella data </i>.",
+<br /><i>Clicca su una data per vedere tutte le immagini che sono state caricate in quella data </i>.",
"imagelinks" => "Link alle immagini",
"linkstoimage" => "Le pagine seguenti linkano questa immagine:",
"nolinkstoimage" => "Nessuna pagina linka questa immagine.",
@@ -570,9 +570,9 @@ Questa media rivela che ci sono state una media di <b>$5</b> modifiche per cias
"maintenancebacklink" => "Torna alla pagina manutenzione",
"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.",
+"disambiguationstext" => "The following articles link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
"doubleredirects" => "Doppi Redirects",
-"doubleredirectstext" => "<b>Attenzione:</b> Questa lista può talvolta contenere dei risultati non corretti. Ciò potrebbe magari accadere perchè vi sono del testo aggiuntivo o dei link dopo il tag #REDIRECT.<br>\nOgni riga contiene i link al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene il \"reale\" articolo di destinazione, quello al quale anche il primo redirect dovrebbe puntare.",
+"doubleredirectstext" => "<b>Attenzione:</b> Questa lista può talvolta contenere dei risultati non corretti. Ciò potrebbe magari accadere perchè vi sono del testo aggiuntivo o dei link dopo il tag #REDIRECT.<br />\nOgni riga contiene i link al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene il \"reale\" articolo di destinazione, quello al quale anche il primo redirect dovrebbe puntare.",
"brokenredirects" => "Redirects errati",
"brokenredirectstext" => "I seguenti redirects puntano ad articoli non ancora creati.",
"selflinks" => "Pagine con Auto-Links",
@@ -694,7 +694,7 @@ Tutti i tempi sono in ora del server (UTC).
"undeletepagetext" => "Le pagine qui di seguito indicate sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate. L'archivio viene svuotato periodicamente.",
"undeletearticle" => "Recupera un articolo cancellato",
"undeleterevisions" => "$1 revisioni in archivio",
-"undeletehistory" => "Se recuperi questo articolo, tutte le sue revisioni verranno recuperate nella relativa cronologia.<br>
+"undeletehistory" => "Se recuperi questo articolo, tutte le sue revisioni verranno recuperate nella relativa cronologia.<br />
Se una nuova pagina è stata creata con questo stesso nome dopo la cancellazione, le revisioni recuperate saranno inserite nella cronologia e la versione attualmente online della pagina non verrà modificata.",
"undeleterevision" => "Cancellata revisione $1",
"undeletebtn" => "RIPRISTINA!",
@@ -724,8 +724,8 @@ Vedi [[Wikipedia:Deletion_log]] per un elenco delle pagine cancellate e recupera
# Block/unblock IP
#
"blockip" => "Blocca indirizzo IP",
-"blockiptext" => "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP.<br>
-Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[Wikipedia:Policy|policy di Wikipedia]].<br>Il blocco non può in nessun caso essere applicato per motivi ideologici.<p>
+"blockiptext" => "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP.<br />
+Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[Wikipedia:Policy|policy di Wikipedia]].<br />Il blocco non può in nessun caso essere applicato per motivi ideologici.<p>
Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avviso essere bloccato (per esempio, cita i titoli di pagine eventualmente già oggetto di vandalismo editoriale).",
"ipaddress" => "Indirizzo IP (IP Address)",
"ipbreason" => "Motivazione",
@@ -734,7 +734,7 @@ Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avvis
"noblockreason" => "Devi obbligatoriamente fornire una motivazione per il blocco.",
"blockipsuccesssub" => "Blocco eseguito",
"blockipsuccesstext" => " L'indirizzo IP \"$1\" è stato bloccato.
-<br>Vedi [[Special:Ipblocklist|lista IP bloccati]].",
+<br />Vedi [[Special:Ipblocklist|lista IP bloccati]].",
"unblockip" => " Sblocca indirizzo IP",
"unblockiptext" => "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
"ipusubmit" => "Sblocca questo indirizzo IP",
@@ -749,7 +749,7 @@ Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avvis
#
"lockdb" => "Blocca il database",
"unlockdb" => "Sblocca il database",
-"lockdbtext" => "Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br><br>
+"lockdbtext" => "Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br /><br />
Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare e, soprattutto, che il prima possibile sbloccherai nuovamente il database, ripristinandone la corretta funzionalità, non appena avrai terminato le tue manutenzioni.",
"unlockdbtext" => "Sbloccare il database ripristinerà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere di eseguire operazioni che richiedano modifiche del database.
Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare.",
@@ -761,7 +761,7 @@ Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effett
"lockdbsuccesssub" => "Blocco del database eseguito",
"unlockdbsuccesssub" => "Sblocco del database eseguito, rimosso blocco",
"lockdbsuccesstext" => "Il database di Wikipedia è stato bloccato.
-<br>Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.",
+<br />Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.",
"unlockdbsuccesstext" => " Il database di Wikipedia è stato sbloccato.",
# SQL query
@@ -801,7 +801,7 @@ per poter spostare una pagina.",
"movepagebtn" => "Sposta questa pagina",
"pagemovedsub" => "Spostamento effettuato con successo",
"pagemovedtext" => "Pagina \"[[$1]]\" rinominata in \"[[$2]]\".",
-"articleexists" => "Una pagina con questo nome esiste già, oppure il nome che hai scelto non è valido.<br>
+"articleexists" => "Una pagina con questo nome esiste già, oppure il nome che hai scelto non è valido.<br />
Scegli, per cortesia, un titolo diverso per l'articolo.",
"talkexists" => "La pagina è stata spostata correttamente, ma non si è potuto spostare la pagina di discussione perché ne esiste già un'altra con il nuovo titolo. Per favore, modifica manualmente i contenuti delle due pagine discussione, così da mantenerle entrambe per non perdere potenzialmente interessanti riflessioni.",
"movedto" => "spostata a ",
diff --git a/languages/LanguageJa.php b/languages/LanguageJa.php
index c463d743a712..c6481ad33c20 100644
--- a/languages/LanguageJa.php
+++ b/languages/LanguageJa.php
@@ -287,8 +287,8 @@ again as the same or as a different user.\n",
"yourpasswordagain" => "パスワードå†å…¥åŠ›",
"newusersonly" => " (æ–°è¦ãƒ¦ãƒ¼ã‚¶ã®ã¿)",
"remembermypassword" => "セッションをã¾ãŸãŒã£ã¦ãƒ‘スワードをä¿æŒã™ã‚‹ã€‚",
-"loginproblem" => "<b>ログインã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚</b><br>å†åº¦å®Ÿè¡Œã—ã¦ãã ã•ã„。",
-"alreadyloggedin" => "<font color=red><b>ユーザ $1 ã¯ã€ã™ã§ã«ãƒ­ã‚°ã‚¤ãƒ³æ¸ˆã¿ã§ã™ã€‚</b></font><br>\n",
+"loginproblem" => "<b>ログインã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚</b><br />å†åº¦å®Ÿè¡Œã—ã¦ãã ã•ã„。",
+"alreadyloggedin" => "<font color=red><b>ユーザ $1 ã¯ã€ã™ã§ã«ãƒ­ã‚°ã‚¤ãƒ³æ¸ˆã¿ã§ã™ã€‚</b></font><br />\n",
"login" => "ログイン",
"userlogin" => "ログイン",
@@ -324,7 +324,7 @@ again as the same or as a different user.\n",
"showpreview" => "プレビューを実行",
"blockedtitle" => "ユーザã¯ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚",
"blockedtext" => "ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶åã¾ãŸã¯IPアドレス㯠$1 ã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚
-ãã®ç†ç”±ã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚:<br>$2<p>詳細ã¯ç®¡ç†è€…ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。",
+ãã®ç†ç”±ã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚:<br />$2<p>詳細ã¯ç®¡ç†è€…ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。",
"newarticle" => "(æ–°è¦)",
"newarticletext" => "æ–°ã—ã„記事を書ã込んã§ãã ã•ã„。",
"noarticletext" => "(ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ç¾åœ¨è¨˜äº‹ãŒã‚ã‚Šã¾ã›ã‚“。)",
@@ -646,7 +646,7 @@ created and by whom, and anything else you may know about it." */,
"revertimg" => "差戻",
"deleteimg" => "削除",
"deleteimgcompletely" => "削除",
-"imghistlegend" => "凡例: (最新)=最新版ã®ç”»åƒ, (削除)=ã“ã®ç‰ˆã®ç”»åƒã‚’削除, (差戻)=ã“ã®ç‰ˆã®ç”»åƒã«å·®ã—戻ã™<br><b>アップロードã•ã‚ŒãŸç”»åƒã‚’見るã«ã¯æ—¥ä»˜ã‚’クリックã—ã¾ã™ã€‚</b>",
+"imghistlegend" => "凡例: (最新)=最新版ã®ç”»åƒ, (削除)=ã“ã®ç‰ˆã®ç”»åƒã‚’削除, (差戻)=ã“ã®ç‰ˆã®ç”»åƒã«å·®ã—戻ã™<br /><b>アップロードã•ã‚ŒãŸç”»åƒã‚’見るã«ã¯æ—¥ä»˜ã‚’クリックã—ã¾ã™ã€‚</b>",
"imagelinks" => "リンク",
"linkstoimage" => "ã“ã®ç”»åƒã«ãƒªãƒ³ã‚¯ã—ã¦ã„るページã®ä¸€è¦§:",
"nolinkstoimage" => "ã“ã®ç”»åƒã«ãƒªãƒ³ã‚¯ã—ã¦ã„るページã¯ã‚ã‚Šã¾ã›ã‚“。",
@@ -842,7 +842,7 @@ pages that were vandalized).",
"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.",
+<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.",
@@ -875,7 +875,7 @@ Please confirm that this is what you intend to do.",
"lockdbsuccesssub" => "Database lock succeeded",
"unlockdbsuccesssub" => "Database lock removed",
"lockdbsuccesstext" => "The {{SITENAME}} database has been locked.
-<br>Remember to remove the lock after your maintenance is complete.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The {{SITENAME}} database has been unlocked.",
# SQL query (ã“ã®éƒ¨åˆ†ã¯ç®¡ç†è€…用ãªã®ã§å½“é¢è‹±æ–‡ã‚’残ã—ã¦ãŠãã¾ã™ã€‚)
diff --git a/languages/LanguageKo.php b/languages/LanguageKo.php
index 9d78ce4aa294..1cd5f10bdb5f 100644
--- a/languages/LanguageKo.php
+++ b/languages/LanguageKo.php
@@ -296,8 +296,8 @@ Please report this to an administrator, making note of the URL.",
"yourpasswordagain" => "암호 ë˜ í•œë²ˆ",
"newusersonly" => " (새내기 사용ìž)",
"remembermypassword" => "세쎤ë™ì•ˆ 암호를 기억합니다.",
-"loginproblem" => "<b>들어가는 ë° ë¬¸ì œê°€ 있습니다.</b><br>다시 í•´ 보세요!",
-"alreadyloggedin" => "<font color=red><b>$1 님, ë²Œì¨ ë“¤ì–´ì™€ 있습니다!</b></font><br>\n",
+"loginproblem" => "<b>들어가는 ë° ë¬¸ì œê°€ 있습니다.</b><br />다시 í•´ 보세요!",
+"alreadyloggedin" => "<font color=red><b>$1 님, ë²Œì¨ ë“¤ì–´ì™€ 있습니다!</b></font><br />\n",
"login" => "들어가기",
"userlogin" => "들어가기",
@@ -335,7 +335,7 @@ Please report this to an administrator, making note of the URL.",
"showpreview" => "미리보기",
"blockedtitle" => "ì‚¬ìš©ìž ì ‘ê·¼ê¸ˆì§€",
"blockedtext" => "$1 ê°€ ë‹¹ì‹ ì˜ ë˜ì´ë¦„ì´ë‚˜ IP를 막았습니다.
-ì´ìœ ëŠ” 다ìŒê³¼ 같습니다:<br>$2<p> ì ‘ê·¼ê¸ˆì§€ì— ëŒ€í•´ì„  관리ìžì™€ ìƒì˜í•˜ì‹­ì‹œì˜¤.",
+ì´ìœ ëŠ” 다ìŒê³¼ 같습니다:<br />$2<p> ì ‘ê·¼ê¸ˆì§€ì— ëŒ€í•´ì„  관리ìžì™€ ìƒì˜í•˜ì‹­ì‹œì˜¤.",
"newarticle" => "(새문서)",
"newarticletext" => "ìƒˆë¬¸ì„œì— ë‚´ìš©ì„ ì¨ ë„£ìœ¼ì„¸ìš”.",
"noarticletext" => "(현재 문서는 비어 있습니다.)",
@@ -364,7 +364,7 @@ text editing area as it will appear if you choose to save.",
"yourdiff" => "ì°¨ì´",
"copyrightwarning" => "{{SITENAME}}ì— ë‹¹ì‹ ì´ ê¸°ì—¬í•œ ê²ƒì€ ëª¨ë‘ GNU ìžìœ  문서 사용허가서(GFDL)
($1참조)ì— ë”°ë¼ ë°°í¬ë©ë‹ˆë‹¤.
-ë‹¹ì‹ ì´ ì¨ ë„£ì€ ë‚´ìš©ì´ ì œí•œì—†ì´ ê³ ì³ì§€ê³ , 재배í¬ë˜ëŠ” ê²ƒì´ ì‹«ë‹¤ë©´, 저장하지 마십시오.ì— ë°˜ëŒ€í•  ë•Œì—는, ì—¬ê¸°ì— ì“°ì§€ 마시길 ë°”ëžë‹ˆë‹¤.<br>
+ë‹¹ì‹ ì´ ì¨ ë„£ì€ ë‚´ìš©ì´ ì œí•œì—†ì´ ê³ ì³ì§€ê³ , 재배í¬ë˜ëŠ” ê²ƒì´ ì‹«ë‹¤ë©´, 저장하지 마십시오.ì— ë°˜ëŒ€í•  ë•Œì—는, ì—¬ê¸°ì— ì“°ì§€ 마시길 ë°”ëžë‹ˆë‹¤.<br />
ë˜í•œ, 여기 ì¨ ë„£ì€ ë‚´ìš©ì„ ìŠ¤ìŠ¤ë¡œ ì¼ìŒì„, í˜¹ì€ ëª¨ë‘ì—게 ê³µê°œëœ ìžë£Œì—ì„œ 빌어왔ìŒì„
ê°™ì´ ì•½ì†í•´ì•¼ 합니다.
<strong>ì €ìž‘ê¶Œì˜ ë³´í˜¸ë¥¼ 받는 ë‚´ìš©ì„ ì €ìž‘ê¶Œìžì˜ í—ˆê°€ì—†ì´ ë³´ë‚´ì§€ 마십시오!</strong>",
@@ -437,8 +437,8 @@ which are not indexed, or by specifying more than one search term (only pages
containing all of the search terms will appear in the result).",
"powersearch" => "찾기",
"powersearchtext" => "
-Search in namespaces :<br>
-$1<br>
+Search in namespaces :<br />
+$1<br />
$2 List redirects &nbsp; Search for $3 $9",
@@ -602,7 +602,7 @@ $1ì˜ ì¡°ê±´ìœ¼ë¡œ ì‚¬ìš©ì„ í—ˆê°€í–ˆìŒì„ 확ì¸í•©ë‹ˆë‹¤.",
"deleteimg" => "지우기",
"deleteimgcompletely" => "지우기",
"imghistlegend" => "ìƒì„¸ì„¤ëª…: (현재) = í˜„ìž¬ì˜ ê·¸ë¦¼ìž…ë‹ˆë‹¤, (지움) = 옛 ë²„ì ¼ì„ ì§€ì›ë‹ˆë‹¤, (ëŒë¦¼) = 옛 버젼으로 ë˜ëŒë ¤ 놓습니다.
-<br><i>특정 ë‚ ì§œì— ì˜¬ë¼ì˜¨ ê·¸ë¦¼ì„ ë³´ë ¤ë©´, 날짜를 ì°ì–´ 주세요</i>.",
+<br /><i>특정 ë‚ ì§œì— ì˜¬ë¼ì˜¨ ê·¸ë¦¼ì„ ë³´ë ¤ë©´, 날짜를 ì°ì–´ 주세요</i>.",
"imagelinks" => "그림고리",
"linkstoimage" => "ë‹¤ìŒ ë¬¸ì„œë“¤ì´ ì´ ê·¸ë¦¼ì„ ë‹´ê³  있습니다:",
"nolinkstoimage" => "ì´ ê·¸ë¦¼ì„ ë‹´ê³  있는 문서는 없습니다.",
@@ -631,9 +631,9 @@ $1ì˜ ì¡°ê±´ìœ¼ë¡œ ì‚¬ìš©ì„ í—ˆê°€í–ˆìŒì„ 확ì¸í•©ë‹ˆë‹¤.",
"maintenancebacklink" => "Back to Maintenance Page",
"disambiguations" => "Disambiguation pages",
"disambiguationspage" => "{{ns:4}}: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.",
+"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.",
+"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.",
"selflinks" => "Pages with Self Links",
"selflinkstext" => "The following pages contain a link to themselves, which they should not.",
"missinglanguagelinks" => "Missing Language Links",
@@ -795,7 +795,7 @@ pages that were vandalized).",
"noblockreason" => "You must supply a reason for the block.",
"blockipsuccesssub" => "Block succeeded",
"blockipsuccesstext" => "The IP address \"$1\" has been blocked.
-<br>See [[특수기능:Ipblocklist|IP block list]] to review blocks.",
+<br />See [[특수기능: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.",
@@ -828,7 +828,7 @@ Please confirm that this is what you intend to do.",
"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.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
# SQL query
diff --git a/languages/LanguageLatin1.php b/languages/LanguageLatin1.php
index e031007e4d82..70329c250b0f 100644
--- a/languages/LanguageLatin1.php
+++ b/languages/LanguageLatin1.php
@@ -263,6 +263,14 @@ class LanguageLatin1 {
return $this->lang->getPreferredVariant();
}
+ function segmentForDiff( $text ) {
+ return $text;
+ }
+
+ function unsegmentForDiff( $text ) {
+ return $text;
+ }
+
function convert( $text, $isTitle=false ) {
return utf8_decode( $this->lang->convert( utf8_encode( $text ), $isTitle ) );
}
@@ -284,6 +292,10 @@ class LanguageLatin1 {
function convertForSearchResult( $termsArray ) {
return $termsArray;
}
+
+ function getExtraHashOptions() {
+ return array();
+ }
}
?>
diff --git a/languages/LanguageLi.php b/languages/LanguageLi.php
index 30d7d1c790ad..bbf40287f458 100644
--- a/languages/LanguageLi.php
+++ b/languages/LanguageLi.php
@@ -255,11 +255,11 @@ U kan Wikipedia anoniem blijven gebruiken, of u opnieuw aanmelden onder dezelfde
"yourpasswordagain" => "Wachtwoord opnieuw ingeven",
"newusersonly" => " (alleen nieuwe gebroekers)",
"remembermypassword" => "mien wachtwoord onthouden voor latere sessies.",
-"loginproblem" => "<b>Er is een probleem met het aanmelden.</b><br>Probeer het opnieuw a.u.b.",
-"alreadyloggedin" => "<font color=red><b>gebroeker $1, u bent al aangemeld.</b></font><br>\n",
+"loginproblem" => "<b>Er is een probleem met het aanmelden.</b><br />Probeer het opnieuw a.u.b.",
+"alreadyloggedin" => "<font color=red><b>gebroeker $1, u bent al aangemeld.</b></font><br />\n",
"areyounew" => "Bent u nieuw op Wikipedia en wilt u een gebroekersprofiel aanmaken, voer dan een gebroekersnaam in en voer tweemaal hetzelfde wachtwoord in.
-Invoeren van uw e-mailadres is neet verplicht; het is handig als u uw wachtwoord bent vergeten; dat kan dan per e-mail worden opgestuurd.<br>\n",
+Invoeren van uw e-mailadres is neet verplicht; het is handig als u uw wachtwoord bent vergeten; dat kan dan per e-mail worden opgestuurd.<br />\n",
"login" => "Aanmelden",
"userlogin" => "Aanmelden",
@@ -293,7 +293,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"preview" => "Noakieke",
"showpreview" => "Toon bewerking ter controle",
"blockedtitle" => "gebroeker is geBlokkierd",
-"blockedtext" => "Uw gebroekersnaam of IP-adres is door $1 geBlokkierd. De opgegeven reden:<br>$2<p>. U kunt voor euverlik contact opnemen met de [[Wikipedia:Systeembeheerders|systeembeheerders]].",
+"blockedtext" => "Uw gebroekersnaam of IP-adres is door $1 geBlokkierd. De opgegeven reden:<br />$2<p>. U kunt voor euverlik contact opnemen met de [[Wikipedia:Systeembeheerders|systeembeheerders]].",
"newarticle" => "(Nieuw)",
"newarticletext" => "Verwijder dit en beschrijf hier de nieuwe pagina.",
"noarticletext" => "(Deze pagina bevat momenteel geen tekst)",
@@ -308,7 +308,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"storedversion" => "Opgesjlage versie",
"editingold" => "<strong>WAARSCHUWING: U bent bezig een oude versie van deze pagina te bewerken. Wanneer u uw bewerking opslaat, gaan alle wijzigingen die na deze versie gedaan zijn verloren.\n.</strong>\n",
"yourdiff" => "Wijzigingen",
-"copyrightwarning" => "Opgelet: Alle bijdragen aan Wikipedia worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u neet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan neet voor 'Pagina Opslaan'.<br> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
+"copyrightwarning" => "Opgelet: Alle bijdragen aan Wikipedia worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u neet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan neet voor 'Pagina Opslaan'.<br /> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br /> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
# History pages
@@ -354,8 +354,8 @@ Gelieve na ontvangst opnieuw aan te melden.",
"nonefound" => "<strong>Merk op:</strong> wanneer een zoekopdracht mislukt komt dat vaak door gebruik van (in het Engels) veel voorkomende woorden zoals \"of\" en \"be\", die neet geïndexeerd zijn, of door verschillende zoektermen tegelijk op te geven (u krijgt dan alleen in pagina's waaarin alle opgegeven termen voorkomen).",
"powersearch" => "Zoeken",
"powersearchtext" => "
- Zoek in naamruimten :<br>
-$1<br>
+ Zoek in naamruimten :<br />
+$1<br />
$2 Toon redirects Zoek: $3 $9",
# Preferences page
@@ -395,7 +395,7 @@ $2 Toon redirects Zoek: $3 $9",
"recentchangestext" => "Deze pagina toont de meest recente wijzigingen aan Wikipedia.
Mocht u hier nieuw zijn, dan welkom bij Wikipedia! Bekijk AUB de volgende pagina's eens: [[Wikipedia:Veel gestelde vragen|Veel gestelde vragen]], [[Wikipedia:Instructies|Instructies]], [[Wikipedia:Objectiviteit|Objectiviteit]] en [[Wikipedia:Wat je neet moet doen|Wat je NIET moet doen]].
Als u pagina's wilt verwijderen, ga naar [[Wikipedia:Te verwijderen pagina's|Te verwijderen pagina's]], als u iets wilt bediscussiëren, ga naar [[Wikipedia:euverlik gewenst|euverlik gewenst]]. Er is ook een email-liest voor WikipediaNL: [http://www.wikipedia.org/mailman/listinfo/wikinl-l WikiNL-l].
-<br>Om Wikipedia te laten slagen is het erg belangrijk '''geen''' materiaal toe te voegen waarop iemand anders auteursrechten heeft, tenzij u daartoe toestemming heeft. De wettelijke gevolgen van inbreuk op de rechten van anderen zouden de hele onderneming zwaar kunnen schaden.",
+<br />Om Wikipedia te laten slagen is het erg belangrijk '''geen''' materiaal toe te voegen waarop iemand anders auteursrechten heeft, tenzij u daartoe toestemming heeft. De wettelijke gevolgen van inbreuk op de rechten van anderen zouden de hele onderneming zwaar kunnen schaden.",
"rcloaderr" => "Meest recente wijzigingen laden",
"rcnote" => "Hieronder zijn de <strong>$1</strong> laatste wijzigingen gedaan in de laatste <strong>$2</strong> dagen.",
"rcnotefrom" => "Veranderingen sinds <b>$2</b> (met een maximum van <b>$1</b> veranderingen).",
@@ -479,7 +479,7 @@ Geef uw bestanden een duidelijk omschrijvende naam om verwarring te voorkomen. O
"imghistory" => "Geschiedenis van de afbeelding",
"revertimg" => "rev",
"deleteimg" => "verw",
-"imghistlegend" => "Verklaring: (cur)= huidige afbeelding, (verw) = verwijder de oude versie, (rev) = breng oude versie terug.<br>
+"imghistlegend" => "Verklaring: (cur)= huidige afbeelding, (verw) = verwijder de oude versie, (rev) = breng oude versie terug.<br />
<i>Klik op de datum om de afbeeldingen die ge-upload zijn op die datum te zien</i>.",
"imagelinks" => "Afbeeldingsverwijzingen",
"linkstoimage" => "Deze afbeelding wordt gebruikt op de volgende pagina's:",
@@ -501,9 +501,9 @@ Er is in totaal $3 maal een pagina bekeken, en $4 maal een pagina bewerkt. Dat g
"maintenancebacklink" => "Terug naar de Onderhoudspagina",
"disambiguations" => "Doorverwijspagina's",
"disambiguationspage" => "Wikipedia:Doorverwijspagina",
-"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[Wikipedia:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br>Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br>Opmerking: Deze liest toont alleen pagina's vanuit de hoofdnaamruimte, en dus neet euverlikpagina's, Wikipedia:pagina's en dergelijke.",
+"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[Wikipedia:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br />Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br />Opmerking: Deze liest toont alleen pagina's vanuit de hoofdnaamruimte, en dus neet euverlikpagina's, Wikipedia:pagina's en dergelijke.",
"doubleredirects" => "Dubbele redirects",
-"doubleredirectstext" => "<b>Let op:</b> Er kunnen in deze liest redirects staan die er neet in thuishoren. Dat komt over het algemeen doordat er na de #REDIRECT nog andere links op de pagina staan.<br>\nOp elke regel vindt u de eerste redirectpagina, de tweede redirectpagina en de eerste regel van de tweede redirectpagina. Normaal gesproken bevat deze laatste de pagina waar de eerste redirect naartoe zou moeten verwijzen.",
+"doubleredirectstext" => "<b>Let op:</b> Er kunnen in deze liest redirects staan die er neet in thuishoren. Dat komt over het algemeen doordat er na de #REDIRECT nog andere links op de pagina staan.<br />\nOp elke regel vindt u de eerste redirectpagina, de tweede redirectpagina en de eerste regel van de tweede redirectpagina. Normaal gesproken bevat deze laatste de pagina waar de eerste redirect naartoe zou moeten verwijzen.",
"brokenredirects" => "Gebroken redirects",
"brokenredirectstext" => "De onderstaande redirectpagina's bevatten een redirect naar een neet-bestaande pagina.",
"selflinks" => "Pagina's die naar zichzelf verwijzen",
@@ -652,7 +652,7 @@ Ook zullen deze pagina's in het <b>vet</b> verschijnen in de <a href=\"" .
"badipaddress" => "Het IP-adres heeft een ongeldige opmaak.",
"noblockreason" => "U dient een reden op te geven voor het blokkeren van een IP-adres.",
"blockipsuccesssub" => "Blokkering gelukt",
-"blockipsuccesstext" => "Het IP-adres \"$1\" is geBlokkierd.<br>
+"blockipsuccesstext" => "Het IP-adres \"$1\" is geBlokkierd.<br />
Zie de [[speciaal:Ipblocklist|liest van geBlokkierde IP-adressen]].",
"unblockip" => "De-Blokkier IP-adres",
"unblockiptext" => "Gebroek het onderstaande formulier om terug schrijftoegang te geven aan een geBlokkierd IP-adres.",
@@ -707,7 +707,7 @@ te zijn om een pagina te verplaatsen.",
"movepagebtn" => "Verplaatsj pagina",
"pagemovedsub" => "De verplaatsjing is gelukt",
"pagemovedtext" => "Pagina \"[[$1]]\" verplaatst naar \"[[$2]]\".",
-"articleexists" => "D'r is al un pagina mit deze titel of de titel is ongeldig. <br>Gelieve een andere titel te kiezen.",
+"articleexists" => "D'r is al un pagina mit deze titel of de titel is ongeldig. <br />Gelieve een andere titel te kiezen.",
"talkexists" => "De pagina zelf is verplaatst, maar de euverlikpagina kon neet worden verplaatst, omdat de doeltitel al een neet-lege euverlikpagina had. Combineer de euverlikpagina's a.u.b. handmatig.",
"movedto" => "verplaatsjt noa",
"movetalk" => "Verplaatsj \"euverlik\" pagina auch indien aanwezig.",
diff --git a/languages/LanguageLt.php b/languages/LanguageLt.php
index 0b31f165a307..f07c75918d5e 100644
--- a/languages/LanguageLt.php
+++ b/languages/LanguageLt.php
@@ -289,7 +289,7 @@ ir kad jūs tai darote nenusižengdamas
'copyrightpagename' => "Wikipedia copyright",
'copyrightwarning' => "Atkreipkite dėmesį, kad viskam, kas patenka į Wikipediją, yra taikoma GNU Laisvos Documentacijos Licenzija
(detaliau - $1).
-Jei nepageidaujate, kad jÅ«sų įvestas turinys bÅ«tų negailestingai redaguojamas ir platinamas, neraÅ¡ykite Äia.<br>
+Jei nepageidaujate, kad jÅ«sų įvestas turinys bÅ«tų negailestingai redaguojamas ir platinamas, neraÅ¡ykite Äia.<br />
JÅ«s taip pat pasižadate, kad tai jÅ«sų paÄių raÅ¡ytas turinys arba kopijuotas iÅ¡ viešų ar panaÅ¡ių nemokamų Å¡altinių.
<strong>NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!</strong>",
#'couldntremove' => "Couldn't remove item '$1'...",
@@ -436,7 +436,7 @@ border=\"0\" ALT=\"Google\"></A>
'hide' => "paslÄ—pti",
'hidetoc' => "slÄ—pti",
'hist' => "ist",
-/*#'histlegend' => "Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br/>
+/*#'histlegend' => "Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br />
Legend: (cur) = difference with current version,
(last) = difference with preceding version, M = minor edit.",*/
'history' => "Straipsnio istorija",
@@ -529,7 +529,7 @@ unlock the database when your maintenance is done.",*/
'loginsuccesstitle' => "SÄ—kmingai prisijungÄ—te",
'logout' => "Atsijungti",
'logouttext' => "JÅ«s atsijungÄ—te nuo Wikipedijos.
-Galite toliau naudoti WikipedijÄ… anonimiÅ¡kai arba prisijunkite iÅ¡ naujo tuo paÄiu ar kitu vartotoju.<br>
+Galite toliau naudoti WikipedijÄ… anonimiÅ¡kai arba prisijunkite iÅ¡ naujo tuo paÄiu ar kitu vartotoju.<br />
P.S.: kai kuriuose puslapiuose ir toliau gali rodyti lyg būtumėte prisijungęs iki tol, kol išvalysite savo naršyklės išsaugotas puslapių kopijas",
#'logouttitle' => "User logout",
'lonelypages' => "Vieniši straipsniai",
@@ -746,7 +746,7 @@ Search in namespaces :<br />
$1<br />
$2 List redirects &nbsp; Search for $3 $9",*/
'preferences' => "Nustatymai",
-'prefs-help-userdata' => "* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br/>
+'prefs-help-userdata' => "* <strong>Real name</strong> (optional): if you choose to provide it this will be used for giving you attribution for your work.<br />
* <strong>Email</strong> (optional): Enables people to contact you through the website without you having to reveal your
email address to them, and it can be used to send you a new password if you forget it.",
#'prefs-misc' => "Misc settings",
diff --git a/languages/LanguageMs.php b/languages/LanguageMs.php
index e529e0324dfd..df9b4c1cfcbd 100644
--- a/languages/LanguageMs.php
+++ b/languages/LanguageMs.php
@@ -313,13 +313,13 @@ Sila kemaskini konfigurasi butir-butir diri anda.", #"<h2>Welcome, $1!</h2><p>Yo
"yourpasswordagain" => "Ulang Kata Laluan", #Retype password",
"newusersonly" => "(Hanya pengguna baru)", # (new users only)",
"remembermypassword" => "Sentiasa ingatan kata laluan.", # Remember my password across sessions.",
-"loginproblem" => "<b>Terdapat masalah dengan data kemasukan.</b><br>Cuba semula!", # There has been a problem with your login.</b><br>Try again!",
-"alreadyloggedin" => "<font color=red><b>Pengguna $1, anda telah berjaya masuk!</b></font><br>\n",
+"loginproblem" => "<b>Terdapat masalah dengan data kemasukan.</b><br />Cuba semula!", # There has been a problem with your login.</b><br />Try again!",
+"alreadyloggedin" => "<font color=red><b>Pengguna $1, anda telah berjaya masuk!</b></font><br />\n",
"areyounew" =>"Sekiranya anda baru dalam Wikipedia dan ingin mendapatkan akaun pengguna,
masukan nama pengguna, kemudia taip kata laluan dan ulang semula kata laluan.
Alamat email anda adalah tidak diwajibkan;sekiranya kehilangan kata laluan
-boleh diminta melalui email yg diberikan.<br>\n",
+boleh diminta melalui email yg diberikan.<br />\n",
"login" => "Masuk", #Log in
"userlogin" => "Laluan masuk", #Log in
@@ -363,7 +363,7 @@ Sila masuk setelah menerima email tersebut.", #Please log in again after you rec
"showpreview" => "Tunjuk Paparan", #"Show preview",
"blockedtitle" => "Pengguna diblok", #"User is blocked",
"blockedtext" => "Kata nama anda atau alamat IP telah diblok oleh $1.
-Alasannya kerana :<br>$2<p>Anda boleh menghubungi sistem admin untuk
+Alasannya kerana :<br />$2<p>Anda boleh menghubungi sistem admin untuk
membincangkan sebab-sebabnya.",
"newarticle" => "(Baru)", #"(New)",
"newarticletext" =>
@@ -467,8 +467,8 @@ yang mana bukan dalam senarai indeks atau dengan dikhususkan lebih dari
satu istilah carian(hanya halaman).", # "<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" => "Cari", #"Search",
"powersearchtext" => "
-Search in namespaces :<br>
-$1<br>
+Search in namespaces :<br />
+$1<br />
$2 List redirects &nbsp; Search for $3 $9",
@@ -617,7 +617,7 @@ oleh siapa, dan lain-lain yang anda ketahui.",
"deleteimgcompletely" => "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>.",
+<br /><i>Click on date to see image uploaded on that date</i>.",
"imagelinks" => "Pautan imej", #"Image links",
"linkstoimage" => "Halaman berikut berpaut pada imej ini:", #"The following pages link to this image:",
"nolinkstoimage" => "Tiada halaman yang berpaut pada imej ini.", #"There are no pages that link to this image.",
@@ -645,9 +645,9 @@ Ini menjadikan <b>$5</b> purata halaman yang disunting, dan <b>$6</b> paparan ya
"maintenancebacklink" => "Kembali ke halaman penyelenggaran", #"Back to Maintenance Page",
"disambiguations" => "Halaman yang tidak samar", #"Disambiguation pages",
"disambiguationspage" => "Wikipedia:Pautan_ke_halaman_yang_tidak_samar", #"Wikipedia:Links_to_disambiguating_pages",
-"disambiguationstext" => "Halaman-halaman yang berikutnya bersambung ke satu <i>halaman yang tidak samar</i>. Halaman-halaman tersebut sepatutnya bersambung ke topik-topik yang berkenaan.<br>Satu halaman dianggap sebagai tidak samar jika ia disambung dari $1.<br>Pautan dari ruang nama yang lain <i>tidak</i> tersenarai di sini.",
+"disambiguationstext" => "Halaman-halaman yang berikutnya bersambung ke satu <i>halaman yang tidak samar</i>. Halaman-halaman tersebut sepatutnya bersambung ke topik-topik yang berkenaan.<br />Satu halaman dianggap sebagai tidak samar jika ia disambung dari $1.<br />Pautan dari ruang nama yang lain <i>tidak</i> tersenarai di sini.",
"doubleredirects" => "Peralihan Halaman Berganda", #"Double Redirects",
-"doubleredirectstext" => "<b>Perhatian:</b> Senarai ini mungkin tidak tepat. Ini biasanya bermaksud terdapat tambahan teks dengan pautan di bawah #REDIRECT yang pertama.<br>\nSetiap baris mengandungi pautan kepada peralihan halaman yang pertama dan kedua, sebagaimana baris pertama bagi teks peralihan halaman kedua, biasanya memberikan halaman sasaran \"sebenar\" yang sepatutnya peralihan pertama disambungkan.",
+"doubleredirectstext" => "<b>Perhatian:</b> Senarai ini mungkin tidak tepat. Ini biasanya bermaksud terdapat tambahan teks dengan pautan di bawah #REDIRECT yang pertama.<br />\nSetiap baris mengandungi pautan kepada peralihan halaman yang pertama dan kedua, sebagaimana baris pertama bagi teks peralihan halaman kedua, biasanya memberikan halaman sasaran \"sebenar\" yang sepatutnya peralihan pertama disambungkan.",
"brokenredirects" => "Peralihan Halaman Rosak", #"Broken Redirects",
"brokenredirectstext" => "Peralihan halaman berikut bersambung ke satu halaman yang tidak wujud", #"The following redirects link to a non-existing page.",
"selflinks" => "Halaman-halaman dengan pautan sendiri", #"Pages with Self Links",
@@ -844,7 +844,7 @@ halaman tertentu yang telah dirosakkan).",
"noblockreason" => "Anda mesti sediakan alasan untuk pemblokan tersebut.", #"You must supply a reason for the block.",
"blockipsuccesssub" => "Pemblokan berjaya", #"Block succeeded",
"blockipsuccesstext" => "Alamat IP atau pengguna \"$1\" telah diblok.
-<br>Lihat [[Istimewa:Ipblocklist|IP and user block list]] untuk semak pemblokan.", #"The IP address or username \"$1\" has been blocked.
+<br />Lihat [[Istimewa:Ipblocklist|IP and user block list]] untuk semak pemblokan.", #"The IP address or username \"$1\" has been blocked.
"unblockip" => "Lepaskan semula alamat IP atau pengguna dari diblok", #"Unblock IP address or user",
"unblockiptext" => "Gunakan borang di bawah untuk masukkan semula
capaian kemaskini ke alamat IP atau pengguna yang telah diblok sebelumnya.",
@@ -877,7 +877,7 @@ kemaskini terhadap pangkalan data. Sila pastikan anda mahu berbuat demikian.",
"lockdbsuccesssub" => "Penguncian pangkalan data berjaya", #"Database lock succeeded",
"unlockdbsuccesssub" => "Kunci pangkalan data telah dihapuskan", #"Database lock removed",
"lockdbsuccesstext" => "Pangkalan data Wikipedia telah dikunci.
-<br>Pastikan anda membukanya semula dari dikunci setelah penyelenggaraan selesai.",
+<br />Pastikan anda membukanya semula dari dikunci setelah penyelenggaraan selesai.",
"unlockdbsuccesstext" => "Pangkalan data Wikipedia telah dibuka semula dari dikunci.", #"The Wikipedia database has been unlocked.",
# SQL query
diff --git a/languages/LanguageNl.php b/languages/LanguageNl.php
index 700aca95482d..728ad743eb80 100644
--- a/languages/LanguageNl.php
+++ b/languages/LanguageNl.php
@@ -301,8 +301,8 @@ U kunt {{SITENAME}} anoniem blijven gebruiken, of u opnieuw aanmelden onder deze
"yourpasswordagain" => "Wachtwoord opnieuw ingeven",
"newusersonly" => " (alleen nieuwe gebruikers)",
"remembermypassword" => "Mijn wachtwoord onthouden voor latere sessies.",
-"loginproblem" => "<b>Er is een probleem met het aanmelden.</b><br>Probeer het opnieuw a.u.b.",
-"alreadyloggedin" => "<font color=red><b>Gebruiker $1, u bent al aangemeld.</b></font><br>\n",
+"loginproblem" => "<b>Er is een probleem met het aanmelden.</b><br />Probeer het opnieuw a.u.b.",
+"alreadyloggedin" => "<font color=red><b>Gebruiker $1, u bent al aangemeld.</b></font><br />\n",
"login" => "Aanmelden & Inschrijven",
"userlogin" => "Aanmelden",
@@ -315,7 +315,7 @@ U kunt {{SITENAME}} anoniem blijven gebruiken, of u opnieuw aanmelden onder deze
"userexists" => "De gebruikersnaam die u heeft ingevoerd is al in gebruik. Gelieve een andere naam te kiezen.",
"youremail" => "Uw e-mailadres",
"yournick" => "Uw bijnaam (voor handtekeningen)",
-"emailforlost" => "Het opgeven van een e-mailadres is niet verplicht.<br>Enkel als er een email-adres beschikbaar is, kunt u een nieuw wachtwoord aanvragen indien u het oude vergeten bent.<br>Een emailadres geeft andere gebruikers de mogelijkheid u een email te sturen via een formulier. U kunt die functie eventueel uitzetten via de voorkeuren.",
+"emailforlost" => "Het opgeven van een e-mailadres is niet verplicht.<br />Enkel als er een email-adres beschikbaar is, kunt u een nieuw wachtwoord aanvragen indien u het oude vergeten bent.<br />Een emailadres geeft andere gebruikers de mogelijkheid u een email te sturen via een formulier. U kunt die functie eventueel uitzetten via de voorkeuren.",
"loginerror" => "Inlogfout",
"noname" => "U dient een gebruikersnaam op te geven.",
"loginsuccesstitle" => "Aanmelden gelukt.",
@@ -339,7 +339,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"preview" => "Nakijken",
"showpreview" => "Toon bewerking ter controle",
"blockedtitle" => "Gebruiker is geblokkeerd",
-"blockedtext" => "Uw gebruikersnaam of IP-adres is door $1 geblokkeerd. De opgegeven reden:<br>$2<p>. Elke computer die verbonden is met het internet krijgt een [[ip-adres]] toegewezen van zijn [[internetprovider]]. In veel gevallen krijgt een gebruiker regelmatig een ander ip-adres toegewezen. Het het door u gebruikte ip-adres is recent gebruikt door u of iemand anders voor bewerkingen die in overtreding zijn van de [[{{ns:4}}:Toch een paar regels|regels]] van {{SITENAME}}.<p>U kunt voor overleg contact opnemen met de [[{{ns:4}}:Systeembeheerders|systeembeheerders]] via [http://wikinl.sol3.info/wikinl_info.html#email wikinl-l-owner@wikipedia.org een formulier].",
+"blockedtext" => "Uw gebruikersnaam of IP-adres is door $1 geblokkeerd. De opgegeven reden:<br />$2<p>. Elke computer die verbonden is met het internet krijgt een [[ip-adres]] toegewezen van zijn [[internetprovider]]. In veel gevallen krijgt een gebruiker regelmatig een ander ip-adres toegewezen. Het het door u gebruikte ip-adres is recent gebruikt door u of iemand anders voor bewerkingen die in overtreding zijn van de [[{{ns:4}}:Toch een paar regels|regels]] van {{SITENAME}}.<p>U kunt voor overleg contact opnemen met de [[{{ns:4}}:Systeembeheerders|systeembeheerders]] via [http://wikinl.sol3.info/wikinl_info.html#email wikinl-l-owner@wikipedia.org een formulier].",
"whitelistedittitle" => "Aanmelden verplicht",
"whitelistedittext" => "Om dit artikel te kunnen wijzigen, moet u [[Speciaal:Userlogin|ingelogd]] zijn.",
"whitelistreadtitle" => "Aanmelden verplicht",
@@ -349,7 +349,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"accmailtitle" => "Wachtwoord verzonden.",
"accmailtext" => "Het wachtwoord voor '$1' is verzonden naar $2.",
"newarticle" => "(Nieuw)",
-"newarticletext" => "Er bestaat nog geen artikel over dit onderwerp.<br>Als u wilt, kunt u hieronder een nieuw artikel schrijven.<br>Was dit niet de bedoeling, gebruik dan de 'Terug' knop van uw browser.<p>WAARSCHUWING: Let er goed op dat uw tekst vrij van auteursrechten is, bijvoorbeeld omdat u het zelf geschreven heeft. Neem geen teksten over uit boeken, tijdschriften of andere websites tenzij u zeker weet dat deze vrij van auteursrechten zijn.",
+"newarticletext" => "Er bestaat nog geen artikel over dit onderwerp.<br />Als u wilt, kunt u hieronder een nieuw artikel schrijven.<br />Was dit niet de bedoeling, gebruik dan de 'Terug' knop van uw browser.<p>WAARSCHUWING: Let er goed op dat uw tekst vrij van auteursrechten is, bijvoorbeeld omdat u het zelf geschreven heeft. Neem geen teksten over uit boeken, tijdschriften of andere websites tenzij u zeker weet dat deze vrij van auteursrechten zijn.",
"anontalkpagetext" => "<hr>Deze overlegpagina hoort bij een anonieme gebruiker die hetzij geen loginnaam heeft, hetzij deze niet gebruikt. We gebruiken daarom het IP-adres ter identificatie. Het kan echter zijn dat meerdere personen hetzelfde IP-adres gebruiken. Het kan daarom zijn dat u hier berichten ontvangt die niet voor u bedoeld zijn. Mocht u dat willen voorkomen, dan kunt u [[Speciaal:Userlogin|een gebruikersnaam aanvragen of u aanmelden]].",
"noarticletext" => "(Deze pagina bevat momenteel geen tekst)",
"updated" => "(Bijgewerkt)",
@@ -365,7 +365,7 @@ Gelieve na ontvangst opnieuw aan te melden.",
"storedversion" => "Opgeslagen versie",
"editingold" => "<strong>WAARSCHUWING: U bent bezig een oude versie van deze pagina te bewerken. Wanneer u uw bewerking opslaat, gaan alle wijzigingen die na deze versie gedaan zijn verloren.\n.</strong>\n",
"yourdiff" => "Wijzigingen",
-"copyrightwarning" => "Opgelet: Alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u niet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor 'Pagina Opslaan'.<br> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
+"copyrightwarning" => "Opgelet: Alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de GNU Free Documentation License. Als u niet wil dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor 'Pagina Opslaan'.<br /> Hierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven, of overgenomen uit een vrije, openbare bron.<br /> <strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARTOE TOESTEMMING HEBT!</strong>",
"longpagewarning" => "Waarschuwing! Deze pagina is $1 kilobyte lang. Pagina's langer dan 32 kb zorgen voor problemen op sommige browsers. Het is daarom waarschijnlijk een goed idee deze pagina in meerdere pagina's te splitsen.",
"readonlywarning" => "Waarschuwing! De database is op dit moment in onderhoud; het is daarom niet mogelijk op dit moment pagina's te wijzigen. Wij adviseren u de tekst op uw eigen computer op te slaan en later opnieuw te proberen deze pagina te bewerken.",
"protectedpagewarning" => "Waarschuwing! U staat op het punt een beveiligde pagina te wijzigen. Gewone gebruikers kunnen deze pagina niet bewerken.",
@@ -416,12 +416,12 @@ Het kan natuurlijk dat er gewoon nog geen artikel aanwezig op {{SITENAME}} NL ov
",
"powersearch" => "Zoeken",
"powersearchtext" => "
- Zoek in naamruimten :<br>
-$1<br>
+ Zoek in naamruimten :<br />
+$1<br />
$2 Toon redirects &nbsp; Zoek: $3 $9",
"searchdisabled" => "Wegens een overbelasting van de server zijn sommige functies die het systeem extra belasten tijdelijk niet beschikbaar.
Hierdoor is in de interne zoekfunctie van {{SITENAME}} (vermoedelijk) niet beschikbaar voor onbepaalde duur.<p>
-Via google kunt u zoeken op {{SITENAME}}. <br>
+Via google kunt u zoeken op {{SITENAME}}. <br />
<form method=\"get\" action=\"http://www.google.com/search\">
<table bgcolor=\"#ffffff\" style=\"width: 752px; height: 76px;\"><tbody><tr><td>
<a href=\"http://www.google.com/\">
@@ -431,7 +431,7 @@ Via google kunt u zoeken op {{SITENAME}}. <br>
<input type=\"text\" name=\"q\" size=\"31\" maxlength=\"255\" value=\"\">
<input type=\"submit\" name=\"btnG\" value=\"Met Google zoeken in {{SITENAME}}\">
<font size=\"-1\">
-<input type=\"hidden\" name=\"domains\" value=\"http://nl.wikipedia.org\"><br><input type=\"radio\" name=\"sitesearch\" value=\"\">Het volledige internet<input type=\"radio\" name=\"sitesearch\" value=\"http://nl.wikipedia.org\" checked=\"checked\">{{SITENAME}} NL<br>
+<input type=\"hidden\" name=\"domains\" value=\"http://nl.wikipedia.org\"><br /><input type=\"radio\" name=\"sitesearch\" value=\"\">Het volledige internet<input type=\"radio\" name=\"sitesearch\" value=\"http://nl.wikipedia.org\" checked=\"checked\">{{SITENAME}} NL<br />
</font>
</td></tr></tbody></table>
</form>
@@ -490,7 +490,7 @@ Een beschrijving van de verschillende opties staat op [[{{ns:4}}:Voorkeuren]].",
# Recente wijzigingen
"changes" => "wijzigingen",
"recentchanges" => "Recente wijzigingen",
-"recentchangestext" => "Deze pagina toont de laatste aanpassingen aan artikelen van {{SITENAME}} NL. <br>
+"recentchangestext" => "Deze pagina toont de laatste aanpassingen aan artikelen van {{SITENAME}} NL. <br />
Ben je hier nieuw? Lees dan ook [[{{ns:4}}:Welkom voor nieuwelingen|Welkom voor nieuwelingen]] -- Wil je een pagina verwijderd hebben? Ga dan naar [[{{ns:4}}:Te verwijderen pagina's|Te verwijderen pagina's]] -- Wil je iets met andere gebruikers overleggen? Ga naar [[{{ns:4}}:Overleg gewenst|Overleg gewenst]] of meld je aan voor de discussielijst [http://mail.wikipedia.org/mailman/listinfo/wikinl-l WikiNL-l] -- Zin in een gezellige babbel? Kom naar de [[{{ns:4}}:De kroeg|De kroeg]] of doe mee op ons nieuwe [http://chat.wikipedia.be Wiki-chatkanaal].<p>
Om {{SITENAME}} te laten slagen is het erg belangrijk geen materiaal toe te voegen waarop iemand anders auteursrechten heeft, tenzij je daartoe toestemming hebt. De wettelijke gevolgen van inbreuk op de rechten van anderen zouden de hele onderneming grote schade kunnen toebrengen.",
"rcloaderr" => "Meest recente wijzigingen laden",
@@ -584,7 +584,7 @@ Vergeet niet dat net als met andere pagina's op {{SITENAME}} anderen de ge-uploa
"revertimg" => "rev",
"deleteimg" => "verw",
"deleteimgcompletely" => "verw",
-"imghistlegend" => "Verklaring: (cur)= huidige afbeelding, (verw) = verwijder de oude versie, (rev) = breng oude versie terug.<br>
+"imghistlegend" => "Verklaring: (cur)= huidige afbeelding, (verw) = verwijder de oude versie, (rev) = breng oude versie terug.<br />
<i>Klik op de datum om de afbeeldingen die ge-upload zijn op die datum te zien</i>.",
"imagelinks" => "Afbeeldingsverwijzingen",
"linkstoimage" => "Deze afbeelding wordt gebruikt op de volgende pagina's:",
@@ -606,9 +606,9 @@ Er is in totaal $3 maal een pagina bekeken, en $4 maal een pagina bewerkt. Dat g
"maintenancebacklink" => "Terug naar de Onderhoudspagina",
"disambiguations" => "Doorverwijspagina's",
"disambiguationspage" => "{{ns:4}}:Doorverwijspagina",
-"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[{{ns:4}}:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br>Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br>Opmerking: Deze lijst toont alleen pagina's vanuit de hoofdnaamruimte, en dus niet Overlegpagina's, {{ns:4}}:pagina's en dergelijke.",
+"disambiguationstext" => "De onderstaande artikelen verwijzen naar een [[{{ns:4}}:Doorverwijspagina|doorverwijspagina]]. Deze zouden waarschijnlijk direct naar de onderwerpspagina moeten verwijzen. <br />Als doorverwijspagina's worden die pagina's beschouwd waar vanaf $1 naar verwezen wordt.<br />Opmerking: Deze lijst toont alleen pagina's vanuit de hoofdnaamruimte, en dus niet Overlegpagina's, {{ns:4}}:pagina's en dergelijke.",
"doubleredirects" => "Dubbele redirects",
-"doubleredirectstext" => "<b>Let op:</b> Er kunnen in deze lijst redirects staan die er niet in thuishoren. Dat komt over het algemeen doordat er na de #REDIRECT nog andere links op de pagina staan.<br>\nOp elke regel vindt u de eerste redirectpagina, de tweede redirectpagina en de eerste regel van de tweede redirectpagina. Normaal gesproken bevat deze laatste de pagina waar de eerste redirect naartoe zou moeten verwijzen.",
+"doubleredirectstext" => "<b>Let op:</b> Er kunnen in deze lijst redirects staan die er niet in thuishoren. Dat komt over het algemeen doordat er na de #REDIRECT nog andere links op de pagina staan.<br />\nOp elke regel vindt u de eerste redirectpagina, de tweede redirectpagina en de eerste regel van de tweede redirectpagina. Normaal gesproken bevat deze laatste de pagina waar de eerste redirect naartoe zou moeten verwijzen.",
"brokenredirects" => "Gebroken redirects",
"brokenredirectstext" => "De onderstaande redirectpagina's bevatten een redirect naar een niet-bestaande pagina.",
"selflinks" => "Pagina's die naar zichzelf verwijzen",
@@ -782,7 +782,7 @@ op 'Verwijderen' onderaan deze pagina.",
"badipaddress" => "Geen bestaande gebruikersnaam of geldig IP-adres",
"noblockreason" => "U dient een reden op te geven voor het blokkeren van een gebruiker.",
"blockipsuccesssub" => "Blokkering gelukt",
-"blockipsuccesstext" => "\"$1\" is geblokkeerd.<br>
+"blockipsuccesstext" => "\"$1\" is geblokkeerd.<br />
Zie de [[speciaal:Ipblocklist|Lijst van geblokkeerde IP-adressen]].",
"unblockip" => "De-blokkeer gebruiker",
"unblockiptext" => "Gebruik het onderstaande formulier om terug schrijftoegang te geven aan een geblokkeerde gebruiker of IP-adres.",
@@ -839,7 +839,7 @@ te zijn om een pagina te verplaatsen.",
"movepagebtn" => "Verplaats pagina",
"pagemovedsub" => "De verplaatsing was succesvol",
"pagemovedtext" => "Pagina \"[[$1]]\" is verplaatst naar \"[[$2]]\".",
-"articleexists" => "Er is reeds een pagina met deze titel of de titel is ongeldig. <br>Gelieve een andere titel te kiezen.",
+"articleexists" => "Er is reeds een pagina met deze titel of de titel is ongeldig. <br />Gelieve een andere titel te kiezen.",
"talkexists" => "De pagina zelf is verplaatst, maar de Overlegpagina kon niet worden verplaatst, omdat de doeltitel al een niet-lege overlegpagina had. Combineer de overlegpagina's a.u.b. handmatig.",
"movedto" => "verplaatst naar",
"movetalk" => "Verplaats \"Overleg\" pagina ook indien aanwezig.",
diff --git a/languages/LanguageNo.php b/languages/LanguageNo.php
index 6c7919cac96b..0ebcd31ce11c 100644
--- a/languages/LanguageNo.php
+++ b/languages/LanguageNo.php
@@ -121,8 +121,8 @@
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Rediger sider med dobbeltklikk (JavaScript)",
"tog-editsection"=>"Rediger avsnitt ved hjelp av [rediger]-lenke",
-"tog-editsectiononrightclick"=>"Rediger avsnitt ved å høyreklikke<br> på avsnittsoverskrift (JavaScript)",
-"tog-showtoc"=>"Vis innholdsfortegnelse<br>(for artikler med mer enn tre avsnitt)",
+"tog-editsectiononrightclick"=>"Rediger avsnitt ved å høyreklikke<br /> på avsnittsoverskrift (JavaScript)",
+"tog-showtoc"=>"Vis innholdsfortegnelse<br />(for artikler med mer enn tre avsnitt)",
"tog-rememberpassword" => "Husk passordet til neste gang",
"tog-editwidth" => "Redigeringsboksen har full bredde",
"tog-watchdefault" => "Overvåk nye og endrede artikler",
@@ -319,11 +319,11 @@ Hvis du vil, kan du personliggjøre brukerinnstillingene.",
"yourpasswordagain" => "Gjenta passord",
"newusersonly" => " (kun nye brukere)",
"remembermypassword" => "Husk passordet til neste gang.",
-"loginproblem" => "<b>Du ble ikke logget inn.</b><br>Prøv igjen!",
-"alreadyloggedin" => "<font color=red><b>Bruker $1 er allerede logget inn!</b></font><br>\n",
+"loginproblem" => "<b>Du ble ikke logget inn.</b><br />Prøv igjen!",
+"alreadyloggedin" => "<font color=red><b>Bruker $1 er allerede logget inn!</b></font><br />\n",
"areyounew" => "Hvis du er ny på Wikipedia og vil ha en brukerkonto, skriv inn et brukernavn og et passord, og bekreft passordet ved å skrive det inn en gang til.
-E-postadresse er frivillig; hvis du oppgir det, kan du få passordet tilsendt om du glemmer det.<br>\n",
+E-postadresse er frivillig; hvis du oppgir det, kan du få passordet tilsendt om du glemmer det.<br />\n",
"login" => "Logg inn",
"userlogin" => "Logg inn",
@@ -364,7 +364,7 @@ Logg inn når du har mottatt det nye passordet.",
"showpreview" => "Forhåndsvisning",
"blockedtitle" => "Brukeren er blokkert",
"blockedtext" => "Ditt brukernavn eller din IP-adresse er blokkert av $1.
-Følgende begrunnelse ble gitt:<br>''$2''<p>Du kan kontakte $1 eller en annen
+Følgende begrunnelse ble gitt:<br />''$2''<p>Du kan kontakte $1 eller en annen
[[Wikipedia:Administratorer|administrator]] for å diskutere utestengelsen.",
"newarticle" => "(Ny)",
"newarticletext" =>
@@ -399,7 +399,7 @@ overskrevet.</strong>\n",
Ã¥ betrakte som utgitt under GNU fri dokumentasjonslisens
(se $1 for detaljer).
Hvis du ikke vil ha teksten redigert uten nåde og kopiert etter
-forgodtbefinnende, kan du ikke legge den her.<br>
+forgodtbefinnende, kan du ikke legge den her.<br />
Du lover oss også at du skrev teksten selv eller kopierte fra en
ressurs som ikke er beskyttet av opphavsrett.
@@ -471,8 +471,8 @@ som ikke er indeksert, eller ved å spesifisere mer enn et søkeord (da kun
sider som inneholder alle søkeordene vil bli funnet).",
"powersearch" => "Søk",
"powersearchtext" => "
-Søk i navnerom :<br>
-$1<br>
+Søk i navnerom :<br />
+$1<br />
$2 List opp omdirigeringer Søk etter $3 $9",
"searchdisabled" => "<p>Søkefunksjonen er midlertidig avbrutt på grunn av
for stort press på tjeneren; vi håper vi kan sette den på igjen når vi har
@@ -490,9 +490,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -672,7 +672,7 @@ og av hvem, og andre ting du vet om filen.",
"deleteimgcompletely" => "slett",
"imghistlegend" => "Forklaring: (nå) = dette er det nåværende bilde,
(slett) = slett denne gamle versjonen, (gjenopprett) = gjenopprett en gammel versjon.
-<br><i>Klikk på en dato for å se bildet som ble lastet opp da</i>.",
+<br /><i>Klikk på en dato for å se bildet som ble lastet opp da</i>.",
"imagelinks" => "Billedlenker",
"linkstoimage" => "De følgende sider har lenker til dette bildet:",
"nolinkstoimage" => "Det er ingen sider som har lenker til dette bildet.",
@@ -706,12 +706,12 @@ hver gang du har rettet en enkelt ting",
"disambiguationspage" => "Wikipedia:Lenker til artikler med flertydige titler",
"disambiguationstext" => "De følgende artikler har lenker til
<i>artikler med flertydige titler</i>. De burde ha lenke til en ikke-flertydig
-tittel i stedet.<br>En artikkel blir behandlet som flertydig hvis den har
-lenker fra $1.<br>Lenker fra andre navnerom er <i>ikke</i> listet her.",
+tittel i stedet.<br />En artikkel blir behandlet som flertydig hvis den har
+lenker fra $1.<br />Lenker fra andre navnerom er <i>ikke</i> listet her.",
"doubleredirects" => "Dobbelte omdirigeringer",
"doubleredirectstext" => "<b>NB:</b> Denne listen kan inneholde gale
resultater. Det er som regel fordi siden inneholder ekstra tekst under den
-første #REDIRECT.<br>\nHver linje inneholder lenker til den første og den
+første #REDIRECT.<br />\nHver linje inneholder lenker til den første og den
anden omdirigeringen, og den første linjen fra den andre omdirigeringsteksten.
Det gir som regel den \"riktige\" målartikkelen, som den første omdirigeringen
skulle ha pekt på.",
@@ -948,7 +948,7 @@ sider som har vært utsatt for vandalisme).",
"noblockreason" => "Du må angi en begrunnelse for denne blokkeringen.",
"blockipsuccesssub" => "Blokkering utført",
"blockipsuccesstext" => "IP-adressen \"$1\" er blokkert.
-<br>Se [[Spesial:Ipblocklist|IP-blokkeringslisten]] for alle blokkeringer.",
+<br />Se [[Spesial:Ipblocklist|IP-blokkeringslisten]] for alle blokkeringer.",
"unblockip" => "Opphev blokkeringen av IP-adresse",
"unblockiptext" => "Bruk skjemaet nedenunder for å gjenopprette skriveadgangen
for en tidligere blokkert IP-adresse.",
@@ -982,7 +982,7 @@ Bekreft at du har til hensikt å gjøre dette.",
"lockdbsuccesssub" => "Databasen er nå låst",
"unlockdbsuccesssub" => "Databasen er nå låst opp",
"lockdbsuccesstext" => "Wikipedia-databasen er låst.
-<br>Husk å fjerne låsen når du er ferdig med vedlikeholdet.",
+<br />Husk å fjerne låsen når du er ferdig med vedlikeholdet.",
"unlockdbsuccesstext" => "Wikipedia-databasen er låst opp.",
# SQL query
diff --git a/languages/LanguageOc.php b/languages/LanguageOc.php
index d4fe310003c9..05499afcc35b 100644
--- a/languages/LanguageOc.php
+++ b/languages/LanguageOc.php
@@ -108,18 +108,18 @@ require_once( "LanguageUtf8.php" );
"tog-highlightbroken" => "Ligams sus los subjèctes non creats aparéisson en rog",
"tog-justify" => "Paragrafes justificats",
"tog-hideminor" => "Amagar las <i>Cambiadas recentas</i> minoras",
-"tog-usenewrc" => "Cambiadas recentas melhorats<br> (non per tots los navigaires)",
+"tog-usenewrc" => "Cambiadas recentas melhorats<br /> (non per tots los navigaires)",
"tog-numberheadings" => "Numerotacion automatica de los títols",
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Editar paginas amb un doble clic (JavaScript)",
"tog-editsection" => "Éditer une section via les liens [éditer]", //Looxix (Enable section editing via [edit] links)
-"tog-editsectiononrightclick" => "Éditer une section en cliquant à droite<br> sur le titre de la section", // Looxix
-"tog-showtoc" => "Afficher la table des matières<br> (pour les articles ayant plus de 3 sections)",
+"tog-editsectiononrightclick" => "Éditer une section en cliquant à droite<br /> sur le titre de la section", // Looxix
+"tog-showtoc" => "Afficher la table des matières<br /> (pour les articles ayant plus de 3 sections)",
"tog-rememberpassword" => "Se souvenir de mon mot de passe (cookie)",
"tog-editwidth" => "La fenêtre d'édition s'affiche en pleine largeur",
"tog-watchdefault" => "Suivre les articles que je crée ou modifie",
-"tog-minordefault" => "Mes modifications sont considérées<br> comme mineures par défaut",
-"tog-previewontop" => "La prévisualisation s'affiche au<br> dessus de la boite de rédaction",
+"tog-minordefault" => "Mes modifications sont considérées<br /> comme mineures par défaut",
+"tog-previewontop" => "La prévisualisation s'affiche au<br /> dessus de la boite de rédaction",
"tog-nocache" => "Désactiver le cache des pages", // Looxix "Disable page caching"
# Dates
@@ -303,8 +303,8 @@ N'oubliez pas de personnaliser votre Wikipédia en consultant la page Préféren
"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",
@@ -343,7 +343,7 @@ Veuillez vous identifier dès que vous l'aurez reçu.",
"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 l'administrateur pour en discuter.",
+"blockedtext" => "Votre compte utilisateur ou votre adresse IP ont été bloqués par $1 pour la raison suivante :<br />$2<p> Vous pouvez contacter l'administrateur 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",
@@ -435,8 +435,8 @@ qui ne sont pas indexés, ou à l'emploi de plusieurs termes de recherche (seule
contenant tous les termes apparaissent dans les résultats).",
"powersearch" => "Recherche",
"powersearchtext" => "
-Rechercher dans les espaces :<br>
-$1<br>
+Rechercher dans les espaces :<br />
+$1<br />
$2 Inclure les page de redirections Rechercher $3 $9",
"blanknamespace" => "(Principal)", // FIXME FvdP: trad de "(Main)"
@@ -481,7 +481,7 @@ Voir [[Wikipédia:Aide pour les préférences]] pour les explications concernant
"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",
+"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
@@ -530,7 +530,7 @@ pour copier des fichiers sur le serveur.",
"uploadfile" => "Copier un fichier",
"uploaderror" => "Erreur",
"uploadtext" => "'''STOP !''' Avant de copier votre fichier sur le serveur,
-prenez connaissance des [[Project:règles d'utilisation des images|règles d'utilisation des images]] de Wikipédia et assurez-vous que vous les respectez.<br>N'oubliez pas de remplir la [[Project:Page de description d'une image|page de description de l'image]] quand celle-ci sera sur le serveur.
+prenez connaissance des [[Project:règles d'utilisation des images|règles d'utilisation des images]] de Wikipédia et assurez-vous que vous les respectez.<br />N'oubliez pas de remplir la [[Project:Page de description d'une image|page de description de l'image]] quand celle-ci sera sur le serveur.
Pour voir les images déjà placées sur le serveur ou pour effectuer une recherche parmi celles-ci,
allez à la [[Special:Imagelist|liste des images]].
@@ -599,7 +599,7 @@ Suivez ce lien: ($2) pour accéder à la page de description, et donner des info
"deleteimgcompletely" => "suppr",
"imghistlegend" => "Légende: (actu) = ceci est l'image actuelle, (suppr) = supprimer
cette ancienne version, (rétab) = rétablir cette ancienne version.
-<br><i>Cliquez sur la date pour voir l'image copiée à cette date</i>.",
+<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.",
@@ -628,9 +628,9 @@ Parmi ceux-ci, <b>$2</b> ont le statut d'administrateur (voir $3).",
"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.",
+"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.",
+"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",
@@ -824,7 +824,7 @@ Donnez ci-dessous une raison précise (par exemple en indiquant les pages qui on
"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.",
+<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.",
@@ -856,7 +856,7 @@ Veuillez confirmer que c'est bien là ce que vous voulez faire.",
"unlockdbsuccesssub" => "Base déverrouillée.",
"lockdbsuccesstext" => "La base de données de Wikipédia est verrouillée.
-<br>N'oubliez pas de la déverrouiller lorsque vous aurez terminé votre opération de maintenance.",
+<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.",
# SQL query
@@ -879,7 +879,7 @@ Wikipédia.",
"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>
+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.",
diff --git a/languages/LanguagePl.php b/languages/LanguagePl.php
index d1a9aeb4741f..1eef68e6a861 100644
--- a/languages/LanguagePl.php
+++ b/languages/LanguagePl.php
@@ -136,7 +136,7 @@ default:
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Podwójne kliknięcie rozpoczyna edycję (JavaScript)",
"tog-editsection" => "Możliwość edycji poszczególnych sekcji strony",
-"tog-editsectiononrightclick" => "Kliknięcie prawym klawiszem na tytule sekcji<br>rozpoczyna jej edycję (JavaScript)",
+"tog-editsectiononrightclick" => "Kliknięcie prawym klawiszem na tytule sekcji<br />rozpoczyna jej edycję (JavaScript)",
"tog-showtoc" => "Spis treści (na stronach zawierających więcej niż 3 nagłówki)",
"tog-rememberpassword" => "Pamiętaj hasło między sesjami",
"tog-editwidth" => "Obszar edycji o pełnej szerokości",
@@ -356,8 +356,8 @@ Nie zapomnij dostosować <i>preferencji</i>.",
"yourpasswordagain" => "Powtórz hasło",
"newusersonly" => " (tylko nowi użytkownicy)",
"remembermypassword" => "Pamiętaj moje hasło między sesjami.",
-"loginproblem" => "<b>Są problemy z Twoim logowaniem.</b><br>Spróbuj ponownie!",
-"alreadyloggedin" => "<font color=red><b>$1, jesteś już zalogowany!</b></font><br>\n",
+"loginproblem" => "<b>Są problemy z Twoim logowaniem.</b><br />Spróbuj ponownie!",
+"alreadyloggedin" => "<font color=red><b>$1, jesteś już zalogowany!</b></font><br />\n",
"login" => "Zaloguj mnie",
"userlogin" => "Logowanie",
@@ -398,7 +398,7 @@ Po otrzymaniu go zaloguj siÄ™ ponownie.",
"showpreview" => "PodglÄ…d",
"blockedtitle" => "Użytkownik jest zablokowany",
"blockedtext" => "Twoje konto lub adres IP zostały zablokowane przez $1.
-Podany powód to:<br>$2.<p>W celu wyjaśnienia sprawy zablokowania możesz się skontaktować z $1 lub innym
+Podany powód to:<br />$2.<p>W celu wyjaśnienia sprawy zablokowania możesz się skontaktować z $1 lub innym
[[{{ns:4}}:Administratorzy|administratorem]].",
"newarticle" => "(Nowy)",
"newarticletext" => "Nie ma jeszcze artykułu o tym tytule. W poniższym polu można wpisać pierwszy jego fragment. Jeśli nie to było Twoim zamiarem, wciśnij po prostu ''Wstecz''.",
@@ -432,9 +432,9 @@ Jeśli zapiszesz ją wszystkie późniejsze zmiany zostaną skasowane.</strong><
"yourdiff" => "Różnice",
"copyrightwarning" => "Proszę pamiętać o tym, że przyjmuje się, iż wszelki
wkład do Wikipedii jest udostępniany na zasadach <i>GNU Free Documentation License</i>
-(szczegóły w $1). <br>Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go w Wikipedii. Niniejszym jednocześnie oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na zasadach <i>public domain</i> albo
+(szczegóły w $1). <br />Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go w Wikipedii. Niniejszym jednocześnie oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na zasadach <i>public domain</i> albo
licencji <i>GNU Free Documentation License</i> lub kompatybilnej.
-<br><strong>PROSZĘ NIE UÅ»YWAĆ BEZ POZWOLENIA MATERIAÅÓW OBJĘTYCH PRAWEM
+<br /><strong>PROSZĘ NIE UÅ»YWAĆ BEZ POZWOLENIA MATERIAÅÓW OBJĘTYCH PRAWEM
AUTORSKIM!</strong>",
"longpagewarning" => "UWAGA: Ta strona ma $1 kilobajt-y/-ów; w przypadku niektórych
przeglądarek mogą wystąpić problemy w edycji stron mających więcej niż 32 kilobajty.
@@ -503,8 +503,8 @@ zapytaniu więcej niż jednego słowa (na liście odnalezionych stron znajdą si
tylko te, które zawierają wszystkie podane słowa).",
"powersearch" => "Szukaj",
"powersearchtext" => "
-Szukaj w przestrzeniach nazw :<br>
-$1<br>
+Szukaj w przestrzeniach nazw :<br />
+$1<br />
$2 Pokaż przekierowania Szukany tekst $3 $9",
"searchdisabled" => "<p>Ze względu na duże obciążenie serwera wyszukiwanie
w treści artykułów zostało czasowo wyłączone; mamy nadzieję, że
@@ -523,9 +523,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -705,7 +705,7 @@ i cokolwiek co wiesz o pliku, a wydaje Ci się ważne.",
"deleteimgcompletely" => "usuń",
"imghistlegend" => "Legenda: (bież) = to jest obecny plik, (usuń) = usuń
tę starszą wersję, (przywróć) = przywróć tę starszą wersję.
-<br><i>Kliknij na datę aby zobaczyć jakie pliki przesłano tego dnia</i>.",
+<br /><i>Kliknij na datę aby zobaczyć jakie pliki przesłano tego dnia</i>.",
"imagelinks" => "Linki do pliku",
"linkstoimage" => "Oto strony odwołujące się do tego pliku:",
"nolinkstoimage" => "Żadna strona nie odwołuje się do tego pliku.",
@@ -737,13 +737,13 @@ więc, by ich nie nadużywać.",
"disambiguationspage" => "{{ns:4}}:Strony_ujednoznaczniajÄ…ce",
"disambiguationstext" => "Poniższe artykuły odwołują się do <i>stron
ujednoznaczniających</i>, a powinny odwoływać się bezpośrednio do hasła
-związanego z treścią artykułu.<br>Strona uznawana jest za ujednoznaczniającą
-jeśli odwołuje się do niej $1.<br>Linki z innych przestrzeni nazw <i>nie</i>
+związanego z treścią artykułu.<br />Strona uznawana jest za ujednoznaczniającą
+jeśli odwołuje się do niej $1.<br />Linki z innych przestrzeni nazw <i>nie</i>
zostały tu uwzględnione.",
"doubleredirects" => "Podwójne przekierowania",
"doubleredirectstext" => "<b>Uwaga:</b> Na tej liście mogą znajdować się
przekierowania pozorne. Oznacza to, że poniżej pierwszej linii artykułu,
-zawierającej \"#REDIRECT ...\", może znajdować się dodatkowy tekst.<br>Każdy
+zawierającej \"#REDIRECT ...\", może znajdować się dodatkowy tekst.<br />Każdy
wiersz listy zawiera odwołania do pierwszego i drugiego przekierowania oraz
pierwszą linię tekstu drugiego przekierowania. Umożliwia to w większości
przypadków odnalezienie właściwego artykułu, do którego powinno się
@@ -919,7 +919,7 @@ Autorem ostatniej zmiany jest teraz [[Wikipedysta:$3|$3]] ([[Dyskusja_wikipedyst
"undelete" => "Odtwórz skasowaną stronę",
"undeletepage" => "Odtwarzanie skasowanych stron",
"undeletepagetext" => "Poniższe strony zostały skasowane, ale ich kopia wciąż
-znajduje się w archiwum.<br><b>Uwaga:</b> archiwum co jakiś czas także jest kasowane!",
+znajduje się w archiwum.<br /><b>Uwaga:</b> archiwum co jakiś czas także jest kasowane!",
"undeletearticle" => "Odtwórz skasowaną stronę",
"undeleterevisions" => "Liczba zarchiwizowanych wersji: $1",
"undeletehistory" => "Odtworzenie strony spowoduje przywrócenie także jej
@@ -972,7 +972,7 @@ siÄ™ wandalizmu).",
"noblockreason" => "Musisz podać powód blokady.",
"blockipsuccesssub" => "Zablokowanie powiodło się",
"blockipsuccesstext" => "Adres IP \"$1\" został zablokowany.
-<br>Przejdź do [[Specjalna:Ipblocklist|Listy zablokowanych adresów IP]] by przejrzeć blokady.",
+<br />Przejdź do [[Specjalna:Ipblocklist|Listy zablokowanych adresów IP]] by przejrzeć blokady.",
"unblockip" => "Odblokuj adres IP",
"unblockiptext" => "Użyj poniższego formularza by przywrócić prawa zapisu
dla poprzednio zablokowanego adresu IP.",
@@ -1005,7 +1005,7 @@ Potwierdź, proszę, że to jest zgodne z Twoimi zamiarami.",
"lockdbsuccesssub" => "Baza danych została pomyślnie zablokowana",
"unlockdbsuccesssub" => "Blokada bazy danych usunięta",
"lockdbsuccesstext" => "Baza danych Wikipedii została zablokowana.
-<br>Pamiętaj usunąć blokadę po zakończeniu spraw administracyjnych.",
+<br />Pamiętaj usunąć blokadę po zakończeniu spraw administracyjnych.",
"unlockdbsuccesstext" => "Baza danych Wikipedii została odblokowana.",
# SQL query
diff --git a/languages/LanguagePt.php b/languages/LanguagePt.php
index 45e67140d6d5..ee453956360a 100644
--- a/languages/LanguagePt.php
+++ b/languages/LanguagePt.php
@@ -140,8 +140,8 @@
"tog-showtoolbar" => "Mostrar barra de edição",
"tog-editondblclick" => "Editar páginas quando houver clique duplo(JavaScript)",
"tog-editsection"=>"Habilitar seção de edição via links [edit]",
-"tog-editsectiononrightclick"=>"Habilitar seção de edição por clique <br> com o botão direito no título da seção (JavaScript)",
-"tog-showtoc"=>"Mostrar Tabela de Conteúdos<br>(para artigos com mais de 3 cabeçalhos)",
+"tog-editsectiononrightclick"=>"Habilitar seção de edição por clique <br /> com o botão direito no título da seção (JavaScript)",
+"tog-showtoc"=>"Mostrar Tabela de Conteúdos<br />(para artigos com mais de 3 cabeçalhos)",
"tog-rememberpassword" => "Lembra senha entre sessões",
"tog-editwidth" => "Caixa de edição com largura completa",
"tog-watchdefault" => "Observa artigos novos e modificados",
@@ -342,10 +342,10 @@ Não se esqueça de personalizar suas preferências na {{SITENAME}}.",
"yourpasswordagain" => "Redigite sua senha",
"newusersonly" => " (somente novos usuários)",
"remembermypassword" => "Lembrar de minha senha em outras sessões.",
-"loginproblem" => "<b>Houve um problema com a sua autenticação.</b><br>Tente novamente!",
-"alreadyloggedin" => "<font color=red><b>Utilizador $1, você já está autenticado!</b></font><br>\n",
+"loginproblem" => "<b>Houve um problema com a sua autenticação.</b><br />Tente novamente!",
+"alreadyloggedin" => "<font color=red><b>Utilizador $1, você já está autenticado!</b></font><br />\n",
-"areyounew" => "Se você é novo(a) na {{SITENAME}} e quer fazer uma conta de utilizador, entre com um nome de utilizador e depois digite e re-digite uma senha. Seu e-mail é opcional - se você perder a sua senha, você pode requisitar para que ela seja enviada para o endereço que você informou.<br>\n",
+"areyounew" => "Se você é novo(a) na {{SITENAME}} e quer fazer uma conta de utilizador, entre com um nome de utilizador e depois digite e re-digite uma senha. Seu e-mail é opcional - se você perder a sua senha, você pode requisitar para que ela seja enviada para o endereço que você informou.<br />\n",
"login" => "Entrar",
"userlogin" => "Entrar",
@@ -388,7 +388,7 @@ Por favor, reconecte-se ao recebê-lo.",
"showpreview" => "Mostrar Pré-Visualização",
"blockedtitle" => "Usuário está bloqueado",
"blockedtext" => "Seu nome de usuário ou numero de IP foi bloqueado por $1.
-O motivo é:<br>''$2''<p>Você pode contactar $1 ou outro
+O motivo é:<br />''$2''<p>Você pode contactar $1 ou outro
[[{{ns:4}}:administradores|administrador]] para discutir sobre o bloqueio.",
"whitelistedittitle" => "Login necessário para edição",
"whitelistedittext" => "Você precisa se [[Especial:Userlogin|logar]] para editar artigos.",
@@ -427,7 +427,7 @@ Se você salvá-lo, todas as mudanças feitas a partir desta revisão serão per
"yourdiff" => "Diferenças",
"copyrightwarning" => "Por favor note que todas as contribuições � {{SITENAME}} são consideradas lançadas sobre a GNU Free Documentation License
(veja $1 para detalhes).
-Se você não quer que seu texto esteja sobre estes termos, então não os envie.<br>
+Se você não quer que seu texto esteja sobre estes termos, então não os envie.<br />
Você também promete que está nos enviando um artigo escrito por você mesmo, ou extraindo de uma fonte de domínio público similar.
<strong>NÃO ENVIE TRABALHO SOB COPYRIGHT SEM PERMISSÃO!</strong>",
"longpagewarning" => "CUIDADO: Esta página tem $1 kilobytes ; alguns browsers podem ter problemas ao editar páginas maiores que 32kb.
@@ -486,8 +486,8 @@ e $3 artigos com o texto procurado.",
que não são indexadas, ou pela especificação de mais de um termo (somente as páginas contendo todos os termos aparecerão nos resultados).",
"powersearch" => "Pesquisa",
"powersearchtext" => "
-Procurar nos namespaces :<br>
-$1<br>
+Procurar nos namespaces :<br />
+$1<br />
$2 Lista redireciona &nbsp; Procura por $3 $9",
"blanknamespace" => "(Principal)",
@@ -653,7 +653,7 @@ Por favor, siga este link : ($2) para ir � página de descrição e preencha-
"deleteimgcompletely" => "del",
"imghistlegend" => "Legenda: (cur) = esta é a imagem atual, (del) = deletar
esta versão antiga, (rev) = reverter para esta versão antiga.
-<br><i>Clique em data para ver das imagens carregadas nesta data</i>.",
+<br /><i>Clique em data para ver das imagens carregadas nesta data</i>.",
"imagelinks" => "Links das imagens",
"linkstoimage" => "As páginas seguintes apontam para esta imagem:",
"nolinkstoimage" => "Nenhuma página aponta para esta imagem.",
@@ -679,9 +679,9 @@ Destes, <b>$2</b> são administradores (veja $3).",
"maintenancebacklink" => "Voltar para a página de Manutenção",
"disambiguations" => "Páginas de desambiguamento",
"disambiguationspage" => "{{ns:4}}:Links_para_desambiguar_páginas",
-"disambiguationstext" => "Os artigos a seguir apontam para uma <i>página de desambiguamento</i>. Ao invés disso, eles deveriam apontar para um tópico apropriado.<br> Uma página é tratada como disambiguamento se ela é por $1.<br>Links de outros namespaces <i>não</i> estão listados aqui.",
+"disambiguationstext" => "Os artigos a seguir apontam para uma <i>página de desambiguamento</i>. Ao invés disso, eles deveriam apontar para um tópico apropriado.<br /> Uma página é tratada como disambiguamento se ela é por $1.<br />Links de outros namespaces <i>não</i> estão listados aqui.",
"doubleredirects" => "Double Redirects",
-"doubleredirectstext" => "<b>Atenção:</b> Esta lista pode conter positivos falsos. O que usualmente significa que há texto adicional com links depois do primeiro #REDIRECT.<br>\nCada linha contem links para o primeiro e segundo redirecionamento, bem como a primeira linha do segundo texto redirecionado , geralmente dando o artigo alvo \"real\" , para onde o primeiro redirecionamento deveria apontar.",
+"doubleredirectstext" => "<b>Atenção:</b> Esta lista pode conter positivos falsos. O que usualmente significa que há texto adicional com links depois do primeiro #REDIRECT.<br />\nCada linha contem links para o primeiro e segundo redirecionamento, bem como a primeira linha do segundo texto redirecionado , geralmente dando o artigo alvo \"real\" , para onde o primeiro redirecionamento deveria apontar.",
"brokenredirects" => "Redirecionamentos Quebrados",
"brokenredirectstext" => "Os seguintes redirecionamentos apontam para um artigo inexistente.",
"selflinks" => "Páginas com links próprios",
@@ -869,7 +869,7 @@ Preencha com um motivo específico (por exemplo, citando páginas que sofreram v
"noblockreason" => "Você deve colocar um motivo.",
"blockipsuccesssub" => "Bloqueio bem sucedido",
"blockipsuccesstext" => "O endereço de IP \"$1\" Foi bloqueado.
-<br>Veja [[Special:Ipblocklist|Lista de IP's bloqueados]] para rever os bloqueios.",
+<br />Veja [[Special:Ipblocklist|Lista de IP's bloqueados]] para rever os bloqueios.",
"unblockip" => "Desbloquear endereço de IP",
"unblockiptext" => "Utilize o formulário a seguir para restaurar o acesso a escrita para um endereço de IP previamente bloqueado.",
"ipusubmit" => "Desbloquear este endereço",
@@ -895,7 +895,7 @@ Por favor confirme que você realmente pretende fazer isto, e que você vai desb
"lockdbsuccesssub" => "Tranca bem sucedida",
"unlockdbsuccesssub" => "Destranca bem sucedida",
"lockdbsuccesstext" => "O banco de dados da {{SITENAME}} foi trancado.
-<br>Lembre-se de remover a tranca após a manutenção.",
+<br />Lembre-se de remover a tranca após a manutenção.",
"unlockdbsuccesstext" => "O bando de dados da {{SITENAME}} foi destrancado.",
# SQL query
diff --git a/languages/LanguageRo.php b/languages/LanguageRo.php
index c6fad1516f2d..c408f3b31e7f 100644
--- a/languages/LanguageRo.php
+++ b/languages/LanguageRo.php
@@ -157,19 +157,19 @@ require_once("LanguageUtf8.php");
"tog-highlightbroken" => "Formatează legăturile inexistente <a href=\"\" class=\"new\">în felul acesta</a> (alternativa este aşa<a href=\"\" class=\"internal\">?</a>).",
"tog-justify" => "Aliniază paragrafele",
"tog-hideminor" => "Ascunde schimbările minore în pagina de schimbări recente",
-"tog-usenewrc" => "Îmbunătăţeşte structura paginii de schimbări minore<br>(nu merge în toate browserele)",
+"tog-usenewrc" => "Îmbunătăţeşte structura paginii de schimbări minore<br />(nu merge în toate browserele)",
"tog-numberheadings" => "Auto-numerotează titlurile",
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Editează paginile cu dublu clic (JavaScript)",
"tog-editsection" => "Permite editarea secţiunilor folosind legături [editează] pe pagină",
-"tog-editsectiononrightclick"=>"Permite editarea secţiunilor la apăsarea<br>butonului din dreapta al mouse-ului pe titlu<br>(necesită JavaScript)",
-"tog-showtoc" => "Arată cuprinsul paginilor<br>(pentru pagini cu cel puţin trei titluri)",
+"tog-editsectiononrightclick"=>"Permite editarea secţiunilor la apăsarea<br />butonului din dreapta al mouse-ului pe titlu<br />(necesită JavaScript)",
+"tog-showtoc" => "Arată cuprinsul paginilor<br />(pentru pagini cu cel puţin trei titluri)",
"tog-rememberpassword" => "Păstrează parola între sesiuni",
"tog-editwidth" => "Lăţime maximă pentru caseta de editare",
"tog-watchdefault" => "Urmăreşte articolele pe care le creezi sau le editezi",
"tog-minordefault" => "Marchează implicit toate editările ca minore",
"tog-previewontop" => "Arată pagina după caseta de editare, nu înainte",
-"tog-nocache" => "Nu folosi cache (conexiunea merge mai greu,<br>dar sunt afişate toate modificările paginilor)",
+"tog-nocache" => "Nu folosi cache (conexiunea merge mai greu,<br />dar sunt afişate toate modificările paginilor)",
# Dates
#
@@ -335,8 +335,8 @@ Administratorul care a blocat-o a oferit această explicaţie:
"badtitletext" => "Titlul căutat a fost invalid, gol sau o legătură invalidă inter-linguală sau inter-wiki.",
"perfdisabled" => "Ne pare rău! Această funcţionalitate a fost dezactivată temporar în timpul orelor de vârf din motive de performanţă. Vă rugăm să reveniţi la altă oră şi încercaţi din nou.", // Didn't provide any off-peak hours because they may differ on the Romanian Wikipedia.
"perfdisabledsub" => "Iată o copie salvată de la $1:",
-"wrong_wfQuery_params" => "Număr incorect de parametri pentru wfQuery()<br>
-Funcţia: $1<br>
+"wrong_wfQuery_params" => "Număr incorect de parametri pentru wfQuery()<br />
+Funcţia: $1<br />
Query: $2
",
"viewsource" => "Vezi sursa",
@@ -359,8 +359,8 @@ Nu uitaţi să vă personalizaţi preferinţele în Wikipedia.",
"yourpasswordagain" => "Repetaţi parola",
"newusersonly" => " (doar pentru utilizatori noi)",
"remembermypassword" => "Reţine-mi parola între sesiuni.",
-"loginproblem" => "<b>A fost o problemă cu autentificarea Dvs.</b><br>Încercaţi din nou!",
-"alreadyloggedin" => "<font color=red><b>Sunteţi deja autentificat ca $1!</b></font><br>\n",
+"loginproblem" => "<b>A fost o problemă cu autentificarea Dvs.</b><br />Încercaţi din nou!",
+"alreadyloggedin" => "<font color=red><b>Sunteţi deja autentificat ca $1!</b></font><br />\n",
"notloggedin" => "Nu sunteţi autentificat",
@@ -407,7 +407,7 @@ Vă rugăm să vă autentificaţi pe Wikipedia după ce o primiţi.",
"showpreview" => "Arată previzualizare",
"blockedtitle" => "Utilizatorul este blocat",
"blockedtext" => "Utilizatorul sau parola Dvs. au fost blocate de $1.
-Motivul oferit pentru blocare a fost:<br>''$2''<p>Puteţi contacta pe $1 sau pe unul dintre ceilalţi
+Motivul oferit pentru blocare a fost:<br />''$2''<p>Puteţi contacta pe $1 sau pe unul dintre ceilalţi
[[Wikipedia:administratori|administratori]] pentru a discuta această blocare.",
"whitelistedittitle" => "Este necesară autentificarea pentru a edita",
"whitelistedittext" => "Trebuie să vă [[Special:Userlogin|autentificaţi]] pentru a edita articole.",
@@ -442,9 +442,9 @@ Va trebui să editaţi manual caseta de sus pentru a reflecta modificările pe c
"storedversion" => "Versiunea curentă",
"editingold" => "<strong>ATENŢIE! Editaţi o variantă mai veche a acestei pagini! Orice modificări care s-au făcut de la această versiune şi până la cea curentă se vor pierde!</strong>\n",
"yourdiff" => "Diferenţe",
-"copyrightwarning" => "Ajutor pentru editare, caractere speciale: ă â î ş ţ Ă Â Î Ş Ţ<br><br>Reţineţi că toate contribuţiile la Wikipedia sunt considerate ca respectând licenţa GNU Free Documentation License
+"copyrightwarning" => "Ajutor pentru editare, caractere speciale: ă â î ş ţ Ă Â Î Ş Ţ<br /><br />Reţineţi că toate contribuţiile la Wikipedia sunt considerate ca respectând licenţa GNU Free Documentation License
(vezi $1 pentru detalii).
-Dacă nu doriţi ca ceea ce scrieţi să fie editat fără milă şi redistribuit în voie, atunci nu trimiteţi materialele respective aici.<br>
+Dacă nu doriţi ca ceea ce scrieţi să fie editat fără milă şi redistribuit în voie, atunci nu trimiteţi materialele respective aici.<br />
De asemenea, trimiţând aceste materiale aici vă angajaţi că le-aţi scris Dvs. sau că sunt copiate dintr-o sursă care permite includerea materialelor sub această licenţă.
<strong>NU TRIMITEÅ¢I MATERIALE PROTEJATE DE DREPTURI DE AUTOR FÄ‚RÄ‚ PERMISIUNE!</strong>",
"longpagewarning" => "ATENŢIE! Conţinutul acestei pagini are $1 KB; unele browsere au probleme la editarea paginilor în jur de 32 KB sau mai mari.
@@ -503,8 +503,8 @@ Vă rugăm să încercaţi o altă căutare.",
"nonefound" => "<strong>Notă</strong>: căutările nereuşite sunt în general datorate căutării unor cuvinte prea comune care nu sunt indexate, sau cautărilor a mai multe cuvinte (numai articolele care conţin ''toate'' cuvintele specificate apar ca rezultate).",
"powersearch" => "Caută",
"powersearchtext" => "
-Caută în secţiunile:<br>
-$1<br>
+Caută în secţiunile:<br />
+$1<br />
$2 Redirecţionări&nbsp; Căutări după $3 $9",
"searchdisabled" => "<p>Ne pare rău! Căutarea după text a fost dezactivată temporar, din motive de performanţă. Între timp puteţi folosi căutarea prin Google mai jos, însă aceasta poate să dea rezultate învechite.</p>
@@ -521,7 +521,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Caută pe Google\">
<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=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>
@@ -697,7 +697,7 @@ Vă rugăm să vizitaţi această legătură: ($2) pentru a descrie fişierul ş
"deleteimg" => "ÅŸterg",
"deleteimgcompletely" => "ÅŸterg",
"imghistlegend" => "Legend: (actuală) = versiunea curentă a imaginii, (şterg) = şterge această versiune veche, (rev) = revino la această versiune veche.
-<br><i>Apăsaţi pe dată pentru a vedea versiunea trimisă la data respectivă</i>.",
+<br /><i>Apăsaţi pe dată pentru a vedea versiunea trimisă la data respectivă</i>.",
"imagelinks" => "Legăturile imaginii",
"linkstoimage" => "Următoarele pagini leagă la această imagine:",
"nolinkstoimage" => "Nici o pagină nu se leagă la această imagine.",
@@ -723,9 +723,9 @@ Dintre aceÅŸtia <b>$2</b> sunt administratori (vezi $3).",
"maintenancebacklink" => "Înapoi la pagina administrativă",
"disambiguations" => "Pagini de dezambiguizare",
"disambiguationspage" => "Wikipedia:Legături_către_paginile_de_dezambiguizare",
-"disambiguationstext" => "Următoarele articole conţin legături către cel puţin o <i>pagină de dezambiguizare</i>. Legăturile respective ar trebui făcute către paginile specifice.<br>O pagină este considerată ca fiind de dezambiguizare dacă există o legătură în ea dinspre $1.<br>Legăturile dinspre alte secţiuni Wikipedia <i>nu sunt</i> luate în considerare aici.",
+"disambiguationstext" => "Următoarele articole conţin legături către cel puţin o <i>pagină de dezambiguizare</i>. Legăturile respective ar trebui făcute către paginile specifice.<br />O pagină este considerată ca fiind de dezambiguizare dacă există o legătură în ea dinspre $1.<br />Legăturile dinspre alte secţiuni Wikipedia <i>nu sunt</i> luate în considerare aici.",
"doubleredirects" => "Redirectări duble",
-"doubleredirectstext" => "<b>Atenţie:</b> Această listă poate conţine articole care nu sunt în fapt duble redirectări. Asta înseamnă de obicei că există text adiţional sub primul #REDIRECT.<br>\nFiecare rând care conţine legături către prima sau a doua redirectare, ca şi prima linie din textul celei de-a doua redirectări, de obicei conţinând numele \"real\" al articolului ţintă, către care ar trebui să arate prima redirectare.",
+"doubleredirectstext" => "<b>Atenţie:</b> Această listă poate conţine articole care nu sunt în fapt duble redirectări. Asta înseamnă de obicei că există text adiţional sub primul #REDIRECT.<br />\nFiecare rând care conţine legături către prima sau a doua redirectare, ca şi prima linie din textul celei de-a doua redirectări, de obicei conţinând numele \"real\" al articolului ţintă, către care ar trebui să arate prima redirectare.",
"brokenredirects" => "Redirectări greşite",
"brokenredirectstext" => "Următoarele redirectări arată către articole inexistente.",
"selflinks" => "Pagini cu legături ciclice",
@@ -935,7 +935,7 @@ au fost vandalizate de acest utilizator).",
"noblockreason" => "Trebuie să includeţi un motiv pentru blocare.",
"blockipsuccesssub" => "Utilizatorul a fost blocat",
"blockipsuccesstext" => "Adresa IP \"$1\" a fost blocată.
-<br>Vezi [[Special:Ipblocklist|lista de adrese IP blocate]] pentru a revizui adresele blocate.",
+<br />Vezi [[Special:Ipblocklist|lista de adrese IP blocate]] pentru a revizui adresele blocate.",
"unblockip" => "Deblochează adresă IP",
"unblockiptext" => "Folosiţi chestionarul de mai jos pentru a restaura
drepturile de scriere pentru o adresă IP blocată anterior..",
@@ -977,7 +977,7 @@ Vă rugăm să confirmaţi că intenţionaţi acest lucru.",
"lockdbsuccesssub" => "Baza de date a fost blocată",
"unlockdbsuccesssub" => "Baza de date a fost deblocată",
"lockdbsuccesstext" => "Baza de date Wikipedia a fost blocată la scriere.
-<br>Nu uitaţi să o deblocaţi după ce terminaţi operaţiunile administrative pentru care aţi blocat-o.",
+<br />Nu uitaţi să o deblocaţi după ce terminaţi operaţiunile administrative pentru care aţi blocat-o.",
"unlockdbsuccesstext" => "Baza de date Wikipedia a fost deblocată.",
# SQL query
diff --git a/languages/LanguageRu.php b/languages/LanguageRu.php
index 9902e5db71b3..21ee81036a30 100644
--- a/languages/LanguageRu.php
+++ b/languages/LanguageRu.php
@@ -125,8 +125,8 @@ if($wgMetaNamespace === FALSE)
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Редактировать Ñтраницу по двойному щелчку (JavaScript)",
"tog-editsection"=>"Редактирование Ñекций Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸ ÑÑыки [редактировать]",
-"tog-editsectiononrightclick"=>"Редактирование Ñекций по правой кнопке мышки<br> на названии Ñекции (JavaScript)",
-"tog-showtoc"=>"Показывать оглавление<br>(Ð´Ð»Ñ Ñтраниц более чем Ñ 3 заголовками)",
+"tog-editsectiononrightclick"=>"Редактирование Ñекций по правой кнопке мышки<br /> на названии Ñекции (JavaScript)",
+"tog-showtoc"=>"Показывать оглавление<br />(Ð´Ð»Ñ Ñтраниц более чем Ñ 3 заголовками)",
"tog-rememberpassword" => "Запоминать пароль между ÑеанÑами",
"tog-editwidth" => "Окно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² полную ширину",
"tog-watchdefault" => "Следить за новыми и изменёнными ÑтатьÑми",
@@ -312,8 +312,8 @@ MySQL возвратил ошибку \"$3: $4\".\n",
"yourpasswordagain" => "Повторный набор паролÑ",
"newusersonly" => " (только Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… учаÑтников)",
"remembermypassword" => "Запоминать ваш пароль между ÑеанÑами.",
-"loginproblem" => "<b>Произошла проблема Ñ Ð²Ð°ÑˆÐ¸Ð¼ опознаванием.</b><br>попробуйте ещё раз!",
-"alreadyloggedin" => "<font color=red><b>УчаÑтник $1, вы уже предÑтавилиÑÑŒ ÑиÑтеме!</b></font><br>\n",
+"loginproblem" => "<b>Произошла проблема Ñ Ð²Ð°ÑˆÐ¸Ð¼ опознаванием.</b><br />попробуйте ещё раз!",
+"alreadyloggedin" => "<font color=red><b>УчаÑтник $1, вы уже предÑтавилиÑÑŒ ÑиÑтеме!</b></font><br />\n",
"login" => "ПредÑтавитьÑÑ ÑиÑтеме",
"userlogin" => "ПредÑтавитьÑÑ ÑиÑтеме",
@@ -356,7 +356,7 @@ MySQL возвратил ошибку \"$3: $4\".\n",
"showpreview" => "Показать предварительный вариант",
"blockedtitle" => "УчаÑтник заблокирован",
"blockedtext" => "Ваше Ð¸Ð¼Ñ ÑƒÑ‡Ð°Ñтника или IP-Ð°Ð´Ñ€ÐµÑ Ð±Ñ‹Ð» заблокирован $1.
-УтверждаетÑÑ, что причина такова:<br>''$2''<p>Ð’Ñ‹ можете ÑвÑзатьÑÑ Ñ $1 или одним из других
+УтверждаетÑÑ, что причина такова:<br />''$2''<p>Ð’Ñ‹ можете ÑвÑзатьÑÑ Ñ $1 или одним из других
[[$wgMetaNamespace:админиÑтраторы|админиÑтраторов]] чтобы обÑудить блокировку.",
"newarticle" => "(ÐоваÑ)",
"newarticletext" =>
@@ -388,7 +388,7 @@ MySQL возвратил ошибку \"$3: $4\".\n",
GNU Free Documentation License без неизменÑемых Ñекций
(Ñм. $1, чтобы узнать детали).
ЕÑли вы не желаете, чтобы напиÑанное вами безжалоÑтно редактировалоÑÑŒ
-и раÑпроÑтранÑлоÑÑŒ по чьему-угодно желанию, ничего не пишите здеÑÑŒ.<br>
+и раÑпроÑтранÑлоÑÑŒ по чьему-угодно желанию, ничего не пишите здеÑÑŒ.<br />
Ð’Ñ‹ также обÑзываетеÑÑŒ, что напиÑанное вами здеÑÑŒ принадлежит вам или взÑто из иÑточника,
ÑвлÑющимÑÑ Ð¾Ð±Ñ‰ÐµÑтвенным доÑтоÑнием либо Ñходного Ñвободного иÑточника.
<strong>ÐЕ ПОМЕЩÐЙТЕ ЗДЕСЬ БЕЗ РÐЗРЕШЕÐИЯ ПРОИЗВЕДЕÐИЯ, ЯВЛЯЮЩИЕСЯ ОБЪЕКТОМ ÐВТОРСКОГО ПРÐÐ’Ð,
@@ -451,8 +451,8 @@ GNU Free Documentation License без неизменÑемых Ñекций
, или иÑпользованием более чем одного ключевого Ñлова поиÑка (показываютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñтраницы, Ñодержащие вÑе указанные Ñлова Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка).",
"powersearch" => "ИÑкать",
"powersearchtext" => "
-ИÑкать в проÑтранÑтвах имён :<br>
-$1<br>
+ИÑкать в проÑтранÑтвах имён :<br />
+$1<br />
$2 Показывать Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ &nbsp; ПоиÑк на $3 $9",
"blanknamespace" => "(ЗаглавнаÑ)",
@@ -609,7 +609,7 @@ Cм. [[$wgMetaNamespace:Справка по наÑтройкам]] чтобы Ñ€
"deleteimg" => "удал.",
"deleteimgcompletely" => "удал.",
"imghistlegend" => "ПоÑÑнениÑ: (тек.) = Ñто - текущее изображение, (удал.) = удалить Ñту Ñтарую верÑию, (откат.) = откатитьÑÑ Ð½Ð° Ñту Ñтарую верÑию.
-<br><i>Выберите дату, чтобы поÑмотреть ÑпиÑок изображений, загруженных на Ñту дату</i>.",
+<br /><i>Выберите дату, чтобы поÑмотреть ÑпиÑок изображений, загруженных на Ñту дату</i>.",
"imagelinks" => "СÑылки изображениÑ",
"linkstoimage" => "Следующие Ñтраницы ÑÑылаютÑÑ Ð½Ð° данное изображение:",
"nolinkstoimage" => "Страницы, ÑÑылающиеÑÑ Ð½Ð° данное изображение, отÑутÑтвуют.",
@@ -636,9 +636,9 @@ Cм. [[$wgMetaNamespace:Справка по наÑтройкам]] чтобы Ñ€
"maintenancebacklink" => "Ðазад, на Ñтраницу обÑлуживаниÑ",
"disambiguations" => "Многозначные Ñтраницы",
"disambiguationspage" => "ВикипедиÑ:СÑылки_на_многозначные_Ñтраницы",
-"disambiguationstext" => "Следущие Ñтатьи ÑÑылаютÑÑ Ð½Ð° <i>многозначные Ñтраницы</i>. ВмеÑто Ñтого они должны указывать на ÑоответÑтвующую конкретную Ñтатью.<br>Страница ÑчитаетÑÑ Ð¼Ð½Ð¾Ð³Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾Ð¹, еÑли на неё указывает $1.<br>СÑылки из других проÑтранÑтв имён здеÑÑŒ <i>не</i> перечиÑлены.",
+"disambiguationstext" => "Следущие Ñтатьи ÑÑылаютÑÑ Ð½Ð° <i>многозначные Ñтраницы</i>. ВмеÑто Ñтого они должны указывать на ÑоответÑтвующую конкретную Ñтатью.<br />Страница ÑчитаетÑÑ Ð¼Ð½Ð¾Ð³Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾Ð¹, еÑли на неё указывает $1.<br />СÑылки из других проÑтранÑтв имён здеÑÑŒ <i>не</i> перечиÑлены.",
"doubleredirects" => "Двойные перенаправлениÑ",
-"doubleredirectstext" => "<b>Внимание:</b> Этот ÑпиÑок может Ñодержать ложные включениÑ. Обычно Ñто означает, что поÑле первой директивы #REDIRECT идёт дополнительный текÑÑ‚ Ñо ÑÑылками.<br>\nÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока Ñодержит ÑÑылки на первое и второе перенаправлениÑ, а также первую Ñтроку текÑта второго перенаправлениÑ, обычно Ñодержащую \"реальное\" перенаправление на нужную Ñтатью, куда и первое перенаправление должно указывать.",
+"doubleredirectstext" => "<b>Внимание:</b> Этот ÑпиÑок может Ñодержать ложные включениÑ. Обычно Ñто означает, что поÑле первой директивы #REDIRECT идёт дополнительный текÑÑ‚ Ñо ÑÑылками.<br />\nÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока Ñодержит ÑÑылки на первое и второе перенаправлениÑ, а также первую Ñтроку текÑта второго перенаправлениÑ, обычно Ñодержащую \"реальное\" перенаправление на нужную Ñтатью, куда и первое перенаправление должно указывать.",
"brokenredirects" => "Разорванные перенаправлениÑ",
"brokenredirectstext" => "Следующие Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ на неÑущеÑтвующие Ñтатьи.",
"selflinks" => "Страницы, указывающие Ñами на ÑебÑ",
@@ -835,7 +835,7 @@ $3...
"noblockreason" => "Ð’Ñ‹ должны опиÑать причину блокировки.",
"blockipsuccesssub" => "Блокировка произведена",
"blockipsuccesstext" => "IP-Ð°Ð´Ñ€ÐµÑ \"$1\" заблокирован.
-<br>См. [[Специальные:СпиÑок_заблокированных_IP|ÑпиÑок заблокированных IP]] чтобы узнать, какие IP-адреÑа заблокированы.",
+<br />См. [[Специальные:СпиÑок_заблокированных_IP|ÑпиÑок заблокированных IP]] чтобы узнать, какие IP-адреÑа заблокированы.",
"unblockip" => "Разблокировать IP-адреÑ",
"unblockiptext" => "ИÑпользуйте форму ниже, чтобы воÑÑтановить возможноÑÑ‚ÑŒ запиÑьи Ñ Ñ€Ð°Ð½ÐµÐµ заблокированного
IP-адреÑа.",
@@ -868,7 +868,7 @@ IP-адреÑа.",
"lockdbsuccesssub" => "База данных заблокирована",
"unlockdbsuccesssub" => "База данных разблокирована",
"lockdbsuccesstext" => "База данных Википедии была заблокированна.
-<br>Ðе забудьте убрать блокировку поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ обÑлуживаниÑ.",
+<br />Ðе забудьте убрать блокировку поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ обÑлуживаниÑ.",
"unlockdbsuccesstext" => "База данных Википедии была разблокирована.",
# SQL query
diff --git a/languages/LanguageSc.php b/languages/LanguageSc.php
index 926babd99151..57359ae86b9e 100644
--- a/languages/LanguageSc.php
+++ b/languages/LanguageSc.php
@@ -252,7 +252,7 @@ Per favore, segnalate l'accaduto ad un administrator, segnalando la URL e l'ora
"logouttext" => "Logout effettuato.
Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo IP resterà riconoscibile), oppure puoi nuovamente richiedere il login con il precedente username, oppure come uno diverso.\n",
-"welcomecreation" => "<h2>Benvenuto, $1!</h2><p>Il tuo account è stato creato con successo.<br>Grazie per aver scelto di far crescere Wikipedia con il tuo aiuto.<br>Per rendere Wikipedia più tua, e per usarla più scorrevolmente, non dimenticare di personalizzare le tue preferenze.",
+"welcomecreation" => "<h2>Benvenuto, $1!</h2><p>Il tuo account è stato creato con successo.<br />Grazie per aver scelto di far crescere Wikipedia con il tuo aiuto.<br />Per rendere Wikipedia più tua, e per usarla più scorrevolmente, non dimenticare di personalizzare le tue preferenze.",
"loginpagetitle" => "Login",
"yourname" => "Il tuo user name",
@@ -260,11 +260,11 @@ Ora puoi continuare ad usare Wikipedia come utente anonimo (ma il tuo indirizzo
"yourpasswordagain" => "Ripeti la password",
"newusersonly" => " (solo per nuovi Utenti)",
"remembermypassword" => "Ricorda la mia password per più sessioni (richiede uso dei cookies).",
-"loginproblem" => "<b>Si è verificato un errore durante il tuo tentativo di login.</b><br>Riprova, sarai più fortunato!",
-"alreadyloggedin" => "<font color=red><b>Ehi, Utente $1, hai già fatto il login, sei già connesso al nostro server!</b></font><br>\n",
+"loginproblem" => "<b>Si è verificato un errore durante il tuo tentativo di login.</b><br />Riprova, sarai più fortunato!",
+"alreadyloggedin" => "<font color=red><b>Ehi, Utente $1, hai già fatto il login, sei già connesso al nostro server!</b></font><br />\n",
-"areyounew" => "Se sei nuovo in Wikipedia e desideri creare un nuovo user account, immetti uno user name (che sarà il tuo nome per Wikipedia, poi digita una password e ripetila nella casella successiva.<br>
-Indicare un indirizzo e-mail non è obbligatorio, solo facoltativo (sebbene consigliato).<br>Se per caso perdessi la tua password, potrai richiedere che ti sia rispedita alla casella di posta elettronica che ci fornirai.<br>\n",
+"areyounew" => "Se sei nuovo in Wikipedia e desideri creare un nuovo user account, immetti uno user name (che sarà il tuo nome per Wikipedia, poi digita una password e ripetila nella casella successiva.<br />
+Indicare un indirizzo e-mail non è obbligatorio, solo facoltativo (sebbene consigliato).<br />Se per caso perdessi la tua password, potrai richiedere che ti sia rispedita alla casella di posta elettronica che ci fornirai.<br />\n",
"login" => "Log in",
"userlogin" => "Log in",
@@ -280,9 +280,9 @@ Indicare un indirizzo e-mail non è obbligatorio, solo facoltativo (sebbene cons
"noname" => "Lo user name indicato non è valido, non è possibile creare un account a questo nome.",
"loginsuccesstitle" => "Login effettuato con successo!",
"loginsuccess" => "Sei stato ammesso alla connessione al server di Wikipedia con il nome utente di \"$1\".",
-"nosuchuser" => "Attenzione<br><br>a seguito di verifica, non ci risulta alcun Utente con il nome di \"$1\".<br><br>
+"nosuchuser" => "Attenzione<br /><br />a seguito di verifica, non ci risulta alcun Utente con il nome di \"$1\".<br /><br />
Controlla per favore il nome digitato, oppure usa il modulo qui sotto per creare un nuovo user account.",
-"wrongpassword" => "La password immessa non è corretta.<br><br>Riprova, per favore.",
+"wrongpassword" => "La password immessa non è corretta.<br /><br />Riprova, per favore.",
"mailmypassword" => "Spediscimi una nuova password in posta elettronica",
"passwordremindertitle" => "Servizio Password Reminder di Wikipedia",
"passwordremindertext" => "Qualcuno (probabilmente tu, con indirizzo IP $1)
@@ -302,8 +302,8 @@ Per favore, fai subito un log in non appena la ricevi.",
"preview" => "Anteprima",
"showpreview" => "Visualizza Anteprima",
"blockedtitle" => "Questo User name corrisponde purtroppo ad un Utente che è stato disabilitato alla modifica degli articoli.",
-"blockedtext" => "Il tuo User name o il tuo indirizzo IP sono stati bloccati da $1.<br>
-La motivazione del blocco è la seguente:<br>:''$2''<p>Se lo desideri, puoi contattare $1, o uno degli altri
+"blockedtext" => "Il tuo User name o il tuo indirizzo IP sono stati bloccati da $1.<br />
+La motivazione del blocco è la seguente:<br />:''$2''<p>Se lo desideri, puoi contattare $1, o uno degli altri
[[Wikipedia:administrators|administrators]] per discutere del blocco.",
"newarticle" => "(Nuovo)",
"newarticletext" => "Scrivi qui il tuo testo.",
@@ -314,7 +314,7 @@ La motivazione del blocco è la seguente:<br>:''$2''<p>Se lo desideri, puoi cont
"previewconflict" => "Questa anteprima rappresenta il testo nella casella di edizione di sopra, l'articolo apparirà n questa forma se sceglierai di salvare la pagina.",
"editing" => "Modifica di $1",
"editconflict" => "Conflitto di edizione: $1",
-"explainconflict" => "Qualcun altro ha salvato una sua versione dell'articolo nel tempo in cui tu stavi preparando la tua versione.<br>
+"explainconflict" => "Qualcun altro ha salvato una sua versione dell'articolo nel tempo in cui tu stavi preparando la tua versione.<br />
La casella di modifica di sopra contiene il testo dell'articolo nella sua forma attuale (cioè il testo attualmente online). Le tue modifiche sono invece contenute nella casella di modifica inferiore.
Dovrai inserire, se lo desideri, le tue modifiche nel testo esistente, e perciò scriverle nella casella di sopra.
<b>Soltanto</b> il testo nella casella di sopra sarà sakvato se premerai il bottone \"Salva\".\n<p>",
@@ -325,7 +325,7 @@ Se la salvi così, tutti i cambiamenti apportati dopo questa revisione verranno
"yourdiff" => "Differenze",
"copyrightwarning" => "Nota, per favore, che tutti i contributi a Wikipedia si considerano rilasciati sotto licenza di tipo GNU Free Documentation License
(vedi $1 per maggiori dettagli).
-Se non vuoi che il tuo testo possa essere modificato e ridistribuito da chiunque senza pietà e senza altri limiti, allora non inviarlo a Wikipedia, ma realizza piuttosto un tuo sito web personale.<br>
+Se non vuoi che il tuo testo possa essere modificato e ridistribuito da chiunque senza pietà e senza altri limiti, allora non inviarlo a Wikipedia, ma realizza piuttosto un tuo sito web personale.<br />
Con l'invio di questo testo stai garantendo, a tua responsabilità, che il testo è stato scritto da te personalmente ed originalmente, oppure che è stato copiato da una fonte di publico dominio, o una simile fonte, oppure che hai ottenuto espressa autorizzazione ad usare questo testo e che puoi dimostrarlo.
<strong>NON USARE MATERIALE COPERTO DA DIRITTO DI AUTORE (COPYRIGHT - (c)) IN MANCANZA DI ESPRESSA AUTORIZZAZIONE!!!</strong>",
@@ -364,7 +364,7 @@ Controlla per favore la URL che hai usato per accedere a questa pagina.\n",
Questo potrebbe dipendere dall'aver ricercato una parola di meno di tre caratteri.
Oppure potresti aver scritto male la richiesta, per esempio \"pesce and and azzurro\".
Per favore, riprova.",
-"matchtotals" => "La ricerca per la voce \"$1\" ha trovato<br>$2 riscontri nei titoli degli articoli e<br>$3 riscontri nei testi degli articoli.",
+"matchtotals" => "La ricerca per la voce \"$1\" ha trovato<br />$2 riscontri nei titoli degli articoli e<br />$3 riscontri nei testi degli articoli.",
"titlematches" => "Nei titoli degli articoli",
"notitlematches" => "Voce richiesta non trovata in titoli di articolo",
"textmatches" => "Nel testo degli articoli ",
@@ -376,8 +376,8 @@ Per favore, riprova.",
"nonefound" => "<strong>Nota</strong>: la ricerca di parole troppo comuni, come \"avere\" o \"essere\", che non sono indicizzate, può causare un esito negativo, così come indicare più di un termine da ricercare (solo le pagine che contengano tutti i termini ricercati verrebbero infatti visualizzate fra i risultati).",
"powersearch" => "Ricerca",
"powersearchtext" => "
-Cerca fra i campi :<br>
-$1<br>
+Cerca fra i campi :<br />
+$1<br />
$2 Elenca i redirects &nbsp; cerca per $3 $9",
@@ -526,7 +526,7 @@ Segui questo link: ($2) per modificare la pagina di descrizione del file che hai
"deleteimg" => "canc",
"deleteimgcompletely" => "canc",
"imghistlegend" => "Legenda: (cur) = immagine corrente, (canc) = cancella questa vecchia versione, (ripr) = ripristina questa vecchia versione come versione attuale.
-<br><i>Clicca su una data per vedere tutte le immagini che sono state caricate in quella data </i>.",
+<br /><i>Clicca su una data per vedere tutte le immagini che sono state caricate in quella data </i>.",
"imagelinks" => "Link alle immagini",
"linkstoimage" => "Le pagine seguenti linkano questa immagine:",
"nolinkstoimage" => "Nessuna pagina linka questa immagine.",
@@ -551,9 +551,9 @@ Questa media rivela che ci sono state una media di <b>$5</b> modifiche per cias
"maintenancebacklink" => "Torna alla pagina manutenzione",
"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.",
+"disambiguationstext" => "The following articles link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
"doubleredirects" => "Doppi Redirects",
-"doubleredirectstext" => "<b>Attenzione:</b> Questa lista può talvolta contenere dei risultati non corretti. Ciò potrebbe magari accadere perchè vi sono del testo aggiuntivo o dei link dopo il tag #REDIRECT.<br>\nOgni riga contiene i link al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene il \"reale\" articolo di destinazione, quello al quale anche il primo redirect dovrebbe puntare.",
+"doubleredirectstext" => "<b>Attenzione:</b> Questa lista può talvolta contenere dei risultati non corretti. Ciò potrebbe magari accadere perchè vi sono del testo aggiuntivo o dei link dopo il tag #REDIRECT.<br />\nOgni riga contiene i link al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene il \"reale\" articolo di destinazione, quello al quale anche il primo redirect dovrebbe puntare.",
"brokenredirects" => "Redirects errati",
"brokenredirectstext" => "I seguenti redirects puntano ad articoli non ancora creati.",
"selflinks" => "Pagine con Auto-Links",
@@ -717,7 +717,7 @@ Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avvis
"noblockreason" => "Devi obbligatoriamente fornire una motivazione per il blocco.",
"blockipsuccesssub" => "Blocco eseguito",
"blockipsuccesstext" => " L'indirizzo IP \"$1\" è stato bloccato.
-<br>Vedi [[Special:Ipblocklist|lista IP bloccati]].",
+<br />Vedi [[Special:Ipblocklist|lista IP bloccati]].",
"unblockip" => " Sblocca indirizzo IP",
"unblockiptext" => "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
"ipusubmit" => "Sblocca questo indirizzo IP",
@@ -732,7 +732,7 @@ Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avvis
#
"lockdb" => "Blocca il database",
"unlockdb" => "Sblocca il database",
-"lockdbtext" => "Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br><br>
+"lockdbtext" => "Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br /><br />
Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare e, soprattutto, che il prima possibile sbloccherai nuovamente il database, ripristinandone la corretta funzionalità, non appena avrai terminato le tue manutenzioni.",
"unlockdbtext" => "Sbloccare il database ripristinerà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere di eseguire operazioni che richiedano modifiche del database.
Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare.",
@@ -744,7 +744,7 @@ Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effett
"lockdbsuccesssub" => "Blocco del database eseguito",
"unlockdbsuccesssub" => "Sblocco del database eseguito, rimosso blocco",
"lockdbsuccesstext" => "Il database di Wikipedia è stato bloccato.
-<br>Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.",
+<br />Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.",
"unlockdbsuccesstext" => " Il database di Wikipedia è stato sbloccato.",
# SQL query
@@ -785,7 +785,7 @@ per poter spostare una pagina.",
"movepagebtn" => "Sposta questa pagina",
"pagemovedsub" => "Spostamento effettuato con successo",
"pagemovedtext" => "Pagina \"[[$1]]\" rinominata in \"[[$2]]\".",
-"articleexists" => "Una pagina con questo nome esiste già, oppure il nome che hai scelto non è valido.<br>
+"articleexists" => "Una pagina con questo nome esiste già, oppure il nome che hai scelto non è valido.<br />
Scegli, per cortesia, un titolo diverso per l'articolo.",
"talkexists" => "La pagina è stata spostata correttamente, ma la pagina di dicussione non poteva essere spostata perché ne esiste già un'altra con il nuovo titolo. Per favore, modifica manualmente i contenuti delle due pagine discussione, così da mantenerle entrambe per non perdere potenzialmente interessanti riflessioni.",
"movedto" => "spostata a ",
diff --git a/languages/LanguageSk.php b/languages/LanguageSk.php
index 6a0c9aac405a..a9bd863931cf 100644
--- a/languages/LanguageSk.php
+++ b/languages/LanguageSk.php
@@ -276,8 +276,8 @@ Nezabudnite si nastaviť užívateľské nastavenia.",
"yourpasswordagain" => "Zopakujte heslo",
"newusersonly" => " (iba noví užívatelia)",
"remembermypassword" => "PamätaÅ¥ si heslo aj po vypnutí poÄítaÄa.",
-"loginproblem" => "<b>Nastal problém pri prihlasovaní.</b><br>Skúste znova!",
-"alreadyloggedin" => "<font color=red><b>Užívateľ $1, vy už ste prihlásený!</b></font><br>\n",
+"loginproblem" => "<b>Nastal problém pri prihlasovaní.</b><br />Skúste znova!",
+"alreadyloggedin" => "<font color=red><b>Užívateľ $1, vy už ste prihlásený!</b></font><br />\n",
"login" => "Log in",
"userlogin" => "Log in",
@@ -317,7 +317,7 @@ Please log in again after you receive it.",
"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
+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" =>
@@ -351,7 +351,7 @@ If you save it, any changes made since this revision will be lost.</strong>\n",
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>
+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>",
@@ -412,8 +412,8 @@ 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>
+Search in namespaces :<br />
+$1<br />
$2 List redirects &nbsp; Search for $3 $9",
@@ -554,7 +554,7 @@ created and by whom, and anything else you may know about it.",
"deleteimgcompletely" => "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>.",
+<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.",
@@ -582,9 +582,9 @@ That comes to <b>$5</b> average edits per page, and <b>$6</b> views per edit.",
"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.",
+"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.",
+"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",
@@ -767,7 +767,7 @@ pages that were vandalized).",
"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.",
+<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.",
@@ -800,7 +800,7 @@ Please confirm that this is what you intend to do.",
"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.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The Wikipedia database has been unlocked.",
# SQL query
diff --git a/languages/LanguageSl.php b/languages/LanguageSl.php
index b52b2f6e46dc..e208cd380f52 100644
--- a/languages/LanguageSl.php
+++ b/languages/LanguageSl.php
@@ -293,8 +293,8 @@ Lahko nadaljujete z uporabo Wikipedije nepodpisani, ali pa se lahko ponovno vpiÅ
"yourpasswordagain" => "Ponovno vpišite geslo",
"newusersonly" => " (Samo novi uporabniki)",
"remembermypassword" => "Zapomni si moje geslo vseskozi.",
-"loginproblem" => "<b>Nastala je tažava z vašim vpisom.</b><br>Poskusite znova!",
-"alreadyloggedin" => "<font color=red><b>Uporabnik $1, ste že vpisani!</b></font><br>\n",
+"loginproblem" => "<b>Nastala je tažava z vašim vpisom.</b><br />Poskusite znova!",
+"alreadyloggedin" => "<font color=red><b>Uporabnik $1, ste že vpisani!</b></font><br />\n",
"login" => "Vpis",
"userlogin" => "Vpis",
@@ -331,7 +331,7 @@ Sedaj se lahko vpišete in spremenite vaše geslo.",
"showpreview" => "Pokaži predpregled",
"blockedtitle" => "Uporabnik je zaprt",
"blockedtext" => "Vaše uporabniško ime ali IP naslov je zaprl $1.
-Vzrok za to je naslednji:<br>''$2''<p>Lahko pokliÄete $1 ali katerega drugega
+Vzrok za to je naslednji:<br />''$2''<p>Lahko pokliÄete $1 ali katerega drugega
[[Wikipedija:Administratorji|administratorja]] za pogovor o zaprtju.",
"newarticle" => "(Nov)",
"newarticletext" =>
@@ -358,7 +358,7 @@ Morali boste spojiti vaÅ¡e spremembe v obstojeÄe besedilo.
ÄŒe jo boste shranili, bodo vse spremembe, narejene od tedaj, izgubljene.</strong>\n",
"yourdiff" => "Razlike",
"copyrightwarning" => "Prosimo upoštevajte, da se vsi doprinosi k Wikipediji smatrajo kot objave pod GNU licenco proste dokumentacije (glej $1 za podrobnosti).
-Če ne želite, da se vaša pisanja neusmiljeno urejujejo ali ponovno razdeljujejo prostovoljno, potem jih ne predlagajte tukaj.<br>
+Če ne želite, da se vaša pisanja neusmiljeno urejujejo ali ponovno razdeljujejo prostovoljno, potem jih ne predlagajte tukaj.<br />
Poleg tega nam obljubljate, da ste to napisali samo ali pa prepisali iz javno dostopnega ali podobnega prostega vira.
<strong>NE PREDLAGAJTE AVTORSKO ZAÅ ÄŒITENEGA DELA BREZ DOVOLJENJA!</strong>",
"longpagewarning" => "OPOZORILO: Ta stran je dolga $1 kilobitov; nekateri brskalniki s težavo urejujejo strani, ki so daljše kot 32 kB. Prosimo, da upoštevate delitev strani na manjše dele.",
@@ -413,8 +413,8 @@ Prosimo poskusite z drugim povpraševanjem.",
"nonefound" => "<strong>Opomba</strong>: neuspeÅ¡na iskanja velikokrat povzroÄijo iskanja vsakdanjih besed kot sta \"imeti\" in \"iz\", katera niso vneÅ¡ena v seznam, ali navajanja veÄ iskalnih izrazov (v izidu se bodo pojavile samo strani, ki vsebujejo iskalne izraze).",
"powersearch" => "Iskanje",
"powersearchtext" => "
-Iskanje v imenskem prostoru :<br>
-$1<br>
+Iskanje v imenskem prostoru :<br />
+$1<br />
$2 Seznam se preusmerja Iskanje za $3 $9",
"searchdisabled" => "<p>Oprostite! Iskanje po celotni bazi je zaradi hitrejÅ¡ega delovanja Wikipedije trenutno onomogoÄena. Lahko pa se poslužite z Googlovim iskalnikom.</p>
@@ -433,7 +433,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Iskanje z Googlom\">
<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=domains value=\"{$wgServer}\"><br /><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br />
</font>
</td></tr></TABLE>
</FORM>
@@ -607,7 +607,7 @@ izdelana in kdo jo je izdelal ali karkoli bi Å¡e vedeli o njej.",
"deleteimgcompletely" => "bri",
"imghistlegend" => "Napotek: (tre) = trenutna slika, (bri) = briši
zadnjo inaÄico, (vrn) = vrni sliko na to zadnjo inaÄico.
-<br><i>Klikni na datum, da vidiš katera slika je bila tedaj naložena</i>.",
+<br /><i>Klikni na datum, da vidiš katera slika je bila tedaj naložena</i>.",
"imagelinks" => "Povezave slike",
"linkstoimage" => "Naslednje strani so vezane s to sliko:",
"nolinkstoimage" => "Nobena stran ni vezana s to sliko.",
@@ -634,9 +634,9 @@ na eno urejevanje.",
"maintenancebacklink" => "Nazaj na vzdrževalno stran",
"disambiguations" => "Razjasnjevalne strani",
"disambiguationspage" => "Wikipedija:Povezave_na_razjasnjevalne_strani",
-"disambiguationstext" => "Naslednji Älanki so povezani na <i>razjasnjevalno stran</i>. Morajo biti povezani na pripadajoÄo vsebino.<br>Stran je razjasnjevalna, Äe je povezana iz $1.<br>Povezave iz drugih imenskih podroÄij tukaj <i>niso</i> prikazane.",
+"disambiguationstext" => "Naslednji Älanki so povezani na <i>razjasnjevalno stran</i>. Morajo biti povezani na pripadajoÄo vsebino.<br />Stran je razjasnjevalna, Äe je povezana iz $1.<br />Povezave iz drugih imenskih podroÄij tukaj <i>niso</i> prikazane.",
"doubleredirects" => "Dvojne preusmeritve",
-"doubleredirectstext" => "<b>Pozor:</b> ta seznam lahko vsebuje nepravilne Älene. To ponavadi pomeni, da obstaja dodatno besedilo s povezavami pod prvim ukazom #REDIRECT.<br>\nVsaka vrsta vsebuje povezave k prvi in drugi preusmeritvi, kot tudi prvo vrstico drugega preusmerjenega besedila, kar ponavadi da \"resniÄni\" ciljni Älanek, na katerega mora kazati prva preusmeritev.",
+"doubleredirectstext" => "<b>Pozor:</b> ta seznam lahko vsebuje nepravilne Älene. To ponavadi pomeni, da obstaja dodatno besedilo s povezavami pod prvim ukazom #REDIRECT.<br />\nVsaka vrsta vsebuje povezave k prvi in drugi preusmeritvi, kot tudi prvo vrstico drugega preusmerjenega besedila, kar ponavadi da \"resniÄni\" ciljni Älanek, na katerega mora kazati prva preusmeritev.",
"brokenredirects" => "Polomljene preusmeritve",
"brokenredirectstext" => "Naslednje preusmeritve kažejo na neobstojeÄe Älanke.",
"selflinks" => "strani z lastnimi povezavami",
@@ -808,7 +808,7 @@ Vnesi razloge spodaj (na primer z navedbo doloÄenih strani, ki so jih po nepotr
"noblockreason" => "Morate navesti razlog prekinitve.",
"blockipsuccesssub" => "Prekinitev je uspela",
"blockipsuccesstext" => "IP naslov \"$1\" je prekinjen.
-<br>Glej [[Posebno:Ipseznamprekinitev|seznam prekinitev IP]] za pregled prekinitev.",
+<br />Glej [[Posebno:Ipseznamprekinitev|seznam prekinitev IP]] za pregled prekinitev.",
"unblockip" => "Poveži IP naslov",
"unblockiptext" => "Uporabi spodnjo obliko za obnovitev dostopa zapisa prejšnjega prekinjenega IP naslova.",
"ipusubmit" => "Poveži ta naslov",
@@ -837,7 +837,7 @@ Prosimo potrdite vaÅ¡ resniÄni namen.",
"lockdbsuccesssub" => "Zaklenitev podatkovne baze je uspela",
"unlockdbsuccesssub" => "Podatkovna baza je odklenjena",
"lockdbsuccesstext" => "Podatkovna baza Wikipedije je bila zaklenjena.
-<br>Ne pozabite odkleniti, ko boste konÄali z vzdrževanjem.",
+<br />Ne pozabite odkleniti, ko boste konÄali z vzdrževanjem.",
"unlockdbsuccesstext" => "Podatkovna baza Wikipedije je bila odklenjena.",
# SQL query
diff --git a/languages/LanguageSq.php b/languages/LanguageSq.php
index d9a856eaf5bc..b84acaf8b838 100644
--- a/languages/LanguageSq.php
+++ b/languages/LanguageSq.php
@@ -122,8 +122,8 @@ require_once("LanguageUtf8.php");
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Redakto faqet me dopjo-shtypje (JavaScript)",
"tog-editsection"=>"Lejo redaktimin e seksioneve me [redakto] lidhje",
-"tog-editsectiononrightclick"=>"Lejo redaktimin e seksioneve me djathtas-shtypje<br> mbi emrin e seksionit (JavaScript)",
-"tog-showtoc"=>"Trego tabelën e përmbajtjeve<br>(për faqet me më shume se 3 tituj)",
+"tog-editsectiononrightclick"=>"Lejo redaktimin e seksioneve me djathtas-shtypje<br /> mbi emrin e seksionit (JavaScript)",
+"tog-showtoc"=>"Trego tabelën e përmbajtjeve<br />(për faqet me më shume se 3 tituj)",
"tog-rememberpassword" => "Mbaj mënd fjalëkalimin për vizitën e ardhshme",
"tog-editwidth" => "Kutija e redaktimit ka gjerësi te plotë",
"tog-watchdefault" => "Shto faqet që redakton tek lista mbikqyrëse",
@@ -324,13 +324,13 @@ Mos harro të vendosësh preferimet e tua të uikipedias.",
"yourpasswordagain" => "Fut fjalëkalimin përsëri",
"newusersonly" => " (përdoruesit e rinj vetëm)",
"remembermypassword" => "Mbaj mënd fjalëkalimin tim për tërë vizitat e ardhshme.",
-"loginproblem" => "<b>Kishte një problem me hyrjen tënde.</b><br>Provoje përsëri!",
-"alreadyloggedin" => "<font color=red><b>Përdorues $1, ti ke hyrë brënda më parë!</b></font><br>\n",
+"loginproblem" => "<b>Kishte një problem me hyrjen tënde.</b><br />Provoje përsëri!",
+"alreadyloggedin" => "<font color=red><b>Përdorues $1, ti ke hyrë brënda më parë!</b></font><br />\n",
"areyounew" => "N.q.s. je një përdorues i ri i $wgSitename dhe do të hapësh një llogari,
fut një emër, pastaj fut një fjalëkalim dy herë.
Adresa jote e email-it nuk është e detyrueshme; n.q.s. ti harron fjalëkalimin mund të kërkosh që
-ta dergojme tek adresa që na dhe.<br>\n",
+ta dergojme tek adresa që na dhe.<br />\n",
"login" => "Hyrje",
"userlogin" => "Hyrje",
@@ -373,7 +373,7 @@ Hyni përsëri mbasi ta kesh marrë.",
"showpreview" => "Trego parashikimin",
"blockedtitle" => "Përdoruesi është bllokuar",
"blockedtext" => "Emri yt ose adresa e IP-së është bllokuar nga $1.
-Arsyeja e dhënë është kjo:<br>''$2''<p>Mund të kontaktosh $1 ose një nga
+Arsyeja e dhënë është kjo:<br />''$2''<p>Mund të kontaktosh $1 ose një nga
[[$wgMetaNamespace:Administruesit|administruesit]] e tjerë për të diskutuar bllokimin.
Vë re, nuk mund të përdorësh \"dërgoji email këtij përdoruesi\" n.q.s. nuk ke një adresë të saktë
@@ -420,7 +420,7 @@ Në qoftë se e ruan, çdo ndryshim i bërë deri tani do të humbet.</strong>\n
të konsideruara të dhëna nën liçensën GNU Free Documentation License
(shiko $1 për detaje).
Në qoftë se nuk dëshiron që kontributet e tua të redaktohen pa mëshirë dhe të jepen
-kudo, atëherë mos i jep këtu.<br>
+kudo, atëherë mos i jep këtu.<br />
Gjithashtu, ti po na premton që i ke shkruajtur vetë këto, ose i ke kopjuar nga një
vënd public (public domain) ose diçka e ngjashme e lirë.
<strong>MOS JEPNI PUNIME QE JANE NEN COPYRIGHT PA PASUR LEJE!</strong>",
@@ -490,8 +490,8 @@ të cilat nuk janë të futura në rregjistër, ose duke dhënë më shumë se n
që i kanë të gjitha ato fjalë do të tregohen si rezultate).",
"powersearch" => "Kërko",
"powersearchtext" => "
-Kërko në hapësirën:<br>
-$1<br>
+Kërko në hapësirën:<br />
+$1<br />
$2 Lidhje ridrejtuese &nbsp; Kërko për $3 $9",
"searchdisabled" => "<p>Kërkim me tekst të plotë është bllokuar tani për tani ngaqë
shërbyesi është shumë i ngarkuar; shpresojmë ta nxjerrim prapë në gjëndje normale mbas disa punimeve.
@@ -509,9 +509,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Kërkim me Google\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -684,7 +684,7 @@ tjetër që na duhet të dimë për të.",
"deleteimgcompletely" => "gris",
"imghistlegend" => "Legjendë: (tani) = ky është skedari i tanishëm, (gris) = grise
këtë version të vjetër, (ktheje) = ktheje në këtë version të vjetër.
-<br><i>Shtyp datën për të parë skedarin e dhënë në atë ditë</i>.",
+<br /><i>Shtyp datën për të parë skedarin e dhënë në atë ditë</i>.",
"imagelinks" => "Lidhje skedarësh",
"linkstoimage" => "Këto faqe lidhen tek ky skedar:",
"nolinkstoimage" => "Nuk ka asnjë faqe që të lidhet tek ky skedar.",
@@ -715,11 +715,11 @@ rregjistrin, kështuqë mos e fresko faqen mbas çdo ndryshimi ;-)",
"disambiguationspage" => "$wgMetaNamespace:Lidhje_tek_faqe_qartësuese",
"disambiguationstext" => "Artikujt që vijojnë lidhen tek një <i>faqe qartësuese</i>. Ato duhet të lidhen tek tema e përshtatshme
-<br>Një faqe trajtohet si qartësuese lidhet nga $1.<br>Lidhje nga hapësira të tjera <i>nuk</i> jepen këtu.",
+<br />Një faqe trajtohet si qartësuese lidhet nga $1.<br />Lidhje nga hapësira të tjera <i>nuk</i> jepen këtu.",
"doubleredirects" => "Dopjo ridrejtime",
"doubleredirectstext" => "<b>Kujdes:</b> Kjo listë mund të ketë lidhje gabim. D.m.th. ka tekst dhe lidhje mbas #REDIRECT-it të parë.
-<br>\nÇdo rresht ka lidhje tek ridrejtimi i parë dhe i dytë, gjithashtu ka edhe rreshtin e parë të tekstit të ridrejtimit të dytë,
+<br />\nÇdo rresht ka lidhje tek ridrejtimi i parë dhe i dytë, gjithashtu ka edhe rreshtin e parë të tekstit të ridrejtimit të dytë,
duke dhënë dhe artikullin e \"vërtetë\", me të cilin ridrejtimi i parë duhet të lidhet.",
"brokenredirects" => "Ridrejtime të prishura",
@@ -938,7 +938,7 @@ vandalizuan).",
"noblockreason" => "Duhet të japësh një arsye për bllokimin.",
"blockipsuccesssub" => "Bllokimi u bë me sukses",
"blockipsuccesstext" => "\"$1\" është bllokuar.
-<br>Shiko [[Speciale:Ipblocklist|IP blloko listë]] për të parë bllokimet.",
+<br />Shiko [[Speciale:Ipblocklist|IP blloko listë]] për të parë bllokimet.",
"unblockip" => "Ç'blloko përdoruesin",
"unblockiptext" => "Përdor formularin e më poshtëm për t'i ridhënë leje shkrimi
një përdoruesi ose IP adreseje të bllokuar.",
@@ -972,7 +972,7 @@ Të lutem konfirmo që me vërte do të kryesh këtë veprim.",
"lockdbsuccesssub" => "Rregjistri u bllokua me sukses",
"unlockdbsuccesssub" => "Rregjistri u ç'bllokua me sukses",
"lockdbsuccesstext" => "Rregjistri i $wgSitename është bllokuar.
-<br>Kujtohu ta ç'bllokosh mbasi të kesh mbaruar mirëmbajtjen.",
+<br />Kujtohu ta ç'bllokosh mbasi të kesh mbaruar mirëmbajtjen.",
"unlockdbsuccesstext" => "Rregjistri i $wgSitename është ç'bllokuar.",
# SQL query
diff --git a/languages/LanguageSr.php b/languages/LanguageSr.php
index 369bdd6d2769..5ed09caa7981 100644
--- a/languages/LanguageSr.php
+++ b/languages/LanguageSr.php
@@ -128,8 +128,8 @@ require_once( "LanguageUtf8.php" );
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "Мењај Ñтранице двоÑтруким кликом (захтева JavaScript)",
"tog-editsection"=>"Омогући измену делова [мењај] везама",
-"tog-editsectiononrightclick"=>"Омогући измену делова деÑним кликом<br> на њихове наÑлове (захтева JavaScript)",
-"tog-showtoc"=>"Прикажи Ñадржај<br>(у Ñвим чланцима Ñа више од три поднаÑлова)",
+"tog-editsectiononrightclick"=>"Омогући измену делова деÑним кликом<br /> на њихове наÑлове (захтева JavaScript)",
+"tog-showtoc"=>"Прикажи Ñадржај<br />(у Ñвим чланцима Ñа више од три поднаÑлова)",
"tog-rememberpassword" => "Памти шифру кроз више ÑеанÑи",
"tog-editwidth" => "Поље за измене има пуну ширину",
"tog-watchdefault" => "Додај Ñтранице које мењам у мој ÑпиÑак гледања",
@@ -335,8 +335,8 @@ MySQL је вратио грешку \"$3: $4\".\n",
"yourpasswordagain" => "Поново укуцајте шифру",
"newusersonly" => " (Ñамо за нове кориÑнике)",
"remembermypassword" => "Запамти моју шифру током више ÑеанÑи.",
-"loginproblem" => "<b>Било је проблема Ñа вашим пријављивањем.</b><br>Пробајте поново!",
-"alreadyloggedin" => "<font color=red><b>КориÑниче $1, већ Ñте пријављени!</b></font><br>\n",
+"loginproblem" => "<b>Било је проблема Ñа вашим пријављивањем.</b><br />Пробајте поново!",
+"alreadyloggedin" => "<font color=red><b>КориÑниче $1, већ Ñте пријављени!</b></font><br />\n",
"login" => "Пријави Ñе",
"userlogin" => "Пријави Ñе",
@@ -382,7 +382,7 @@ Sada biste trebali da se ulogujete i promenite svoju sifru.",
"showpreview" => "Прикажи предпреглед",
"blockedtitle" => "КориÑник је блокиран",
"blockedtext" => "Ваше кориÑничко име или ИП адреÑа је блокирана од Ñтране $1.
-Дати разлог је Ñледећи:<br>''$2''<p>Можете Ñе обратити $1 или неком другом
+Дати разлог је Ñледећи:<br />''$2''<p>Можете Ñе обратити $1 или неком другом
[[Википедија:админиÑтратори|админиÑтратору]] да биÑте разговарали о блокади.",
"whitelistedittitle" => "Обавезно је пријављивање за мењање",
"whitelistedittext" => "Морате да Ñе [[ПоÑебно:Пријављивање|пријавите]] да биÑте мењали чланке.",
@@ -425,7 +425,7 @@ Sada biste trebali da se ulogujete i promenite svoju sifru.",
Ñматра да је објављен под ГÐУ лиценцом за Ñлободну документацију
(погледајте $1 за детаље).
Ðко не желите да Ñе ваше пиÑање мења и редиÑтрибуира
-без ограничења, онда га немојте Ñлати овде.<br>
+без ограничења, онда га немојте Ñлати овде.<br />
Такође нам обећавате да Ñте га Ñами напиÑали, или иÑкопирали из
извора који је у јавном влаÑништву или Ñличног Ñлободног извора.
<strong>ÐЕ ШÐЉИТЕ РÐД ЗÐШТИЋЕРÐУТОРСКИМ ПРÐВИМРБЕЗ ДОЗВОЛЕ!</strong>",
@@ -493,8 +493,8 @@ Sada biste trebali da se ulogujete i promenite svoju sifru.",
које Ñадрже Ñве изразе који Ñе траже ће Ñе појавити у резултату).",
"powersearch" => "Тражи",
"powersearchtext" => "
-Претрага и уменÑким проÑторима:<br>
-$1<br>
+Претрага и уменÑким проÑторима:<br />
+$1<br />
$2 ИзлиÑтај преуÑмерења &nbsp; Тражи $3 $9",
"searchdisabled" => "<p>Жалимо! Пуна претрага текÑта је привремено онемогућена, због бржег рада Википедије. Умеђувремену, можете кориÑтити Гугле претрагу иÑпод, која може бити заÑтарела.</p>
@@ -513,7 +513,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"\">
<INPUT type=submit name=btnG VALUE=\"Гугле претрага\">
<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=domains value=\"{$wgServer}\"><br /><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br />
</font>
</td></tr></TABLE>
</FORM>
@@ -702,7 +702,7 @@ or '''<nowiki>[[media:file.ogg]]</nowiki>''' за звукове.
"deleteimgcompletely" => "обр",
"imghistlegend" => "Објашњење: (трен) = ово је тренутна Ñлика, (обр) = обриши
ову Ñтару верзију, (врт) = врати на ову Ñтару верзију.
-<br><i>Кликните на датум давидите Ñлику поÑлату тог датума</i>.",
+<br /><i>Кликните на датум давидите Ñлику поÑлату тог датума</i>.",
"imagelinks" => "Употреба Ñлике",
"linkstoimage" => "Следеће Ñтранице кориÑте на ову Ñлику:",
"nolinkstoimage" => "Ðема Ñтраница које кориÑте ову Ñлику.",
@@ -730,9 +730,9 @@ or '''<nowiki>[[media:file.ogg]]</nowiki>''' за звукове.
"maintenancebacklink" => "Ðазад на Ñтраницу за одржавање",
"disambiguations" => "Странице за обездвоÑмишљење",
"disambiguationspage" => "Википедија:Линкови_на_Ñтранице_за_обезвоÑмишљење",
-"disambiguationstext" => "Следећи чланци Ñе повезују Ñа <i>Ñтраницом за обездвоÑмишљење</i>. УмеÑто тога, они би требали да Ñе повезују Ñа одговарајућом темом.<br>Страница Ñе третира као обездвоÑмишљенÑка ако је повезана Ñа $1.<br>Линкови из оÑталих именÑких проÑтора <i>ниÑу</i> наведени овде.",
+"disambiguationstext" => "Следећи чланци Ñе повезују Ñа <i>Ñтраницом за обездвоÑмишљење</i>. УмеÑто тога, они би требали да Ñе повезују Ñа одговарајућом темом.<br />Страница Ñе третира као обездвоÑмишљенÑка ако је повезана Ñа $1.<br />Линкови из оÑталих именÑких проÑтора <i>ниÑу</i> наведени овде.",
"doubleredirects" => "ДвоÑтрука преуÑмерења",
-"doubleredirectstext" => "<b>Пажња:</b> Овај ÑпиÑак може да Ñадржи лажне резултате. То обично значи да поÑтоји додатни текÑÑ‚ Ñа везама иÑпод првог #REDIRECT.<br>\nСваки ред Ñадржи везе на прво и друго преуÑмерење, као и на прву линију текÑта другог преуÑмерења, што обично даје \"прави\" циљни чланак, на који би прво преуÑмерење и требало да показује.",
+"doubleredirectstext" => "<b>Пажња:</b> Овај ÑпиÑак може да Ñадржи лажне резултате. То обично значи да поÑтоји додатни текÑÑ‚ Ñа везама иÑпод првог #REDIRECT.<br />\nСваки ред Ñадржи везе на прво и друго преуÑмерење, као и на прву линију текÑта другог преуÑмерења, што обично даје \"прави\" циљни чланак, на који би прво преуÑмерење и требало да показује.",
"brokenredirects" => "Покварена преуÑмерења",
"brokenredirectstext" => "Следећа преуÑмерења Ñу повезана на непоÑтојећи чланак.",
"selflinks" => "Странице Ñа Ñамовезама",
@@ -948,7 +948,7 @@ $3...
"noblockreason" => "Морате дати разлог за обуздавање.",
"blockipsuccesssub" => "Обуздавање је уÑпело",
"blockipsuccesstext" => "\"$1\" је обуздан.
-<br>Погледајте [[ПоÑебно:ИПÑпиÑакаобузданих|ИП ÑпиÑак обузданих]] за преглед обуздавања.",
+<br />Погледајте [[ПоÑебно:ИПÑпиÑакаобузданих|ИП ÑпиÑак обузданих]] за преглед обуздавања.",
"unblockip" => "ОтпуÑти кориÑника",
"unblockiptext" => "Употребите доњи упитник да биÑÑ‚ вратили право пиÑања
раније обузданој ИП адреÑи или кориÑничком имену.",
@@ -987,7 +987,7 @@ $3...
"lockdbsuccesssub" => "База је закључана",
"unlockdbsuccesssub" => "База је откључана",
"lockdbsuccesstext" => "Википедијина база података је закључана.
-<br>Сетите Ñе да је откључате када завршите Ñа одржавањем.",
+<br />Сетите Ñе да је откључате када завршите Ñа одржавањем.",
"unlockdbsuccesstext" => "Википедијина база података је откључана.",
# SQL query
diff --git a/languages/LanguageSv.php b/languages/LanguageSv.php
index 3883071e6e3b..cd5ee973bf58 100644
--- a/languages/LanguageSv.php
+++ b/languages/LanguageSv.php
@@ -362,8 +362,8 @@ igen som samma eller annan användare.\n",
"yourpasswordagain" => "Upprepa lösenord",
"newusersonly" => " (bara för nya användare)",
"remembermypassword" => "Kom ihåg mitt lösenord till nästa gång.",
-"loginproblem" => "<b>Det var svårt att logga in dig .</b><br>Pröva igen!",
-"alreadyloggedin" => "<font color=red><b>Användare $1, du är redan inloggad !</b></font><br>\n",
+"loginproblem" => "<b>Det var svårt att logga in dig .</b><br />Pröva igen!",
+"alreadyloggedin" => "<font color=red><b>Användare $1, du är redan inloggad !</b></font><br />\n",
"login" => "Logga in",
"userlogin" => "Logga in",
@@ -404,7 +404,7 @@ Var snäll och logga in igen när du fått meddelandet.",
"showpreview" => "Visa förhandgranskning",
"blockedtitle" => "Användaren är spärrad",
"blockedtext" => "Ditt användarnamn har blivit spärrat av $1.
-Anledning är att:<br>''$2''<p>Ta kontakt med $1 eller en av de andra
+Anledning är att:<br />''$2''<p>Ta kontakt med $1 eller en av de andra
[[Wikipedia:Administratörer|administratörerna]] för att diskutera varför du blivit spärrad", // "
"newarticle" => "(Ny)",
"newarticletext" => "Du har klickat på en röd länk, en sida som inte finns ännu. Du kan hjälpa till genom att själv skriva vad du vet om ämnet i fältet nedan. Om du inte vill skriva något kan du bara trycka på \"tillbaka\" i din webbläsare.",
@@ -431,7 +431,7 @@ av den här sidan. Om du sparar den, kommer alla ändringar på denns sida före
"copyrightwarning" => "Observera att alla bidrag till Wikipedia är
att betrakta som utgivna under GNU Free Documentation License
(se $1 för detaljer).
-Om du inte vill ha din text redigerad och kopierad efter andras gottfinnade så skall du inte skriva någon text här.<br>
+Om du inte vill ha din text redigerad och kopierad efter andras gottfinnade så skall du inte skriva någon text här.<br />
Du lovar oss också att du skrev texten själv, eller kopierade från public domain eller liknande fri resurs.<BR>
<strong>LÄGG ALDRIG UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN FÖRFATTARENS TILLÅTELSE!</strong>",
@@ -493,8 +493,8 @@ vilka inte indexeras, eller att specificera flera sökord (bara
sidor som innehåller alla sökorden hittas).",
"powersearch" => "Sök",
"powersearchtext" => "
-Sök i namnutrymme :<br>
-$1<br>
+Sök i namnutrymme :<br />
+$1<br />
$2 List redirects &nbsp; Sök efter $3 $9",
@@ -640,7 +640,7 @@ när den skapades och vem som gjort den och allt annat du vet om den.",
"deleteimgcompletely" => "radera",
"imghistlegend" => "Legend: (nuvarande) = detta är den nuvarande bilden,
(ta bort) = ta bort den gamla version, (återgå) = återgå till en gammal version.
-<br><i>Klicka på ett datum för att se bilden som laddades upp den dagen</i>.", //"
+<br /><i>Klicka på ett datum för att se bilden som laddades upp den dagen</i>.", //"
"imagelinks" => "Bildlänk",
"linkstoimage" => "De följande sidorna länkar till den här bilden:",
"nolinkstoimage" => "Det finns ingen sida som länkar till den här bilden.",
@@ -668,9 +668,9 @@ och <b>$6</b> sidvisningar per ändring.",
"maintenancebacklink" => "Tillbaka till underhållssidorna",
"disambiguations" => "Sidor med tvetydiga länkar",
"disambiguationspage" => "Wikipedia:Länkar till sidor med tvetydiga titlar",
-"disambiguationstext" => "Följande artiklar länkar till en <i>sidor med tvetydliga titlar</i>. De ska länka till en sidor med en korrekt titel.<br>En sida behandlar som tvetydig om den länkar från $1. <br>Länkar från andra namngrupper är <i>inte</i> listade här.",
+"disambiguationstext" => "Följande artiklar länkar till en <i>sidor med tvetydliga titlar</i>. De ska länka till en sidor med en korrekt titel.<br />En sida behandlar som tvetydig om den länkar från $1. <br />Länkar från andra namngrupper är <i>inte</i> listade här.",
"doubleredirects" => "Dubbla omdirigeringar",
-"doubleredirectstext" => "<b>OBS:</b> Den här listan kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br>\n Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den \"riktiga\" artikeln, vilket egentligen den första omdirigeringen ska peka på.",
+"doubleredirectstext" => "<b>OBS:</b> Den här listan kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br />\n Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den \"riktiga\" artikeln, vilket egentligen den första omdirigeringen ska peka på.",
"brokenredirects" => "DÃ¥liga omdirigeringar",
"brokenredirectstext" => "Följande länkar omdirigerar till en artikel som inte existerar.",
"selflinks" => "Sidor med länkar till sig själva",
@@ -851,7 +851,7 @@ Fyll i anledningen till blockering nedan (till exempel vilka artiklar som klottr
"noblockreason" => "Du måste ange en anledning till varför du blockerar.",
"blockipsuccesssub" => "Blockeringen lyckades",
"blockipsuccesstext" => "IP-adressen \"$1\" har blockerats.
-<br>Se [[Speciel:Ipblocklist|IP blockeringslistan]] för alla blockeringar.",
+<br />Se [[Speciel:Ipblocklist|IP blockeringslistan]] för alla blockeringar.",
"unblockip" => "Ta bort blockering av IP-adress",
"unblockiptext" => "Använd nedanstående formulär för att återställa skrivrättigheten för en tidigare blockerad IP-adress.",
"ipusubmit" => "Ta bort blockering för den här adressen",
@@ -879,7 +879,7 @@ Bekräfta att du vill göra detta.",
"lockdbsuccesssub" => "Databasen har låsts",
"unlockdbsuccesssub" => "Databasen har låsts upp",
"lockdbsuccesstext" => "Wikipediadatabasen är låst.
-<br>Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.",
+<br />Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.",
"unlockdbsuccesstext" => "Wikipediadatabasen är upplåst.",
// SQL query
diff --git a/languages/LanguageTa.php b/languages/LanguageTa.php
index 7e97ff88c70a..33355942fa97 100644
--- a/languages/LanguageTa.php
+++ b/languages/LanguageTa.php
@@ -148,7 +148,7 @@ require_once( "LanguageUtf8.php" );
"tog-editondblclick" => "இரடà¯à®Ÿà¯ˆà®šà¯ சொடà¯à®•à¯à®•à®¿à®²à¯ பகà¯à®•à®™à¯à®•à®³à¯ˆà®¤à¯ தொக௠(ஜாவாஸà¯à®•à®¿à®°à®¿à®ªà¯à®Ÿà¯)",
"tog-editsection"=>"இணைபà¯à®ªà¯à®µà®´à®¿ (தொகà¯à®ªà¯à®ªà¯) பிரிவà¯à®¤à¯ தொகà¯à®ªà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯",
"tog-editsectiononrightclick"=>"வலச௠சொடà¯à®•à¯à®•à¯à®µà®´à®¿ பிரிவà¯à®¤à¯ தலைபà¯à®ªà¯ தொகà¯à®ªà¯à®ªà®¤à¯ˆ செயல௠படà¯à®¤à¯à®¤à¯ (ஜாவாஸà¯à®•à®¿à®°à®¿à®ªà¯à®Ÿà¯)",
-"tog-showtoc"=>"உளà¯à®³à®Ÿà®•à¯à®• அடà¯à®Ÿà®µà®£à¯ˆà®¯à¯ˆà®•à¯ காணà¯à®ªà®¿<br>(மூனà¯à®±à¯à®•à¯à®•à¯ மேறà¯à®ªà®Ÿà¯à®Ÿ தலைபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®Ÿà¯ˆà®¯ கடà¯à®Ÿà¯à®°à¯ˆà®•à®³à¯à®•à¯à®•à¯)",
+"tog-showtoc"=>"உளà¯à®³à®Ÿà®•à¯à®• அடà¯à®Ÿà®µà®£à¯ˆà®¯à¯ˆà®•à¯ காணà¯à®ªà®¿<br />(மூனà¯à®±à¯à®•à¯à®•à¯ மேறà¯à®ªà®Ÿà¯à®Ÿ தலைபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®Ÿà¯ˆà®¯ கடà¯à®Ÿà¯à®°à¯ˆà®•à®³à¯à®•à¯à®•à¯)",
"tog-rememberpassword" => "அமரà¯à®µà¯à®•à®³à¯à®•à¯à®•à¯ இடையே கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ ஞாபகதà¯à®¤à®¿à®²à¯ வைதà¯à®¤à¯à®•à¯à®•à¯Šà®³à¯",
"tog-editwidth" => "தொகà¯à®ªà¯à®ªà¯à®•à¯ கடà¯à®Ÿà®®à¯ à®®à¯à®´à¯ அகலதà¯à®¤à¯ˆà®•à¯ கொணà¯à®Ÿà®¤à¯",
"tog-watchdefault" => "நீஙà¯à®•à®³à¯ தொகà¯à®¤à¯à®¤ பகà¯à®•à®™à¯à®•à®³à¯ˆ, உஙà¯à®•à®³à¯ கவனிபà¯à®ªà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®²à¯(watchlist) சேரà¯à®™à¯à®•à®³à¯",
@@ -321,8 +321,8 @@ MySQL returned error \"$3: $4\".\n",
"badtitletext" => "கோரபà¯à®ªà®Ÿà¯à®Ÿ பகà¯à®•à®¤à¯à®¤à®¿à®©à¯ தலைபà¯à®ªà¯ செலà¯à®²à®¾à®¤à¯, வெறà¯à®®à¯ˆ, அலà¯à®²à®¤à¯ பிழையாக இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ மொழிகளிடை அலà¯à®²à®¤à¯ விகà¯à®•à®¿à®¯à®¿à®Ÿà¯ˆà®¤à¯ தலைபà¯à®ªà®¾à®•à¯à®®à¯.",
"perfdisabled" => "மனà¯à®©à®¿à®•à¯à®•à®µà¯à®®à¯! இநà¯à®¤ வசதி தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®• செயலறà¯à®±à®¤à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. à®à®©à¯†à®©à®¿à®²à¯ இத௠விகà¯à®•à®¿à®¯à¯ˆ à®’à®°à¯à®µà®°à¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®¤ அளவà¯à®•à¯à®•à¯ வேகதà¯à®¤à¯ˆà®•à¯ கà¯à®±à¯ˆà®¤à¯à®¤à¯à®³à¯à®³à®¤à¯.",
"perfdisabledsub" => "இதோ $1: இலிரà¯à®¨à¯à®¤à¯ ஒர௠சேமிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ ஒர௠நகலà¯",
-"wrong_wfQuery_params" => "பிழையான அளபà¯à®°à¯à®•à¯à®•à®³à¯(parameters) wfQuery()<br>
-செயல௠(Function): $1<br>
+"wrong_wfQuery_params" => "பிழையான அளபà¯à®°à¯à®•à¯à®•à®³à¯(parameters) wfQuery()<br />
+செயல௠(Function): $1<br />
வினவல௠(Query): $2
",
"viewsource" => "மூலதà¯à®¤à¯ˆà®ªà¯ பாரà¯",
@@ -417,7 +417,7 @@ Note to AOL users
"yourdiff" => "விதà¯à®¤à®¿à®¯à®¾à®šà®™à¯à®•à®³à¯",
"copyrightwarning" => "விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾à®µà¯à®•à¯à®•à®¾à®© ஆகà¯à®•à®™à¯à®•à®³à¯ அனைதà¯à®¤à¯à®®à¯ ஜிஎனà¯à®¯à¯‚ விடà¯à®¤à®²à¯ˆ மனபà¯à®ªà®¾à®™à¯à®•à¯Šà®Ÿà¯ உரà¯à®µà®¾à®© ஆவண அனà¯à®®à®¤à®¿ (GNU Free Documentation License) à®®à¯à®±à¯ˆà®¯à®¿à®©à¯ கீழ௠வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à®¾à®•à®µà¯‡ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ எனà¯à®ªà®¤à¯ˆà®¤à¯ தயவ௠செயà¯à®¤à¯ கவனிகà¯à®•à®µà¯à®®à¯. (விபரஙà¯à®•à®³à¯à®•à¯à®•à¯ $1 à®à®ªà¯ பாரà¯à®•à¯à®•).
-உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ கடà¯à®®à¯ˆà®¯à®¾à®•à®¤à¯ தொகà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯‹, விரà¯à®®à¯à®ªà®¿à®¯à®ªà®Ÿà®¿ விநியோகிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯‹ நீஙà¯à®•à®³à¯ விரà¯à®®à¯à®ªà®¾à®µà®¿à®Ÿà®¿à®²à¯ இஙà¯à®•à¯‡ சமரà¯à®ªà¯à®ªà®¿à®•à¯à®•à®¾à®¤à¯€à®°à¯.<br>
+உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯ கடà¯à®®à¯ˆà®¯à®¾à®•à®¤à¯ தொகà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯‹, விரà¯à®®à¯à®ªà®¿à®¯à®ªà®Ÿà®¿ விநியோகிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯‹ நீஙà¯à®•à®³à¯ விரà¯à®®à¯à®ªà®¾à®µà®¿à®Ÿà®¿à®²à¯ இஙà¯à®•à¯‡ சமரà¯à®ªà¯à®ªà®¿à®•à¯à®•à®¾à®¤à¯€à®°à¯.<br />
அதà¯à®¤à¯à®Ÿà®©à¯ நீஙà¯à®•à®³à¯‡ இதை எழà¯à®¤à®¿à®¯à®¤à®¾à®•à®µà¯‹, அலà¯à®²à®¤à¯ வேற௠பொதà¯à®•à¯ களம௠(domain) அலà¯à®²à®¤à¯ அத௠போனà¯à®± விடà¯à®¤à®²à¯ˆà®¯à®³à®¿à®•à¯à®•à¯à®®à¯ மூலஙà¯à®•à®³à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ பிரதி பணà¯à®£à®¿à®¯à®¿à®°à¯à®ªà¯à®ªà®¤à®¾à®•à®µà¯‹ உறà¯à®¤à®¿ கூறà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯.
<strong>பதிபà¯à®ªà¯à®°à®¿à®®à¯ˆà®¯à¯à®³à¯à®³ ஆகà¯à®•à®™à¯à®•à®³à¯ˆ அனà¯à®®à®¤à®¿à®¯à®¿à®©à¯à®±à®¿ சமரà¯à®ªà¯à®ªà®¿à®•à¯à®• வேணà¯à®Ÿà®¾à®®à¯!</strong>",
"longpagewarning" => "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: இநà¯à®¤à®ªà¯ பகà¯à®•à®®à¯ $1 கிலோபைடà¯à®¸à¯ நீளமானதà¯; 32kb யை அணà¯à®®à®¿à®•à¯à®•à¯à®®à¯ அலà¯à®²à®¤à¯ அதிலà¯à®®à¯ கூடிய அளவà¯à®³à¯à®³ பகà¯à®•à®™à¯à®•à®³à¯ˆà®¤à¯ தொகà¯à®ªà¯à®ªà®¤à®¿à®²à¯ சில உலாவிகளà¯à®•à¯à®•à¯ (browsers) பிரசà¯à®šà®¿à®©à¯ˆ உணà¯à®Ÿà¯.
@@ -474,8 +474,8 @@ Note to AOL users
"nonefound" => "<strong>கà¯à®±à®¿à®ªà¯à®ªà¯</strong>: \"have\", \"from\" போனà¯à®± பொதà¯à®µà®¾à®©, அடà¯à®Ÿà®µà®£à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®¾à®¤, சொறà¯à®•à®³à¯ˆà®¤à¯ தேடà¯à®®à¯à®ªà¯‹à®¤à¯‹ அலà¯à®²à®¤à¯ ஒனà¯à®±à¯à®•à¯à®•à¯ மேறà¯à®ªà®Ÿà¯à®Ÿ தேடலà¯à®•à¯à®•à®¾à®© சொறà¯à®•à®³à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®®à¯ போதோதான௠(எலà¯à®²à®¾à®¤à¯ தேடà¯à®¤à®²à¯à®•à¯à®•à®¾à®© சொறà¯à®•à®³à¯ˆà®¯à¯à®®à¯ கொணà¯à®Ÿ பகà¯à®•à®™à¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯‡ தேடல௠மà¯à®Ÿà®¿à®µà®¿à®²à¯ காணபà¯à®ªà®Ÿà¯à®®à¯) தேடல௠அடிகà¯à®•à®Ÿà®¿ தோலà¯à®µà®¿à®¯à®¿à®²à¯ à®®à¯à®Ÿà®¿à®•à®¿à®©à¯à®±à®¤à¯.",
"powersearch" => "தேடà¯",
-"powersearchtext" => "பெயரà¯à®µà¯†à®³à®¿à®•à®³à®¿à®²à¯ (namespaces) இல௠தேடà¯à®•:<br>
-$1<br>
+"powersearchtext" => "பெயரà¯à®µà¯†à®³à®¿à®•à®³à®¿à®²à¯ (namespaces) இல௠தேடà¯à®•:<br />
+$1<br />
$2 படà¯à®Ÿà®¿à®¯à®²à¯ &nbsp; $3 $9 கà¯à®•à®¾à®© தேடலை மீளà¯à®µà®´à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯",
"searchdisabled" => "<p>மனà¯à®©à®¿à®•à¯à®•à®µà¯à®®à¯! செயறà¯à®¤à®¿à®±à®©à¯ காரணஙà¯à®•à®³à¯à®•à¯à®•à®¾à®• à®®à¯à®´à¯ அளவ௠உரை தேடல௠தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®• à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. அதà¯à®µà®°à¯ˆ நீஙà¯à®•à®³à¯ கீழேயà¯à®³à¯à®³ கூகிள௠(Google) தேடலைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¾à®®à¯. இத௠சில சமயம௠இறà¯à®±à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®¾à®¤à®¤à®¾à®¯à¯ இரà¯à®•à¯à®•à®•à¯à®•à¯‚டà¯à®®à¯.</p>
@@ -491,7 +491,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br>
+<input type=hidden name=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>
@@ -549,7 +549,7 @@ border=\"0\" ALT=\"Google\"></A>
"changes" => "மாறà¯à®±à®™à¯à®•à®³à¯",
"recentchanges" => "அணà¯à®®à¯ˆà®¯ மாறà¯à®±à®™à¯à®•à®³à¯",
"recentchangestext" =>
-"விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾à®µà¯à®•à¯à®•à¯, மிக அணà¯à®®à¯ˆà®¯à®¿à®²à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ மாறà¯à®±à®™à¯à®•à®³à¯ˆ, இநà¯à®¤à®ªà¯ பகà¯à®•à®¤à¯à®¤à®¿à®²à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®µà¯à®®à¯.<br>[[Wikipedia:Welcome,_newcomers|வரà¯à®•, பà¯à®¤à¯ வரà¯à®©à®°à¯à®•à®³à¯‡]]!
+"விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾à®µà¯à®•à¯à®•à¯, மிக அணà¯à®®à¯ˆà®¯à®¿à®²à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ மாறà¯à®±à®™à¯à®•à®³à¯ˆ, இநà¯à®¤à®ªà¯ பகà¯à®•à®¤à¯à®¤à®¿à®²à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®µà¯à®®à¯.<br />[[Wikipedia:Welcome,_newcomers|வரà¯à®•, பà¯à®¤à¯ வரà¯à®©à®°à¯à®•à®³à¯‡]]!
தயவà¯à®šà¯†à®¯à¯à®¤à¯ பினà¯à®µà®°à¯à®®à¯ பகà¯à®•à®™à¯à®•à®³à¯ˆ à®’à®°à¯à®®à¯à®±à¯ˆ பாரà¯à®™à¯à®•à®³à¯: [[wikipedia:FAQ|விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾ அடிகà¯à®•à®Ÿà®¿ கேடà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ கேளà¯à®µà®¿à®•à®³à¯( FAQ)]],
[[Wikipedia:Policies and guidelines|விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾ கொளà¯à®•à¯ˆ]]
(விசேடமாக [[wikipedia:Naming conventions|பெயரிடல௠மரபà¯]],
@@ -646,7 +646,7 @@ border=\"0\" ALT=\"Google\"></A>
"deleteimg" => "நீகà¯à®•à¯",
"deleteimgcompletely" => "நீகà¯à®•à¯",
"imghistlegend" => "கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ அடà¯à®Ÿà®µà®£à¯ˆ: (நடபà¯à®ªà¯) = இத௠நடபà¯à®ªà®¿à®²à¯à®³à¯à®³ (current) படிமமà¯, (நீகà¯à®•à¯) = இநà¯à®¤ பழைய பதிபà¯à®ªà¯ˆ நீகà¯à®•à¯, (திரà¯à®®à¯à®ªà¯) = இப௠பழைய பதிபà¯à®ªà¯à®•à¯à®•à¯à®¤à¯ திரà¯à®®à¯à®ªà¯.
-<br><i>அநà¯à®¤à®¤à¯ திகதியில௠பதிவேறà¯à®±à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ படிமஙà¯à®•à®³à¯ˆà®ªà¯ பாரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯, திகதி மீத௠சொடà¯à®•à¯à®•à®µà¯à®®à¯</i>.",
+<br /><i>அநà¯à®¤à®¤à¯ திகதியில௠பதிவேறà¯à®±à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ படிமஙà¯à®•à®³à¯ˆà®ªà¯ பாரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯, திகதி மீத௠சொடà¯à®•à¯à®•à®µà¯à®®à¯</i>.",
"imagelinks" => "படிம இணைபà¯à®ªà¯à®•à®³à¯",
"linkstoimage" => "பினà¯à®µà®°à¯à®®à¯ பகà¯à®•à®™à¯à®•à®³à¯ இப௠படிமதà¯à®¤à¯à®•à¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©:",
"nolinkstoimage" => "இப௠படிமதà¯à®¤à¯à®•à¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³ பகà¯à®•à®™à¯à®•à®³à¯ எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ.",
@@ -670,9 +670,9 @@ border=\"0\" ALT=\"Google\"></A>
"maintenancebacklink" => "மீளவà¯à®®à¯ பராமரிபà¯à®ªà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯à®•à¯à®•à¯",
"disambiguations" => "கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯€à®°à¯ (Disambiguation) பகà¯à®•à®™à¯à®•à®³à¯",
"disambiguationspage" => "விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾:கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯€à®°à¯_பகà¯à®•_இணைபà¯à®ªà¯à®•à®³à¯",
-"disambiguationstext" => "இக௠கடà¯à®Ÿà¯à®°à¯ˆà®•à®³à¯ ஒர௠<i>கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯€à®°à¯ (disambiguation) பகà¯à®•à®¤à¯à®¤à¯</i>கà¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©. பதிலாக இவை பொரà¯à®¤à¯à®¤à®®à®¾à®© தலைபà¯à®ªà¯à®•à¯à®•à®³à¯à®•à¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯.<br>ஒர௠பகà¯à®•à®®à¯ $1 இலிரà¯à®¨à¯à®¤à¯ இணைபà¯à®ªà¯à®•à¯ கொடà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯ கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯ தீரà¯à®µà®¾à®•à®•à¯ (disambiguation) கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.<br> à®à®©à¯ˆà®¯ பெயரà¯à®µà¯†à®³à®¿à®•à®³à®¿à®²à®¿à®°à¯à®¨à¯à®¤à®¾à®© இணைபà¯à®ªà¯à®•à¯à®•à®³à¯ இஙà¯à®•à¯‡ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®ªà¯<i>படவிலà¯à®²à¯ˆ</i>.",
+"disambiguationstext" => "இக௠கடà¯à®Ÿà¯à®°à¯ˆà®•à®³à¯ ஒர௠<i>கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯€à®°à¯ (disambiguation) பகà¯à®•à®¤à¯à®¤à¯</i>கà¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©. பதிலாக இவை பொரà¯à®¤à¯à®¤à®®à®¾à®© தலைபà¯à®ªà¯à®•à¯à®•à®³à¯à®•à¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯.<br />ஒர௠பகà¯à®•à®®à¯ $1 இலிரà¯à®¨à¯à®¤à¯ இணைபà¯à®ªà¯à®•à¯ கொடà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯ கவரà¯à®ªà®Ÿà¯à®¨à®¿à®²à¯ˆà®¤à¯ தீரà¯à®µà®¾à®•à®•à¯ (disambiguation) கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.<br /> à®à®©à¯ˆà®¯ பெயரà¯à®µà¯†à®³à®¿à®•à®³à®¿à®²à®¿à®°à¯à®¨à¯à®¤à®¾à®© இணைபà¯à®ªà¯à®•à¯à®•à®³à¯ இஙà¯à®•à¯‡ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®ªà¯<i>படவிலà¯à®²à¯ˆ</i>.",
"doubleredirects" => "இரடà¯à®Ÿà¯ˆ வழிமாறà¯à®±à¯à®•à®³à¯ (Redirects)",
-"doubleredirectstext" => "<b>கவனிகà¯à®•à®µà¯à®®à¯:</b> இநà¯à®¤à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ போலியான நேரà¯à®®à®¤à®¿à®ªà¯à®ªà¯ (positives) களைக௠கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à®•à¯à®•à¯‚டà¯à®®à¯. இத௠வழகà¯à®•à®®à®¾à®•, இணைபà¯à®ªà¯à®Ÿà®©à¯ கூடிய மேலதிக உரை à®®à¯à®¤à®²à®¾à®µà®¤à¯ #வழிமாறà¯à®±à¯à®•à¯à®•à¯à®•à¯ கீழ௠இரà¯à®ªà¯à®ªà®¤à¯ˆà®•à¯ கà¯à®±à®¿à®•à¯à®•à¯à®®à¯.<br>\nஒவà¯à®µà¯Šà®°à¯ வரியà¯à®®à¯, à®®à¯à®¤à®²à®¾à®®à¯ இரணà¯à®Ÿà®¾à®®à¯ வழிமாறà¯à®±à¯à®•à®³à¯à®•à¯à®•à¯ இணைபà¯à®ªà¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®ªà¯à®ªà®¤à¯à®Ÿà®©à¯, இரணà¯à®Ÿà®¾à®µà®¤à¯ வழிமாறà¯à®±à¯ உரையின௠மà¯à®¤à®²à¯ வரிகà¯à®•à¯à®®à¯ இணைபà¯à®ªà¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à¯à®®à¯, இத௠வழகà¯à®•à®®à®¾à®• à®®à¯à®¤à®²à®¾à®µà®¤à¯ வழிமாறà¯à®±à¯ கà¯à®±à®¿à®¤à¯à®¤à¯à®•à¯ காடà¯à®Ÿ வேணà¯à®Ÿà®¿à®¯ \"real\" இலகà¯à®•à¯à®•à¯ கடà¯à®Ÿà¯à®°à¯ˆà®¯à¯ˆà®•à¯ (taget article) கொடà¯à®•à¯à®•à¯à®®à¯.",
+"doubleredirectstext" => "<b>கவனிகà¯à®•à®µà¯à®®à¯:</b> இநà¯à®¤à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ போலியான நேரà¯à®®à®¤à®¿à®ªà¯à®ªà¯ (positives) களைக௠கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à®•à¯à®•à¯‚டà¯à®®à¯. இத௠வழகà¯à®•à®®à®¾à®•, இணைபà¯à®ªà¯à®Ÿà®©à¯ கூடிய மேலதிக உரை à®®à¯à®¤à®²à®¾à®µà®¤à¯ #வழிமாறà¯à®±à¯à®•à¯à®•à¯à®•à¯ கீழ௠இரà¯à®ªà¯à®ªà®¤à¯ˆà®•à¯ கà¯à®±à®¿à®•à¯à®•à¯à®®à¯.<br />\nஒவà¯à®µà¯Šà®°à¯ வரியà¯à®®à¯, à®®à¯à®¤à®²à®¾à®®à¯ இரணà¯à®Ÿà®¾à®®à¯ வழிமாறà¯à®±à¯à®•à®³à¯à®•à¯à®•à¯ இணைபà¯à®ªà¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®ªà¯à®ªà®¤à¯à®Ÿà®©à¯, இரணà¯à®Ÿà®¾à®µà®¤à¯ வழிமாறà¯à®±à¯ உரையின௠மà¯à®¤à®²à¯ வரிகà¯à®•à¯à®®à¯ இணைபà¯à®ªà¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à¯à®®à¯, இத௠வழகà¯à®•à®®à®¾à®• à®®à¯à®¤à®²à®¾à®µà®¤à¯ வழிமாறà¯à®±à¯ கà¯à®±à®¿à®¤à¯à®¤à¯à®•à¯ காடà¯à®Ÿ வேணà¯à®Ÿà®¿à®¯ \"real\" இலகà¯à®•à¯à®•à¯ கடà¯à®Ÿà¯à®°à¯ˆà®¯à¯ˆà®•à¯ (taget article) கொடà¯à®•à¯à®•à¯à®®à¯.",
"brokenredirects" => "à®®à¯à®±à®¿à®¨à¯à®¤ வழிமாறà¯à®±à¯à®•à®³à¯(Redirects)",
"brokenredirectstext" => "பினà¯à®µà®°à¯à®®à¯ வழிமாறà¯à®±à¯à®•à®³à¯ ஒர௠இலà¯à®²à®¾à®¤ கடà¯à®Ÿà¯à®°à¯ˆà®•à¯ இணைபà¯à®ªà¯à®•à¯ கொடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯.",
"selflinks" => "தனà¯à®©à®¿à®£à¯ˆà®ªà¯à®ªà¯à®•à®³à¯‹à®Ÿà¯ (Self Links) கூடிய பகà¯à®•à®™à¯à®•à®³à¯",
@@ -844,7 +844,7 @@ border=\"0\" ALT=\"Google\"></A>
"noblockreason" => "தடà¯à®ªà¯à®ªà¯à®•à¯à®•à®¾à®© காரணஙà¯à®•à®³à¯ˆ நீஙà¯à®•à®³à¯ கொடà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯.",
"blockipsuccesssub" => "தடà¯à®ªà¯à®ªà¯ வெறà¯à®±à®¿",
"blockipsuccesstext" => "\"$1\" தடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¾à®°à¯.
-<br>தடà¯à®ªà¯à®ªà¯ˆ மீளாயà¯à®µà¯ செயà¯à®¯ [[Special:Ipblocklist|IP block list]] à®à®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.",
+<br />தடà¯à®ªà¯à®ªà¯ˆ மீளாயà¯à®µà¯ செயà¯à®¯ [[Special:Ipblocklist|IP block list]] à®à®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.",
"unblockip" => "பயனர௠தடை நீகà¯à®•à¯",
"unblockiptext" => "à®®à¯à®©à¯à®©à®°à¯ தடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ à®à®ªà®¿ à®®à¯à®•à®µà®°à®¿ அலà¯à®²à®¤à¯ பயனரà¯à®ªà¯†à®¯à®°à®¿à®©à¯ எழà¯à®¤à¯à®¤à¯ அணà¯à®•à¯à®•à®¤à¯à®¤à¯ˆ மீழà¯à®µà®¿à®ªà¯à®ªà®¤à®±à¯à®•à¯ கீழேயà¯à®³à¯à®³ படிவதà¯à®¤à¯ˆ உபயோகிகà¯à®•à®µà¯à®®à¯.",
"ipusubmit" => "இம௠மà¯à®•à®µà®°à®¿à®¯à¯ˆà®¤à¯ தடை நீகà¯à®•à¯",
@@ -874,7 +874,7 @@ border=\"0\" ALT=\"Google\"></A>
"lockdbsuccesssub" => "தரவà¯à®¤à¯à®¤à®³à®ªà¯ பூடà¯à®Ÿà®²à¯ வெறà¯à®±à®¿",
"unlockdbsuccesssub" => "தரவà¯à®¤à¯à®¤à®³à®ªà¯ பூடà¯à®Ÿà¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
"lockdbsuccesstext" => "விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾ தரவà¯à®¤à¯à®¤à®³à®®à¯ பூடà¯à®Ÿà®ªà¯ படà¯à®Ÿà®¤à¯.
-<br>பராமரிபà¯à®ªà¯ à®®à¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¨à¯à®¤à®¤à¯à®®à¯ பூடà¯à®Ÿà¯ˆ நீகà¯à®• மறவாதீரà¯.",
+<br />பராமரிபà¯à®ªà¯ à®®à¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¨à¯à®¤à®¤à¯à®®à¯ பூடà¯à®Ÿà¯ˆ நீகà¯à®• மறவாதீரà¯.",
"unlockdbsuccesstext" => "விகà¯à®•à®¿à®ªà¯€à®Ÿà®¿à®¯à®¾ தரவà¯à®¤à¯à®¤à®³à®®à¯ திறகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.",
# SQL query
@@ -891,7 +891,7 @@ border=\"0\" ALT=\"Google\"></A>
# Move page
#
"movepage" => "பகà¯à®•à®¤à¯à®¤à¯ˆ நகரà¯à®¤à¯à®¤à¯",
-"movepagetext" => "பினà¯à®µà®°à¯à®®à¯ படிவதà¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯, பகà¯à®•à®®à¯Šà®©à¯à®±à®¿à®©à¯ பெயரை மாறà¯à®±à®¿, இதனà¯à®Ÿà¯ˆà®¯ à®®à¯à®´à¯ வரலாறà¯à®±à¯ˆà®¯à¯à®®à¯ பà¯à®¤à®¿à®¯ பெயரà¯à®•à¯à®•à¯ நகரà¯à®¤à¯à®¤à¯à®®à¯. பழைய தலைபà¯à®ªà¯, பà¯à®¤à®¿à®¯ பகà¯à®•à®¤à¯à®¤à¯à®•à¯à®•à®¾à®© ஒர௠வழிகாடà¯à®Ÿà¯à®®à¯ பகà¯à®•à®®à®¾à®• ஆகà¯à®®à¯. பழைய பகà¯à®•à®¤à¯ தலைபà¯à®ªà¯à®•à¯à®•à¯ உளà¯à®³ இணைபà¯à®ªà¯à®•à¯à®•à®³à¯ மாறமாடà¯à®Ÿà®¾; இரடà¯à®Ÿà¯ˆ அலà¯à®²à®¤à¯ à®®à¯à®±à®¿à®¨à¯à®¤ வழிமாறà¯à®±à¯à®•à®³à¯ உளà¯à®³à®©à®µà®¾ எனà¯à®ªà®¤à¯ˆà®šà¯[[Special:Maintenance|சரி பாரà¯à®¤à¯à®¤à¯]] உறà¯à®¤à®¿à®šà¯†à®¯à¯à®¯à®µà¯à®®à¯. இணைபà¯à®ªà¯à®•à®³à¯ எவà¯à®µà®¿à®Ÿà®¤à¯à®¤à¯à®•à¯à®•à¯à®šà¯ செனà¯à®±à®Ÿà¯ˆà®¯ வேணà¯à®Ÿà¯à®®à¯‹ அவà¯à®µà®¿à®Ÿà®¤à¯à®¤à¯ˆà®¤à¯ தொடரà¯à®¨à¯à®¤à¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿ செயà¯à®¤à¯ கொளà¯à®µà®¤à¯ உஙà¯à®•à®³à¯ பொறà¯à®ªà¯à®ªà®¾à®•à¯à®®à¯.<br>
+"movepagetext" => "பினà¯à®µà®°à¯à®®à¯ படிவதà¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à¯, பகà¯à®•à®®à¯Šà®©à¯à®±à®¿à®©à¯ பெயரை மாறà¯à®±à®¿, இதனà¯à®Ÿà¯ˆà®¯ à®®à¯à®´à¯ வரலாறà¯à®±à¯ˆà®¯à¯à®®à¯ பà¯à®¤à®¿à®¯ பெயரà¯à®•à¯à®•à¯ நகரà¯à®¤à¯à®¤à¯à®®à¯. பழைய தலைபà¯à®ªà¯, பà¯à®¤à®¿à®¯ பகà¯à®•à®¤à¯à®¤à¯à®•à¯à®•à®¾à®© ஒர௠வழிகாடà¯à®Ÿà¯à®®à¯ பகà¯à®•à®®à®¾à®• ஆகà¯à®®à¯. பழைய பகà¯à®•à®¤à¯ தலைபà¯à®ªà¯à®•à¯à®•à¯ உளà¯à®³ இணைபà¯à®ªà¯à®•à¯à®•à®³à¯ மாறமாடà¯à®Ÿà®¾; இரடà¯à®Ÿà¯ˆ அலà¯à®²à®¤à¯ à®®à¯à®±à®¿à®¨à¯à®¤ வழிமாறà¯à®±à¯à®•à®³à¯ உளà¯à®³à®©à®µà®¾ எனà¯à®ªà®¤à¯ˆà®šà¯[[Special:Maintenance|சரி பாரà¯à®¤à¯à®¤à¯]] உறà¯à®¤à®¿à®šà¯†à®¯à¯à®¯à®µà¯à®®à¯. இணைபà¯à®ªà¯à®•à®³à¯ எவà¯à®µà®¿à®Ÿà®¤à¯à®¤à¯à®•à¯à®•à¯à®šà¯ செனà¯à®±à®Ÿà¯ˆà®¯ வேணà¯à®Ÿà¯à®®à¯‹ அவà¯à®µà®¿à®Ÿà®¤à¯à®¤à¯ˆà®¤à¯ தொடரà¯à®¨à¯à®¤à¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿ செயà¯à®¤à¯ கொளà¯à®µà®¤à¯ உஙà¯à®•à®³à¯ பொறà¯à®ªà¯à®ªà®¾à®•à¯à®®à¯.<br />
à®à®±à¯à®•à¯†à®©à®µà¯‡ பà¯à®¤à®¿à®¯ தலைபà¯à®ªà®¿à®²à¯ ஒர௠பகà¯à®•à®®à¯ இரà¯à®¨à¯à®¤à®¾à®²à¯, இநà¯à®¤à®ªà¯ பகà¯à®•à®®à¯ வெறà¯à®®à¯ˆà®¯à®¾à®•à®µà¯‹ அலà¯à®²à®¤à¯ ஒர௠வழிமாறà¯à®±à¯à®ªà¯ பகà¯à®•à®®à®¾à®•à®µà¯‹ இரà¯à®ªà¯à®ªà®¤à¯à®Ÿà®©à¯ பழைய தொகà¯à®ªà¯à®ªà¯ வரலாறà¯à®®à¯ இலà¯à®²à®¾à®¤à®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯à®¤à®¾à®©à¯, இப௠பகà¯à®•à®®à¯ நகரà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ எனà¯à®ªà®¤à¯ˆà®•à¯ கவனிகà¯à®•à®µà¯à®®à¯. தறà¯à®šà¯†à®¯à®²à®¾à®•, நீஙà¯à®•à®³à¯ தவற௠செயà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, எநà¯à®¤à®ªà¯ பெயரிலிரà¯à®¨à¯à®¤à¯ பெயர௠மாறà¯à®±à®®à¯ செயà¯à®¤à¯€à®°à¯à®•à®³à¯‹ அதே பெயரà¯à®•à¯à®•à¯ மீணà¯à®Ÿà¯à®®à¯ மாறà¯à®±à®®à¯à®Ÿà®¿à®¯à¯à®®à¯ எனà¯à®ªà®¤à¯à®Ÿà®©à¯ à®à®±à¯à®•à¯†à®©à®µà¯‡ இரà¯à®•à¯à®•à¯à®®à¯ பகà¯à®•à®®à¯Šà®©à¯à®±à¯ˆ மேலெழà¯à®¤ (overwrite) à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯ எனà¯à®ªà®¤à¯ˆà®¯à¯à®®à¯ இத௠கà¯à®±à®¿à®•à¯à®•à®¿à®©à¯à®±à®¤à¯.
<b>எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ!</b>
இத௠பிரபலமான ஒர௠பகà¯à®•à®¤à¯à®¤à¯à®•à¯à®•à¯à®šà¯ செயà¯à®¯à¯à®®à¯ கடà¯à®®à¯ˆà®¯à®¾à®©à®¤à¯à®®à¯, எதிரà¯à®ªà®¾à®°à®¾à®¤à®¤à¯à®®à®¾à®© மாறà¯à®±à®®à®¾à®• இரà¯à®•à¯à®•à®•à¯à®•à¯‚டà¯à®®à¯; தொடரà¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯ இதன௠விளைவà¯à®•à®³à¯ˆ விளஙà¯à®•à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà®¿à®°à¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯ எனà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®•à¯ கொளà¯à®³à®µà¯à®®à¯.",
diff --git a/languages/LanguageTh.php b/languages/LanguageTh.php
index 9444fab52e29..b3db4418e071 100644
--- a/languages/LanguageTh.php
+++ b/languages/LanguageTh.php
@@ -125,8 +125,8 @@
"tog-showtoolbar" => "Show edit toolbar",
"tog-editondblclick" => "à¹à¸à¹‰à¹„ขหน้าโดยใช้ double click (ผ่าน JavaScript)",
"tog-editsection"=>"สามารถà¹à¸à¹‰à¹„ขเฉพาะส่วนโดยใช้ลิงà¸à¹Œ [à¹à¸à¹‰à¹„ข]",
-"tog-editsectiononrightclick"=>"สามารถà¹à¸à¹‰à¹„ขเฉพาะส่วนโดยใช้ right click<br> บนชื่อส่วนย่อย (ผ่าน JavaScript)",
-"tog-showtoc"=>"à¹à¸ªà¸”งสารบัà¸<br>(สำหรับบทความที่มีมาà¸à¸à¸§à¹ˆà¸² 3 หัวข้อ)",
+"tog-editsectiononrightclick"=>"สามารถà¹à¸à¹‰à¹„ขเฉพาะส่วนโดยใช้ right click<br /> บนชื่อส่วนย่อย (ผ่าน JavaScript)",
+"tog-showtoc"=>"à¹à¸ªà¸”งสารบัà¸<br />(สำหรับบทความที่มีมาà¸à¸à¸§à¹ˆà¸² 3 หัวข้อ)",
"tog-rememberpassword" => "จำ password ระหว่าง session",
"tog-editwidth" => "à¸à¸¥à¹ˆà¸­à¸‡à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹à¸à¹‰à¹„ขà¸à¸§à¹‰à¸²à¸‡à¹€à¸•à¹‡à¸¡à¸«à¸™à¹‰à¸²à¸ˆà¸­",
"tog-watchdefault" => "นำหน้าที่à¹à¸à¹‰à¹„ขไปใส่ watchlist",
@@ -313,8 +313,8 @@ an incorrectly linked inter-language or inter-wiki title.",
because it slows the database down to the point that no one can use
the wiki.",
"perfdisabledsub" => "Here's a saved copy from $1:",
-"wrong_wfQuery_params" => "Incorrect parameters to wfQuery()<br>
-Function: $1<br>
+"wrong_wfQuery_params" => "Incorrect parameters to wfQuery()<br />
+Function: $1<br />
Query: $2
",
"viewsource" => "View source",
@@ -342,8 +342,8 @@ Don't forget to personalize your wikipedia preferences.",
"yourpasswordagain" => "พิมพ์รหัสผ่านอีà¸à¸„รั้ง",
"newusersonly" => " (เฉพาะผู้ใช้ใหม่)",
"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",
+"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",
"login" => "ล็อà¸à¸­à¸´à¸™",
"loginprompt" => "ต้อง enable cookie เพื่อล็อà¸à¸­à¸´à¸™à¸ªà¸¹à¹ˆ $wgSitename ได้",
@@ -392,7 +392,7 @@ Please log in again after you receive it.",
"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
+The reason given is this:<br />''$2''<p>You may contact $1 or one of the other
[[$wgMetaNamespace:Administrators|administrators]] to discuss the block.
Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]].
@@ -447,7 +447,7 @@ If you save it, any changes made since this revision will be lost.</strong>\n",
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>
+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>",
@@ -516,8 +516,8 @@ 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>
+Search in namespaces :<br />
+$1<br />
$2 List redirects &nbsp; Search for $3 $9",
"searchdisabled" => "<p>Sorry! Full text search has been disabled temporarily, for performance reasons. In the meantime, you can use the Google search below, which may be out of date.</p>
@@ -533,7 +533,7 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"{$wgServer}\" checked> {$wgServer} <br>
+<input type=hidden name=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>
@@ -680,7 +680,7 @@ created and by whom, and anything else you may know about it.",
"deleteimgcompletely" => "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>.",
+<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.",
@@ -708,9 +708,9 @@ That comes to <b>$5</b> average edits per page, and <b>$6</b> views per edit.",
"maintenancebacklink" => "Back to Maintenance Page",
"disambiguations" => "Disambiguation pages",
"disambiguationspage" => "$wgMetaNamespace: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.",
+"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.",
+"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",
@@ -932,7 +932,7 @@ pages that were vandalized).",
"noblockreason" => "You must supply a reason for the block.",
"blockipsuccesssub" => "Block succeeded",
"blockipsuccesstext" => "\"$1\" has been blocked.
-<br>See [[Special:Ipblocklist|IP block list]] to review blocks.",
+<br />See [[Special:Ipblocklist|IP block list]] to review blocks.",
"unblockip" => "Unblock user",
"unblockiptext" => "Use the form below to restore write access
to a previously blocked IP address or username.",
@@ -972,7 +972,7 @@ Please confirm that this is what you intend to do.",
"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.",
+<br />Remember to remove the lock after your maintenance is complete.",
"unlockdbsuccesstext" => "The database has been unlocked.",
# SQL query
diff --git a/languages/LanguageTt.php b/languages/LanguageTt.php
index 0cc2d13d8a49..ddbaaa68b53a 100644
--- a/languages/LanguageTt.php
+++ b/languages/LanguageTt.php
@@ -180,8 +180,8 @@ $wgLanguageNamesTt =& $wgLanguageNames;
"tog-showtoolbar" =>"Show edit toolbar",
"tog-editondblclick" => "Edit pages on double click (JavaScript)",
"tog-editsection" =>"Enable section editing via [edit] links",
-"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br> on section titles (JavaScript)",
-"tog-showtoc" =>"Show table of contents<br>(for articles with more than 3 headings)",
+"tog-editsectiononrightclick"=>"Enable section editing by right clicking<br /> on section titles (JavaScript)",
+"tog-showtoc" =>"Show table of contents<br />(for articles with more than 3 headings)",
"tog-rememberpassword" => "Remember password across sessions",
"tog-editwidth" => "Edit box has full width",
"tog-watchdefault" => "Add pages you edit to your watchlist",
diff --git a/languages/LanguageUk.php b/languages/LanguageUk.php
index 4924907fb46b..7ad6f06b4185 100755
--- a/languages/LanguageUk.php
+++ b/languages/LanguageUk.php
@@ -307,12 +307,12 @@ You can view and copy the source of this page:",
"yourpasswordagain" => "Повторний набір паролÑ",
"newusersonly" => " (тільки Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… кориÑтувачів)",
"remembermypassword" => "Запам'Ñтовувати ваш пароль між ÑеанÑами.",
-"loginproblem" => "<b>Проблема при вході в ÑиÑтему.</b><br>попробуйте ще раз!",
-"alreadyloggedin" => "<font color=red><b>КориÑтувач $1, ви вже ввійшли в ÑиÑтему!</b></font><br>\n",
+"loginproblem" => "<b>Проблема при вході в ÑиÑтему.</b><br />попробуйте ще раз!",
+"alreadyloggedin" => "<font color=red><b>КориÑтувач $1, ви вже ввійшли в ÑиÑтему!</b></font><br />\n",
"areyounew" => "Якщо ви новачок в технології Вікіпедії й хочете Ñтати кориÑтувачем,
введіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, а потім введіть Ñ– повторіть пароль.
-Заповніть поле Ñ Ð°Ð´Ñ€ÐµÑою вашої електронної пошти; Ñкщо ви забудете ваш пароль, ви зможете зробити запит, щоб новий пароль був відправлений вам на вказану вами адреÑу.<br>\n",
+Заповніть поле Ñ Ð°Ð´Ñ€ÐµÑою вашої електронної пошти; Ñкщо ви забудете ваш пароль, ви зможете зробити запит, щоб новий пароль був відправлений вам на вказану вами адреÑу.<br />\n",
"login" => "Вхід в ÑиÑтему",
"userlogin" => "Вхід в ÑиÑтему",
@@ -355,7 +355,7 @@ You can view and copy the source of this page:",
"showpreview" => "Показати попередній варіант",
"blockedtitle" => "КориÑтувача заблоковано",
"blockedtext" => "Ваш кориÑтувач чи IP-адреÑа заблоковані $1.
-Причина блокуваннÑ:<br>''$2''<p>Ви можете зв'ÑзатиÑÑ Ð· $1 чи іншим
+Причина блокуваннÑ:<br />''$2''<p>Ви можете зв'ÑзатиÑÑ Ð· $1 чи іншим
[[$wgMetaNamespace:ÐдминиÑтратори|админиÑтратором]] що обговорити блокуваннÑ.
Зверніть увагу, що ви не можете викориÑтовувати функцію \"ÐадіÑлати електронного лиÑта кориÑтувачу\", Ñкщо ви не вказали адреÑу вашої електронної пошти в Ваших [[Спеціальні:ÐаÑтройки|наÑтройках]]
Ваша IP-адреÑа - $3. Будь-лаÑка, вказуйте, Ñкщо будете запитувати про блокуваннÑ.
@@ -391,7 +391,7 @@ You can view and copy the source of this page:",
GNU Free Documentation License без незмінюваних Ñекцій
(див. $1, щоб взнати подробиці).
Якщо ви не бажаєте, щоб напиÑане вами безжаліÑно редагувалоÑÑŒ
-Ñ– розповÑюджувалоÑÑ Ð·Ð° бажаннÑм будь-кого, - не пишіть тут.<br>
+Ñ– розповÑюджувалоÑÑ Ð·Ð° бажаннÑм будь-кого, - не пишіть тут.<br />
Ви також зобов'ÑзуєтеÑÑŒ, що напиÑане вами тут належить вам чи взÑто з джерела,
що Ñ” ÑуÑпільною влаÑніÑÑ‚ÑŽ чи подібним вільним джерелом.
@@ -454,8 +454,8 @@ GNU Free Documentation License без незмінюваних Ñекцій
"nonefound" => "<strong>ЗауваженнÑ:</strong>: До невдалого пошуку чаÑто може приводити Ñпроба знайти загальні Ñлова, Ñкі не підлÑгають індекÑації, наприклад - \"також\" and \"що\", або викориÑÑ‚Ð°Ð½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ ніж одного ключового Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ñлова (показуютьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ñтатті, що міÑÑ‚ÑÑ‚ÑŒ вÑÑ– вказані Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ñлова).",
"powersearch" => "Пошук",
"powersearchtext" => "
-Пошук в проÑторі імен :<br>
-$1<br>
+Пошук в проÑторі імен :<br />
+$1<br />
$2 Показувати Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ ÐŸÐ¾ÑˆÑƒÐº на $3 $9",
"searchdisabled" => "<p>ПовнотекÑтовий пошук тимчаÑово недоÑтупний через Ð¿ÐµÑ€ÐµÐ²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñервера; передбачаєтьÑÑ, що Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð±ÑƒÐ´Ðµ знову включена піÑÐ»Ñ ÑƒÑтановки нового обладнаннÑ. Поки що ми пропонуємо вам ÑкориÑтатиÑÑ Ð¿Ð¾ÑˆÑƒÐºÐ¾Ð²Ð¾ÑŽ машиною google:</p>
@@ -470,9 +470,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Google Search\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br><input type=radio
+<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>
+value=\"{$wgServer}\" checked> {$wgServer} <br />
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
</font>
@@ -643,7 +643,7 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
"deleteimg" => "вилуч.",
"deleteimgcompletely" => "вилуч.",
"imghistlegend" => "ПоÑÑненнÑ: (поточ.) = це - поточне зображеннÑ, (вилуч.) = вилучити цю Ñтару верÑÑ–ÑŽ, (відкот.) = відкотитиÑÑ Ð´Ð¾ цієї Ñтарої верÑÑ–Ñ—.
-<br><i>Виберіть дату, щоб переглÑнути ÑпиÑок зображень, звантажених на цю дату</i>.",
+<br /><i>Виберіть дату, щоб переглÑнути ÑпиÑок зображень, звантажених на цю дату</i>.",
"imagelinks" => "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ",
"linkstoimage" => "ÐаÑтупні Ñтатті поÑилаютьÑÑ Ð½Ð° дане зображеннÑ:",
"nolinkstoimage" => "Статті, що поÑилаютьÑÑ Ð½Ð° дане зображеннÑ, відÑутні.",
@@ -669,9 +669,9 @@ value=\"{$wgServer}\" checked> {$wgServer} <br>
"maintenancebacklink" => "ПовернутиÑÑ Ð½Ð° Ñторінку обÑлуговуваннÑ",
"disambiguations" => "Багатозначні Ñтатті",
"disambiguationspage" => "ВікіпедіÑ:ПоÑиланнÑ_на_багатозначні_Ñтатті",
-"disambiguationstext" => "ÐаÑтупна Ñтатті поÑилаютьÑÑ Ð½Ð° <i>багатозначні Ñтатті</i>. ЗаміÑÑ‚ÑŒ цього вони повинні вказувати на відповідну конкретну Ñтаттю.<br>Ð¡Ñ‚Ð°Ñ‚Ñ‚Ñ Ð²Ð²Ð°Ð¶Ð°Ñ”Ñ‚ÑŒÑÑ Ð±Ð°Ð³Ð°Ñ‚Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾ÑŽ, Ñкщо на неї вказує $1.<br>ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· інших проÑторів імен тут <i>не</i> вказані.",
+"disambiguationstext" => "ÐаÑтупна Ñтатті поÑилаютьÑÑ Ð½Ð° <i>багатозначні Ñтатті</i>. ЗаміÑÑ‚ÑŒ цього вони повинні вказувати на відповідну конкретну Ñтаттю.<br />Ð¡Ñ‚Ð°Ñ‚Ñ‚Ñ Ð²Ð²Ð°Ð¶Ð°Ñ”Ñ‚ÑŒÑÑ Ð±Ð°Ð³Ð°Ñ‚Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾ÑŽ, Ñкщо на неї вказує $1.<br />ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· інших проÑторів імен тут <i>не</i> вказані.",
"doubleredirects" => "Подвійні перенаправленнÑ",
-"doubleredirectstext" => "<b>Увага:</b> Цей ÑпиÑок може міÑтити невірні елементи. Це значить, що піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ñ— директиви #REDIRECT йде додатковий текÑÑ‚ з поÑиланнÑми.<br>\nКожен Ñ€Ñдок міÑтить поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° перше та друге перенаправленнÑ, а також перший Ñ€Ñдок текÑту другого перенаправленнÑ, що, звичайно, міÑтить \"реальне\" перенаправленне на необхідну Ñтаттю, куди повинно вказувати й перше перенаправленне.",
+"doubleredirectstext" => "<b>Увага:</b> Цей ÑпиÑок може міÑтити невірні елементи. Це значить, що піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ñ— директиви #REDIRECT йде додатковий текÑÑ‚ з поÑиланнÑми.<br />\nКожен Ñ€Ñдок міÑтить поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° перше та друге перенаправленнÑ, а також перший Ñ€Ñдок текÑту другого перенаправленнÑ, що, звичайно, міÑтить \"реальне\" перенаправленне на необхідну Ñтаттю, куди повинно вказувати й перше перенаправленне.",
"brokenredirects" => "Розірвані перенаправленнÑ",
"brokenredirectstext" => "ÐаÑтупні Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð·ÑƒÑŽÑ‚ÑŒ на неіÑнуючі Ñтатті.",
"selflinks" => "Статті, що вказують Ñамі на Ñебе",
@@ -872,7 +872,7 @@ $3...
"noblockreason" => "Ви повинні опиÑати причину блокуваннÑ.",
"blockipsuccesssub" => "Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¾",
"blockipsuccesstext" => "\"$1\" заблоковано.
-<br>См. [[Спеціальні:СпиÑок_заблокованих_IP|ÑпиÑок заблокованих IP]] щоб взнати, Ñкі IP-адреÑи заблоковані.",
+<br />См. [[Спеціальні:СпиÑок_заблокованих_IP|ÑпиÑок заблокованих IP]] щоб взнати, Ñкі IP-адреÑи заблоковані.",
"unblockip" => "Розблокувати IP-адреÑу",
"unblockiptext" => "ВикориÑтовуйте форму що нижче, щоб відновити можливіÑÑ‚ÑŒ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ð°Ð½Ñ–ÑˆÐµ заблокованої
IP-адреÑи.",
@@ -903,7 +903,7 @@ IP-адреÑи.",
"lockdbsuccesssub" => "Базу даних заблоковано",
"unlockdbsuccesssub" => "Базу даних розблоковано",
"lockdbsuccesstext" => "Базу даних Вікіпедії заблоковано.
-<br>Ðе забудьте Ñ—Ñ— розблокувати піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð±ÑлуговуваннÑ.",
+<br />Ðе забудьте Ñ—Ñ— розблокувати піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð±ÑлуговуваннÑ.",
"unlockdbsuccesstext" => "Базу даних Вікіпедії розблоковано.",
# SQL query
diff --git a/languages/LanguageWa.php b/languages/LanguageWa.php
index 91b018f65eb9..b8f5ddc6b569 100644
--- a/languages/LanguageWa.php
+++ b/languages/LanguageWa.php
@@ -123,7 +123,7 @@ require_once( "LanguageUtf8.php" );
"tog-hover" => "Racsegnes cwand on passe so les loyéns",
"tog-underline" => "Sorlignî les loyéns",
-"tog-highlightbroken" => "Håyner les vudes loyéns <a href=\"\" class=\"new\">come çouchal</a><br> &nbsp;&nbsp;&nbsp; (oudonbén: come çouchal<a href=\"\" class=\"internal\">?</a>).",
+"tog-highlightbroken" => "Håyner les vudes loyéns <a href=\"\" class=\"new\">come çouchal</a><br /> &nbsp;&nbsp;&nbsp; (oudonbén: come çouchal<a href=\"\" class=\"internal\">?</a>).",
"tog-justify" => "Djustifyî les hagnons",
"tog-hideminor" => "Èn nén moster les <i>dierins candjmints</i> mineurs",
"tog-usenewrc" => "Ramidrés <i>dierins candjmints</i> (nén tos les betchteus)",
@@ -131,7 +131,7 @@ require_once( "LanguageUtf8.php" );
"tog-editondblclick" => "Candjî les pådjes avou on dobe-clitch (JavaScript)",
"tog-editsection" => "Eployî les loyéns «[candjî]» po candjî rén k'&nbsp;ene seccion",
"tog-editsectiononrightclick" => "Candjî les seccions avou on dobe-clitch sol tite (JavaScript)",
-"tog-showtoc" => "Mostrer l'&nbsp;tåvlea d'&nbsp;ådvins<br>(po ls årtikes avou pus di 3 seccions)",
+"tog-showtoc" => "Mostrer l'&nbsp;tåvlea d'&nbsp;ådvins<br />(po ls årtikes avou pus di 3 seccions)",
"tog-rememberpassword" => "Rimimbrer li scret inte les sessions",
"tog-editwidth" => "Li boesse d'&nbsp;aspougnaedje prind tote li lårdjeu",
"tog-watchdefault" => "Shuve les årtikes ki dj'&nbsp;fwai ou ki dj'&nbsp;candje",
@@ -352,7 +352,7 @@ on conte d'&nbsp;uzeu, tapez on no no d'&nbsp;uzeu ki vos vloz eployî,
et poy deus côps on on scret (li minme, on côp dins tchake boesse).
Come rawete vos ploz (mins c'&nbsp;est nén oblidjî) dner voste adresse
emile; ça vént a pont si vos rovyîz vosse sicret, po dmander k'&nbsp;on
-vs evoye èn ôte pa emile.<br>\n",
+vs evoye èn ôte pa emile.<br />\n",
"login" => "S'&nbsp;elodjî",
"loginprompt" => "Vos dvoz permete les coûkes po vs elodjî so Wikipedia.",
@@ -406,7 +406,7 @@ Relodjîz vs avou ç'&nbsp;noû scret on côp ki vos l'&nbsp;åroz rçuvou s'&nb
"showpreview" => "Vey divant",
"blockedtitle" => "L'&nbsp;uzeu est bloké",
"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
+The reason given is this:<br />''$2''<p>You may contact $1 or one of the other
[[Wikipedia:Manaedjeus|administrators]] to discuss the block.
Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Sipeciås:Preferences|user preferences]].
@@ -475,11 +475,11 @@ dvèt esse dizo li licince di documintåcion libe di GNU
(GFDL, loukîz $1 po pus di racsegnes).
Si&nbsp;vos n'&nbsp;voloz nén ki vosse tecse poye esse candjî eyet spårdou
pa tot l'&nbsp;minme kî, adon nel evoyîz nén chal.
-<br>
+<br />
Vos nos acertinez eto ki vos avoz scrît l'&nbsp;tecse vos minme, oudonbén
l'&nbsp;avoz copyî d'&nbsp;on sourdant libe (dominne publik ou on sourdant
pareymint libe).
-<br>
+<br />
<strong>N'&nbsp;EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION&nbsp;!</strong>",
"longpagewarning" => "ASTEME: Cisse pådje fwait $1 kilo-octets; des
betchteus waibes k'&nbsp;i gn a polèt aveut des rujhes po-z aspougnî
@@ -544,8 +544,8 @@ ki corespond eyet $3 årtikes avou l'&nbsp;tecse ki corespond.",
"nonefound" => "<strong>Note</strong>: des cweraedjes ki n'&nbsp;dinèt nou rzultat c'&nbsp;est sovint li cweraedje di ptits mots trop corants (come «les», «des») ki n'&nbsp;sont nén indecsés, oudonbén des cweraedjes di pus d'&nbsp;on mot (seulmint les pådjes avou tos les mots dmandés sront håynêyes dins l'&nbsp;rizultat do cweraedje).",
"powersearch" => "Cweri",
"powersearchtext" => "
-Cweraedje ezès espåces di nos&nbsp;:<br>
-$1<br>
+Cweraedje ezès espåces di nos&nbsp;:<br />
+$1<br />
$2 Håyner les redjiblaedjes &nbsp; Cweri après $3 $9",
"searchdisabled" => "<p>Mande escuzes! Li cweraedje å dvins des årtikes a stî dismetou
pol moumint, cåze ki l'&nbsp;sierveu est fortcherdjî.
@@ -563,9 +563,9 @@ border=\"0\" ALT=\"Google\"></A>
<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
<INPUT type=submit name=btnG VALUE=\"Cweri avou Google\">
<font size=-1>
-<input type=hidden name=domains value=\"{$wgServer}\"><br>
+<input type=hidden name=domains value=\"{$wgServer}\"><br />
<input type=radio name=sitesearch value=\"\"> sol waibe
-<input type=radio name=sitesearch value=\"{$wgServer}\" checked> so {$wgServer} <br>
+<input type=radio name=sitesearch value=\"{$wgServer}\" checked> so {$wgServer} <br />
<input type='hidden' name='hl' value='wa'>
<input type='hidden' name='ie' value='$2'>
<input type='hidden' name='oe' value='$2'>
@@ -758,7 +758,7 @@ saveur å dfait do fitchî.",
"deleteimgcompletely" => "oist.",
"imghistlegend" => "Ledjinde: (ast.) = c'&nbsp;est l'&nbsp;imådje k'&nbsp;i gn a asteure, (oist.) = oister (disfacer)
cisse viye modêye la, (mod.) = rivni a cisse viye modêye la.
-<br><i>Clitchîz sol date po vey l'&nbsp;imådje evoyeye a cisse date la.</i>",
+<br /><i>Clitchîz sol date po vey l'&nbsp;imådje evoyeye a cisse date la.</i>",
"imagelinks" => "Loyéns viè ciste imådje chal",
"linkstoimage" => "Les pådjes shuvantes eployèt ciste imådje chal:",
"nolinkstoimage" => "I n'&nbsp;a nole pådje k'&nbsp;eploye ciste imådje chal.",
@@ -797,11 +797,11 @@ ki vos fjhoz on ptit candjmint ;-)",
"maintenancebacklink" => "Rivni al pådje di manaedjmint",
"disambiguations" => "PÃ¥djes d'&nbsp;omonimeye",
"disambiguationspage" => "Wikipedia:Loyéns_viè_les_pådjes_d'_omonimeye",
-"disambiguationstext" => "Les årtikes shuvants ont des loyéns viè en <i>pådje d'&nbsp;omonimeye</i>. I dvrént purade loyî viè l'&nbsp;bon årtike.<br>
-Ene pådje est considerêye come pådje d'&nbsp;omonimeye si elle aparexhe e $1.<br>
+"disambiguationstext" => "Les årtikes shuvants ont des loyéns viè en <i>pådje d'&nbsp;omonimeye</i>. I dvrént purade loyî viè l'&nbsp;bon årtike.<br />
+Ene pådje est considerêye come pådje d'&nbsp;omonimeye si elle aparexhe e $1.<br />
Les loyéns a pårti d'&nbsp;ôtes espåces di lomaedje èn sont <i>nén</i> håynés chal.",
"doubleredirects" => "Dobes redjiblaedjes",
-"doubleredirectstext" => "<b>Asteme:</b> Cisse djivêye chal pout aveur des fås pôzitifs. Dj'&nbsp;ô bén k'&nbsp;i pout aveur do tecse di pus, avou des loyéns, après li prumî «#REDIRECT».<br>\n
+"doubleredirectstext" => "<b>Asteme:</b> Cisse djivêye chal pout aveur des fås pôzitifs. Dj'&nbsp;ô bén k'&nbsp;i pout aveur do tecse di pus, avou des loyéns, après li prumî «#REDIRECT».<br />\n
Tchaeke roye a-st on loyén viè l'&nbsp;prumî eyet l'&nbsp;deujhinme redjiblaedje, avou on mostraedje del prumire roye do tecse do deujhinme redjiblaedje, çou ki å pus sovint dene li «vraiy» årtike såme, ki l'&nbsp;prumî redjiblaedje dvreut evoyî viè lu.",
"brokenredirects" => "Pierdous redjiblaedjes",
"brokenredirectstext" => "Les redjiblaedjes shuvants evoyèt so ene pådje ki n'&nbsp;egzistêye nén.",
@@ -1031,7 +1031,7 @@ pages that were vandalized).", # co a fé
"noblockreason" => "Vos dvoz dner ene råjhon pol blocaedje.",
"blockipsuccesssub" => "Li blocaedje a stî comifåt",
"blockipsuccesstext" => "«$1» a stî bloké.
-<br>Loukîz li [[Sipeciås:Ipblocklist|Djivêye des blocaedjes]] po candjî on blocaedje.",
+<br />Loukîz li [[Sipeciås:Ipblocklist|Djivêye des blocaedjes]] po candjî on blocaedje.",
"unblockip" => "Disbloker èn uzeu",
"unblockiptext" => "Use the form below to restore write access
to a previously blocked IP address.", # co a fé
@@ -1071,7 +1071,7 @@ Please confirm that this is what you intend to do.", # co a fé
"lockdbsuccesssub" => "Database lock succeeded", # co a fé
"unlockdbsuccesssub" => "Database lock removed", # co a fé
"lockdbsuccesstext" => "The database has been locked.
-<br>Remember to remove the lock after your maintenance is complete.", # co a fé
+<br />Remember to remove the lock after your maintenance is complete.", # co a fé
"unlockdbsuccesstext" => "The database has been unlocked.", # co a fé
# SQL query
diff --git a/languages/LanguageZh.php b/languages/LanguageZh.php
index c27036b26bb0..33dd301ea3c4 100644
--- a/languages/LanguageZh.php
+++ b/languages/LanguageZh.php
@@ -15,7 +15,14 @@ class LanguageZh extends LanguageZh_cn {
var $mZhClient=false;
function LanguageZh() {
global $wgUseZhdaemon, $wgZhdaemonHost, $wgZhdaemonPort;
- global $wgDisableLangConversion;
+ global $wgDisableLangConversion, $wgUser;
+
+ if( $wgUser->getID()!=0 ) {
+ /* allow user to diable conversion */
+ if( $wgDisableLangConversion == false &&
+ $wgUser->getOption('nolangconversion') == 1)
+ $wgDisableLangConversion = true;
+ }
$this->mZhLanguageCode = $this->getPreferredVariant();
if($wgUseZhdaemon) {
@@ -55,8 +62,19 @@ class LanguageZh extends LanguageZh_cn {
return $this->mZhLanguageCode;
}
-
-
+ # this should give much better diff info
+ function segmentForDiff( $text ) {
+ return preg_replace(
+ "/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+ "' ' .\"$1\"", $text);
+ }
+
+ function unsegmentForDiff( $text ) {
+ return preg_replace(
+ "/ ([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+ "\"$1\"", $text);
+ }
+
function autoConvert($text, $toVariant=false) {
if(!$toVariant)
$toVariant = $this->getPreferredVariant();
@@ -112,8 +130,8 @@ class LanguageZh extends LanguageZh_cn {
//better to use zh-cn for search, since conversion from
//Traditional to Simplified is less ambiguous than the
//other way around
- $string = $this->autoConvert($string, 'zh-cn');
$t = $this->mZhClient->segment($string);
+ $t = $this->autoConvert($t, 'zh-cn');
$t = LanguageUtf8::stripForSearch( $t );
wfProfileOut( $fname );
return $t;
@@ -126,5 +144,9 @@ class LanguageZh extends LanguageZh_cn {
$ret = array_unique( explode('|', $terms) );
return $ret;
}
+
+ function getExtraHashOptions() {
+ return array('variant', 'nolangconversion');
+ }
}
?>
diff --git a/languages/LanguageZh_cn.php b/languages/LanguageZh_cn.php
index 1be021375155..a39e20d0370e 100644
--- a/languages/LanguageZh_cn.php
+++ b/languages/LanguageZh_cn.php
@@ -58,6 +58,9 @@ require_once( "LanguageUtf8.php" );
"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
);
+/* private */ $wgUserTogglesZh_cn = array(
+ 'nolangconversion',
+) + $wgUserTogglesEn;
# All special pages have to be listed here: a description of ""
# will make them not show up on the "Special Pages" page, which
@@ -140,14 +143,14 @@ require_once( "LanguageUtf8.php" );
"tog-editondblclick" => "åŒå‡»é¡µé¢ç¼–辑(JavaScript)",
"tog-editsection"=>"å…许通过点击[编辑]链接编辑段è½",
"tog-editsectiononrightclick"=>"å…许å³å‡»æ ‡é¢˜ç¼–辑段è½(JavaScript)",
-"tog-showtoc"=>"显示目录<br>(针对一页超过3个标题的文章)",
+"tog-showtoc"=>"显示目录<br />(针对一页超过3个标题的文章)",
"tog-rememberpassword" => "下次登陆记ä½å¯†ç ", /* "Remember password across sessions", */
"tog-editwidth" => "编辑æ ä½å®½åº¦", /* "Edit box has full width", */
"tog-editondblclick" => "åŒå‡»ç¼–辑页é¢ï¼ˆJavascript)", /* "Edit pages on double click (JavaScript)", */
"tog-watchdefault" => "监视新的以åŠæ›´æ”¹è¿‡çš„文章", /* "Watch new and modified articles", */
"tog-minordefault" => "细微编辑为默认设置", /* "Mark all edits minor by default", */
"tog-previewontop" => "在编辑框上方显示预览", /* "Show preview before edit box and not after it" */
-
+"tog-nolangconversion" => "ä¸è¿›è¡Œç¹ç®€ä½“转æ¢", /* "disable language conversion" */
# Dates
'sunday' => "星期日",
@@ -322,8 +325,8 @@ MySQL返回错误 \"<tt>$3: $4</tt>\"。",
"yourpasswordagain" => "å†æ¬¡è¾“入密ç ",
"newusersonly" => "(仅é™æ–°ç”¨æˆ·ï¼‰",
"remembermypassword" => "下次登录记ä½å¯†ç ã€‚",
-"loginproblem" => "<b>登录有问题。</b><br>å†è¯•ä¸€æ¬¡ï¼",
-"alreadyloggedin" => "<font color=red><b>用户$1,您已ç»ç™»å½•äº†!</b></font><br>\n",
+"loginproblem" => "<b>登录有问题。</b><br />å†è¯•ä¸€æ¬¡ï¼",
+"alreadyloggedin" => "<font color=red><b>用户$1,您已ç»ç™»å½•äº†!</b></font><br />\n",
"login" => "登录",
"userlogin" => "用户登录",
@@ -363,7 +366,7 @@ MySQL返回错误 \"<tt>$3: $4</tt>\"。",
"showpreview" => "显示预览",
"blockedtitle" => "用户被å°",
"blockedtext" => "您的用户å或IP地å€å·²è¢«$1å°ã€‚
-ç†ç”±æ˜¯ï¼š<br>'''$2'''<p>您å¯ä»¥ä¸Ž$1å‘其他任何[[Wikipedia:管ç†å‘˜|管ç†å‘˜]]询问。",
+ç†ç”±æ˜¯ï¼š<br />'''$2'''<p>您å¯ä»¥ä¸Ž$1å‘其他任何[[Wikipedia:管ç†å‘˜|管ç†å‘˜]]询问。",
"whitelistedittitle" => "登录åŽæ‰å¯ç¼–辑",
"whitelistedittext" => "您必须先[[Special:Userlogin|登录]]æ‰å¯ç¼–辑页é¢ã€‚",
"whitelistreadtitle" => "登录åŽæ‰å¯é˜…读",
@@ -400,7 +403,7 @@ MySQL返回错误 \"<tt>$3: $4</tt>\"。",
"yourdiff" => "差别",
"copyrightwarning" => "请注æ„对Wikipedia的任何贡献都将被认为是在GNU自由文档åè®®è¯ä¹¦ä¸‹å‘布。
(细节请è§$1).
-如果您ä¸å¸Œæœ›æ‚¨çš„文字被任æ„修改和å†æ•£å¸ƒï¼Œè¯·ä¸è¦æ交。<br>
+如果您ä¸å¸Œæœ›æ‚¨çš„文字被任æ„修改和å†æ•£å¸ƒï¼Œè¯·ä¸è¦æ交。<br />
您åŒæ—¶ä¹Ÿå‘我们ä¿è¯ä½ æ‰€æ交的内容是你自己所作,或得自一个ä¸å—版æƒä¿æŠ¤æˆ–相似自由的æ¥æºã€‚
<strong>ä¸è¦åœ¨æœªèŽ·æŽˆæƒçš„情况下å‘表ï¼</strong>",
@@ -458,7 +461,7 @@ MySQL返回错误 \"<tt>$3: $4</tt>\"。",
"nonefound" => "<strong>注æ„:</strong>失败的æœç´¢å¾€å¾€æ˜¯ç”±äºŽè¯•å›¾æœç´¢è¯¸å¦‚“的â€æˆ–“和â€ä¹‹ç±»çš„常è§å­—所引起。",
"powersearch" => "æœç´¢",
"powersearchtext" => "
-æœç´¢å字空间:<br>$1<br>$2列出é‡å®šå‘页é¢ï¼›æœç´¢$3 $9",
+æœç´¢å字空间:<br />$1<br />$2列出é‡å®šå‘页é¢ï¼›æœç´¢$3 $9",
"searchdisabled" => "<p>Wikipedia内部æœç´¢åŠŸèƒ½ç”±äºŽé«˜å³°æ—¶æ®µæœåŠ¡å™¨è¶…载而åœæ­¢ä½¿ç”¨ã€‚
您å¯ä»¥æš‚时通过
@@ -476,9 +479,9 @@ alt=\"Google\" align=\"middle\"></a>
<input type=text name=\"q\" size=31 maxlength=255 value=\"$1\">
<input type=submit name=\"sa\" value=\"Googleæœç´¢\">
<input type=hidden name=\"cof\" value=\"LW:135;L:http://zh.wikipedia.org/upload/wiki.png;LH:133;AH:left;S:http://www.wikiped<font face=arial,sans-serif size=-1>
-<input type=hidden name=\"domains\" value=\"zh.wikipedia.org\"><br>
+<input type=hidden name=\"domains\" value=\"zh.wikipedia.org\"><br />
<input type=radio name=\"sitesearch\" value=\"\"> æœç´¢WWW
-<input type=radio name=\"sitesearch\" value=\"zh.wikipedia.org\" checked> æœç´¢zh.wikipedia.org </font><br>
+<input type=radio name=\"sitesearch\" value=\"zh.wikipedia.org\" checked> æœç´¢zh.wikipedia.org </font><br />
</td></tr></table></form>
<!-- Search Google -->\n",
@@ -639,7 +642,7 @@ alt=\"Google\" align=\"middle\"></a>
"deleteimgcompletely" => "删",
"imghistlegend" => "egend: (现) = ç›®å‰çš„图åƒï¼Œ(删) = 删除旧版本,
(å¤) = æ¢å¤åˆ°æ—§ç‰ˆæœ¬ã€‚
-<br><i>点击日期查看当天上载的图åƒ</i>.",
+<br /><i>点击日期查看当天上载的图åƒ</i>.",
"imagelinks" => "图åƒé“¾æŽ¥",
"linkstoimage" => "以下页é¢è¿žæŽ¥åˆ°æœ¬å›¾åƒï¼š",
@@ -666,10 +669,10 @@ alt=\"Google\" align=\"middle\"></a>
"maintenancebacklink" => "返回维护页",
"disambiguations" => "消å«ç³Šé¡µ",
"disambiguationspage" => "Wikipedia:Links_to_disambiguating_pages",
-"disambiguationstext" => "以下的æ¡ç›®éƒ½æœ‰åˆ°æ¶ˆå«ç³Šé¡µçš„链接,但它们应该是链到适当的题目。<br>一个页é¢ä¼šè¢«è§†ä¸ºæ¶ˆå«ç³Šé¡µå¦‚果它是链自$1.<br>由其它他å字空间æ¥çš„链接<i>ä¸ä¼š</i>在这儿被列出æ¥ã€‚",
+"disambiguationstext" => "以下的æ¡ç›®éƒ½æœ‰åˆ°æ¶ˆå«ç³Šé¡µçš„链接,但它们应该是链到适当的题目。<br />一个页é¢ä¼šè¢«è§†ä¸ºæ¶ˆå«ç³Šé¡µå¦‚果它是链自$1.<br />由其它他å字空间æ¥çš„链接<i>ä¸ä¼š</i>在这儿被列出æ¥ã€‚",
"doubleredirects" => "åŒé‡é‡å®šå‘",
"doubleredirectstext" => "<b>请注æ„:</b> 这列表å¯èƒ½åŒ…括ä¸æ­£ç¡®çš„å应。
-这通常表示在那页é¢ç¬¬ä¸€ä¸ª#REDIRECT之下还有文字。<br>\n
+这通常表示在那页é¢ç¬¬ä¸€ä¸ª#REDIRECT之下还有文字。<br />\n
æ¯ä¸€è¡Œéƒ½åŒ…å«åˆ°ç¬¬ä¸€è·Ÿç¬¬äºŒä¸ªé‡å®šå‘页的链接,以åŠç¬¬äºŒä¸ªé‡å®šå‘页的第一行文字,
通常显示的都会是\“真正\†的目标页é¢ï¼Œä¹Ÿå°±æ˜¯ç¬¬ä¸€ä¸ªé‡å®šå‘页应该指å‘çš„æ¡ç›®ã€‚",
"brokenredirects" => "æŸåçš„é‡å®šå‘页",
@@ -859,7 +862,7 @@ Wikipedia与这些公å¸å¹¶æ²¡æœ‰ä»»ä½•å•†ä¸šå…³ç³»ï¼Œå› æ­¤æœ¬è¡¨ä¸åº”该
"noblockreason" => "您必须说明查å°çš„具体ç†ç”±ã€‚",
"blockipsuccesssub" => "查å°æˆåŠŸ",
"blockipsuccesstext" => "IP地å€â€œ$1â€å·²ç»è¢«æŸ¥å°ã€‚
-<br>å‚看[[Special:被å°IP地å€åˆ—表|被å°IP地å€åˆ—表]]以å¤å®¡æŸ¥å°ã€‚",
+<br />å‚看[[Special:被å°IP地å€åˆ—表|被å°IP地å€åˆ—表]]以å¤å®¡æŸ¥å°ã€‚",
"unblockip" => "解除ç¦å°IP地å€",
"unblockiptext" => "用下é¢çš„表å•æ¥æ¢å¤å…ˆå‰è¢«ç¦å°çš„IP地å€çš„书写æƒã€‚",
"ipusubmit" => "解除ç¦å°",
@@ -887,7 +890,7 @@ Wikipedia与这些公å¸å¹¶æ²¡æœ‰ä»»ä½•å•†ä¸šå…³ç³»ï¼Œå› æ­¤æœ¬è¡¨ä¸åº”该
"unlockdbsuccesssub" => "æ•°æ®åº“开放",
"lockdbsuccesstext" => "Wikipediaæ•°æ®åº“å·²ç»ä¸Šé”。
-<br>请记ä½åœ¨ç»´æŠ¤å®ŒæˆåŽé‡æ–°å¼€æ”¾æ•°æ®åº“。",
+<br />请记ä½åœ¨ç»´æŠ¤å®ŒæˆåŽé‡æ–°å¼€æ”¾æ•°æ®åº“。",
"unlockdbsuccesstext" => "Wikipediaæ•°æ®åº“é‡æ–°å¼€æ”¾ã€‚",
# SQL query
@@ -958,6 +961,11 @@ class LanguageZh_cn extends LanguageUtf8 {
return $wgBookstoreListZh_cn ;
}
+ function getUserToggles() {
+ global $wgUserTogglesZh_cn;
+ return $wgUserTogglesZh_cn;
+ }
+
function getNamespaces() {
global $wgNamespaceNamesZh_cn;
return $wgNamespaceNamesZh_cn;
diff --git a/languages/LanguageZh_tw.php b/languages/LanguageZh_tw.php
index eb50fad1d73d..7e548384fcdd 100644
--- a/languages/LanguageZh_tw.php
+++ b/languages/LanguageZh_tw.php
@@ -137,7 +137,7 @@ require_once( "LanguageZh_cn.php" );
"tog-editondblclick" => "雙擊é é¢ç·¨è¼¯(JavaScript)",
"tog-editsection"=>"å…許通éŽé»žæ“Š[編輯]éˆçµç·¨è¼¯æ®µè½",
"tog-editsectiononrightclick"=>"å…許å³æ“Šæ¨™é¡Œç·¨è¼¯æ®µè½(JavaScript)",
- "tog-showtoc"=>"顯示目錄<br>(é‡å°ä¸€é è¶…éŽ3個標題的文章)",
+ "tog-showtoc"=>"顯示目錄<br />(é‡å°ä¸€é è¶…éŽ3個標題的文章)",
"tog-rememberpassword" => "下次登陸記ä½å¯†ç¢¼",/* "Remember password across sessions", */
"tog-editwidth" => "編輯欄ä½å¯¬åº¦",/* "Edit box has full width", */
"tog-editondblclick" => "雙擊編輯é é¢ï¼ˆJavascript)",/* "Edit pages on double click (JavaScript)", */
@@ -322,8 +322,8 @@ MySQL返回錯誤 \"<tt>$3: $4</tt>\"。",
"yourpasswordagain" => "å†æ¬¡è¼¸å…¥å¯†ç¢¼",
"newusersonly" => "(僅é™æ–°ç”¨æˆ¶ï¼‰",
"remembermypassword" => "下次登錄記ä½å¯†ç¢¼ã€‚",
-"loginproblem" => "<b>登錄有å•é¡Œã€‚</b><br>å†è©¦ä¸€æ¬¡ï¼",
-"alreadyloggedin" => "<font color=red><b>用戶$1,您已經登錄了!</b></font><br>\n",
+"loginproblem" => "<b>登錄有å•é¡Œã€‚</b><br />å†è©¦ä¸€æ¬¡ï¼",
+"alreadyloggedin" => "<font color=red><b>用戶$1,您已經登錄了!</b></font><br />\n",
"login" => "登錄",
"userlogin" => "用戶登錄",
@@ -363,7 +363,7 @@ MySQL返回錯誤 \"<tt>$3: $4</tt>\"。",
"showpreview" => "顯示é è¦½",
"blockedtitle" => "用戶被å°",
"blockedtext" => "您的用戶å或網å€å·²è¢«$1å°ã€‚
-ç†ç”±æ˜¯ï¼š<br>'''$2'''<p>您å¯ä»¥èˆ‡$1å‘其他任何[[維基百科:管ç†å“¡|管ç†å“¡]]è©¢å•ã€‚",
+ç†ç”±æ˜¯ï¼š<br />'''$2'''<p>您å¯ä»¥èˆ‡$1å‘其他任何[[維基百科:管ç†å“¡|管ç†å“¡]]è©¢å•ã€‚",
"whitelistedittitle" => "登錄後æ‰å¯ç·¨è¼¯",
"whitelistedittext" => "您必須先[[特殊:登錄]]æ‰å¯ç·¨è¼¯é é¢ã€‚",
"whitelistreadtitle" => "登錄後æ‰å¯é–±è®€",
@@ -400,7 +400,7 @@ MySQL返回錯誤 \"<tt>$3: $4</tt>\"。",
"yourdiff" => "差別",
"copyrightwarning" => "請注æ„å°W維基百科的任何貢ç»éƒ½å°‡è¢«èªç‚ºæ˜¯åœ¨GNU自由文檔å”議證書下發佈。
(細節請見$1).
-如果您ä¸å¸Œæœ›æ‚¨çš„文字被任æ„修改和å†æ•£ä½ˆï¼Œè«‹ä¸è¦æ交。<br>
+如果您ä¸å¸Œæœ›æ‚¨çš„文字被任æ„修改和å†æ•£ä½ˆï¼Œè«‹ä¸è¦æ交。<br />
您åŒæ™‚也å‘我們ä¿è­‰ä½ æ‰€æ交的內容是你自己所作,或得自一個ä¸å—版權ä¿è­·æˆ–相似自由的來æºã€‚
<strong>ä¸è¦åœ¨æœªç²æŽˆæ¬Šçš„情æ³ä¸‹ç™¼è¡¨ï¼</strong>",
@@ -460,7 +460,7 @@ MySQL返回錯誤 \"<tt>$3: $4</tt>\"。",
"nonefound" => "<strong>注æ„:</strong>失敗的æœç´¢å¾€å¾€æ˜¯ç”±æ–¼è©¦åœ–æœç´¢è«¸å¦‚“的â€æˆ–“和â€ä¹‹é¡žçš„常見字所引起。",
"powersearch" => "æœç´¢",
"powersearchtext" => "
-æœç´¢å字空間:<br>$1<br>$2列出é‡å®šå‘é é¢ï¼›æœç´¢$3 $9",
+æœç´¢å字空間:<br />$1<br />$2列出é‡å®šå‘é é¢ï¼›æœç´¢$3 $9",
"searchdisabled" => "<p>維基百科內部æœç´¢åŠŸèƒ½ç”±æ–¼é«˜å³°æ™‚段æœå‹™å™¨è¶…載而åœæ­¢ä½¿ç”¨ã€‚
您å¯ä»¥æš«æ™‚通éŽ
@@ -478,9 +478,9 @@ alt=\"Google\" align=\"middle\"></a>
<input type=text name=\"q\" size=31 maxlength=255 value=\"$1\">
<input type=submit name=\"sa\" value=\"Googleæœç´¢\">
<input type=hidden name=\"cof\" value=\"LW:135;L:http://zh-tw.wikipedia.org/upload/wiki.png;LH:133;AH:left;S:http://www.wikiped<font face=arial,sans-serif size=-1>
-<input type=hidden name=\"domains\" value=\"zh-tw.wikipedia.org\"><br>
+<input type=hidden name=\"domains\" value=\"zh-tw.wikipedia.org\"><br />
<input type=radio name=\"sitesearch\" value=\"\"> æœç´¢WWW
-<input type=radio name=\"sitesearch\" value=\"zh-tw.wikipedia.org\" checked> æœç´¢zh-tw.wikipedia.org </font><br>
+<input type=radio name=\"sitesearch\" value=\"zh-tw.wikipedia.org\" checked> æœç´¢zh-tw.wikipedia.org </font><br />
</td></tr></table></form>
<!-- Search Google -->\n",
@@ -636,7 +636,7 @@ alt=\"Google\" align=\"middle\"></a>
"deleteimg" => "刪",
"imghistlegend" => "題跋: (ç¾) = ç›®å‰çš„圖åƒï¼Œ(刪) = 刪除舊版本,
(複) = æ¢å¾©åˆ°èˆŠç‰ˆæœ¬ã€‚
-<br><i>點擊日期查看當天上載的圖åƒ</i>.",
+<br /><i>點擊日期查看當天上載的圖åƒ</i>.",
"imagelinks" => "圖åƒéˆæŽ¥",
"linkstoimage" => "以下é é¢é€£æŽ¥åˆ°æœ¬åœ–åƒï¼š",
@@ -663,10 +663,10 @@ alt=\"Google\" align=\"middle\"></a>
"maintenancebacklink" => "返回維護é ",
"disambiguations" => "消å«ç³Šé ",
"disambiguationspage" => "維基百科:éˆæŽ¥åˆ°æ¶ˆæ­§ç¾©çš„é é¢",
-"disambiguationstext" => "以下的æ¢ç›®éƒ½æœ‰åˆ°æ¶ˆå«ç³Šé çš„éˆæŽ¥ï¼Œä½†å®ƒå€‘應該是éˆåˆ°é©ç•¶çš„題目。<br>一個é é¢æœƒè¢«è¦–為消å«ç³Šé å¦‚果它是éˆè‡ª$1.<br>由其它他å字空間來的éˆæŽ¥<i>ä¸æœƒ</i>在這兒被列出來。",
+"disambiguationstext" => "以下的æ¢ç›®éƒ½æœ‰åˆ°æ¶ˆå«ç³Šé çš„éˆæŽ¥ï¼Œä½†å®ƒå€‘應該是éˆåˆ°é©ç•¶çš„題目。<br />一個é é¢æœƒè¢«è¦–為消å«ç³Šé å¦‚果它是éˆè‡ª$1.<br />由其它他å字空間來的éˆæŽ¥<i>ä¸æœƒ</i>在這兒被列出來。",
"doubleredirects" => "é›™é‡é‡å®šå‘",
"doubleredirectstext" => "<b>請注æ„:</b> 這列表å¯èƒ½åŒ…括ä¸æ­£ç¢ºçš„å應。
-這通常表示在那é é¢ç¬¬ä¸€å€‹#REDIRECT之下還有文字。<br>\n
+這通常表示在那é é¢ç¬¬ä¸€å€‹#REDIRECT之下還有文字。<br />\n
æ¯ä¸€è¡Œéƒ½åŒ…å«åˆ°ç¬¬ä¸€è·Ÿç¬¬äºŒå€‹é‡å®šå‘é çš„éˆæŽ¥ï¼Œä»¥åŠç¬¬äºŒå€‹é‡å®šå‘é çš„第一行文字,
通常顯示的都會是\“真正\†的目標é é¢ï¼Œä¹Ÿå°±æ˜¯ç¬¬ä¸€å€‹é‡å®šå‘é æ‡‰è©²æŒ‡å‘çš„æ¢ç›®ã€‚",
"brokenredirects" => "æ壞的é‡å®šå‘é ",
@@ -855,7 +855,7 @@ alt=\"Google\" align=\"middle\"></a>
"noblockreason" => "您必須說明查å°çš„å…·é«”ç†ç”±ã€‚",
"blockipsuccesssub" => "查å°æˆåŠŸ",
"blockipsuccesstext" => "網å€â€œ$1â€å·²ç¶“被查å°ã€‚
-<br>åƒçœ‹[[特殊:被å°ç¶²å€åˆ—表|被å°ç¶²å€åˆ—表]]以復審查å°ã€‚",
+<br />åƒçœ‹[[特殊:被å°ç¶²å€åˆ—表|被å°ç¶²å€åˆ—表]]以復審查å°ã€‚",
"unblockip" => "解除ç¦å°ç¶²å€",
"unblockiptext" => "用下é¢çš„表單來æ¢å¾©å…ˆå‰è¢«ç¦å°çš„網å€çš„書寫權。",
"ipusubmit" => "解除ç¦å°",
@@ -883,7 +883,7 @@ alt=\"Google\" align=\"middle\"></a>
"unlockdbsuccesssub" => "數據庫開放",
"lockdbsuccesstext" => "維基百科數據庫已經上鎖。
-<br>請記ä½åœ¨ç¶­è­·å®Œæˆå¾Œé‡æ–°é–‹æ”¾æ•¸æ“šåº«ã€‚",
+<br />請記ä½åœ¨ç¶­è­·å®Œæˆå¾Œé‡æ–°é–‹æ”¾æ•¸æ“šåº«ã€‚",
"unlockdbsuccesstext" => "維基百科數據庫é‡æ–°é–‹æ”¾ã€‚",
# SQL query
diff --git a/languages/Names.php b/languages/Names.php
index d6fa2b154873..7d8e4e6a1118 100644
--- a/languages/Names.php
+++ b/languages/Names.php
@@ -122,14 +122,14 @@
'mus' => 'Muscogee',
'my' => 'Myanmasa', # Burmese
'na' => 'Ekakair&#361; Naoero', # Nauruan
- 'nb' => 'Bokm&aring;l', # Norwegian (Bokmal)
+ 'nb' => 'Norsk (bokm&aring;l)', # Norwegian (Bokmal)
'nah' => 'Nahuatl',
'nds' => 'Plattd&uuml;&uuml;tsch', # Low German ''or'' Low Saxon
'ne' => '&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;', # Nepali
'ng' => 'Ndonga',
'nl' => 'Nederlands', # Dutch
'ne' => '&#2344;&#2375;&#2346;&#2366;&#2354;&#2368;', # Nepali
- 'nn' => 'Nynorsk' , # (Norwegian) Nynorsk
+ 'nn' => 'Norsk (nynorsk)' , # (Norwegian) Nynorsk
'no' => 'Norsk', # Norwegian
'nv' => 'Din&eacute; bizaad', # Navajo
'ny' => 'Chi-Chewa', # Chichewa
@@ -185,6 +185,7 @@
'tr' => 'T&uuml;rk&ccedil;e', # Turkish
'ts' => 'Xitsonga', # Tsonga
'tt' => 'Tatar&ccedil;a', # Tatar
+ 'tum' => 'chiTumbuka', # Tumbuka
'tw' => 'Twi', # Twi -- FIXME
'ty' => 'Reo M&#257;`ohi', # Tahitian
'ug' => 'Oyghurque', # Uyghur
diff --git a/maintenance/InitialiseMessages.inc b/maintenance/InitialiseMessages.inc
index f3e3623824c7..b057f96e53e6 100755
--- a/maintenance/InitialiseMessages.inc
+++ b/maintenance/InitialiseMessages.inc
@@ -11,18 +11,17 @@
*/
-
function initialiseMessages( $overwrite = false, $messageArray = false ) {
global $wgContLang, $wgContLanguageCode;
global $wgContLangClass, $wgAllMessagesEn;
+ global $wgDisableLangConversion;
+ global $wgForceUIMsgAsContentMsg;
+ global $wgLanguageNames;
global $IP;
-
- $langclass = 'Language'. str_replace( '-', '_', ucfirst( $wgContLanguageCode ) );
- require_once("$IP/languages/$langclass.php");
- $variants = $wgContLang->getVariants();
- if(!in_array($wgContLanguageCode, $variants))
- $variants[]=$wgContLanguageCode;
+ # overwrite language conversion option so that all variants
+ # of the messages are initialised
+ $wgDisableLangConversion = false;
if ( $messageArray ) {
$sortedArray = $messageArray;
@@ -31,14 +30,19 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
}
ksort( $sortedArray );
-
$messages=array();
+
+ $variants = $wgContLang->getVariants();
+ if(!in_array($wgContLanguageCode, $variants))
+ $variants[]=$wgContLanguageCode;
+
foreach ($variants as $v) {
$langclass = 'Language'. str_replace( '-', '_', ucfirst( $v ) );
- $lang = new $langclass;
- if(!is_object($lang)) {
+ if( !class_exists($langclass) ) {
die ("class $langclass not defined. perhaps you need to include the file $langclass.php in $wgContLangClass.php?");
}
+ $lang = new $langclass;
+
if($v==$wgContLanguageCode)
$suffix='';
else
@@ -46,7 +50,25 @@ function initialiseMessages( $overwrite = false, $messageArray = false ) {
foreach ($sortedArray as $key => $msg) {
$messages[$key.$suffix] = $lang->getMessage($key);
}
- }
+ }
+
+ require_once('languages/Names.php');
+
+ /*
+ initialize all messages in $wgForceUIMsgAsContentMsg for all
+ languages in Names.php
+ */
+ if( is_array( $wgForceUIMsgAsContentMsg ) ) {
+ foreach( $wgForceUIMsgAsContentMsg as $uikey ) {
+ foreach( $wgLanguageNames as $code => $name) {
+ if( $code == $wgContLanguageCode )
+ continue;
+ $msg = $wgContLang->getMessage( $uikey );
+ if( $msg )
+ $messages[$uikey. '/' . $code] = $msg;
+ }
+ }
+ }
initialiseMessagesReal( $overwrite, $messages );
}
@@ -180,7 +202,7 @@ function initialiseMessagesReal( $overwrite = false, $messageArray = false ) {
}
}
- $dbw->insert( $cur, $arr, $fname );
+ $dbw->insert( 'cur', $arr, $fname );
# Clear the relevant memcached key
print 'Clearing message cache...';
diff --git a/maintenance/archives/importTests.php b/maintenance/archives/importTests.php
deleted file mode 100644
index ec9e6f9bd878..000000000000
--- a/maintenance/archives/importTests.php
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-/**
- * @deprecated
- * @package MediaWiki
- * @subpackage MaintenanceArchive
- */
-
-/** */
-print "This script is obsolete!";
-print "It is retained in the source here in case some of its
-code might be useful for ad-hoc conversion tasks, but it is
-not maintained and probably won't even work as is.";
-exit();
-
-?><html>
-<head>
-<title>Unit tests for UseMod-to-PediaWiki import script</title>
-<meta http-equiv="Refresh" content="10;URL=importTests.php">
-<style>
-.pass { color: green }
-.fail { color: red }
-</style>
-</head>
-<body>
-
-<?php
-
-# Unit tests for importUseModWiki
-# Well, more or less ;)
-
-$testingonly = true;
-
-setlocale( LC_ALL, "C" );
-
-include_once( "importUseModWiki.php" );
-
-$wgRootDirectory = "./testconvert";
-runTests();
-
-function runTests() {
- $success =
- testTimestamp()
- && testRecode()
- && testFreeToNormal()
- && testTransformTitle()
- && testMediaLinks()
- && testRemoveTalkLink()
- && testSubPages()
- ;
- if( $success ) {
- echo "\n<h1 class='pass'>** Passed all tests! **</h1>\n";
- } else {
- echo "\n<h1 class='fail'>-- FAILED ONE OR MORE TESTS --</h1>\n";
- }
- return $success;
-}
-
-function passTest( $testname, $note = "" ) {
- if( $notes != "" ) $notes = " -- $notes";
- echo "<span class='pass'>.. passed test $testname $notes</span><br />\n";
- return true;
-}
-
-function failTest( $testname, $notes = "" ) {
- if ( $notes != "" ) $notes = " -- $notes";
- echo "<span class='fail'>** FAILED TEST $testname **$notes</span><br />\n";
- return false;
-}
-
-function testTimestamp() {
- $tn = "Timestamp";
- $x = wfUnix2Timestamp( 0 );
- if( $x != "19700101000000" ) {
- return failTest( $tn, "wfUnix2Timestamp for epoch returned unexpected $x" );
- }
-
- $x = wfTimestamp2Unix( "19700101000000" );
- if( $x != 0 ) {
- return failTest( $tn, "wfTimestamp2Unix for epoch returned unexpected $x" );
- }
-
- return passTest( $tn );
-}
-
-function testRecode() {
- $tn = "Recode";
-
- # These functions are dummies for now
- $a = "abcd";
- $x = recodeInput( $a );
- if( $a != $x ) return failTest( $tn, "eo test returned different value" );
-
- $a = "ĉeÄ¥a ÅaÅ­mmanÄaĵo";
- $x = recodeInput( $a );
- if( $a != $x ) return failTest( $tn, "eo test returned different value" );
-
- return passTest( $tn );
-}
-
-function testFreeToNormal() {
- $tn = "FreeToNormal";
- $a = "WikiName"; $x = FreeToNormal( $a );
- if( $a != $x ) return failTest( $tn, "$a -> $a != $x" );
-
- $a = "With_Underscore"; $x = FreeToNormal( $a );
- if( $a != $x ) return failTest( $tn, "$a -> $a != $x" );
-
- $a = "With Space"; $x = FreeToNormal( $a );
- if( "With_Space" != $x ) return failTest( $tn, "$a -> With_Space != $x" );
-
- $a = "Mixed case"; $x = FreeToNormal( $a );
- if( "Mixed_Case" != $x ) return failTest( $tn, "$a -> Mixed_Case != $x" );
-
- $a = "\xe9cole"; $x = FreeToNormal( $a );
- if( $a != $x ) return failTest( $tn, "$a -> $a != $x (must replicate high caps bug)" );
-
- return passTest( $tn );
-}
-
-function testTransformTitle() {
- global $talkending;
- $oldtalkending = $talkending;
- $tn = "TransformTitle";
-
- $a = "WikiName"; $x = transformTitle( $a );
- if( $x->namespace != 0 or $x->title != "WikiName" ) return failTest( $tn, "$a -> 0, WikiName instead -> $x->namespace , $x->title" );
-
- $talkending = "Talk";
- $a = "WikiName/Talk"; $x = transformTitle( $a );
- if( $x->namespace != 1 or $x->title != "WikiName" ) return failTest( $tn, "$a -> 1, WikiName instead -> $x->namespace , $x->title" );
-
- $a = "WikiName/talk"; $x = transformTitle( $a );
- if( $x->namespace != 1 or $x->title != "WikiName" ) return failTest( $tn, "$a -> 1, WikiName instead -> $x->namespace , $x->title" );
-
- $talkending = "Diskuto";
- $a = "WikiName/Diskuto"; $x = transformTitle( $a );
- if( $x->namespace != 1 or $x->title != "WikiName" ) return failTest( $tn, "$a -> 1, WikiName instead -> $x->namespace , $x->title" );
-
- $talkending = $oldtalkending;
- return passTest( $tn );
-}
-
-function testMediaLinks() {
- $tn = "MediaLinks";
-
- # Fetch
- $a = "magic.gif";
- $x = fetchMediaFile( "???", "magic.gif" );
-
-
- # Media links
- $a = "[http://www.wikipedia.org/upload/magic.gif]";
- $b = "[[Media:Magic.gif]]"; # Or should it?
- $x = fixMediaLinks( $a );
- if( $x != $b ) return failTest( $tn, "$a should be $b, is $x" );
-
- $a = "[http://www.wikipedia.org/upload/magic.gif Click image]";
- $b = "[[Media:Magic.gif|Click image]]";
- $x = fixMediaLinks( $a );
- if( $x != $b ) return failTest( $tn, "$a should be $b, is $x" );
-
- # Image links:
- $a = "http://www.wikipedia.org/upload/magic.gif";
- $b = "[[Image:Magic.gif]]";
- $x = fixImageLinks( $a );
- if( $x != $b ) return failTest( $tn, "$a should be $b, is $x" );
-
- $a = "http://www.wikipedia.org/upload/a/a4/magic.gif";
- $b = "[[Image:Magic.gif]]";
- $x = fixImageLinks( $a );
- if( $x != $b ) return failTest( $tn, "$a should be $b, is $x" );
-
- return passTest( $tn );
-}
-
-function testRemoveTalkLink() {
- global $talkending;
- $tn = "RemoveTalkLink";
- $oldtalkending = $talkending;
- $talkending = "Talk";
-
- $a = "Blah blah blah blah\nFoo bar baz.\n/Talk";
- $b = "Blah blah blah blah\nFoo bar baz.";
- $x = removeTalkLink( $a );
- if( $x != $b ) return failTest( $tn, "removing talk link: '$a' -> '$x', should be '$b'" );
-
- $a = "Blah blah blah blah\nFoo bar baz.\n[[/Talk]]";
- $b = "Blah blah blah blah\nFoo bar baz.";
- $x = removeTalkLink( $a );
- if( $x != $b ) return failTest( $tn, "removing talk link: '$a' -> '$x', should be '$b'" );
-
- $a = "Blah blah blah blah\nFoo bar baz.\n/talk"; # wait... should this not work?
- $b = "Blah blah blah blah\nFoo bar baz.";
- $x = removeTalkLink( $a );
- if( $x != $b ) return failTest( $tn, "removing talk link: '$a' -> '$x', should be '$b'" );
-
- $talkending = "Priparolu";
- $a = "Blah blah blah blah\nFoo bar baz.\n/Priparolu";
- $b = "Blah blah blah blah\nFoo bar baz.";
- $x = removeTalkLink( $a );
- if( $x != $b ) return failTest( $tn, "removing talk link: '$a' -> '$x', should be '$b'" );
-
- $talkending = $oldtalkending;
- return passTest( $tn );
-}
-
-function testSubPages() {
- $tn = "SubPages";
-
- $t = "TopPage";
- $a = "Blah /Subpage blah";
- $b = "Blah [[TopPage/Subpage|/Subpage]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah /subpage blah";
- $b = $a;
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/Subpage]] blah";
- $b = "Blah [[TopPage/Subpage|/Subpage]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/subpage]] blah";
- $b = "Blah [[TopPage/Subpage|/subpage]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/Subpage|Fizzle]] blah";
- $b = "Blah [[TopPage/Subpage|Fizzle]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/subpage|Fizzle]] blah";
- $b = "Blah [[TopPage/Subpage|Fizzle]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah /\xc9cole blah";
- $b = "Blah [[TopPage/\xc9cole|/\xc9cole]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah /\xe9cole blah";
- $b = $a;
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/\xc9cole]] blah";
- $b = "Blah [[TopPage/\xc9cole|/\xc9cole]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/\xe9cole]] blah";
- $b = "Blah [[TopPage/\xe9cole|/\xe9cole]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/xe9cole|Fizzle]] blah";
- $b = "Blah [[TopPage/\xe9cole|Fizzle]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
-
- $a = "Blah [[/subpage|Fizzle]] blah";
- $b = "Blah [[TopPage/\xe9cole|Fizzle]] blah";
- $x = fixSubPages( $a, $t );
- if ( $x != $b ) return failTest( "'$a' -> '$x', should be '$b'" );
- return passTest( $tn );
-}
-
-?>
-</body>
-</html>
diff --git a/maintenance/archives/importUseModWiki.php b/maintenance/archives/importUseModWiki.php
deleted file mode 100644
index 755acc14068e..000000000000
--- a/maintenance/archives/importUseModWiki.php
+++ /dev/null
@@ -1,486 +0,0 @@
-<?php
-/**
- * @deprecated
- * @package MediaWiki
- * @subpackage MaintenanceArchive
- */
-
-/** */
-print "This script is obsolete!";
-print "It is retained in the source here in case some of its
-code might be useful for ad-hoc conversion tasks, but it is
-not maintained and probably won't even work as is.";
-exit();
-
-/*
- Import data from a UseModWiki into a PediaWiki wiki
- 2003-02-09 Brion VIBBER <brion@pobox.com>
- Based loosely on Magnus's code from 2001-2002
-
- Pass one: collect data on links & title case, users
- Pass two: spit out SQL for
- Separately, be sure to run the link & index rebuilding scripts!
-
- */
-
-/* globals
- */
-$wgRootDirectory = "/home/brion/vikio/wiki-ca/lib-http/db/wiki";
-$wgFieldSeparator = "\xb3"; # Some wikis may use different char
- $FS = $wgFieldSeparator ;
- $FS1 = $FS."1" ;
- $FS2 = $FS."2" ;
- $FS3 = $FS."3" ;
-
-# Images to import
-$imageimport = '(http:\/\/(?:www\.|meta\.|)wikipedia\.(?:com|org)\/upload\/(?:[a-z]\/[a-z][0-9]\/)?(.*\.(?:gif|jpg|jpeg|png)))';
-
-# Number of *seconds to add* to timestamp to get UTC/GMT
-#$wgTimezoneCorrection = 0; # GMT
-$wgTimezoneCorrection = 8*3600; # PST - California
-
-# Other options...
-$historyonly = false; # Don't add converted revisions to cur table; just get old histories
-$lasthistoryonly = false; # Only add the _original_ form of the _current_ revision
-
-/* Vary by language */
-$namespaces = array( 0 => "", 1 => "Talk:", 2 => "User:", 3 => "User_talk:", 4
-=> "Wikipedia:", 5 => "Wikipedia_talk:", 6 => "Image:", 7 => "Image_talk:" );
-$talkending = "Talk";
-$mediatext = "Media";
-$conversionscript = "Conversion script";
-$conversioncomment = "Automatic conversion";
-$redirectcomment = "Automatic converion, moved to \$1";
-$conversiontime = gmdate( "YmdHis" ); # Conversions will be marked with this timestamp
-
-# Stats and caches
-$oldtitles = array();
-$usercache = array();
-$titlecache = array();
-$linkcache = array();
-
-/**
- * Some oversimplified test types
- *
- * @deprecated
- * @package MediaWiki
- * @subpackage MaintenanceArchive
- */
-class Title {
- var $title, $namespace;
- function fromData( $namespace, $title ) {
- $x = new Title;
- $x->namespace = $namespace;
- $x->title = $title;
- return $x;
- }
-}
-
-# See tests in importTests.php
-if( ! $testingonly ) {
- firstPass();
- secondPass();
-}
-
-# ------------------------------------------------------------------------------
-
-/* First pass:
- Information please!
- */
-function firstPass()
-{
- global $wgRootDirectory, $oldtitles;
-
- $letters = array(
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
- 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
- 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'other' );
- foreach( $letters as $letter ) {
- firstPassDirectory( "$wgRootDirectory/page/$letter" );
- }
-}
-
-function firstPassDirectory( $dir )
-{
- global $titlecache;
-
- $mydir = opendir( $dir );
- while( $entry = readdir( $mydir ) ) {
- if( $entry != '.' && $entry != '..' ) {
- if( is_dir( "$dir/$entry" ) ) {
- firstPassDirectory( "$dir/$entry" );
- }
- } elseif( preg_match( '/$(.+)\.db$/', $entry, $m ) ) {
- $titlecache[$title] = transformTitle( $m[1] );
- countLinksFrom( $title );
- } else {
- echo "-- File '$entry' doesn't seem to contain an article. Skipping.\n";
- }
- }
-}
-
-/* Second pass:
- make the dang SQL
- */
-function secondPass()
-{
- global $titlecache, $usercache, $redirects;
-
- foreach( $usercache as $oldname => $user ) {
- echo importUser( $oldname );
- }
- foreach( $titlecache as $oldtitle => $newtitle ) {
- echo importPage( $oldtitle );
- }
-
- echo "\n-- Done!\n";
-}
-
-
-# ------------------------------------------------------------------------------
-
-/* fetch_ functions
- Grab a given item from the database
- */
-function fetchUser( $uid )
-{
- global $FS,$FS2,$FS3, $wgRootDirectory;
-
- $fname = $wgRootDirectory . "/pages/" . $title;
- if( !file_exists( $fname ) ) return false;
-
- $data = splitHash( implode( "", file( $fname ) ) );
- # enough?
-
- return $data;
-}
-
-function fetchPage( $title )
-{
- global $FS,$FS2,$FS3, $wgRootDirectory;
-
- $fname = $wgRootDirectory . "/pages/" . $title;
- if( !file_exists( $fname ) ) return false;
-
- $page = splitHash( implode( "", file( $fname ) ) );
- $section = splitHash( $FS2, $page["text_default"] );
- $text = splitHash( $FS3, $section["data"] );
-
- return array ( "text" => $text["text"] , "summary" => $text["summary"] ,
- "minor" => $text["minor"] , "ts" => $section["ts"] ,
- "username" => $section["username"] , "host" => $section["host"] ) ;
-}
-
-function fetchKeptPages( $title )
-{
- global $FS,$FS2,$FS3, $wgRootDirectory, $wgTimezoneCorrection;
-
- $fname = $wgRootDirectory . "/keep/" . $title . ".kp";
- if( !file_exists( $fname ) ) return array();
-
- $keptlist = explode( $FS1, implode( "", file( $fname ) ) );
- array_shift( $keptlist ); # Drop the junk at beginning of file
-
- $revisions = array();
- foreach( $keptlist as $rev ) {
- $section = splitHash( $FS2, $rev );
- $text = splitHash( $FS3, $section["data"] );
- if ( $text["text"] && $text["minor"] != "" && ( $section["ts"]*1 > 0 ) ) {
- array_push( $revisions, array ( "text" => $text["text"] , "summary" => $text["summary"] ,
- "minor" => $text["minor"] , "ts" => $section["ts"] ,
- "username" => $section["username"] , "host" => $section["host"] ) );
- } else {
- echo "-- skipped a bad old revision\n";
- }
- }
- return $revisions;
-}
-
-function splitHash ( $sep , $str ) {
- $temp = explode ( $sep , $str ) ;
- $ret = array () ;
- for ( $i = 0; $i+1 < count ( $temp ) ; $i++ ) {
- $ret[$temp[$i]] = $temp[++$i] ;
- }
- return $ret ;
- }
-
-
-/* import_ functions
- Take a fetched item and produce SQL
- */
-
-/* importUser
- $uid is the UseMod user id number.
- The new ones will be assigned arbitrarily and are for internal use only.
-
- THIS IS DELAYED SINCE PUBLIC DUMPS DONT INCLUDE USER DIR
- */
-function importUser( $uid )
-{
- global $last_uid, $user_list, $wgTimestampCorrection;
-
- return "";
-
- $stuff = fetchUser( $uid );
- $last_uid++;
-
- $name = wfStrencode( $stuff->username );
- $hash = md5hash( $stuff->password ); # Doable?
- $tzoffset = $stuff['tzoffset'] - ($wgTimestampCorrection / 3600); # -8 to 0; +9 to +1
- $hideminor = ($stuff['rcall'] ? 0 : 1);
- $options = "cols={$stuff['editcols']}
-rows={$stuff['editrows']}
-rcdays={$stuff['rcdays']}
-timecorrection={$tzoffset}
-hideminor={$hideminor}
- ";
-
- $sql = "INSERT
- INTO user (user_id,user_name,user_password,user_options)
- VALUES ({$last_uid},'{$name}','{$hash}','{$options}');\n";
- return $sql;
-}
-
-function checkUserCache( $name, $host )
-{
- global $usercache;
-
- if( $name ) {
- if( in_array( $name, $usercache ) ) {
- $userid = $usercache[$name];
- } else {
- # If we haven't imported user accounts
- $userid = 0;
- }
- $username = wfStrencode( $name );
- } else {
- $userid = 0;
- $username = wfStrencode( $host );
- }
- return array( $userid, $username );
-}
-
-function importPage( $title )
-{
- global $wgTimezoneCorrection, $titlecache, $usercache;
- global $conversionscript, $conversioncomment, $conversiontime;
- global $historyonly, $lasthistoryonly;
-
- $page = fetchPage( $title );
-
- $newtext = wfStrencode( rewritePage( $title, $page->text ) );
- $t = renamePage( $title );
- $newtitle = wfStrencode( $t->title );
- $namespace = $t->namespace;
-
- # Current revision:
- $text = wfStrencode( $page->text );
- $minor = ($page->minor ? 1 : 0);
- list( $userid, $username ) = checkUserCache( $page->username, $page->host );
- $timestamp = wfUnix2Timestamp( $page->timestamp + $wgTimezoneCorrection );
- $redirect = ( preg_match( '/^#REDIRECT/', $page->text ) ? 1 : 0 );
- $sql = "\n";
- if( !$historyonly ) {
- $sql .= "INSERT
- INTO cur (cur_namespace,cur_title,cur_text,cur_comment,cur_user,cur_user_text,cur_timestamp,cur_is_redirect,cur_minor_edit)
- VALUES ($namespace,'$newtitle','$newtext','$conversioncomment',0,'$conversionscript','$conversiontime',$redirect,$minor);\n";
- }
- $sql .= "INSERT
- INTO old (old_namespace,old_title,old_text,old_comment,old_user,old_user_text,old_timestamp,old_minor_edit)
- VALUES";
- $sqlfinal = "\t\t($namespace,'$newtitle','$text','$comment',$userid,'$username','$timestamp',$minor)\n";
-
- # History
- if( !$lasthistoryonly ) {
- $revisions = fetchKeptPages( $title );
- foreach( $revisions as $rev ) {
- $text = wfStrencode( $rev->text );
- $minor = ($rev->minor ? 1 : 0);
- list( $userid, $username ) = checkUserCache( $rev->username, $rev->host );
- $timestamp = wfUnix2Timestamp( $rev->timestamp + $wgTimezoneCorrection );
- $sql .= "\t\t($namespace,'$newtitle','$text','$comment',$userid,'$username','$timestamp',$redirect,$minor),\n";
- }
- }
- return $sql . $sqlfinal;
-}
-
-
-# Count up basic links
-function countLinksFrom( $title )
-{
- $page = fetchPage( $title );
- $page->text = preg_replace(
- '/<nowiki>.*<\/nowiki>/sDU',
- '',
- $page->text );
- $page->text = preg_replace(
- '/\[\[\s*([0-9a-zA-Z_ \x80-\xff]+)\s*(?:\|\s*([^]]+))?\s*\]\]/e',
- 'countLinkTo( ucfirst( "$1" ) )',
- $page->text );
-}
-
-function countLinkTo( $title )
-{
- global $linkcache;
- $t = transformTitle( $title );
- $linkform = FreeToNormal( $t->title );
- $x = $linkcache[$title];
- if ( count ( $x ) ) {
- $y = $x[$linkform] ;
- if ( $y ) $y++; else $y = 1 ;
- $x[$linkform] = $y ;
- } else {
- $x = array ( $linkform => 1 ) ;
- }
- $linkcache[$title] = $x;
-}
-
-# Preferentially change case
-function renamePage( $title )
-{
- global $linkcache;
- $t = transformTitle( $title );
-
- # We want to use the most frequently linked-to form as the title
- $maxcount = 0 ; $maxform = $t->title ;
- foreach ( $linkcache[$title] as $linkform => $count ) {
- if ( $count > $maxcount ) {
- $maxcount = $count ;
- $maxform = $linkform ;
- }
- }
- if( $maxform != $t->title) {
- doRenamePage( $t, $maxform );
- }
-}
-
-function doRenamePage( $title, $maxform )
-{
- global $linkcache, $redirectcomment, $conversionscript, $conversiontime;
- $sql = "INSERT INTO cur (cur_namespace,cur_title,cur_text,cur_comment,cur_user,cur_user_text,cur_timestamp,cur_is_redirect,cur_minor_edit)
- VALUES ";
- $redirsql = array();
- foreach( $linkcache[$title] as $linkform => $count ) {
- if( $linkform != $maxform ) {
- $comment = wfStrencode( str_replace( "$1", $maxform, $redirectcomment ) );
- array_push( $redirsql, "($namespace,'$redirtitle','$comment',0,'$conversionscript','$conversiontime',1,1)" );
- }
- }
- $sql .= implode( ",\n\t", $redirsql ) . ";\n";
- return $sql;
-}
-
-# Account for syntax changes
-function rewritePage( $title, $text )
-{
- # ...
- $text = removeTalkLink( $text );
- $text = preg_replace( '/(^|<nowiki>).+?(<\/nowiki>|$)/esD',
- 'rewritePageBits( $title, "$1")',
- $text );
- return $text;
-}
-
-function rewritePageBits( $title, $text ) {
- $text = fixSubpages( $title, $text );
- $text = fixMedialinks( $text );
- $text = fixImagelinks( $text );
- return $text;
-}
-
-function removeTalkLink( &$text ) {
- global $talkending;
- return preg_replace( "[\\n*(?:\[\[)?/{$talkending}(?:\]\])?\\s*]sDi", '', $text );
-}
-
-function fixSubpages( $text, &$title ) {
- $old = preg_quote( $text );
- $text = preg_replace( "<(^|\s)/([A-Z\xc0-\xdf].*?)\b>",
- "$1[[$title/$2|/$2]]", $text );
- $text = preg_replace( "<\[\[/([^|]*?)\]\]>e",
- "\"[[$title/\" . ucfirst( \"$1|/$1]]\" )", $text );
- $text = preg_replace( "<\[\[/(.*?)\]\]>e",
- "\"[[$title/\" . ucfirst( \"$1]]\" )", $text );
- return $text;
-}
-
-function fixImagelinks( &$text ) {
- global $imageimport, $namespaces;
- return preg_replace( "/$imageimport/e",
- '"[[{$namespaces[6]}" . fetchMediaFile( "$1", "$2" ) . "]]"',
- $text );
-}
-
-function fixMedialinks( &$text ) {
- global $imageimport, $mediatext;
- $text = preg_replace( "/\[$imageimport\]/e",
- '"[[$mediatext:" . fetchMediaFile( "$1", "$2" ) . "]]"',
- $text );
- return preg_replace( "/\[$imageimport (.+?)\]/e",
- '"[[$mediatext:" . fetchMediaFile( "$1", "$2" ) . "|$3]]"',
- $text );
-}
-
-function fetchMediaFile( $url, $filename )
-{
- # Copy an image file into local upload space
- # FIXME
- return ucfirst( $filename );
-}
-
-# Simple move of talk pages, etc
-function transformTitle( $title, $dorename = false )
-{
- global $talkending;
- if( preg_match( "/^(.+)[ _]?\\/[ _]?($talkending)/i", $title, $m ) ) {
- $thetitle = $m[1];
- $namespace = 1;
- } else {
- $thetitle = $title;
- $namespace = 0;
- }
- return Title::fromData( $namespace, $thetitle );
-}
-
-# Translated out of old usemod wiki...
-function FreeToNormal ( $id , $FreeUpper = true ) {
- $id = str_replace ( " ", "_", $id ) ;
- $id = ucfirst($id);
- if (strstr($id, '_') != false) { # Quick check for any space/underscores
- $id = preg_replace ( '/__+/' , "_" , $id ) ;
- $id = preg_replace ( '/^_/' , "", $id ) ;
- $id = preg_replace ( '/_$/' , "", $id ) ;
- #if ($UseSubpage) {
- $id = preg_replace ( '|_/|', "/" , $id ) ;
- $id = preg_replace ( '|/_|', "/" , $id ) ;
- #}
- }
- if ($FreeUpper) {
- # Note that letters after ' are *not* capitalized
- if (preg_match ( '|[-_.,\(\)/][a-z]|' , $id ) ) { # Quick check for non-canon
- $id = preg_replace ( '|([-_.,\(\)/])([a-z])|e' , '"$1" . strtoupper("$2")' , $id ) ;
- }
- }
- return $id;
-}
-
-# Whee!
-function recodeInput( $text )
-{
- return $text;
-}
-
-function wfUnix2Timestamp( $unixtime ) {
- return gmdate( "YmdHis", $timestamp );
-}
-
-function wfTimestamp2Unix( $ts )
-{
- return gmmktime( ( (int)substr( $ts, 8, 2) ),
- (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 ) );
-}
-
-?>
diff --git a/maintenance/archives/patch-group-sysopfix.sql b/maintenance/archives/patch-group-sysopfix.sql
deleted file mode 100644
index c3152c7b9021..000000000000
--- a/maintenance/archives/patch-group-sysopfix.sql
+++ /dev/null
@@ -1,7 +0,0 @@
--- Fix to alpha versions that had incorrect rights assignments
--- breaking protected page edits by sysops.
--- 2004-10-27
-
-UPDATE `group`
- SET group_rights=CONCAT(group_rights,',sysop')
- WHERE group_name IN('Sysops','Bureaucrat');
diff --git a/maintenance/archives/patch-rename-user_groups-and_rights.sql b/maintenance/archives/patch-rename-user_groups-and_rights.sql
deleted file mode 100644
index 4845d3c6d702..000000000000
--- a/maintenance/archives/patch-rename-user_groups-and_rights.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-
-ALTER TABLE user_groups
- CHANGE user_id ug_user INT(5) UNSIGNED NOT NULL DEFAULT '0',
- CHANGE group_id ug_group INT(5) UNSIGNED NOT NULL DEFAULT '0';
-
-ALTER TABLE user_rights
- CHANGE user_id ur_user INT(5) UNSIGNED NOT NULL,
- CHANGE user_rights ur_rights TINYBLOB NOT NULL DEFAULT '';
-
diff --git a/maintenance/archives/patch-rename-user_rights.sql b/maintenance/archives/patch-rename-user_rights.sql
new file mode 100644
index 000000000000..679d85c286ec
--- /dev/null
+++ b/maintenance/archives/patch-rename-user_rights.sql
@@ -0,0 +1,5 @@
+
+ALTER TABLE user_rights
+ CHANGE user_id ur_user INT(5) UNSIGNED NOT NULL,
+ CHANGE user_rights ur_rights TINYBLOB NOT NULL DEFAULT '';
+
diff --git a/maintenance/archives/patch-userlevels-defaultgroups.sql b/maintenance/archives/patch-userlevels-defaultgroups.sql
deleted file mode 100644
index 0871cdb8347c..000000000000
--- a/maintenance/archives/patch-userlevels-defaultgroups.sql
+++ /dev/null
@@ -1,13 +0,0 @@
---
--- Provide default groups
--- Should probably be inserted when someone create a new database
---
-
-INSERT INTO `group` (group_id,group_name,group_description,group_rights)
- VALUES (1,'Anonymous','Anonymous users','read,edit,createaccount');
-INSERT INTO `group` (group_id,group_name,group_description,group_rights)
- VALUES (2,'Loggedin','General logged in users','read,edit,move,upload');
-INSERT INTO `group` (group_id,group_name,group_description,group_rights)
- VALUES (3,'Sysops','Operators of this site','read,edit,move,delete,undelete,protect,block,upload,asksql,rollback,patrol,editinterface,sysop');
-INSERT INTO `group` (group_id,group_name,group_description,group_rights)
- VALUES (4,'Bureaucrat','The bureaucrat group is able to make sysops for example. They have no other rights.','read,edit,move,delete,undelete,protect,block,userrights,createaccount,upload,asksql,rollback,patrol,editinterface,siteadmin,sysop');
diff --git a/maintenance/archives/patch-userlevels-rights.sql b/maintenance/archives/patch-userlevels-rights.sql
deleted file mode 100644
index 9082c2855b07..000000000000
--- a/maintenance/archives/patch-userlevels-rights.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- Oct. 24 2004
--- Adds the group_rights field missing from early dev work
-
--- Hold group name and description
-ALTER TABLE `group` ADD group_rights tinyblob;
diff --git a/maintenance/archives/patch-userlevels.sql b/maintenance/archives/patch-userlevels.sql
deleted file mode 100644
index ccaa2665e105..000000000000
--- a/maintenance/archives/patch-userlevels.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Oct. 1st 2004 - Ashar Voultoiz
--- Implement the new sitelevels
---
--- This is under development to provide a showcase in HEAD :o)
-
--- Hold group name and description
-CREATE TABLE `group` (
- group_id int(5) unsigned NOT NULL auto_increment,
- group_name varchar(50) NOT NULL default '',
- group_description varchar(255) NOT NULL default '',
- group_rights tinyblob,
- PRIMARY KEY (group_id)
-);
-
--- Relation table between user and groups
-CREATE TABLE user_groups (
- ug_user int(5) unsigned NOT NULL default '0',
- ug_group int(5) unsigned NOT NULL default '0',
- PRIMARY KEY (ug_user,ug_group)
-);
diff --git a/maintenance/changeuser.sql b/maintenance/changeuser.sql
index f6e5cf892175..ad1c6da6fff7 100644
--- a/maintenance/changeuser.sql
+++ b/maintenance/changeuser.sql
@@ -1,12 +1,12 @@
set @oldname = 'At18';
set @newname = 'Alfio';
-update low_priority user set user_name=@newname where user_name=@oldname;
-update low_priority user_newtalk set user_ip=@newname where user_ip=@oldname;
-update low_priority cur set cur_user_text=@newname where cur_user_text=@oldname;
-update low_priority old set old_user_text=@newname where old_user_text=@oldname;
-update low_priority archive set ar_user_text=@newname where ar_user_text=@oldname;
-update low_priority ipblocks set ipb_address=@newname where ipb_address=@oldname;
-update low_priority oldimage set oi_user_text=@newname where oi_user_text=@oldname;
-update low_priority recentchanges set rc_user_text=@newname where rc_user_text=@oldname;
+update low_priority /*$wgDBprefix*/user set user_name=@newname where user_name=@oldname;
+update low_priority /*$wgDBprefix*/user_newtalk set user_ip=@newname where user_ip=@oldname;
+update low_priority /*$wgDBprefix*/cur set cur_user_text=@newname where cur_user_text=@oldname;
+update low_priority /*$wgDBprefix*/old set old_user_text=@newname where old_user_text=@oldname;
+update low_priority /*$wgDBprefix*/archive set ar_user_text=@newname where ar_user_text=@oldname;
+update low_priority /*$wgDBprefix*/ipblocks set ipb_address=@newname where ipb_address=@oldname;
+update low_priority /*$wgDBprefix*/oldimage set oi_user_text=@newname where oi_user_text=@oldname;
+update low_priority /*$wgDBprefix*/recentchanges set rc_user_text=@newname where rc_user_text=@oldname;
diff --git a/maintenance/commandLine.inc b/maintenance/commandLine.inc
index ce22a41ac0ac..84748691065e 100644
--- a/maintenance/commandLine.inc
+++ b/maintenance/commandLine.inc
@@ -114,7 +114,7 @@ if ( $sep == ":" && strpos( `hostname`, "wikimedia.org" ) !== false ) {
ini_set( "include_path", ".:$IP:$IP/includes:$IP/languages:$IP/maintenance" );
require_once( "$IP/includes/Defines.php" );
- require_once( "/home/wikipedia/common/php-new/CommonSettings.php" );
+ require_once( "/home/wikipedia/common/php-1.4/CommonSettings.php" );
} else {
$wgWikiFarm = false;
$settingsFile = "$IP/LocalSettings.php";
diff --git a/maintenance/convertUtf8.php b/maintenance/convertUtf8.php
deleted file mode 100644
index def49e99094a..000000000000
--- a/maintenance/convertUtf8.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-/**
- * @package MediaWiki
- * @subpackage Maintenance
- */
-
-die("This file is not complete; it's checked in so I don't forget it.");
-
-/*
-UTF-8 conversion of DOOOOOOOM
-
-1. Lock the wiki
-2. Make a convertlist of all pages
-3. Enable CONVERTLOCK mode and switch to UTF-8
-4. As quick as possible, convert the cur, images, *links, user, etc tables. Clear cache tables.
-5. Unlock the wiki. Attempts to access pages on the convertlist will be trapped to read-only.
-6. Go through the list, fixing up old revisions. Remove pages from the convertlist.
-*/
-
-
-if(function_exists("iconv")) {
- # There are likely to be Windows code page 1252 chars in there.
- # Convert them to the proper UTF-8 chars if possible.
- function toUtf8($string) {
- return wfStrencode(iconv("CP1252", "UTF-8", $string));
- }
-} else {
- # Will work from plain iso 8859-1 and may corrupt these chars
- function toUtf8($string) {
- return wfStrencode(utf8_encode($string));
- }
-}
-
-
-
-# user table
-$sql = "SELECT user_id,user_name,user_real_name,user_options FROM user";
-$res = wfQuery( $sql, DB_WRITE );
-print "Converting " . wfNumResults( $res ) . " user accounts:\n";
-$n = 0;
-while( $s = wfFetchObject( $res ) ) {
- $uname = toUtf8( $s->user_name );
- $ureal = toUtf8( $s->user_real_name );
- $uoptions = toUtf8( $s->user_options );
- if( $uname != wfStrencode( $s->user_name ) ||
- $ureal != wfStrencode( $s->user_real_name ) ||
- $uoptions != wfStrencode( $s->user_options ) ) {
- $now = wfTimestampNow();
- $sql = "UPDATE user
- SET user_name='$uname',user_real_name='$ureal',
- user_options='$uoptions',user_touched='$now'
- WHERE user_id={$s->user_id}";
- wfQuery( $sql, DB_WRITE );
- $wgMemc->delete( "$wgDBname:user:id:{$s->user_id}" );
- $u++;
- }
- if( ++$n % 100 == 0 ) print "$n\n";
-}
-wfFreeResult( $res );
-if( $n ) {
- printf("%2.02%% required conversion.\n\n", $u / $n);
-} else {
- print "None?\n\n";
-}
-
-# ipblocks
-$sql = "SELECT DISTINCT ipb_reason FROM ipblocks";
-$res = wfQuery( $sql, DB_WRITE );
-print "Converting " . wfNumResults( $res ) . " IP block comments:\n";
-$n = 0;
-while( $s = wfFetchObject( $res ) ) {
- $ucomment = toUtf8($s->ipb_reason);
- $ocomment = wfStrencode( $s->ipb_reason );
- if( $u != $o ) {
- $sql = "UPDATE ipblocks SET ipb_reason='$ucomment' WHERE ipb_reason='$ocomment'";
- wfQuery( $sql, DB_WRITE );
- $u++;
- }
- if( ++$n % 100 == 0 ) print "$n\n";
-}
-wfFreeResult( $res );
-if( $n ) {
- printf("%2.02%% required conversion.\n\n", $u / $n);
-} else {
- print "None?\n\n";
-}
-
-# image
-$sql = "SELECT img_name,img_description,img_user_text FROM image";
- img_name --> also need to rename files
- img_description
- img_user_text
-
-oldimage
- oi_name
- oi_archive_name --> also need to rename files
- oi_user_text
-
-recentchanges
- rc_user_text
- rc_title
- rc_comment
-
-# searchindex
-print "Clearing searchindex... don't forget to rebuild it.\n";
-$sql = "DELETE FROM searchindex";
-wfQuery( $sql, DB_WRITE );
-
-# linkscc
-print "Clearing linkscc...\n";
-$sql = "DELETE FROM linkscc";
-wfQuery( $sql, DB_WRITE );
-
-# querycache: just rebuild these
-print "Clearing querycache...\n";
-$sql = "DELETE FROM querycache";
-wfQuery( $sql, DB_WRITE );
-
-# objectcache
-print "Clearing objectcache...\n";
-$sql = "DELETE FROM objectcache";
-wfQuery( $sql, DB_WRITE );
-
-
-function unicodeLinks( $table, $field ) {
- $sql = "SELECT DISTINCT $field FROM $table WHERE $field RLIKE '[\x80-\xff]'";
- $res = wfQuery( $sql, DB_WRITE );
- print "Converting " . wfNumResults( $res ) . " from $table:\n";
- $n = 0;
- while( $s = wfFetchObject( $res ) ) {
- $ulink = toUtf8( $s->$field );
- $olink = wfStrencode( $s->$field );
- $sql = "UPDATE $table SET $field='$ulink' WHERE $field='$olink'";
- wfQuery( $sql, DB_WRITE );
- if( ++$n % 100 == 0 ) print "$n\n";
- }
- wfFreeResult( $res );
- print "Done.\n\n";
-}
-unicodeLinks( "brokenlinks", "bl_to" );
-unicodeLinks( "imagelinks", "il_to" );
-unicodeLinks( "categorylinks", "cl_to" );
-
-
-# The big guys...
-$sql = "SELECT cur_id,cur_namespace,cur_title,cur_text,cur_user_text FROM cur
-WHERE cur_title rlike '[\x80-\xff]' OR cur_comment rlike '[\x80-\xff]'
-OR cur_user_text rlike '[\x80-\xff]' OR cur_text rlike '[\x80-\xff]'";
-$res = wfQuery( $sql, DB_WRITE );
-print "Converting " . wfNumResults( $res ) . " cur pages:\n";
-$n = 0;
-while( $s = wfFetchObject( $res ) ) {
- $utitle = toUtf8( $s->cur_title );
- $uuser = toUtf8( $s->cur_user_text );
- $ucomment = toUtf8( $s->cur_comment );
- $utext = toUtf8( $s->cur_text );
- $now = wfTimestampNow();
-
- $sql = "UPDATE cur
- SET cur_title='$utitle',cur_user_text='$uuser',
- cur_comment='$ucomment',cur_text='$utext'
- WHERE cur_id={$s->cur_id}";
- wfQuery( $sql, DB_WRITE );
- #$wgMemc->delete( "$wgDBname:user:id:{$s->user_id}" );
-
- $otitle = wfStrencode( $s->cur_title );
- if( $otitle != $utitle ) {
- # Also update titles in watchlist and old
- $sql = "UPDATE old SET old_title='$utitle'
- WHERE old_namespace={$s->cur_namespace} AND old_title='$otitle'";
- wfQuery( $sql, DB_WRITE );
-
- $ns = IntVal( $s->cur_namespace) & ~1;
- $sql = "UPDATE watchlist SET wl_title='$utitle'
- WHERE wl_namespace=$ns AND wl_title='$otitle'";
- wfQuery( $sql, DB_WRITE );
- $u++;
- }
-
- if( ++$n % 100 == 0 ) print "$n\n";
-}
-wfFreeResult( $res );
-if( $n ) {
- printf("Updated old/watchlist titles on %2.02%%.\n\n", $u / $n);
-} else {
- print "Didn't update any old/watchlist titles.\n\n";
-}
-
-/*
-old
- old_title
- old_text -> may be gzipped
- old_comment
- old_user_text
-
-archive
- ar_title
- ar_text -> may be gzipped
- ar_comment
- ar_user_text
-*/
-
-?>
diff --git a/maintenance/importUseModWiki.php b/maintenance/importUseModWiki.php
index 318483e71242..720e4ab8f396 100644
--- a/maintenance/importUseModWiki.php
+++ b/maintenance/importUseModWiki.php
@@ -21,6 +21,9 @@
* @subpackage Maintenance
*/
+if( php_sapi_name() != 'cli' ) {
+ die( "Please customize the settings and run me from the command line." );
+}
/** Set these correctly! */
$wgImportEncoding = "CP1252"; /* We convert all to UTF-8 */
diff --git a/maintenance/initialdata.sql b/maintenance/initialdata.sql
deleted file mode 100644
index 141c71a85478..000000000000
--- a/maintenance/initialdata.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- SQL to load database with initial values for testing.
--- Most will be overwritten by install script.
---
-
-INSERT INTO user (user_name,user_rights,user_password)
- VALUES ('WikiSysop','sysop','d41d8cd98f00b204e9800998ecf8427e'),
- ('WikiDeveloper','sysop,developer','d41d8cd98f00b204e9800998ecf8427e');
-
-INSERT INTO cur (cur_namespace,cur_title,cur_text,cur_restrictions)
- VALUES (4,'Upload_log','Below is a list of the most recent file uploads.\nAll times shown are server time (UTC).\n<ul>\n</ul>\n','sysop'),
- (4,'Deletion_log','Below is a list of the most recent deletions.\nAll times shown are server time (UTC).\n<ul>\n</ul>\n','sysop'),
- (0,'Main_Page','Wiki software successfully installed!',''),
- (4,'Block log', 'This is a log of user blocking and unblocking actions. Automatically
-blocked IP addresses are not be listed. See the [[Special:Ipblocklist|IP block list]] for
-the list of currently operational bans and blocks.', 'sysop');
-
-INSERT INTO site_stats VALUES (1,0,0,0);
-
diff --git a/maintenance/interwiki.sql b/maintenance/interwiki.sql
index e625552ee3ca..1b04ee976fc9 100644
--- a/maintenance/interwiki.sql
+++ b/maintenance/interwiki.sql
@@ -1,7 +1,7 @@
-- Based more or less on the public interwiki map from MeatballWiki
-- Default interwiki prefixes...
-REPLACE INTO interwiki (iw_prefix,iw_url,iw_local) VALUES
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
('AbbeNormal','http://www.ourpla.net/cgi-bin/pikie.cgi?$1',0),
('AcadWiki','http://xarch.tu-graz.ac.at/autocad/wiki/$1',0),
('Acronym','http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=$1',0),
diff --git a/maintenance/recount.sql b/maintenance/recount.sql
index 93e1024b4f0e..2bf4a7fba806 100644
--- a/maintenance/recount.sql
+++ b/maintenance/recount.sql
@@ -2,7 +2,7 @@
-- Recalculate the article count
--
-SELECT @foo:=COUNT(*) FROM cur
+SELECT @foo:=COUNT(*) FROM /*$wgDBprefix*/cur
WHERE cur_namespace=0 AND cur_is_redirect=0 AND cur_text like '%[[%';
-UPDATE site_stats SET ss_good_articles=@foo;
+UPDATE /*$wgDBprefix*/site_stats SET ss_good_articles=@foo;
diff --git a/maintenance/tables.sql b/maintenance/tables.sql
index db2c0704ce9f..eb1035fd2ffe 100644
--- a/maintenance/tables.sql
+++ b/maintenance/tables.sql
@@ -4,7 +4,7 @@
--
-- Indexes should be defined here; please import the rest from indexes.sql.
-CREATE TABLE user (
+CREATE TABLE /*$wgDBprefix*/user (
user_id int(5) unsigned NOT NULL auto_increment,
user_name varchar(255) binary NOT NULL default '',
user_real_name varchar(255) binary NOT NULL default '',
@@ -19,20 +19,20 @@ CREATE TABLE user (
);
-- TODO: de-blob this; it should be a property table
-CREATE TABLE user_rights (
+CREATE TABLE /*$wgDBprefix*/user_rights (
ur_user int(5) unsigned NOT NULL,
ur_rights tinyblob NOT NULL default '',
UNIQUE KEY ur_user (ur_user)
);
-CREATE TABLE user_newtalk (
+CREATE TABLE /*$wgDBprefix*/user_newtalk (
user_id int(5) NOT NULL default '0',
user_ip varchar(40) NOT NULL default '',
INDEX user_id (user_id),
INDEX user_ip (user_ip)
);
-CREATE TABLE cur (
+CREATE TABLE /*$wgDBprefix*/cur (
cur_id int(8) unsigned NOT NULL auto_increment,
cur_namespace tinyint(2) unsigned NOT NULL default '0',
cur_title varchar(255) binary NOT NULL default '',
@@ -63,7 +63,7 @@ CREATE TABLE cur (
INDEX namespace_redirect_timestamp(cur_namespace,cur_is_redirect,cur_timestamp)
);
-CREATE TABLE old (
+CREATE TABLE /*$wgDBprefix*/old (
old_id int(8) unsigned NOT NULL auto_increment,
old_namespace tinyint(2) unsigned NOT NULL default '0',
old_title varchar(255) binary NOT NULL default '',
@@ -83,7 +83,7 @@ CREATE TABLE old (
INDEX usertext_timestamp (old_user_text,inverse_timestamp)
);
-CREATE TABLE archive (
+CREATE TABLE /*$wgDBprefix*/archive (
ar_namespace tinyint(2) unsigned NOT NULL default '0',
ar_title varchar(255) binary NOT NULL default '',
ar_text mediumtext NOT NULL default '',
@@ -101,7 +101,7 @@ CREATE TABLE archive (
-- Track links that do exist
-- l_from and l_to key to cur_id
--
-CREATE TABLE links (
+CREATE TABLE /*$wgDBprefix*/links (
l_from int(8) unsigned NOT NULL default '0',
l_to int(8) unsigned NOT NULL default '0',
UNIQUE KEY l_from(l_from,l_to),
@@ -113,7 +113,7 @@ CREATE TABLE links (
-- bl_from keys to cur_id
-- bl_to is a text link (namespace:title)
--
-CREATE TABLE brokenlinks (
+CREATE TABLE /*$wgDBprefix*/brokenlinks (
bl_from int(8) unsigned NOT NULL default '0',
bl_to varchar(255) binary NOT NULL default '',
UNIQUE KEY bl_from(bl_from,bl_to),
@@ -125,7 +125,7 @@ CREATE TABLE brokenlinks (
-- il_from keys to cur_id, il_to keys to image_name.
-- We don't distinguish live from broken links.
--
-CREATE TABLE imagelinks (
+CREATE TABLE /*$wgDBprefix*/imagelinks (
il_from int(8) unsigned NOT NULL default '0',
il_to varchar(255) binary NOT NULL default '',
UNIQUE KEY il_from(il_from,il_to),
@@ -138,7 +138,7 @@ CREATE TABLE imagelinks (
-- cl_sortkey is the title of the linking page or an optional override
-- cl_timestamp marks when the link was last added
--
-CREATE TABLE categorylinks (
+CREATE TABLE /*$wgDBprefix*/categorylinks (
cl_from int(8) unsigned NOT NULL default '0',
cl_to varchar(255) binary NOT NULL default '',
cl_sortkey varchar(255) binary NOT NULL default '',
@@ -153,12 +153,12 @@ CREATE TABLE categorylinks (
-- cache arrays to reduce database load slurping up
-- from links and brokenlinks.
--
-CREATE TABLE linkscc (
+CREATE TABLE /*$wgDBprefix*/linkscc (
lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY,
lcc_cacheobj MEDIUMBLOB NOT NULL
);
-CREATE TABLE site_stats (
+CREATE TABLE /*$wgDBprefix*/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',
@@ -166,11 +166,11 @@ CREATE TABLE site_stats (
UNIQUE KEY ss_row_id (ss_row_id)
);
-CREATE TABLE hitcounter (
+CREATE TABLE /*$wgDBprefix*/hitcounter (
hc_id INTEGER UNSIGNED NOT NULL
) TYPE=HEAP MAX_ROWS=25000;
-CREATE TABLE ipblocks (
+CREATE TABLE /*$wgDBprefix*/ipblocks (
ipb_id int(8) NOT NULL auto_increment,
ipb_address varchar(40) binary NOT NULL default '',
ipb_user int(8) unsigned NOT NULL default '0',
@@ -185,7 +185,7 @@ CREATE TABLE ipblocks (
INDEX ipb_user (ipb_user)
);
-CREATE TABLE image (
+CREATE TABLE /*$wgDBprefix*/image (
img_name varchar(255) binary NOT NULL default '',
img_size int(8) unsigned NOT NULL default '0',
img_description tinyblob NOT NULL default '',
@@ -197,7 +197,7 @@ CREATE TABLE image (
INDEX img_timestamp (img_timestamp)
);
-CREATE TABLE oldimage (
+CREATE TABLE /*$wgDBprefix*/oldimage (
oi_name varchar(255) binary NOT NULL default '',
oi_archive_name varchar(255) binary NOT NULL default '',
oi_size int(8) unsigned NOT NULL default 0,
@@ -208,7 +208,7 @@ CREATE TABLE oldimage (
INDEX oi_name (oi_name(10))
);
-CREATE TABLE recentchanges (
+CREATE TABLE /*$wgDBprefix*/recentchanges (
rc_id int(8) NOT NULL auto_increment,
rc_timestamp varchar(14) binary NOT NULL default '',
rc_cur_time varchar(14) binary NOT NULL default '',
@@ -237,7 +237,7 @@ CREATE TABLE recentchanges (
INDEX rc_ip (rc_ip)
);
-CREATE TABLE watchlist (
+CREATE TABLE /*$wgDBprefix*/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 '',
@@ -245,7 +245,7 @@ CREATE TABLE watchlist (
KEY namespace_title (wl_namespace,wl_title)
);
-CREATE TABLE math (
+CREATE TABLE /*$wgDBprefix*/math (
math_inputhash varchar(16) NOT NULL,
math_outputhash varchar(16) NOT NULL,
math_html_conservativeness tinyint(1) NOT NULL,
@@ -257,7 +257,7 @@ CREATE TABLE math (
-- Table searchindex must be MyISAM for fulltext support
-CREATE TABLE searchindex (
+CREATE TABLE /*$wgDBprefix*/searchindex (
si_page int(8) unsigned NOT NULL,
si_title varchar(255) NOT NULL default '',
si_text mediumtext NOT NULL default '',
@@ -267,7 +267,7 @@ CREATE TABLE searchindex (
) TYPE=MyISAM;
-CREATE TABLE interwiki (
+CREATE TABLE /*$wgDBprefix*/interwiki (
iw_prefix char(32) NOT NULL,
iw_url char(127) NOT NULL,
iw_local BOOL NOT NULL,
@@ -275,7 +275,7 @@ CREATE TABLE interwiki (
);
-- Used for caching expensive grouped queries
-CREATE TABLE querycache (
+CREATE TABLE /*$wgDBprefix*/querycache (
qc_type char(32) NOT NULL,
qc_value int(5) unsigned NOT NULL default '0',
qc_namespace tinyint(2) unsigned NOT NULL default '0',
@@ -284,7 +284,7 @@ CREATE TABLE querycache (
);
-- For a few generic cache operations if not using Memcached
-CREATE TABLE objectcache (
+CREATE TABLE /*$wgDBprefix*/objectcache (
keyname char(255) binary not null default '',
value mediumblob,
exptime datetime,
@@ -293,7 +293,7 @@ CREATE TABLE objectcache (
);
-- For storing revision text
-CREATE TABLE blobs (
+CREATE TABLE /*$wgDBprefix*/blobs (
blob_index char(255) binary NOT NULL default '',
blob_data longblob NOT NULL default '',
UNIQUE key blob_index (blob_index)
@@ -301,7 +301,7 @@ CREATE TABLE blobs (
-- For article validation
-CREATE TABLE `validate` (
+CREATE TABLE /*$wgDBprefix*/validate (
`val_user` int(11) NOT NULL default '0',
`val_title` varchar(255) binary NOT NULL default '',
`val_timestamp` varchar(14) binary NOT NULL default '',
@@ -312,7 +312,7 @@ CREATE TABLE `validate` (
);
-CREATE TABLE logging (
+CREATE TABLE /*$wgDBprefix*/logging (
-- Symbolic keys for the general log type and the action type
-- within the log. The output format will be controlled by the
-- action field, but only the type controls categorization.
@@ -338,22 +338,3 @@ CREATE TABLE logging (
KEY page_time (log_namespace, log_title, log_timestamp)
);
-
-
-
-
--- Hold group name and description
-CREATE TABLE `group` (
- group_id int(5) unsigned NOT NULL auto_increment,
- group_name varchar(50) NOT NULL default '',
- group_description varchar(255) NOT NULL default '',
- group_rights tinyblob,
- PRIMARY KEY (group_id)
-);
-
--- Relation table between user and groups
-CREATE TABLE user_groups (
- ug_user int(5) unsigned NOT NULL default '0',
- ug_group int(5) unsigned NOT NULL default '0',
- PRIMARY KEY (ug_user,ug_group)
-);
diff --git a/maintenance/update.php b/maintenance/update.php
index 955be7ddc6ca..1bd6cb26a2c1 100644
--- a/maintenance/update.php
+++ b/maintenance/update.php
@@ -13,6 +13,12 @@ require_once( "updaters.inc" );
$wgTitle = Title::newFromText( "MediaWiki database updater" );
$wgDatabase = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+print "Going to run database updates for $wgDBname\n";
+print "Depending on the size of your database this may take a while!\n";
+print "Abort with control-c in the next five seconds or...\n";
+sleep(5);
+
+
do_all_updates();
print "Done.\n";
diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc
index 8f83a480b599..0448522314e7 100644
--- a/maintenance/updaters.inc
+++ b/maintenance/updaters.inc
@@ -19,7 +19,6 @@ $wgNewTables = array(
array( 'categorylinks', 'patch-categorylinks.sql' ),
array( 'logging', 'patch-logging.sql' ),
array( 'user_rights', 'patch-user_rights.sql' ),
- array( 'user_groups', 'patch-userlevels.sql' ),
);
$wgNewFields = array(
@@ -32,8 +31,7 @@ $wgNewFields = array(
array( 'recentchanges', 'rc_patrolled', 'patch-rc-patrol.sql' ),
array( 'user', 'user_real_name', 'patch-user-realname.sql' ),
array( 'user', 'user_token', 'patch-user_token.sql' ),
- array( 'user_rights', 'ur_user', 'patch-rename-user_groups-and_rights.sql' ),
- array( 'group', 'group_rights', 'patch-userlevels-rights.sql' ),
+ array( 'user_rights', 'ur_user', 'patch-rename-user_rights.sql' ),
);
function add_table( $name, $patch ) {
@@ -66,6 +64,8 @@ function do_revision_updates() {
}
function update_passwords() {
+ wfDebugDieBacktrace( "This function needs to be updated or removed.\n" );
+
global $wgDatabase;
$fname = "Update script: update_passwords()";
print "\nIt appears that you need to update the user passwords in your\n" .
@@ -123,7 +123,7 @@ function do_index_update() {
function do_linkscc_1_3_update() {
// Update linkscc table to 1.3 schema if necessary
global $wgDatabase, $wgVersion;
- if( ( strpos( "1.3", $wgVersion ) === 0 ) && $wgDatabase->tableExists( "linkscc" )
+ if( $wgDatabase->tableExists( "linkscc" )
&& $wgDatabase->fieldExists( "linkscc", "lcc_title" ) ) {
echo "Altering lcc_title field from linkscc table... ";
dbsource( "maintenance/archives/patch-linkscc-1.3.sql", $wgDatabase );
@@ -144,35 +144,6 @@ function do_image_name_unique_update() {
}
}
-# Assumes that the group table has been added.
-function do_group_update() {
- global $wgDatabase;
- $res = $wgDatabase->safeQuery( 'SELECT COUNT(*) AS c FROM !',
- $wgDatabase->tableName( 'group' ) );
- $row = $wgDatabase->fetchObject( $res );
- $wgDatabase->freeResult( $res );
- if( $row->c == 0 ) {
- echo "Adding default group definitions... ";
- dbsource( "maintenance/archives/patch-userlevels-defaultgroups.sql", $wgDatabase );
- echo "ok\n";
- } else {
- echo "...group definitions already in place.\n";
- $res = $wgDatabase->safeQuery( "SELECT COUNT(*) AS n FROM !
- WHERE group_name IN ('Sysops','Bureaucrat')
- AND group_rights NOT LIKE 'sysop'",
- $wgDatabase->tableName( 'group' ) );
- $row = $wgDatabase->fetchObject( $res );
- $wgDatabase->freeResult( $res );
- if( $row->n ) {
- echo "Fixing sysops group permissions... ";
- dbsource( "maintenance/archives/patch-group-sysopfix.sql", $wgDatabase );
- echo "ok\n";
- } else {
- echo "...sysop group permissions look ok.\n";
- }
- }
-}
-
function do_all_updates() {
global $wgNewTables, $wgNewFields;
@@ -188,9 +159,6 @@ function do_all_updates() {
flush();
}
- # Add default group data
- do_group_update(); flush();
-
# Do schema updates which require special handling
do_interwiki_update(); flush();
do_index_update(); flush();
diff --git a/maintenance/users.sql b/maintenance/users.sql
index dc23ed356f33..4d74987b3159 100644
--- a/maintenance/users.sql
+++ b/maintenance/users.sql
@@ -17,99 +17,3 @@ GRANT DELETE,INSERT,SELECT,UPDATE ON `{$wgDBname}`.*
TO {$wgDBuser}@localhost IDENTIFIED BY '{$wgDBpassword}';
GRANT DELETE,INSERT,SELECT,UPDATE ON `{$wgDBname}`.*
TO {$wgDBuser}@localhost.localdomain IDENTIFIED BY '{$wgDBpassword}';
-
-GRANT SELECT (user_id,user_name,user_options) ON `{$wgDBname}`.user
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.user_rights
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.cur
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.old
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.archive
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.links
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.brokenlinks
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.imagelinks
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.site_stats
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.ipblocks
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.image
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.oldimage
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.recentchanges
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.watchlist
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.math
- TO {$wgDBsqluser}@'%' IDENTIFIED BY '{$wgDBsqlpassword}';
-
-GRANT SELECT (user_id,user_name,user_options)
- ON `{$wgDBname}`.user
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.user_rights
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.cur
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.old
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.archive
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.links
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.brokenlinks
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.imagelinks
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.site_stats
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.ipblocks
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.image
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.oldimage
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.recentchanges
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.watchlist
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.math
- TO {$wgDBsqluser}@localhost IDENTIFIED BY '{$wgDBsqlpassword}';
-
-GRANT SELECT (user_id,user_name,user_options)
- ON `{$wgDBname}`.user
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.user_rights
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.cur
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.old
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.archive
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.links
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.brokenlinks
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.imagelinks
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.site_stats
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.ipblocks
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.image
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.oldimage
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.recentchanges
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.watchlist
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-GRANT SELECT ON `{$wgDBname}`.math
- TO {$wgDBsqluser}@localhost.localdomain IDENTIFIED BY '{$wgDBsqlpassword}';
-
diff --git a/maintenance/wikipedia-interwiki.sql b/maintenance/wikipedia-interwiki.sql
index c42b47d8f681..77ab327b1cbb 100644
--- a/maintenance/wikipedia-interwiki.sql
+++ b/maintenance/wikipedia-interwiki.sql
@@ -1,7 +1,7 @@
-- For convenience, here are the *in-project* interwiki prefixes
-- for Wikipedia.
-REPLACE INTO interwiki (iw_prefix,iw_url,iw_local) VALUES
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
('w','http://www.wikipedia.org/wiki/$1',1),
('m','http://meta.wikipedia.org/wiki/$1',1),
('meta','http://meta.wikipedia.org/wiki/$1',1),
diff --git a/maintenance/wiktionary-interwiki.sql b/maintenance/wiktionary-interwiki.sql
index a2863a87ccd3..787962d5b7a4 100644
--- a/maintenance/wiktionary-interwiki.sql
+++ b/maintenance/wiktionary-interwiki.sql
@@ -1,7 +1,7 @@
-- For convenience, here are the *in-project* interwiki prefixes
-- for Wikipedia.
-REPLACE INTO interwiki (iw_prefix,iw_url,iw_local) VALUES
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
('w','http://www.wikipedia.org/wiki/$1',1),
('m','http://meta.wikipedia.org/wiki/$1',1),
('meta','http://meta.wikipedia.org/wiki/$1',1),
diff --git a/skins/CologneBlue.php b/skins/CologneBlue.php
index 729739b27697..20ed3b4a0831 100644
--- a/skins/CologneBlue.php
+++ b/skins/CologneBlue.php
@@ -7,6 +7,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/**
* @todo document
* @package MediaWiki
diff --git a/skins/MonoBook.php b/skins/MonoBook.php
index 978ce43860ae..6a8a4b67015f 100644
--- a/skins/MonoBook.php
+++ b/skins/MonoBook.php
@@ -10,6 +10,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('includes/SkinTemplate.php');
@@ -145,7 +148,7 @@ class MonoBookTemplate extends QuickTemplate {
<?php } } ?>
<?php if($this->data['feeds']) { ?><li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
?><span id="feed-<?php echo htmlspecialchars($key) ?>"><a href="<?php
- echo htmlspecialchars($feed['href']) ?>"><?php echo htmlspecialchars($feed['text'])?>&nbsp;</span>
+ echo htmlspecialchars($feed['href']) ?>"><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
<?php } ?></li><?php } ?>
<?php foreach( array('contributions', 'emailuser', 'upload', 'specialpages') as $special ) { ?>
<?php if($this->data['nav_urls'][$special]) {?><li id="t-<?php echo $special ?>"><a href="<?php
diff --git a/skins/MySkin.php b/skins/MySkin.php
index 22fd1e97a6d5..2f551b4606d7 100644
--- a/skins/MySkin.php
+++ b/skins/MySkin.php
@@ -7,6 +7,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('MonoBook.php');
diff --git a/skins/Nostalgia.php b/skins/Nostalgia.php
index 0b914bdc86e4..d29aaf8f65b0 100644
--- a/skins/Nostalgia.php
+++ b/skins/Nostalgia.php
@@ -7,6 +7,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/**
* @todo document
* @package MediaWiki
diff --git a/skins/Standard.php b/skins/Standard.php
index 6698cf2a4d77..155331d6fe38 100644
--- a/skins/Standard.php
+++ b/skins/Standard.php
@@ -7,6 +7,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/**
* @todo document
* @package MediaWiki
diff --git a/skins/disabled/Amethyst.php b/skins/disabled/Amethyst.php
index 3bfaa18f99a2..f387f2077982 100644
--- a/skins/disabled/Amethyst.php
+++ b/skins/disabled/Amethyst.php
@@ -12,6 +12,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('includes/SkinPHPTal.php');
if( class_exists( 'SkinPHPTal' ) ) {
diff --git a/skins/disabled/Chick.php b/skins/disabled/Chick.php
index ee28850a109c..205feb67008d 100644
--- a/skins/disabled/Chick.php
+++ b/skins/disabled/Chick.php
@@ -7,6 +7,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('includes/SkinPHPTal.php');
if( class_exists( 'SkinPHPTal' ) ) {
diff --git a/skins/disabled/MonoBookTal.php b/skins/disabled/MonoBookTal.php
index bc0f1215c77b..876150ce2222 100644
--- a/skins/disabled/MonoBookTal.php
+++ b/skins/disabled/MonoBookTal.php
@@ -14,6 +14,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('includes/SkinPHPTal.php');
diff --git a/skins/disabled/WikimediaWiki.php b/skins/disabled/WikimediaWiki.php
index 608c8b80ec11..87564df04f1e 100644
--- a/skins/disabled/WikimediaWiki.php
+++ b/skins/disabled/WikimediaWiki.php
@@ -6,6 +6,9 @@
* @subpackage Skins
*/
+if( !defined( 'MEDIAWIKI' ) )
+ die();
+
/** */
require_once('includes/SkinPHPTal.php');
diff --git a/soap/client.php b/soap/client.php
deleted file mode 100644
index b9d75cfd2a1f..000000000000
--- a/soap/client.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
- print "This script must be run from the command line\n";
- exit();
-}
-
-
-require_once('nusoap.php');
-
-$t = 'Hello, World!';
-
-$s = new soapclient( 'http://mediawiki.mormo.org:80/soap/' );
-print "==echoString==\n";
-$r = $s->call( 'echoString', array( $t ) );
-
-print( $r . "\n" );
-print( "Error: ".$s->getError() . "\n" );
-
-print "\n\n==getArticle==\n";
-$r = $s->call( 'getArticle', array( 'Frankfurt' ) );
-
-print_r( $r );
-print( "Error: ".$s->getError() . "\n" );
-
-print "\n\n==getArticleByVersion==\n";
-$r = $s->call( 'getArticleByVersion', array( 'Frankfurt am Main', 0 ) );
-
-print_r( $r );
-print( "Error: ".$s->getError() . "\n" );
-
-print "\n\n==getArticleRevisions==\n";
-$r = $s->call( 'getArticleRevisions', array( 'Frankfurt am Main' ) );
-
-print_r( $r );
-print( "Error: ".$s->getError() . "\n" );
-
-print "\n\n==searchTitles==\n";
-$r = $s->call( 'searchTitles', array( 'Frankfurt', 0 ) );
-
-print_r( $r );
-print( "Error: ".$s->getError() . "\n" );
-
-?>
-
diff --git a/soap/index.php b/soap/index.php
deleted file mode 100644
index 71d4b0c1004f..000000000000
--- a/soap/index.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-# SOAP remote API for MediaWiki
-#
-# Copyright (C) 2004 Jens Frank, jeluf@gmx.de
-# http://www.mediawiki.org/
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-# http://www.gnu.org/copyleft/gpl.html
-
-require_once('nusoap.php');
-
-#
-# Initialize the environment
-#
-unset( $wgEnableSOAP );
-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!" );
-}
-
-define( "MEDIAWIKI", true );
-
-require_once( '../includes/Defines.php' );
-require_once( '../LocalSettings.php' );
-
-ini_set( "include_path", "$IP:" . ini_get("include_path") );
-
-require_once( '../includes/Setup.php' );
-
-#
-# SOAP must be activated in the Configuration. Else, exit.
-#
-if ( ! $wgEnableSOAP ) {
- print "You have to enable SOAP by setting \$wgEnableSoap=true; in LocalSettings.php\n";
- exit;
-}
-
-#
-# Set up server and register methods.
-#
-
-$s = new soap_server;
-
-$s->register('echoString'); # For testing
-$s->register('getArticle'); # For testing
-$s->register('getArticleByVersion');
-$s->register('getArticleRevisions');
-$s->register('searchTitles');
-
-# Convert decimal to ASCII-encoded
-#
-function decasc( $n ) {
- return strtoupper(base_convert( $n, 10, 36));
-}
-# Test function
-# Return the string.
-#
-function echoString( $in ) {
- if ( is_string( $in ) ) {
- return $in;
- } else {
- return new soap_fault('Client', 'The parameter to this service must be a string');
- }
-}
-
-# Test function
-# Return an array:
-# name IN name of the page to get, e.g. Wikipedia talk:Village Pump
-# title OUT Title of the page, DB form, e.g. Village_Pump
-# namespace OUT Namespace of the article, e.g. 3 for Wikipedia_talk.
-# text OUT Wikitext of the requested page
-#
-function getArticle( $name ) {
- global $wgWhitelistEdit, $wgWhitelistRead;
-
- if ( $wgWhitelistEdit || $wgWhitelistRead ) {
- return new soap_fault('Client', 'SOAP not available in whitelist mode.');
- }
-
- if ( ! is_string( $name ) ) {
- return new soap_fault('Client', 'The parameter to this service must be a string');
- }
- require_once('Title.php');
- if( $name == '' ) {
- $name = wfMsg( "mainpage" );
- }
- $wgTitle = Title::newFromText( $name );
- $dbr =& wfGetDB( DB_SLAVE );
- $text = $dbr->selectField( 'cur', 'cur_text',
- "cur_title='".$wgTitle->getDBkey()."' AND cur_namespace=".$wgTitle->getNamespace(),
- 'SOAP::getArticle' );
- if ( false === $text ) {
- return new soap_fault('Client', 'Page does not exist.');
- }
- return array(
- 'title' => $wgTitle->getDBkey(),
- 'namespace' => $wgTitle->getNamespace(),
- 'text' => $text
- );
-}
-
-# getArticleByVersion
-# Returns the wikitext and metadata of an article, either current or old revision.
-# title IN title of the page, including namespace prefix
-# version IN version number of the page, or 0 for cur.
-#
-# title OUT title of the page, without namespace prefix
-# namespace OUT namespace number of that article
-# id OUT ID number of this page
-# timestamp OUT timestamp of this page
-# text OUT wikitext of this page
-#
-function getArticleByVersion( $title, $version ) {
- global $wgWhitelistEdit, $wgWhitelistRead;
- $fname = 'SOAP::getArticleByVersion';
-
- # Check parameters
- #
- if ( $wgWhitelistEdit || $wgWhitelistRead ) {
- return new soap_fault('Client', 'SOAP not available in whitelist mode.');
- }
- if ( ! is_string( $title ) ) {
- return new soap_fault('Client', 'The first parameter to this service must be a string');
- }
- if ( intval( $version ) != $version ) {
- return new soap_fault('Client', 'The second parameter to this service must be an integer');
- }
-
- # Instantiate a title object
- #
- require_once('Title.php');
- if( $title == '' ) {
- $title = wfMsg( "mainpage" );
- }
- $wgTitle = Title::newFromText( $title );
-
- $dbr =& wfGetDB( DB_SLAVE );
-
- # set up SQL query
- #
- if ( $version == 0 ) {
- # Get current revision
- #
- $sql = "SELECT cur_title AS title, cur_namespace AS namespace, cur_id AS id,
- cur_timestamp AS timestamp, cur_text as text FROM cur
- WHERE cur_title = '" . $wgTitle->getDBkey()."' AND cur_namespace=".$wgTitle->getNamespace();
- } else {
- $sql = "SELECT old_title AS title, old_namespace AS namespace, old_id AS id,
- old_timestamp AS timestamp, old_text AS text FROM old
- WHERE old_title = '" . $wgTitle->getDBkey()."' AND old_id=".intval( $version );
- }
-
- $res = $dbr->query( $sql, $fname, true );
-
- if ( ! $res ) {
- return new soap_fault( 'Server', $dbr->lastError() );
- }
-
- if ( ! ( $line = $dbr->fetchObject( $res ) ) ) {
- return new soap_fault( 'Client', 'That page or revision does not exist.' );
- }
-
- $answer['title'] = $line->title;
- $answer['namespace'] = $line->namespace;
- $answer['id'] = $line->id;
- $answer['timestamp'] = $line->timestamp;
- $answer['text'] = $line->text;
-
- return $answer;
-}
-
-# getArticleRevisions
-# Return a list of all revisions of a page.
-# title IN title of the page, including namespace prefix
-#
-# title OUT title of the page, without namespace prefix
-# namespace OUT namespace number of that article
-# id OUT ID number of this page
-# revisions OUT list of revisions of this page. Array consisting of elements with
-# the following fields:
-# id OUT revision id of this revision
-# comment OUT edit comment of this revision
-# user OUT user name of the user adding this revision
-# timestamp OUT timestamp of this revision
-# minor OUT is this change a minor change
-# unique OUT unique ID of this revision. built from (curid,timestamp,hash(text))
-#
-function getArticleRevisions( $title ) {
- global $wgWhitelistEdit, $wgWhitelistRead;
- $fname = 'SOAP::getArticleRevisions';
-
- # Check parameters
- #
- if ( $wgWhitelistEdit || $wgWhitelistRead ) {
- return new soap_fault('Client', 'SOAP not available in whitelist mode.');
- }
- if ( ! is_string( $title ) ) {
- return new soap_fault('Client', 'The first parameter to this service must be a string');
- }
-
- # Instantiate a title object
- #
- require_once('Title.php');
- if( $title == '' ) {
- $title = wfMsg( "mainpage" );
- }
- $wgTitle = Title::newFromText( $title );
-
- $dbr =& wfGetDB( DB_SLAVE );
-
- # set up SQL query
- #
- $sql1 = "SELECT cur_id, cur_comment, cur_user_text, cur_timestamp, cur_minor_edit, cur_text
- FROM cur
- WHERE cur_title = '" . $wgTitle->getDBkey()."' AND cur_namespace=".$wgTitle->getNamespace();
-
- $sql2 = "SELECT old_id, old_comment, old_user_text, old_timestamp, old_minor_edit, old_text
- FROM old
- WHERE old_title = '" . $wgTitle->getDBkey()."' AND old_namespace=".$wgTitle->getNamespace();
-
- $res = $dbr->query( $sql1, $fname, true );
-
- if ( ! $res ) {
- return new soap_fault( 'Server', $dbr->lastError() );
- }
-
- if ( ! ( $line = $dbr->fetchObject( $res ) ) ) {
- return new soap_fault( 'Client', 'That page or revision does not exist.' );
- }
-
- $curid = $line->cur_id;
-
- $revisions[] = array(
- 'id' => 0,
- 'comment' => $line->cur_comment,
- 'user' => $line->cur_user_text,
- 'timestamp' => $line->cur_timestamp,
- 'minor' => $line->cur_minor_edit,
- 'unique' => decasc($curid).'-'.
- decasc(wfTimestamp2Unix($line->cur_timestamp)).'-'.
- decasc(crc32($line->cur_text))
- );
-
- $answer = array(
- 'title' => $wgTitle->getDBkey(),
- 'namespace' => $wgTitle->getNamespace(),
- 'id' => $curid
- );
-
-
- $res = $dbr->query( $sql2, $fname, true );
- $answer['count'] = 1;
-
- if ( $res ) {
- while ( $line = $dbr->fetchObject( $res ) ) {
- $revisions[] = array(
- 'id' => $line->old_id,
- 'comment' => $line->old_comment,
- 'user' => $line->old_user_text,
- 'timestamp' => $line->old_timestamp,
- 'minor' => $line->old_minor_edit,
- 'unique' => decasc($curid).'-'.
- decasc(wfTimestamp2Unix($line->old_timestamp)).'-'.
- decasc(crc32($line->old_text))
- );
- $answer['count'] ++;
- }
- }
- $answer['revisions'] = $revisions;
-
- return $answer;
-}
-
-# searchTitles
-# Returns a list of article titles matching a search string
-# pattern IN search pattern
-# main_only IN if 1, search only the main namespace, if 0, search all namespaces
-#
-# count OUT number of results
-# base OUT base URL of the hits. Concatenate with title_url to get full url.
-# hits OUT list of hits. Array consisting of elements with the following fields:
-# title OUT title of the hit. "Display style". Does not include namespace.
-# title_ns OUT title of the hit. "Display style". Includes namespace.
-# title_url OUT title of the hit. URL escaped. Includes namespace prefix.
-# namespace OUT numerical namespace ID
-#
-function searchTitles( $pattern, $main_only ) {
- global $wgWhitelistEdit, $wgWhitelistRead, $wgLang, $wgServer, $wgArticlePath;
- $fname = 'SOAP::getArticleRevisions';
-
- # Check parameters
- #
- if ( $wgWhitelistEdit || $wgWhitelistRead ) {
- return new soap_fault('Client', 'SOAP not available in whitelist mode.');
- }
- if ( ! is_string( $pattern ) ) {
- return new soap_fault('Client', 'The first parameter to this service must be a string');
- }
- if ( $main_only != 0 && $main_only != 1 ) {
- return new soap_fault('Client', 'The second parameter to this service must be 0 or 1');
- }
-
-
- # Connect to the DB
- $dbr =& wfGetDB( DB_SLAVE );
-
- # Normalize the search pattern
- $pattern = $dbr->strencode( $wgLang->stripForSearch( $pattern ) );
-
- # Prepare the query
-
- $sql = 'SELECT cur_id, cur_namespace, cur_title FROM cur, searchindex WHERE '
- . ( $main_only ? 'cur_namespace=0 AND ' :'' )
- . "cur_id=si_page AND MATCH(si_title) AGAINST('{$pattern}' IN BOOLEAN MODE)";
-
- $res = $dbr->query( $sql, $fname, true );
-
- if ( ! $res ) {
- return new soap_fault( 'Server', $dbr->lastError() );
- }
-
- $answer = array(
- 'count' => 0,
- 'base' => $wgServer.$wgArticlePath,
- 'hits' => array(),
- );
- while ( ($line = $dbr->fetchObject( $res )) && $answer['count'] < 200 ) {
- $nt = Title::newFromDBkey( $wgLang->getNsText( $line->cur_namespace ) . ':' . $line->cur_title );
- $answer['hits'][] = array(
- 'title' => $nt->getText(),
- 'title_ns' => $nt->getPrefixedText(),
- 'title_url' => $nt->getPartialURL(),
- 'namespace' => $line->cur_namespace
- );
- $answer['count']++;
- }
-
- return $answer;
-}
-
-# SOAP uses POST, if POST data is available, process it. Else produce an error.
-if ( isset( $HTTP_RAW_POST_DATA ) ) {
- $s->service( $HTTP_RAW_POST_DATA );
-} else {
- print( "You need a SOAP client to access SOAP services." );
-}
-
-?>
diff --git a/soap/nusoap.php b/soap/nusoap.php
deleted file mode 100644
index a973cf10dce7..000000000000
--- a/soap/nusoap.php
+++ /dev/null
@@ -1,5574 +0,0 @@
-<?php
-
-/*
-
-NuSOAP - Web Services Toolkit for PHP
-
-Copyright (c) 2002 NuSphere Corporation
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-If you have any questions or comments, please email:
-
-Dietrich Ayala
-dietrich@ganx4.com
-http://dietrich.ganx4.com/nusoap
-
-NuSphere Corporation
-http://www.nusphere.com
-
-*/
-
-/* load classes
-
-// necessary classes
-require_once('class.soapclient.php');
-require_once('class.soap_val.php');
-require_once('class.soap_parser.php');
-require_once('class.soap_fault.php');
-
-// transport classes
-require_once('class.soap_transport_http.php');
-
-// optional add-on classes
-require_once('class.xmlschema.php');
-require_once('class.wsdl.php');
-
-// server class
-require_once('class.soap_server.php');*/
-
-/**
-*
-* nusoap_base
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class nusoap_base {
-
- var $title = 'NuSOAP';
- var $version = '0.6.7';
- var $revision = '1.1';
- var $error_str = false;
- var $debug_str = '';
- // toggles automatic encoding of special characters as entities
- // (should always be true, I think)
- var $charencoding = true;
-
- /**
- * set schema version
- *
- * @var XMLSchemaVersion
- * @access public
- */
- var $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema';
-
- /**
- * set charset encoding for outgoing messages
- *
- * @var soap_defencoding
- * @access public
- */
- //var $soap_defencoding = 'UTF-8';
- var $soap_defencoding = 'ISO-8859-1';
-
- /**
- * load namespace uris into an array of uri => prefix
- *
- * @var namespaces
- * @access public
- */
- var $namespaces = array(
- 'SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
- 'xsd' => 'http://www.w3.org/2001/XMLSchema',
- 'xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/',
- 'si' => 'http://soapinterop.org/xsd');
- var $usedNamespaces = array();
-
- /**
- * load types into typemap array
- * is this legacy yet?
- * no, this is used by the xmlschema class to verify type => namespace mappings.
- * @var typemap
- * @access public
- */
- var $typemap = array(
- 'http://www.w3.org/2001/XMLSchema' => array(
- 'string'=>'string','boolean'=>'boolean','float'=>'double','double'=>'double','decimal'=>'double',
- 'duration'=>'','dateTime'=>'string','time'=>'string','date'=>'string','gYearMonth'=>'',
- 'gYear'=>'','gMonthDay'=>'','gDay'=>'','gMonth'=>'','hexBinary'=>'string','base64Binary'=>'string',
- // derived datatypes
- 'normalizedString'=>'string','token'=>'string','language'=>'','NMTOKEN'=>'','NMTOKENS'=>'','Name'=>'','NCName'=>'','ID'=>'',
- 'IDREF'=>'','IDREFS'=>'','ENTITY'=>'','ENTITIES'=>'','integer'=>'integer','nonPositiveInteger'=>'integer',
- 'negativeInteger'=>'integer','long'=>'integer','int'=>'integer','short'=>'integer','byte'=>'integer','nonNegativeInteger'=>'integer',
- 'unsignedLong'=>'','unsignedInt'=>'','unsignedShort'=>'','unsignedByte'=>'','positiveInteger'=>''),
- 'http://www.w3.org/1999/XMLSchema' => array(
- 'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'double',
- 'float'=>'double','dateTime'=>'string',
- 'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-type'=>'array'),
- 'http://soapinterop.org/xsd' => array('SOAPStruct'=>'struct'),
- 'http://schemas.xmlsoap.org/soap/encoding/' => array('base64'=>'string','array'=>'array','Array'=>'array'),
- 'http://xml.apache.org/xml-soap' => array('Map')
- );
-
- /**
- * entities to convert
- *
- * @var xmlEntities
- * @access public
- */
- var $xmlEntities = array('quot' => '"','amp' => '&',
- 'lt' => '<','gt' => '>','apos' => "'");
-
- /**
- * adds debug data to the class level debug string
- *
- * @param string $string debug data
- * @access private
- */
- function debug($string){
- $this->debug_str .= get_class($this).": $string\n";
- }
-
- /**
- * expands entities, e.g. changes '<' to '&lt;'.
- *
- * @param string $val The string in which to expand entities.
- * @access private
- */
- function expandEntities($val) {
- if ($this->charencoding) {
- $val = str_replace('&', '&amp;', $val);
- $val = str_replace("'", '&apos;', $val);
- $val = str_replace('"', '&quot;', $val);
- $val = str_replace('<', '&lt;', $val);
- $val = str_replace('>', '&gt;', $val);
- }
- return $val;
- }
-
- /**
- * returns error string if present
- *
- * @return boolean $string error string
- * @access public
- */
- function getError(){
- if($this->error_str != ''){
- return $this->error_str;
- }
- return false;
- }
-
- /**
- * sets error string
- *
- * @return boolean $string error string
- * @access private
- */
- function setError($str){
- $this->error_str = $str;
- }
-
- /**
- * detect if array is a simple array or a struct (associative array)
- *
- * @param $val The PHP array
- * @return string (arraySimple|arrayStruct)
- * @access private
- */
- function isArraySimpleOrStruct($val) {
- $keyList = array_keys($val);
- foreach ($keyList as $keyListValue) {
- if (!is_int($keyListValue)) {
- return 'arrayStruct';
- }
- }
- return 'arraySimple';
- }
-
- /**
- * serializes PHP values in accordance w/ section 5. Type information is
- * not serialized if $use == 'literal'.
- *
- * @return string
- * @access public
- */
- function serialize_val($val,$name=false,$type=false,$name_ns=false,$type_ns=false,$attributes=false,$use='encoded'){
- if(is_object($val) && get_class($val) == 'soapval'){
- return $val->serialize($use);
- }
- $this->debug( "in serialize_val: $val, $name, $type, $name_ns, $type_ns, $attributes, $use");
- // if no name, use item
- $name = (!$name|| is_numeric($name)) ? 'soapVal' : $name;
- // if name has ns, add ns prefix to name
- $xmlns = '';
- if($name_ns){
- $prefix = 'nu'.rand(1000,9999);
- $name = $prefix.':'.$name;
- $xmlns .= " xmlns:$prefix=\"$name_ns\"";
- }
- // if type is prefixed, create type prefix
- if($type_ns != '' && $type_ns == $this->namespaces['xsd']){
- // need to fix this. shouldn't default to xsd if no ns specified
- // w/o checking against typemap
- $type_prefix = 'xsd';
- } elseif($type_ns){
- $type_prefix = 'ns'.rand(1000,9999);
- $xmlns .= " xmlns:$type_prefix=\"$type_ns\"";
- }
- // serialize attributes if present
- $atts = '';
- if($attributes){
- foreach($attributes as $k => $v){
- $atts .= " $k=\"$v\"";
- }
- }
- // serialize if an xsd built-in primitive type
- if($type != '' && isset($this->typemap[$this->XMLSchemaVersion][$type])){
- if (is_bool($val)) {
- if ($type == 'boolean') {
- $val = $val ? 'true' : 'false';
- } elseif (! $val) {
- $val = 0;
- }
- } else if (is_string($val)) {
- $val = $this->expandEntities($val);
- }
- if ($use == 'literal') {
- return "<$name$xmlns>$val</$name>";
- } else {
- return "<$name$xmlns xsi:type=\"xsd:$type\">$val</$name>";
- }
- }
- // detect type and serialize
- $xml = '';
- switch(true) {
- case ($type == '' && is_null($val)):
- if ($use == 'literal') {
- // TODO: depends on nillable
- $xml .= "<$name$xmlns/>";
- } else {
- $xml .= "<$name$xmlns xsi:nil=\"true\"/>";
- }
- break;
- case (is_bool($val) || $type == 'boolean'):
- if ($type == 'boolean') {
- $val = $val ? 'true' : 'false';
- } elseif (! $val) {
- $val = 0;
- }
- if ($use == 'literal') {
- $xml .= "<$name$xmlns $atts>$val</$name>";
- } else {
- $xml .= "<$name$xmlns xsi:type=\"xsd:boolean\"$atts>$val</$name>";
- }
- break;
- case (is_int($val) || is_long($val) || $type == 'int'):
- if ($use == 'literal') {
- $xml .= "<$name$xmlns $atts>$val</$name>";
- } else {
- $xml .= "<$name$xmlns xsi:type=\"xsd:int\"$atts>$val</$name>";
- }
- break;
- case (is_float($val)|| is_double($val) || $type == 'float'):
- if ($use == 'literal') {
- $xml .= "<$name$xmlns $atts>$val</$name>";
- } else {
- $xml .= "<$name$xmlns xsi:type=\"xsd:float\"$atts>$val</$name>";
- }
- break;
- case (is_string($val) || $type == 'string'):
- $val = $this->expandEntities($val);
- if ($use == 'literal') {
- $xml .= "<$name$xmlns $atts>$val</$name>";
- } else {
- $xml .= "<$name$xmlns xsi:type=\"xsd:string\"$atts>$val</$name>";
- }
- break;
- case is_object($val):
- $name = get_class($val);
- foreach(get_object_vars($val) as $k => $v){
- $pXml = isset($pXml) ? $pXml.$this->serialize_val($v,$k,false,false,false,false,$use) : $this->serialize_val($v,$k,false,false,false,false,$use);
- }
- $xml .= '<'.$name.'>'.$pXml.'</'.$name.'>';
- break;
- break;
- case (is_array($val) || $type):
- // detect if struct or array
- $valueType = $this->isArraySimpleOrStruct($val);
- if($valueType=='arraySimple' || ereg('^ArrayOf',$type)){
- $i = 0;
- if(is_array($val) && count($val)> 0){
- foreach($val as $v){
- if(is_object($v) && get_class($v) == 'soapval'){
- $tt_ns = $v->type_ns;
- $tt = $v->type;
- } elseif (is_array($v)) {
- $tt = $this->isArraySimpleOrStruct($v);
- } else {
- $tt = gettype($v);
- }
- $array_types[$tt] = 1;
- $xml .= $this->serialize_val($v,'item',false,false,false,false,$use);
- ++$i;
- }
- if(count($array_types) > 1){
- $array_typename = 'xsd:ur-type';
- } elseif(isset($tt) && isset($this->typemap[$this->XMLSchemaVersion][$tt])) {
- if ($tt == 'integer') {
- $tt = 'int';
- }
- $array_typename = 'xsd:'.$tt;
- } elseif(isset($tt) && $tt == 'arraySimple'){
- $array_typename = 'SOAP-ENC:Array';
- } elseif(isset($tt) && $tt == 'arrayStruct'){
- $array_typename = 'unnamed_struct_use_soapval';
- } else {
- // if type is prefixed, create type prefix
- if ($tt_ns != '' && $tt_ns == $this->namespaces['xsd']){
- $array_typename = 'xsd:' . $tt;
- } elseif ($tt_ns) {
- $tt_prefix = 'ns' . rand(1000, 9999);
- $array_typename = "$tt_prefix:$tt";
- $xmlns .= " xmlns:$tt_prefix=\"$tt_ns\"";
- } else {
- $array_typename = $tt;
- }
- }
- $array_type = $i;
- if ($use == 'literal') {
- $type_str = '';
- } else if (isset($type) && isset($type_prefix)) {
- $type_str = " xsi:type=\"$type_prefix:$type\"";
- } else {
- $type_str = " xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"".$array_typename."[$array_type]\"";
- }
- // empty array
- } else {
- if ($use == 'literal') {
- $type_str = '';
- } else if (isset($type) && isset($type_prefix)) {
- $type_str = " xsi:type=\"$type_prefix:$type\"";
- } else {
- $type_str = " xsi:type=\"SOAP-ENC:Array\"";
- }
- }
- $xml = "<$name$xmlns$type_str$atts>".$xml."</$name>";
- } else {
- // got a struct
- if(isset($type) && isset($type_prefix)){
- $type_str = " xsi:type=\"$type_prefix:$type\"";
- } else {
- $type_str = '';
- }
- if ($use == 'literal') {
- $xml .= "<$name$xmlns $atts>";
- } else {
- $xml .= "<$name$xmlns$type_str$atts>";
- }
- foreach($val as $k => $v){
- // Apache Map
- if ($type == 'Map' && $type_ns == 'http://xml.apache.org/xml-soap') {
- $xml .= '<item>';
- $xml .= $this->serialize_val($k,'key',false,false,false,false,$use);
- $xml .= $this->serialize_val($v,'value',false,false,false,false,$use);
- $xml .= '</item>';
- } else {
- $xml .= $this->serialize_val($v,$k,false,false,false,false,$use);
- }
- }
- $xml .= "</$name>";
- }
- break;
- default:
- $xml .= 'not detected, got '.gettype($val).' for '.$val;
- break;
- }
- return $xml;
- }
-
- /**
- * serialize message
- *
- * @param string body
- * @param string headers optional
- * @param array namespaces optional
- * @param string style optional (rpc|document)
- * @param string use optional (encoded|literal)
- * @return string message
- * @access public
- */
- function serializeEnvelope($body,$headers=false,$namespaces=array(),$style='rpc',$use='encoded'){
- // TODO: add an option to automatically run utf8_encode on $body and $headers
- // if $this->soap_defencoding is UTF-8. Not doing this automatically allows
- // one to send arbitrary UTF-8 characters, not just characters that map to ISO-8859-1
-
- // serialize namespaces
- $ns_string = '';
- foreach(array_merge($this->namespaces,$namespaces) as $k => $v){
- $ns_string .= " xmlns:$k=\"$v\"";
- }
- if($style == 'rpc' && $use == 'encoded') {
- $ns_string = ' SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"' . $ns_string;
- }
-
- // serialize headers
- if($headers){
- $headers = "<SOAP-ENV:Header>".$headers."</SOAP-ENV:Header>";
- }
- // serialize envelope
- return
- '<?xml version="1.0" encoding="'.$this->soap_defencoding .'"?'.">".
- '<SOAP-ENV:Envelope'.$ns_string.">".
- $headers.
- "<SOAP-ENV:Body>".
- $body.
- "</SOAP-ENV:Body>".
- "</SOAP-ENV:Envelope>";
- }
-
- function formatDump($str){
- $str = htmlspecialchars($str);
- return nl2br($str);
- }
-
- /**
- * contracts a qualified name
- *
- * @param string $string qname
- * @return string contracted qname
- * @access private
- */
- function contractQname($qname){
- // get element namespace
- //$this->xdebug("Contract $qname");
- if (strrpos($qname, ':')) {
- // get unqualified name
- $name = substr($qname, strrpos($qname, ':') + 1);
- // get ns
- $ns = substr($qname, 0, strrpos($qname, ':'));
- $p = $this->getPrefixFromNamespace($ns);
- if ($p) {
- return $p . ':' . $name;
- }
- return $qname;
- } else {
- return $qname;
- }
- }
-
- /**
- * expands a qualified name
- *
- * @param string $string qname
- * @return string expanded qname
- * @access private
- */
- function expandQname($qname){
- // get element prefix
- if(strpos($qname,':') && !ereg('^http://',$qname)){
- // get unqualified name
- $name = substr(strstr($qname,':'),1);
- // get ns prefix
- $prefix = substr($qname,0,strpos($qname,':'));
- if(isset($this->namespaces[$prefix])){
- return $this->namespaces[$prefix].':'.$name;
- } else {
- return $qname;
- }
- } else {
- return $qname;
- }
- }
-
- /**
- * returns the local part of a prefixed string
- * returns the original string, if not prefixed
- *
- * @param string
- * @return string
- * @access public
- */
- function getLocalPart($str){
- if($sstr = strrchr($str,':')){
- // get unqualified name
- return substr( $sstr, 1 );
- } else {
- return $str;
- }
- }
-
- /**
- * returns the prefix part of a prefixed string
- * returns false, if not prefixed
- *
- * @param string
- * @return mixed
- * @access public
- */
- function getPrefix($str){
- if($pos = strrpos($str,':')){
- // get prefix
- return substr($str,0,$pos);
- }
- return false;
- }
-
- /**
- * pass it a prefix, it returns a namespace
- * returns false if no namespace registered with the given prefix
- *
- * @param string
- * @return mixed
- * @access public
- */
- function getNamespaceFromPrefix($prefix){
- if (isset($this->namespaces[$prefix])) {
- return $this->namespaces[$prefix];
- }
- //$this->setError("No namespace registered for prefix '$prefix'");
- return false;
- }
-
- /**
- * returns the prefix for a given namespace (or prefix)
- * or false if no prefixes registered for the given namespace
- *
- * @param string
- * @return mixed
- * @access public
- */
- function getPrefixFromNamespace($ns) {
- foreach ($this->namespaces as $p => $n) {
- if ($ns == $n || $ns == $p) {
- $this->usedNamespaces[$p] = $n;
- return $p;
- }
- }
- return false;
- }
-
- function varDump($data) {
- ob_start();
- var_dump($data);
- $ret_val = ob_get_contents();
- ob_end_clean();
- return $ret_val;
- }
-}
-
-// XML Schema Datatype Helper Functions
-
-//xsd:dateTime helpers
-
-/**
-* convert unix timestamp to ISO 8601 compliant date string
-*
-* @param string $timestamp Unix time stamp
-* @access public
-*/
-function timestamp_to_iso8601($timestamp,$utc=true){
- $datestr = date('Y-m-d\TH:i:sO',$timestamp);
- if($utc){
- $eregStr =
- '([0-9]{4})-'. // centuries & years CCYY-
- '([0-9]{2})-'. // months MM-
- '([0-9]{2})'. // days DD
- 'T'. // separator T
- '([0-9]{2}):'. // hours hh:
- '([0-9]{2}):'. // minutes mm:
- '([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss...
- '(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
-
- if(ereg($eregStr,$datestr,$regs)){
- return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]);
- }
- return false;
- } else {
- return $datestr;
- }
-}
-
-/**
-* convert ISO 8601 compliant date string to unix timestamp
-*
-* @param string $datestr ISO 8601 compliant date string
-* @access public
-*/
-function iso8601_to_timestamp($datestr){
- $eregStr =
- '([0-9]{4})-'. // centuries & years CCYY-
- '([0-9]{2})-'. // months MM-
- '([0-9]{2})'. // days DD
- 'T'. // separator T
- '([0-9]{2}):'. // hours hh:
- '([0-9]{2}):'. // minutes mm:
- '([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss...
- '(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
- if(ereg($eregStr,$datestr,$regs)){
- // not utc
- if($regs[8] != 'Z'){
- $op = substr($regs[8],0,1);
- $h = substr($regs[8],1,2);
- $m = substr($regs[8],strlen($regs[8])-2,2);
- if($op == '-'){
- $regs[4] = $regs[4] + $h;
- $regs[5] = $regs[5] + $m;
- } elseif($op == '+'){
- $regs[4] = $regs[4] - $h;
- $regs[5] = $regs[5] - $m;
- }
- }
- return strtotime("$regs[1]-$regs[2]-$regs[3] $regs[4]:$regs[5]:$regs[6]Z");
- } else {
- return false;
- }
-}
-
-function usleepWindows($usec)
-{
- $start = gettimeofday();
-
- do
- {
- $stop = gettimeofday();
- $timePassed = 1000000 * ($stop['sec'] - $start['sec'])
- + $stop['usec'] - $start['usec'];
- }
- while ($timePassed < $usec);
-}
-
-?><?php
-
-
-
-/**
-* soap_fault class, allows for creation of faults
-* mainly used for returning faults from deployed functions
-* in a server instance.
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soap_fault extends nusoap_base {
-
- var $faultcode;
- var $faultactor;
- var $faultstring;
- var $faultdetail;
-
- /**
- * constructor
- *
- * @param string $faultcode (client | server)
- * @param string $faultactor only used when msg routed between multiple actors
- * @param string $faultstring human readable error message
- * @param string $faultdetail
- */
- function soap_fault($faultcode,$faultactor='',$faultstring='',$faultdetail=''){
- $this->faultcode = $faultcode;
- $this->faultactor = $faultactor;
- $this->faultstring = $faultstring;
- $this->faultdetail = $faultdetail;
- }
-
- /**
- * serialize a fault
- *
- * @access public
- */
- function serialize(){
- $ns_string = '';
- foreach($this->namespaces as $k => $v){
- $ns_string .= "\n xmlns:$k=\"$v\"";
- }
- $return_msg =
- '<?xml version="1.0" encoding="'.$this->soap_defencoding.'"?>'.
- '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'.$ns_string.">\n".
- '<SOAP-ENV:Body>'.
- '<SOAP-ENV:Fault>'.
- '<faultcode>'.$this->expandEntities($this->faultcode).'</faultcode>'.
- '<faultactor>'.$this->expandEntities($this->faultactor).'</faultactor>'.
- '<faultstring>'.$this->expandEntities($this->faultstring).'</faultstring>'.
- '<detail>'.$this->serialize_val($this->faultdetail).'</detail>'.
- '</SOAP-ENV:Fault>'.
- '</SOAP-ENV:Body>'.
- '</SOAP-ENV:Envelope>';
- return $return_msg;
- }
-}
-
-
-
-?><?php
-
-
-
-/**
-* parses an XML Schema, allows access to it's data, other utility methods
-* no validation... yet.
-* very experimental and limited. As is discussed on XML-DEV, I'm one of the people
-* that just doesn't have time to read the spec(s) thoroughly, and just have a couple of trusty
-* tutorials I refer to :)
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class XMLSchema extends nusoap_base {
-
- // files
- var $schema = '';
- var $xml = '';
- // namespaces
- var $enclosingNamespaces;
- // schema info
- var $schemaInfo = array();
- var $schemaTargetNamespace = '';
- // types, elements, attributes defined by the schema
- var $attributes = array();
- var $complexTypes = array();
- var $currentComplexType = false;
- var $elements = array();
- var $currentElement = false;
- var $simpleTypes = array();
- var $currentSimpleType = false;
- // imports
- var $imports = array();
- // parser vars
- var $parser;
- var $position = 0;
- var $depth = 0;
- var $depth_array = array();
- var $message = array();
- var $defaultNamespace = array();
-
- /**
- * constructor
- *
- * @param string $schema schema document URI
- * @param string $xml xml document URI
- * @param string $namespaces namespaces defined in enclosing XML
- * @access public
- */
- function XMLSchema($schema='',$xml='',$namespaces=array()){
-
- $this->debug('xmlschema class instantiated, inside constructor');
- // files
- $this->schema = $schema;
- $this->xml = $xml;
-
- // namespaces
- $this->enclosingNamespaces = $namespaces;
- $this->namespaces = array_merge($this->namespaces, $namespaces);
-
- // parse schema file
- if($schema != ''){
- $this->debug('initial schema file: '.$schema);
- $this->parseFile($schema, 'schema');
- }
-
- // parse xml file
- if($xml != ''){
- $this->debug('initial xml file: '.$xml);
- $this->parseFile($xml, 'xml');
- }
-
- }
-
- /**
- * parse an XML file
- *
- * @param string $xml, path/URL to XML file
- * @param string $type, (schema | xml)
- * @return boolean
- * @access public
- */
- function parseFile($xml,$type){
- // parse xml file
- if($xml != ""){
- $xmlStr = @join("",@file($xml));
- if($xmlStr == ""){
- $msg = 'Error reading XML from '.$xml;
- $this->setError($msg);
- $this->debug($msg);
- return false;
- } else {
- $this->debug("parsing $xml");
- $this->parseString($xmlStr,$type);
- $this->debug("done parsing $xml");
- return true;
- }
- }
- return false;
- }
-
- /**
- * parse an XML string
- *
- * @param string $xml path or URL
- * @param string $type, (schema|xml)
- * @access private
- */
- function parseString($xml,$type){
- // parse xml string
- if($xml != ""){
-
- // Create an XML parser.
- $this->parser = xml_parser_create();
- // Set the options for parsing the XML data.
- xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
-
- // Set the object for the parser.
- xml_set_object($this->parser, $this);
-
- // Set the element handlers for the parser.
- if($type == "schema"){
- xml_set_element_handler($this->parser, 'schemaStartElement','schemaEndElement');
- xml_set_character_data_handler($this->parser,'schemaCharacterData');
- } elseif($type == "xml"){
- xml_set_element_handler($this->parser, 'xmlStartElement','xmlEndElement');
- xml_set_character_data_handler($this->parser,'xmlCharacterData');
- }
-
- // Parse the XML file.
- if(!xml_parse($this->parser,$xml,true)){
- // Display an error message.
- $errstr = sprintf('XML error parsing XML schema on line %d: %s',
- xml_get_current_line_number($this->parser),
- xml_error_string(xml_get_error_code($this->parser))
- );
- $this->debug($errstr);
- $this->debug("XML payload:\n" . $xml);
- $this->setError($errstr);
- }
-
- xml_parser_free($this->parser);
- } else{
- $this->debug('no xml passed to parseString()!!');
- $this->setError('no xml passed to parseString()!!');
- }
- }
-
- /**
- * start-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @param string $attrs associative array of attributes
- * @access private
- */
- function schemaStartElement($parser, $name, $attrs) {
-
- // position in the total number of elements, starting from 0
- $pos = $this->position++;
- $depth = $this->depth++;
- // set self as current value for this depth
- $this->depth_array[$depth] = $pos;
- $this->message[$pos] = array('cdata' => '');
- if ($depth > 0) {
- $this->defaultNamespace[$pos] = $this->defaultNamespace[$this->depth_array[$depth - 1]];
- } else {
- $this->defaultNamespace[$pos] = false;
- }
-
- // get element prefix
- if($prefix = $this->getPrefix($name)){
- // get unqualified name
- $name = $this->getLocalPart($name);
- } else {
- $prefix = '';
- }
-
- // loop thru attributes, expanding, and registering namespace declarations
- if(count($attrs) > 0){
- foreach($attrs as $k => $v){
- // if ns declarations, add to class level array of valid namespaces
- if(ereg("^xmlns",$k)){
- //$this->xdebug("$k: $v");
- //$this->xdebug('ns_prefix: '.$this->getPrefix($k));
- if($ns_prefix = substr(strrchr($k,':'),1)){
- //$this->xdebug("Add namespace[$ns_prefix] = $v");
- $this->namespaces[$ns_prefix] = $v;
- } else {
- $this->defaultNamespace[$pos] = $v;
- if (! $this->getPrefixFromNamespace($v)) {
- $this->namespaces['ns'.(count($this->namespaces)+1)] = $v;
- }
- }
- if($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema'){
- $this->XMLSchemaVersion = $v;
- $this->namespaces['xsi'] = $v.'-instance';
- }
- }
- }
- foreach($attrs as $k => $v){
- // expand each attribute
- $k = strpos($k,':') ? $this->expandQname($k) : $k;
- $v = strpos($v,':') ? $this->expandQname($v) : $v;
- $eAttrs[$k] = $v;
- }
- $attrs = $eAttrs;
- } else {
- $attrs = array();
- }
- // find status, register data
- switch($name){
- case 'all':
- case 'choice':
- case 'sequence':
- //$this->xdebug("compositor $name for currentComplexType: $this->currentComplexType and currentElement: $this->currentElement");
- $this->complexTypes[$this->currentComplexType]['compositor'] = $name;
- if($name == 'all' || $name == 'sequence'){
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
- }
- break;
- case 'attribute':
- //$this->xdebug("parsing attribute $attrs[name] $attrs[ref] of value: ".$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']);
- $this->xdebug("parsing attribute " . $this->varDump($attrs));
- if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
- $v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
- if (!strpos($v, ':')) {
- // no namespace in arrayType attribute value...
- if ($this->defaultNamespace[$pos]) {
- // ...so use the default
- $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'] = $this->defaultNamespace[$pos] . ':' . $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
- }
- }
- }
- if(isset($attrs['name'])){
- $this->attributes[$attrs['name']] = $attrs;
- $aname = $attrs['name'];
- } elseif(isset($attrs['ref']) && $attrs['ref'] == 'http://schemas.xmlsoap.org/soap/encoding/:arrayType'){
- if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
- $aname = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
- } else {
- $aname = '';
- }
- } elseif(isset($attrs['ref'])){
- $aname = $attrs['ref'];
- $this->attributes[$attrs['ref']] = $attrs;
- }
-
- if(isset($this->currentComplexType)){
- $this->complexTypes[$this->currentComplexType]['attrs'][$aname] = $attrs;
- } elseif(isset($this->currentElement)){
- $this->elements[$this->currentElement]['attrs'][$aname] = $attrs;
- }
- // arrayType attribute
- if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']) || $this->getLocalPart($aname) == 'arrayType'){
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
- $prefix = $this->getPrefix($aname);
- if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])){
- $v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
- } else {
- $v = '';
- }
- if(strpos($v,'[,]')){
- $this->complexTypes[$this->currentComplexType]['multidimensional'] = true;
- }
- $v = substr($v,0,strpos($v,'[')); // clip the []
- if(!strpos($v,':') && isset($this->typemap[$this->XMLSchemaVersion][$v])){
- $v = $this->XMLSchemaVersion.':'.$v;
- }
- $this->complexTypes[$this->currentComplexType]['arrayType'] = $v;
- }
- break;
- case 'complexType':
- if(isset($attrs['name'])){
- $this->xdebug('processing named complexType '.$attrs['name']);
- $this->currentElement = false;
- $this->currentComplexType = $attrs['name'];
- $this->complexTypes[$this->currentComplexType] = $attrs;
- $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
- if(isset($attrs['base']) && ereg(':Array$',$attrs['base'])){
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
- } else {
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
- }
- }else{
- $this->xdebug('processing unnamed complexType for element '.$this->currentElement);
- $this->currentComplexType = $this->currentElement . '_ContainedType';
- $this->currentElement = false;
- $this->complexTypes[$this->currentComplexType] = $attrs;
- $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
- if(isset($attrs['base']) && ereg(':Array$',$attrs['base'])){
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
- } else {
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
- }
- }
- break;
- case 'element':
- // elements defined as part of a complex type should
- // not really be added to $this->elements, but for some
- // reason, they are
- if(isset($attrs['type'])){
- $this->xdebug("processing typed element ".$attrs['name']." of type ".$attrs['type']);
- $this->currentElement = $attrs['name'];
- $this->elements[ $attrs['name'] ] = $attrs;
- $this->elements[ $attrs['name'] ]['typeClass'] = 'element';
- if (!isset($this->elements[ $attrs['name'] ]['form'])) {
- $this->elements[ $attrs['name'] ]['form'] = $this->schemaInfo['elementFormDefault'];
- }
- $ename = $attrs['name'];
- } elseif(isset($attrs['ref'])){
- $ename = $attrs['ref'];
- } else {
- $this->xdebug("processing untyped element ".$attrs['name']);
- $this->currentElement = $attrs['name'];
- $this->elements[ $attrs['name'] ] = $attrs;
- $this->elements[ $attrs['name'] ]['typeClass'] = 'element';
- $this->elements[ $attrs['name'] ]['type'] = $this->schemaTargetNamespace . ':' . $attrs['name'] . '_ContainedType';
- if (!isset($this->elements[ $attrs['name'] ]['form'])) {
- $this->elements[ $attrs['name'] ]['form'] = $this->schemaInfo['elementFormDefault'];
- }
- }
- if(isset($ename) && $this->currentComplexType){
- $this->complexTypes[$this->currentComplexType]['elements'][$ename] = $attrs;
- }
- break;
- // we ignore enumeration values
- //case 'enumeration':
- //break;
- case 'import':
- if (isset($attrs['schemaLocation'])) {
- //$this->xdebug('import namespace ' . $attrs['namespace'] . ' from ' . $attrs['schemaLocation']);
- $this->imports[$attrs['namespace']][] = array('location' => $attrs['schemaLocation'], 'loaded' => false);
- } else {
- //$this->xdebug('import namespace ' . $attrs['namespace']);
- $this->imports[$attrs['namespace']][] = array('location' => '', 'loaded' => true);
- if (! $this->getPrefixFromNamespace($attrs['namespace'])) {
- $this->namespaces['ns'.(count($this->namespaces)+1)] = $attrs['namespace'];
- }
- }
- break;
- case 'restriction':
- //$this->xdebug("in restriction for currentComplexType: $this->currentComplexType and currentElement: $this->currentElement");
- if($this->currentElement){
- $this->elements[$this->currentElement]['type'] = $attrs['base'];
- } elseif($this->currentSimpleType){
- $this->simpleTypes[$this->currentSimpleType]['type'] = $attrs['base'];
- } elseif($this->currentComplexType){
- $this->complexTypes[$this->currentComplexType]['restrictionBase'] = $attrs['base'];
- if(strstr($attrs['base'],':') == ':Array'){
- $this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
- }
- }
- break;
- case 'schema':
- $this->schemaInfo = $attrs;
- $this->schemaInfo['schemaVersion'] = $this->getNamespaceFromPrefix($prefix);
- if (isset($attrs['targetNamespace'])) {
- $this->schemaTargetNamespace = $attrs['targetNamespace'];
- }
- if (!isset($attrs['elementFormDefault'])) {
- $this->schemaInfo['elementFormDefault'] = 'unqualified';
- }
- break;
- case 'simpleType':
- if(isset($attrs['name'])){
- $this->xdebug("processing simpleType for name " . $attrs['name']);
- $this->currentSimpleType = $attrs['name'];
- $this->simpleTypes[ $attrs['name'] ] = $attrs;
- $this->simpleTypes[ $attrs['name'] ]['typeClass'] = 'simpleType';
- $this->simpleTypes[ $attrs['name'] ]['phpType'] = 'scalar';
- } else {
- //echo 'not parsing: '.$name;
- //var_dump($attrs);
- }
- break;
- default:
- //$this->xdebug("do not have anything to do for element $name");
- }
- }
-
- /**
- * end-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @access private
- */
- function schemaEndElement($parser, $name) {
- // bring depth down a notch
- $this->depth--;
- // position of current element is equal to the last value left in depth_array for my depth
- if(isset($this->depth_array[$this->depth])){
- $pos = $this->depth_array[$this->depth];
- }
- // move on...
- if($name == 'complexType'){
- $this->currentComplexType = false;
- $this->currentElement = false;
- }
- if($name == 'element'){
- $this->currentElement = false;
- }
- if($name == 'simpleType'){
- $this->currentSimpleType = false;
- }
- }
-
- /**
- * element content handler
- *
- * @param string $parser XML parser object
- * @param string $data element content
- * @access private
- */
- function schemaCharacterData($parser, $data){
- $pos = $this->depth_array[$this->depth - 1];
- $this->message[$pos]['cdata'] .= $data;
- }
-
- /**
- * serialize the schema
- *
- * @access public
- */
- function serializeSchema(){
-
- $schemaPrefix = $this->getPrefixFromNamespace($this->XMLSchemaVersion);
- $xml = '';
- // imports
- if (sizeof($this->imports) > 0) {
- foreach($this->imports as $ns => $list) {
- foreach ($list as $ii) {
- if ($ii['location'] != '') {
- $xml .= " <$schemaPrefix:import location=\"" . $ii['location'] . '" namespace="' . $ns . "\" />\n";
- } else {
- $xml .= " <$schemaPrefix:import namespace=\"" . $ns . "\" />\n";
- }
- }
- }
- }
- // complex types
- foreach($this->complexTypes as $typeName => $attrs){
- $contentStr = '';
- // serialize child elements
- if(isset($attrs['elements']) && (count($attrs['elements']) > 0)){
- foreach($attrs['elements'] as $element => $eParts){
- if(isset($eParts['ref'])){
- $contentStr .= " <$schemaPrefix:element ref=\"$element\"/>\n";
- } else {
- $contentStr .= " <$schemaPrefix:element name=\"$element\" type=\"" . $this->contractQName($eParts['type']) . "\"/>\n";
- }
- }
- }
- // attributes
- if(isset($attrs['attrs']) && (count($attrs['attrs']) >= 1)){
- foreach($attrs['attrs'] as $attr => $aParts){
- $contentStr .= " <$schemaPrefix:attribute ref=\"".$this->contractQName($aParts['ref']).'"';
- if(isset($aParts['http://schemas.xmlsoap.org/wsdl/:arrayType'])){
- $this->usedNamespaces['wsdl'] = $this->namespaces['wsdl'];
- $contentStr .= ' wsdl:arrayType="'.$this->contractQName($aParts['http://schemas.xmlsoap.org/wsdl/:arrayType']).'"';
- }
- $contentStr .= "/>\n";
- }
- }
- // if restriction
- if( isset($attrs['restrictionBase']) && $attrs['restrictionBase'] != ''){
- $contentStr = " <$schemaPrefix:restriction base=\"".$this->contractQName($attrs['restrictionBase'])."\">\n".$contentStr." </$schemaPrefix:restriction>\n";
- }
- // compositor obviates complex/simple content
- if(isset($attrs['compositor']) && ($attrs['compositor'] != '')){
- $contentStr = " <$schemaPrefix:$attrs[compositor]>\n".$contentStr." </$schemaPrefix:$attrs[compositor]>\n";
- }
- // complex or simple content
- elseif((isset($attrs['elements']) && count($attrs['elements']) > 0) || (isset($attrs['attrs']) && count($attrs['attrs']) > 0)){
- $contentStr = " <$schemaPrefix:complexContent>\n".$contentStr." </$schemaPrefix:complexContent>\n";
- }
- // finalize complex type
- if($contentStr != ''){
- $contentStr = " <$schemaPrefix:complexType name=\"$typeName\">\n".$contentStr." </$schemaPrefix:complexType>\n";
- } else {
- $contentStr = " <$schemaPrefix:complexType name=\"$typeName\"/>\n";
- }
- $xml .= $contentStr;
- }
- // simple types
- if(isset($this->simpleTypes) && count($this->simpleTypes) > 0){
- foreach($this->simpleTypes as $typeName => $attr){
- $xml .= " <$schemaPrefix:simpleType name=\"$typeName\">\n <restriction base=\"".$this->contractQName($eParts['type'])."\"/>\n </$schemaPrefix:simpleType>";
- }
- }
- // elements
- if(isset($this->elements) && count($this->elements) > 0){
- foreach($this->elements as $element => $eParts){
- $xml .= " <$schemaPrefix:element name=\"$element\" type=\"".$this->contractQName($eParts['type'])."\"/>\n";
- }
- }
- // attributes
- if(isset($this->attributes) && count($this->attributes) > 0){
- foreach($this->attributes as $attr => $aParts){
- $xml .= " <$schemaPrefix:attribute name=\"$attr\" type=\"".$this->contractQName($aParts['type'])."\"\n/>";
- }
- }
- // finish 'er up
- $el = "<$schemaPrefix:schema targetNamespace=\"$this->schemaTargetNamespace\"\n";
- foreach (array_diff($this->usedNamespaces, $this->enclosingNamespaces) as $nsp => $ns) {
- $el .= " xmlns:$nsp=\"$ns\"\n";
- }
- $xml = $el . ">\n".$xml."</$schemaPrefix:schema>\n";
- return $xml;
- }
-
- /**
- * adds debug data to the clas level debug string
- *
- * @param string $string debug data
- * @access private
- */
- function xdebug($string){
- $this->debug('<' . $this->schemaTargetNamespace . '> '.$string);
- }
-
- /**
- * get the PHP type of a user defined type in the schema
- * PHP type is kind of a misnomer since it actually returns 'struct' for assoc. arrays
- * returns false if no type exists, or not w/ the given namespace
- * else returns a string that is either a native php type, or 'struct'
- *
- * @param string $type, name of defined type
- * @param string $ns, namespace of type
- * @return mixed
- * @access public
- */
- function getPHPType($type,$ns){
- if(isset($this->typemap[$ns][$type])){
- //print "found type '$type' and ns $ns in typemap<br>";
- return $this->typemap[$ns][$type];
- } elseif(isset($this->complexTypes[$type])){
- //print "getting type '$type' and ns $ns from complexTypes array<br>";
- return $this->complexTypes[$type]['phpType'];
- }
- return false;
- }
-
- /**
- * returns an array of information about a given type
- * returns false if no type exists by the given name
- *
- * typeDef = array(
- * 'elements' => array(), // refs to elements array
- * 'restrictionBase' => '',
- * 'phpType' => '',
- * 'order' => '(sequence|all)',
- * 'attrs' => array() // refs to attributes array
- * )
- *
- * @param string
- * @return mixed
- * @access public
- */
- function getTypeDef($type){
- //$this->debug("in getTypeDef for type $type");
- if(isset($this->complexTypes[$type])){
- $this->xdebug("in getTypeDef, found complexType $type");
- return $this->complexTypes[$type];
- } elseif(isset($this->simpleTypes[$type])){
- $this->xdebug("in getTypeDef, found simpleType $type");
- if (!isset($this->simpleTypes[$type]['phpType'])) {
- // get info for type to tack onto the simple type
- // TODO: can this ever really apply (i.e. what is a simpleType really?)
- $uqType = substr($this->simpleTypes[$type]['type'], strrpos($this->simpleTypes[$type]['type'], ':') + 1);
- $ns = substr($this->simpleTypes[$type]['type'], 0, strrpos($this->simpleTypes[$type]['type'], ':'));
- $etype = $this->getTypeDef($uqType);
- if ($etype) {
- if (isset($etype['phpType'])) {
- $this->simpleTypes[$type]['phpType'] = $etype['phpType'];
- }
- if (isset($etype['elements'])) {
- $this->simpleTypes[$type]['elements'] = $etype['elements'];
- }
- }
- }
- return $this->simpleTypes[$type];
- } elseif(isset($this->elements[$type])){
- $this->xdebug("in getTypeDef, found element $type");
- if (!isset($this->elements[$type]['phpType'])) {
- // get info for type to tack onto the element
- $uqType = substr($this->elements[$type]['type'], strrpos($this->elements[$type]['type'], ':') + 1);
- $ns = substr($this->elements[$type]['type'], 0, strrpos($this->elements[$type]['type'], ':'));
- $etype = $this->getTypeDef($uqType);
- if ($etype) {
- if (isset($etype['phpType'])) {
- $this->elements[$type]['phpType'] = $etype['phpType'];
- }
- if (isset($etype['elements'])) {
- $this->elements[$type]['elements'] = $etype['elements'];
- }
- } elseif ($ns == 'http://www.w3.org/2001/XMLSchema') {
- $this->elements[$type]['phpType'] = 'scalar';
- }
- }
- return $this->elements[$type];
- } elseif(isset($this->attributes[$type])){
- $this->xdebug("in getTypeDef, found attribute $type");
- return $this->attributes[$type];
- }
- $this->xdebug("in getTypeDef, did not find $type");
- return false;
- }
-
- /**
- * returns a sample serialization of a given type, or false if no type by the given name
- *
- * @param string $type, name of type
- * @return mixed
- * @access public
- */
- function serializeTypeDef($type){
- //print "in sTD() for type $type<br>";
- if($typeDef = $this->getTypeDef($type)){
- $str .= '<'.$type;
- if(is_array($typeDef['attrs'])){
- foreach($attrs as $attName => $data){
- $str .= " $attName=\"{type = ".$data['type']."}\"";
- }
- }
- $str .= " xmlns=\"".$this->schema['targetNamespace']."\"";
- if(count($typeDef['elements']) > 0){
- $str .= ">";
- foreach($typeDef['elements'] as $element => $eData){
- $str .= $this->serializeTypeDef($element);
- }
- $str .= "</$type>";
- } elseif($typeDef['typeClass'] == 'element') {
- $str .= "></$type>";
- } else {
- $str .= "/>";
- }
- return $str;
- }
- return false;
- }
-
- /**
- * returns HTML form elements that allow a user
- * to enter values for creating an instance of the given type.
- *
- * @param string $name, name for type instance
- * @param string $type, name of type
- * @return string
- * @access public
- */
- function typeToForm($name,$type){
- // get typedef
- if($typeDef = $this->getTypeDef($type)){
- // if struct
- if($typeDef['phpType'] == 'struct'){
- $buffer .= '<table>';
- foreach($typeDef['elements'] as $child => $childDef){
- $buffer .= "
- <tr><td align='right'>$childDef[name] (type: ".$this->getLocalPart($childDef['type'])."):</td>
- <td><input type='text' name='parameters[".$name."][$childDef[name]]'></td></tr>";
- }
- $buffer .= '</table>';
- // if array
- } elseif($typeDef['phpType'] == 'array'){
- $buffer .= '<table>';
- for($i=0;$i < 3; $i++){
- $buffer .= "
- <tr><td align='right'>array item (type: $typeDef[arrayType]):</td>
- <td><input type='text' name='parameters[".$name."][]'></td></tr>";
- }
- $buffer .= '</table>';
- // if scalar
- } else {
- $buffer .= "<input type='text' name='parameters[$name]'>";
- }
- } else {
- $buffer .= "<input type='text' name='parameters[$name]'>";
- }
- return $buffer;
- }
-
- /**
- * adds a complex type to the schema
- *
- * example: array
- *
- * addType(
- * 'ArrayOfstring',
- * 'complexType',
- * 'array',
- * '',
- * 'SOAP-ENC:Array',
- * array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]'),
- * 'xsd:string'
- * );
- *
- * example: PHP associative array ( SOAP Struct )
- *
- * addType(
- * 'SOAPStruct',
- * 'complexType',
- * 'struct',
- * 'all',
- * array('myVar'=> array('name'=>'myVar','type'=>'string')
- * );
- *
- * @param name
- * @param typeClass (complexType|simpleType|attribute)
- * @param phpType: currently supported are array and struct (php assoc array)
- * @param compositor (all|sequence|choice)
- * @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
- * @param elements = array ( name = array(name=>'',type=>'') )
- * @param attrs = array(
- * array(
- * 'ref' => "http://schemas.xmlsoap.org/soap/encoding/:arrayType",
- * "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"
- * )
- * )
- * @param arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
- *
- */
- function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType=''){
- $this->complexTypes[$name] = array(
- 'name' => $name,
- 'typeClass' => $typeClass,
- 'phpType' => $phpType,
- 'compositor'=> $compositor,
- 'restrictionBase' => $restrictionBase,
- 'elements' => $elements,
- 'attrs' => $attrs,
- 'arrayType' => $arrayType
- );
-
- $this->xdebug("addComplexType $name: " . $this->varDump($this->complexTypes[$name]));
- }
-
- /**
- * adds a simple type to the schema
- *
- * @param name
- * @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
- * @param typeClass (simpleType)
- * @param phpType: (scalar)
- * @see xmlschema
- *
- */
- function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar') {
- $this->simpleTypes[$name] = array(
- 'name' => $name,
- 'typeClass' => $typeClass,
- 'phpType' => $phpType,
- 'type' => $restrictionBase
- );
-
- $this->xdebug("addSimpleType $name: " . $this->varDump($this->simpleTypes[$name]));
- }
-}
-
-
-
-?><?php
-
-
-
-/**
-* for creating serializable abstractions of native PHP types
-* NOTE: this is only really used when WSDL is not available.
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soapval extends nusoap_base {
- /**
- * constructor
- *
- * @param string $name optional name
- * @param string $type optional type name
- * @param mixed $value optional value
- * @param string $namespace optional namespace of value
- * @param string $type_namespace optional namespace of type
- * @param array $attributes associative array of attributes to add to element serialization
- * @access public
- */
- function soapval($name='soapval',$type=false,$value=-1,$element_ns=false,$type_ns=false,$attributes=false) {
- $this->name = $name;
- $this->value = $value;
- $this->type = $type;
- $this->element_ns = $element_ns;
- $this->type_ns = $type_ns;
- $this->attributes = $attributes;
- }
-
- /**
- * return serialized value
- *
- * @return string XML data
- * @access private
- */
- function serialize($use='encoded') {
- return $this->serialize_val($this->value,$this->name,$this->type,$this->element_ns,$this->type_ns,$this->attributes,$use);
- }
-
- /**
- * decodes a soapval object into a PHP native type
- *
- * @param object $soapval optional SOAPx4 soapval object, else uses self
- * @return mixed
- * @access public
- */
- function decode(){
- return $this->value;
- }
-}
-
-
-
-?><?php
-
-
-
-/**
-* transport class for sending/receiving data via HTTP and HTTPS
-* NOTE: PHP must be compiled with the CURL extension for HTTPS support
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soap_transport_http extends nusoap_base {
-
- var $url = '';
- var $uri = '';
- var $scheme = '';
- var $host = '';
- var $port = '';
- var $path = '';
- var $request_method = 'POST';
- var $protocol_version = '1.0';
- var $encoding = '';
- var $outgoing_headers = array();
- var $incoming_headers = array();
- var $outgoing_payload = '';
- var $incoming_payload = '';
- var $useSOAPAction = true;
- var $persistentConnection = false;
- var $ch = false; // cURL handle
- var $username;
- var $password;
-
- /**
- * constructor
- */
- function soap_transport_http($url){
- $this->url = $url;
-
- $u = parse_url($url);
- foreach($u as $k => $v){
- $this->debug("$k = $v");
- $this->$k = $v;
- }
-
- // add any GET params to path
- if(isset($u['query']) && $u['query'] != ''){
- $this->path .= '?' . $u['query'];
- }
-
- // set default port
- if(!isset($u['port'])){
- if($u['scheme'] == 'https'){
- $this->port = 443;
- } else {
- $this->port = 80;
- }
- }
-
- $this->uri = $this->path;
-
- // build headers
- ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
- $this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')';
- if (!isset($u['port'])) {
- $this->outgoing_headers['Host'] = $this->host;
- } else {
- $this->outgoing_headers['Host'] = $this->host.':'.$this->port;
- }
-
- if (isset($u['user']) && $u['user'] != '') {
- $this->setCredentials($u['user'], isset($u['pass']) ? $u['pass'] : '');
- }
- }
-
- function connect($connection_timeout=0,$response_timeout=30){
- // For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat like
- // "regular" socket.
- // TODO: disabled for now because OpenSSL must be *compiled* in (not just
- // loaded), and until PHP5 stream_get_wrappers is not available.
-// if ($this->scheme == 'https') {
-// if (version_compare(phpversion(), '4.3.0') >= 0) {
-// if (extension_loaded('openssl')) {
-// $this->scheme = 'ssl';
-// $this->debug('Using SSL over OpenSSL');
-// }
-// }
-// }
- $this->debug("connect connection_timeout $connection_timeout, response_timeout $response_timeout, scheme $this->scheme, host $this->host, port $this->port");
- if ($this->scheme == 'http' || $this->scheme == 'ssl') {
- // use persistent connection
- if($this->persistentConnection && isset($this->fp) && is_resource($this->fp)){
- if (!feof($this->fp)) {
- $this->debug('Re-use persistent connection');
- return true;
- }
- fclose($this->fp);
- $this->debug('Closed persistent connection at EOF');
- }
-
- // munge host if using OpenSSL
- if ($this->scheme == 'ssl') {
- $host = 'ssl://' . $this->host;
- } else {
- $host = $this->host;
- }
- $this->debug('calling fsockopen with host ' . $host);
-
- // open socket
- if($connection_timeout > 0){
- $this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout);
- } else {
- $this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str);
- }
-
- // test pointer
- if(!$this->fp) {
- $msg = 'Couldn\'t open socket connection to server ' . $this->url;
- if ($this->errno) {
- $msg .= ', Error ('.$this->errno.'): '.$this->error_str;
- } else {
- $msg .= ' prior to connect(). This is often a problem looking up the host name.';
- }
- $this->debug($msg);
- $this->setError($msg);
- return false;
- }
-
- // set response timeout
- socket_set_timeout( $this->fp, $response_timeout);
-
- $this->debug('socket connected');
- return true;
- } else if ($this->scheme == 'https') {
- if (!extension_loaded('curl')) {
- $this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
- return false;
- }
- $this->debug('connect using https');
- // init CURL
- $this->ch = curl_init();
- // set url
- $hostURL = ($this->port != '') ? "https://$this->host:$this->port" : "https://$this->host";
- // add path
- $hostURL .= $this->path;
- curl_setopt($this->ch, CURLOPT_URL, $hostURL);
- // ask for headers in the response output
- curl_setopt($this->ch, CURLOPT_HEADER, 1);
- // ask for the response output as the return value
- curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
- // encode
- // We manage this ourselves through headers and encoding
-// if(function_exists('gzuncompress')){
-// curl_setopt($this->ch, CURLOPT_ENCODING, 'deflate');
-// }
- // persistent connection
- if ($this->persistentConnection) {
- // The way we send data, we cannot use persistent connections, since
- // there will be some "junk" at the end of our request.
- //curl_setopt($this->ch, CURL_HTTP_VERSION_1_1, true);
- $this->persistentConnection = false;
- $this->outgoing_headers['Connection'] = 'close';
- }
- // set timeout (NOTE: cURL does not have separate connection and response timeouts)
- if ($connection_timeout != 0) {
- curl_setopt($this->ch, CURLOPT_TIMEOUT, $connection_timeout);
- }
-
- // recent versions of cURL turn on peer/host checking by default,
- // while PHP binaries are not compiled with a default location for the
- // CA cert bundle, so disable peer/host checking.
-//curl_setopt($this->ch, CURLOPT_CAINFO, 'f:\php-4.3.2-win32\extensions\curl-ca-bundle.crt');
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
-
- /*
- TODO: support client certificates (thanks Tobias Boes)
- curl_setopt($this->ch, CURLOPT_CAINFO, '$pathToPemFiles/rootca.pem');
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
- curl_setopt($this->ch, CURLOPT_SSLCERT, '$pathToPemFiles/mycert.pem');
- curl_setopt($this->ch, CURLOPT_SSLKEY, '$pathToPemFiles/mykey.pem');
- */
- $this->debug('cURL connection set up');
- return true;
- } else {
- $this->setError('Unknown scheme ' . $this->scheme);
- $this->debug('Unknown scheme ' . $this->scheme);
- return false;
- }
- }
-
- /**
- * send the SOAP message via HTTP
- *
- * @param string $data message data
- * @param integer $timeout set connection timeout in seconds
- * @param integer $response_timeout set response timeout in seconds
- * @return string data
- * @access public
- */
- function send($data, $timeout=0, $response_timeout=30) {
-
- $this->debug('entered send() with data of length: '.strlen($data));
-
- $this->tryagain = true;
- $tries = 0;
- while ($this->tryagain) {
- $this->tryagain = false;
- if ($tries++ < 2) {
- // make connnection
- if (!$this->connect($timeout, $response_timeout)){
- return false;
- }
-
- // send request
- if (!$this->sendRequest($data)){
- return false;
- }
-
- // get response
- $respdata = $this->getResponse();
- } else {
- $this->setError('Too many tries to get an OK response');
- }
- }
- $this->debug('end of send()');
- return $respdata;
- }
-
-
- /**
- * send the SOAP message via HTTPS 1.0 using CURL
- *
- * @param string $msg message data
- * @param integer $timeout set connection timeout in seconds
- * @param integer $response_timeout set response timeout in seconds
- * @return string data
- * @access public
- */
- function sendHTTPS($data, $timeout=0, $response_timeout=30) {
- return $this->send($data, $timeout, $response_timeout);
- }
-
- /**
- * if authenticating, set user credentials here
- *
- * @param string $username
- * @param string $password
- * @param string $authtype
- * @param array $digestRequest
- * @access public
- */
- function setCredentials($username, $password, $authtype = 'basic', $digestRequest = array()) {
- global $_SERVER;
-
- $this->debug("Set credentials for authtype $authtype");
- // cf. RFC 2617
- if ($authtype == 'basic') {
- $this->outgoing_headers['Authorization'] = 'Basic '.base64_encode($username.':'.$password);
- } elseif ($authtype == 'digest') {
- if (isset($digestRequest['nonce'])) {
- $digestRequest['nc'] = isset($digestRequest['nc']) ? $digestRequest['nc']++ : 1;
-
- // calculate the Digest hashes (calculate code based on digest implementation found at: http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDigestAuthenticationWithoutActiveDirectory.html)
-
- // A1 = unq(username-value) ":" unq(realm-value) ":" passwd
- $A1 = $username. ':' . $digestRequest['realm'] . ':' . $password;
-
- // H(A1) = MD5(A1)
- $HA1 = md5($A1);
-
- // A2 = Method ":" digest-uri-value
- $A2 = 'POST:' . $this->uri;
-
- // H(A2)
- $HA2 = md5($A2);
-
- // KD(secret, data) = H(concat(secret, ":", data))
- // if qop == auth:
- // request-digest = <"> < KD ( H(A1), unq(nonce-value)
- // ":" nc-value
- // ":" unq(cnonce-value)
- // ":" unq(qop-value)
- // ":" H(A2)
- // ) <">
- // if qop is missing,
- // request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
-
- $unhashedDigest = '';
- $nonce = isset($digestRequest['nonce']) ? $digestRequest['nonce'] : '';
- $cnonce = $nonce;
- if ($digestRequest['qop'] != '') {
- $unhashedDigest = $HA1 . ':' . $nonce . ':' . sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' . $HA2;
- } else {
- $unhashedDigest = $HA1 . ':' . $nonce . ':' . $HA2;
- }
-
- $hashedDigest = md5($unhashedDigest);
-
- $this->outgoing_headers['Authorization'] = 'Digest username="' . $username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' . $this->uri . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x", $digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' . $hashedDigest . '"';
- }
- }
- $this->username = $username;
- $this->password = $password;
- $this->authtype = $authtype;
- $this->digestRequest = $digestRequest;
-
- if (isset($this->outgoing_headers['Authorization'])) {
- $this->debug('Authorization header set: ' . substr($this->outgoing_headers['Authorization'], 0, 12) . '...');
- } else {
- $this->debug('Authorization header not set');
- }
- }
-
- /**
- * set the soapaction value
- *
- * @param string $soapaction
- * @access public
- */
- function setSOAPAction($soapaction) {
- $this->outgoing_headers['SOAPAction'] = '"' . $soapaction . '"';
- }
-
- /**
- * use http encoding
- *
- * @param string $enc encoding style. supported values: gzip, deflate, or both
- * @access public
- */
- function setEncoding($enc='gzip, deflate'){
- $this->protocol_version = '1.1';
- $this->outgoing_headers['Accept-Encoding'] = $enc;
- $this->outgoing_headers['Connection'] = 'close';
- $this->persistentConnection = false;
- set_magic_quotes_runtime(0);
- // deprecated
- $this->encoding = $enc;
- }
-
- /**
- * set proxy info here
- *
- * @param string $proxyhost
- * @param string $proxyport
- * @param string $proxyusername
- * @param string $proxypassword
- * @access public
- */
- function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
- $this->uri = $this->url;
- $this->host = $proxyhost;
- $this->port = $proxyport;
- if ($proxyusername != '' && $proxypassword != '') {
- $this->outgoing_headers['Proxy-Authorization'] = ' Basic '.base64_encode($proxyusername.':'.$proxypassword);
- }
- }
-
- /**
- * decode a string that is encoded w/ "chunked' transfer encoding
- * as defined in RFC2068 19.4.6
- *
- * @param string $buffer
- * @param string $lb
- * @returns string
- * @access public
- */
- function decodeChunked($buffer, $lb){
- // length := 0
- $length = 0;
- $new = '';
-
- // read chunk-size, chunk-extension (if any) and CRLF
- // get the position of the linebreak
- $chunkend = strpos($buffer, $lb);
- if ($chunkend == FALSE) {
- $this->debug('no linebreak found in decodeChunked');
- return $new;
- }
- $temp = substr($buffer,0,$chunkend);
- $chunk_size = hexdec( trim($temp) );
- $chunkstart = $chunkend + strlen($lb);
- // while (chunk-size > 0) {
- while ($chunk_size > 0) {
- $this->debug("chunkstart: $chunkstart chunk_size: $chunk_size");
- $chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);
-
- // Just in case we got a broken connection
- if ($chunkend == FALSE) {
- $chunk = substr($buffer,$chunkstart);
- // append chunk-data to entity-body
- $new .= $chunk;
- $length += strlen($chunk);
- break;
- }
-
- // read chunk-data and CRLF
- $chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
- // append chunk-data to entity-body
- $new .= $chunk;
- // length := length + chunk-size
- $length += strlen($chunk);
- // read chunk-size and CRLF
- $chunkstart = $chunkend + strlen($lb);
-
- $chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);
- if ($chunkend == FALSE) {
- break; //Just in case we got a broken connection
- }
- $temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
- $chunk_size = hexdec( trim($temp) );
- $chunkstart = $chunkend;
- }
- return $new;
- }
-
- /*
- * Writes payload, including HTTP headers, to $this->outgoing_payload.
- */
- function buildPayload($data) {
- // add content-length header
- $this->outgoing_headers['Content-Length'] = strlen($data);
-
- // start building outgoing payload:
- $this->outgoing_payload = "$this->request_method $this->uri HTTP/$this->protocol_version\r\n";
-
- // loop thru headers, serializing
- foreach($this->outgoing_headers as $k => $v){
- $this->outgoing_payload .= $k.': '.$v."\r\n";
- }
-
- // header/body separator
- $this->outgoing_payload .= "\r\n";
-
- // add data
- $this->outgoing_payload .= $data;
- }
-
- function sendRequest($data){
- // build payload
- $this->buildPayload($data);
-
- if ($this->scheme == 'http' || $this->scheme == 'ssl') {
- // send payload
- if(!fputs($this->fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
- $this->setError('couldn\'t write message data to socket');
- $this->debug('couldn\'t write message data to socket');
- return false;
- }
- $this->debug('wrote data to socket, length = ' . strlen($this->outgoing_payload));
- return true;
- } else if ($this->scheme == 'https') {
- // set payload
- // TODO: cURL does say this should only be the verb, and in fact it
- // turns out that the URI and HTTP version are appended to this, which
- // some servers refuse to work with
- //curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
- foreach($this->outgoing_headers as $k => $v){
- $curl_headers[] = "$k: $v";
- }
- curl_setopt($this->ch, CURLOPT_HTTPHEADER, $curl_headers);
- if ($this->request_method == "POST") {
- curl_setopt($this->ch, CURLOPT_POST, 1);
- curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
- } else {
- }
- $this->debug('set cURL payload');
- return true;
- }
- }
-
- function getResponse(){
- $this->incoming_payload = '';
-
- if ($this->scheme == 'http' || $this->scheme == 'ssl') {
- // loop until headers have been retrieved
- $data = '';
- while (!isset($lb)){
-
- // We might EOF during header read.
- if(feof($this->fp)) {
- $this->incoming_payload = $data;
- $this->debug('found no headers before EOF after length ' . strlen($data));
- $this->debug("received before EOF:\n" . $data);
- $this->setError('server failed to send headers');
- return false;
- }
-
- $tmp = fgets($this->fp, 256);
- $tmplen = strlen($tmp);
- $this->debug("read line of $tmplen bytes: " . trim($tmp));
-
- if ($tmplen == 0) {
- $this->incoming_payload = $data;
- $this->debug('socket read of headers timed out after length ' . strlen($data));
- $this->debug("read before timeout:\n" . $data);
- $this->setError('socket read of headers timed out');
- return false;
- }
-
- $data .= $tmp;
- $pos = strpos($data,"\r\n\r\n");
- if($pos > 1){
- $lb = "\r\n";
- } else {
- $pos = strpos($data,"\n\n");
- if($pos > 1){
- $lb = "\n";
- }
- }
- // remove 100 header
- if(isset($lb) && ereg('^HTTP/1.1 100',$data)){
- unset($lb);
- $data = '';
- }//
- }
- // store header data
- $this->incoming_payload .= $data;
- $this->debug('found end of headers after length ' . strlen($data));
- // process headers
- $header_data = trim(substr($data,0,$pos));
- $header_array = explode($lb,$header_data);
- $this->incoming_headers = array();
- foreach($header_array as $header_line){
- $arr = explode(':',$header_line, 2);
- if(count($arr) > 1){
- $header_name = strtolower(trim($arr[0]));
- $this->incoming_headers[$header_name] = trim($arr[1]);
- } else if (isset($header_name)) {
- $this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
- }
- }
-
- // loop until msg has been received
- if (isset($this->incoming_headers['content-length'])) {
- $content_length = $this->incoming_headers['content-length'];
- $chunked = false;
- $this->debug("want to read content of length $content_length");
- } else {
- $content_length = 2147483647;
- if (isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {
- $chunked = true;
- $this->debug("want to read chunked content");
- } else {
- $chunked = false;
- $this->debug("want to read content to EOF");
- }
- }
- $data = '';
- do {
- if ($chunked) {
- $tmp = fgets($this->fp, 256);
- $tmplen = strlen($tmp);
- $this->debug("read chunk line of $tmplen bytes");
- if ($tmplen == 0) {
- $this->incoming_payload = $data;
- $this->debug('socket read of chunk length timed out after length ' . strlen($data));
- $this->debug("read before timeout:\n" . $data);
- $this->setError('socket read of chunk length timed out');
- return false;
- }
- $content_length = hexdec(trim($tmp));
- $this->debug("chunk length $content_length");
- }
- $strlen = 0;
- while (($strlen < $content_length) && (!feof($this->fp))) {
- $readlen = min(8192, $content_length - $strlen);
- $tmp = fread($this->fp, $readlen);
- $tmplen = strlen($tmp);
- $this->debug("read buffer of $tmplen bytes");
- if (($tmplen == 0) && (!feof($this->fp))) {
- $this->incoming_payload = $data;
- $this->debug('socket read of body timed out after length ' . strlen($data));
- $this->debug("read before timeout:\n" . $data);
- $this->setError('socket read of body timed out');
- return false;
- }
- $strlen += $tmplen;
- $data .= $tmp;
- }
- if ($chunked && ($content_length > 0)) {
- $tmp = fgets($this->fp, 256);
- $tmplen = strlen($tmp);
- $this->debug("read chunk terminator of $tmplen bytes");
- if ($tmplen == 0) {
- $this->incoming_payload = $data;
- $this->debug('socket read of chunk terminator timed out after length ' . strlen($data));
- $this->debug("read before timeout:\n" . $data);
- $this->setError('socket read of chunk terminator timed out');
- return false;
- }
- }
- } while ($chunked && ($content_length > 0) && (!feof($this->fp)));
- if (feof($this->fp)) {
- $this->debug('read to EOF');
- }
- $this->debug('read body of length ' . strlen($data));
- $this->incoming_payload .= $data;
- $this->debug('received a total of '.strlen($this->incoming_payload).' bytes of data from server');
-
- // close filepointer
- if(
- (isset($this->incoming_headers['connection']) && strtolower($this->incoming_headers['connection']) == 'close') ||
- (! $this->persistentConnection) || feof($this->fp)){
- fclose($this->fp);
- $this->fp = false;
- $this->debug('closed socket');
- }
-
- // connection was closed unexpectedly
- if($this->incoming_payload == ''){
- $this->setError('no response from server');
- return false;
- }
-
- // decode transfer-encoding
-// if(isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){
-// if(!$data = $this->decodeChunked($data, $lb)){
-// $this->setError('Decoding of chunked data failed');
-// return false;
-// }
- //print "<pre>\nde-chunked:\n---------------\n$data\n\n---------------\n</pre>";
- // set decoded payload
-// $this->incoming_payload = $header_data.$lb.$lb.$data;
-// }
-
- } else if ($this->scheme == 'https') {
- // send and receive
- $this->debug('send and receive with cURL');
- $this->incoming_payload = curl_exec($this->ch);
- $data = $this->incoming_payload;
-
- $cErr = curl_error($this->ch);
- if ($cErr != '') {
- $err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';
- foreach(curl_getinfo($this->ch) as $k => $v){
- $err .= "$k: $v<br>";
- }
- $this->debug($err);
- $this->setError($err);
- curl_close($this->ch);
- return false;
- } else {
- //echo '<pre>';
- //var_dump(curl_getinfo($this->ch));
- //echo '</pre>';
- }
- // close curl
- $this->debug('No cURL error, closing cURL');
- curl_close($this->ch);
-
- // remove 100 header
- if (ereg('^HTTP/1.1 100',$data)) {
- if ($pos = strpos($data,"\r\n\r\n")) {
- $data = ltrim(substr($data,$pos));
- } elseif($pos = strpos($data,"\n\n") ) {
- $data = ltrim(substr($data,$pos));
- }
- }
-
- // separate content from HTTP headers
- if ($pos = strpos($data,"\r\n\r\n")) {
- $lb = "\r\n";
- } elseif( $pos = strpos($data,"\n\n")) {
- $lb = "\n";
- } else {
- $this->debug('no proper separation of headers and document');
- $this->setError('no proper separation of headers and document');
- return false;
- }
- $header_data = trim(substr($data,0,$pos));
- $header_array = explode($lb,$header_data);
- $data = ltrim(substr($data,$pos));
- $this->debug('found proper separation of headers and document');
- $this->debug('cleaned data, stringlen: '.strlen($data));
- // clean headers
- foreach ($header_array as $header_line) {
- $arr = explode(':',$header_line,2);
- if (count($arr) > 1) {
- $this->incoming_headers[strtolower(trim($arr[0]))] = trim($arr[1]);
- }
- }
- }
-
- // see if we need to resend the request with http digest authentication
- if (isset($this->incoming_headers['www-authenticate']) && strstr($header_array[0], '401 Unauthorized')) {
- $this->debug('Got 401 Unauthorized with WWW-Authenticate: ' . $this->incoming_headers['www-authenticate']);
- if (substr("Digest ", $this->incoming_headers['www-authenticate'])) {
- $this->debug('Server wants digest authentication');
- // remove "Digest " from our elements
- $digestString = str_replace('Digest ', '', $this->incoming_headers['www-authenticate']);
-
- // parse elements into array
- $digestElements = explode(',', $digestString);
- foreach ($digestElements as $val) {
- $tempElement = explode('=', trim($val));
- $digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]);
- }
-
- // should have (at least) qop, realm, nonce
- if (isset($digestRequest['nonce'])) {
- $this->setCredentials($this->username, $this->password, 'digest', $digestRequest);
- $this->tryagain = true;
- return false;
- }
- }
- $this->debug('HTTP authentication failed');
- $this->setError('HTTP authentication failed');
- return false;
- }
-
- // decode content-encoding
- if(isset($this->incoming_headers['content-encoding']) && $this->incoming_headers['content-encoding'] != ''){
- if(strtolower($this->incoming_headers['content-encoding']) == 'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){
- // if decoding works, use it. else assume data wasn't gzencoded
- if(function_exists('gzuncompress')){
- //$timer->setMarker('starting decoding of gzip/deflated content');
- if($this->incoming_headers['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data)){
- $data = $degzdata;
- } elseif($this->incoming_headers['content-encoding'] == 'gzip' && $degzdata = gzinflate(substr($data, 10))){ // do our best
- $data = $degzdata;
- } else {
- $this->setError('Errors occurred when trying to decode the data');
- }
- //$timer->setMarker('finished decoding of gzip/deflated content');
- //print "<xmp>\nde-inflated:\n---------------\n$data\n-------------\n</xmp>";
- // set decoded payload
- $this->incoming_payload = $header_data.$lb.$lb.$data;
- } else {
- $this->setError('The server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
- }
- }
- }
-
- if(strlen($data) == 0){
- $this->debug('no data after headers!');
- $this->setError('no data present after HTTP headers');
- return false;
- }
-
- return $data;
- }
-
- function setContentType($type, $charset = false) {
- $this->outgoing_headers['Content-Type'] = $type . ($charset ? '; charset=' . $charset : '');
- }
-
- function usePersistentConnection(){
- if (isset($this->outgoing_headers['Accept-Encoding'])) {
- return false;
- }
- $this->protocol_version = '1.1';
- $this->persistentConnection = true;
- $this->outgoing_headers['Connection'] = 'Keep-Alive';
- return true;
- }
-}
-
-?><?php
-
-
-
-/**
-*
-* soap_server allows the user to create a SOAP server
-* that is capable of receiving messages and returning responses
-*
-* NOTE: WSDL functionality is experimental
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soap_server extends nusoap_base {
- var $headers = array(); // HTTP headers of request
- var $request = ''; // HTTP request
- var $requestHeaders = ''; // SOAP headers from request (incomplete namespace resolution) (text)
- var $document = ''; // SOAP body request portion (incomplete namespace resolution) (text)
- var $requestSOAP = ''; // SOAP payload for request (text)
- var $methodURI = ''; // requested method namespace URI
- var $methodname = ''; // name of method requested
- var $methodparams = array(); // method parameters from request
- var $xml_encoding = ''; // character set encoding of incoming (request) messages
- var $SOAPAction = ''; // SOAP Action from request
-
- var $outgoing_headers = array();// HTTP headers of response
- var $response = ''; // HTTP response
- var $responseHeaders = ''; // SOAP headers for response (text)
- var $responseSOAP = ''; // SOAP payload for response (text)
- var $methodreturn = false; // method return to place in response
- var $methodreturnisliteralxml = false; // whether $methodreturn is a string of literal XML
- var $fault = false; // SOAP fault for response
- var $result = 'successful'; // text indication of result (for debugging)
-
- var $operations = array(); // assoc array of operations => opData
- var $wsdl = false; // wsdl instance
- var $externalWSDLURL = false; // URL for WSDL
- var $debug_flag = false; // whether to append debug to response as XML comment
-
- /**
- * constructor
- * the optional parameter is a path to a WSDL file that you'd like to bind the server instance to.
- *
- * @param mixed $wsdl file path or URL (string), or wsdl instance (object)
- * @access public
- */
- function soap_server($wsdl=false){
-
- // turn on debugging?
- global $debug;
- global $_REQUEST;
- global $_SERVER;
- global $HTTP_SERVER_VARS;
-
- if (isset($debug)) {
- $this->debug_flag = $debug;
- } else if (isset($_REQUEST['debug'])) {
- $this->debug_flag = $_REQUEST['debug'];
- } else if (isset($_SERVER['QUERY_STRING'])) {
- $qs = explode('&', $_SERVER['QUERY_STRING']);
- foreach ($qs as $v) {
- if (substr($v, 0, 6) == 'debug=') {
- $this->debug_flag = substr($v, 6);
- }
- }
- } else if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
- $qs = explode('&', $HTTP_SERVER_VARS['QUERY_STRING']);
- foreach ($qs as $v) {
- if (substr($v, 0, 6) == 'debug=') {
- $this->debug_flag = substr($v, 6);
- }
- }
- }
-
- // wsdl
- if($wsdl){
- if (is_object($wsdl) && is_a($wsdl, 'wsdl')) {
- $this->wsdl = $wsdl;
- $this->externalWSDLURL = $this->wsdl->wsdl;
- $this->debug('Use existing wsdl instance from ' . $this->externalWSDLURL);
- } else {
- $this->debug('Create wsdl from ' . $wsdl);
- $this->wsdl = new wsdl($wsdl);
- $this->externalWSDLURL = $wsdl;
- }
- $this->debug("wsdl...\n" . $this->wsdl->debug_str);
- $this->wsdl->debug_str = '';
- if($err = $this->wsdl->getError()){
- die('WSDL ERROR: '.$err);
- }
- }
- }
-
- /**
- * processes request and returns response
- *
- * @param string $data usually is the value of $HTTP_RAW_POST_DATA
- * @access public
- */
- function service($data){
- global $QUERY_STRING;
- if(isset($_SERVER['QUERY_STRING'])){
- $qs = $_SERVER['QUERY_STRING'];
- } elseif(isset($GLOBALS['QUERY_STRING'])){
- $qs = $GLOBALS['QUERY_STRING'];
- } elseif(isset($QUERY_STRING) && $QUERY_STRING != ''){
- $qs = $QUERY_STRING;
- }
-
- if(isset($qs) && ereg('wsdl', $qs) ){
- // This is a request for WSDL
- if($this->externalWSDLURL){
- if (strpos($this->externalWSDLURL,"://")!==false) { // assume URL
- header('Location: '.$this->externalWSDLURL);
- } else { // assume file
- header("Content-Type: text/xml\r\n");
- $fp = fopen($this->externalWSDLURL, 'r');
- fpassthru($fp);
- }
- } else {
- header("Content-Type: text/xml; charset=ISO-8859-1\r\n");
- print $this->wsdl->serialize();
- }
- } elseif($data == '' && $this->wsdl){
- // print web interface
- print $this->webDescription();
- } else {
- // handle the request
- $this->parse_request($data);
- if (! $this->fault) {
- $this->invoke_method();
- }
- if (! $this->fault) {
- $this->serialize_return();
- }
- $this->send_response();
- }
- }
-
- /**
- * parses HTTP request headers.
- *
- * The following fields are set by this function (when successful)
- *
- * headers
- * request
- * xml_encoding
- * SOAPAction
- *
- * @access private
- */
- function parse_http_headers() {
- global $HTTP_SERVER_VARS;
- global $_SERVER;
-
- $this->request = '';
- if(function_exists('getallheaders')){
- $this->headers = getallheaders();
- foreach($this->headers as $k=>$v){
- $this->request .= "$k: $v\r\n";
- $this->debug("$k: $v");
- }
- // get SOAPAction header
- if(isset($this->headers['SOAPAction'])){
- $this->SOAPAction = str_replace('"','',$this->headers['SOAPAction']);
- }
- // get the character encoding of the incoming request
- if(strpos($this->headers['Content-Type'],'=')){
- $enc = str_replace('"','',substr(strstr($this->headers["Content-Type"],'='),1));
- if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
- $this->xml_encoding = strtoupper($enc);
- } else {
- $this->xml_encoding = 'US-ASCII';
- }
- } else {
- // should be US-ASCII, but for XML, let's be pragmatic and admit UTF-8 is most common
- $this->xml_encoding = 'UTF-8';
- }
- } elseif(isset($_SERVER) && is_array($_SERVER)){
- foreach ($_SERVER as $k => $v) {
- if (substr($k, 0, 5) == 'HTTP_') {
- $k = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($k, 5)))));
- } else {
- $k = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $k))));
- }
- if ($k == 'Soapaction') {
- // get SOAPAction header
- $k = 'SOAPAction';
- $v = str_replace('"', '', $v);
- $v = str_replace('\\', '', $v);
- $this->SOAPAction = $v;
- } else if ($k == 'Content-Type') {
- // get the character encoding of the incoming request
- if (strpos($v, '=')) {
- $enc = substr(strstr($v, '='), 1);
- $enc = str_replace('"', '', $enc);
- $enc = str_replace('\\', '', $enc);
- if (eregi('^(ISO-8859-1|US-ASCII|UTF-8)$', $enc)) {
- $this->xml_encoding = strtoupper($enc);
- } else {
- $this->xml_encoding = 'US-ASCII';
- }
- } else {
- // should be US-ASCII, but for XML, let's be pragmatic and admit UTF-8 is most common
- $this->xml_encoding = 'UTF-8';
- }
- }
- $this->headers[$k] = $v;
- $this->request .= "$k: $v\r\n";
- $this->debug("$k: $v");
- }
- } elseif (is_array($HTTP_SERVER_VARS)) {
- foreach ($HTTP_SERVER_VARS as $k => $v) {
- if (substr($k, 0, 5) == 'HTTP_') {
- $k = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($k, 5)))));
- if ($k == 'Soapaction') {
- // get SOAPAction header
- $k = 'SOAPAction';
- $v = str_replace('"', '', $v);
- $v = str_replace('\\', '', $v);
- $this->SOAPAction = $v;
- } else if ($k == 'Content-Type') {
- // get the character encoding of the incoming request
- if (strpos($v, '=')) {
- $enc = substr(strstr($v, '='), 1);
- $enc = str_replace('"', '', $enc);
- $enc = str_replace('\\', '', $enc);
- if (eregi('^(ISO-8859-1|US-ASCII|UTF-8)$', $enc)) {
- $this->xml_encoding = strtoupper($enc);
- } else {
- $this->xml_encoding = 'US-ASCII';
- }
- } else {
- // should be US-ASCII, but for XML, let's be pragmatic and admit UTF-8 is most common
- $this->xml_encoding = 'UTF-8';
- }
- }
- $this->headers[$k] = $v;
- $this->request .= "$k: $v\r\n";
- $this->debug("$k: $v");
- }
- }
- }
- }
-
- /**
- * parses a request
- *
- * The following fields are set by this function (when successful)
- *
- * headers
- * request
- * xml_encoding
- * SOAPAction
- * request
- * requestSOAP
- * methodURI
- * methodname
- * methodparams
- * requestHeaders
- * document
- *
- * This sets the fault field on error
- *
- * @param string $data XML string
- * @access private
- */
- function parse_request($data='') {
- $this->debug('entering parse_request() on '.date('H:i Y-m-d'));
- $this->parse_http_headers();
- $this->debug('got character encoding: '.$this->xml_encoding);
- // uncompress if necessary
- if (isset($this->headers['Content-Encoding']) && $this->headers['Content-Encoding'] != '') {
- $this->debug('got content encoding: ' . $this->headers['Content-Encoding']);
- if ($this->headers['Content-Encoding'] == 'deflate' || $this->headers['Content-Encoding'] == 'gzip') {
- // if decoding works, use it. else assume data wasn't gzencoded
- if (function_exists('gzuncompress')) {
- if ($this->headers['Content-Encoding'] == 'deflate' && $degzdata = @gzuncompress($data)) {
- $data = $degzdata;
- } elseif ($this->headers['Content-Encoding'] == 'gzip' && $degzdata = gzinflate(substr($data, 10))) {
- $data = $degzdata;
- } else {
- $this->fault('Server', 'Errors occurred when trying to decode the data');
- return;
- }
- } else {
- $this->fault('Server', 'This Server does not support compressed data');
- return;
- }
- }
- }
- $this->request .= "\r\n".$data;
- $this->requestSOAP = $data;
- // parse response, get soap parser obj
- $parser = new soap_parser($data,$this->xml_encoding);
- // parser debug
- $this->debug("parser debug: \n".$parser->debug_str);
- // if fault occurred during message parsing
- if($err = $parser->getError()){
- $this->result = 'fault: error in msg parsing: '.$err;
- $this->fault('Server',"error in msg parsing:\n".$err);
- // else successfully parsed request into soapval object
- } else {
- // get/set methodname
- $this->methodURI = $parser->root_struct_namespace;
- $this->methodname = $parser->root_struct_name;
- $this->debug('method name: '.$this->methodname);
- $this->debug('calling parser->get_response()');
- $this->methodparams = $parser->get_response();
- // get SOAP headers
- $this->requestHeaders = $parser->getHeaders();
- // add document for doclit support
- $this->document = $parser->document;
- }
- $this->debug('leaving parse_request() on '.date('H:i Y-m-d'));
- }
-
- /**
- * invokes a PHP function for the requested SOAP method
- *
- * The following fields are set by this function (when successful)
- *
- * methodreturn
- *
- * Note that the PHP function that is called may also set the following
- * fields to affect the response sent to the client
- *
- * responseHeaders
- * outgoing_headers
- *
- * This sets the fault field on error
- *
- * @access private
- */
- function invoke_method() {
- $this->debug('entering invoke_method');
- // does method exist?
- if(!function_exists($this->methodname)){
- // "method not found" fault here
- $this->debug("method '$this->methodname' not found!");
- $this->result = 'fault: method not found';
- $this->fault('Server',"method '$this->methodname' not defined in service");
- return;
- }
- if($this->wsdl){
- if(!$this->opData = $this->wsdl->getOperationData($this->methodname)){
- //if(
- $this->fault('Server',"Operation '$this->methodname' is not defined in the WSDL for this service");
- return;
- }
- $this->debug('opData is ' . $this->varDump($this->opData));
- }
- $this->debug("method '$this->methodname' exists");
- // evaluate message, getting back parameters
- // verify that request parameters match the method's signature
- if(! $this->verify_method($this->methodname,$this->methodparams)){
- // debug
- $this->debug('ERROR: request not verified against method signature');
- $this->result = 'fault: request failed validation against method signature';
- // return fault
- $this->fault('Server',"Operation '$this->methodname' not defined in service.");
- return;
- }
-
- // if there are parameters to pass
- $this->debug('params var dump '.$this->varDump($this->methodparams));
- if($this->methodparams){
- $this->debug("calling '$this->methodname' with params");
- if (! function_exists('call_user_func_array')) {
- $this->debug('calling method using eval()');
- $funcCall = $this->methodname.'(';
- foreach($this->methodparams as $param) {
- $funcCall .= "\"$param\",";
- }
- $funcCall = substr($funcCall, 0, -1).')';
- $this->debug('function call:<br>'.$funcCall);
- @eval("\$this->methodreturn = $funcCall;");
- } else {
- $this->debug('calling method using call_user_func_array()');
- $this->methodreturn = call_user_func_array("$this->methodname",$this->methodparams);
- }
- } else {
- // call method w/ no parameters
- $this->debug("calling $this->methodname w/ no params");
- $m = $this->methodname;
- $this->methodreturn = @$m();
- }
- $this->debug('methodreturn var dump'.$this->varDump($this->methodreturn));
- $this->debug("leaving invoke_method: called method $this->methodname, received $this->methodreturn of type ".gettype($this->methodreturn));
- }
-
- /**
- * serializes the return value from a PHP function into a full SOAP Envelope
- *
- * The following fields are set by this function (when successful)
- *
- * responseSOAP
- *
- * This sets the fault field on error
- *
- * @access private
- */
- function serialize_return() {
- $this->debug("Entering serialize_return");
- // if we got nothing back. this might be ok (echoVoid)
- if(isset($this->methodreturn) && ($this->methodreturn != '' || is_bool($this->methodreturn))) {
- // if fault
- if(get_class($this->methodreturn) == 'soap_fault'){
- $this->debug('got a fault object from method');
- $this->fault = $this->methodreturn;
- return;
- } elseif ($this->methodreturnisliteralxml) {
- $return_val = $this->methodreturn;
- // returned value(s)
- } else {
- $this->debug('got a(n) '.gettype($this->methodreturn).' from method');
- $this->debug('serializing return value');
- if($this->wsdl){
- // weak attempt at supporting multiple output params
- if(sizeof($this->opData['output']['parts']) > 1){
- $opParams = $this->methodreturn;
- } else {
- // TODO: is this really necessary?
- $opParams = array($this->methodreturn);
- }
- $return_val = $this->wsdl->serializeRPCParameters($this->methodname,'output',$opParams);
- if($errstr = $this->wsdl->getError()){
- $this->debug('got wsdl error: '.$errstr);
- $this->fault('Server', 'got wsdl error: '.$errstr);
- return;
- }
- } else {
- $return_val = $this->serialize_val($this->methodreturn, 'return');
- }
- }
- $this->debug('return val: '.$this->varDump($return_val));
- } else {
- $return_val = '';
- $this->debug('got no response from method');
- }
- $this->debug('serializing response');
- if ($this->wsdl) {
- if ($this->opData['style'] == 'rpc') {
- $payload = '<ns1:'.$this->methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.$this->methodname."Response>";
- } else {
- $payload = $return_val;
- }
- } else {
- $payload = '<ns1:'.$this->methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.$this->methodname."Response>";
- }
- $this->result = 'successful';
- if($this->wsdl){
- //if($this->debug_flag){
- $this->debug("WSDL debug data:\n".$this->wsdl->debug_str);
- // }
- // Added: In case we use a WSDL, return a serialized env. WITH the usedNamespaces.
- $this->responseSOAP = $this->serializeEnvelope($payload,$this->responseHeaders,$this->wsdl->usedNamespaces,$this->opData['style']);
- } else {
- $this->responseSOAP = $this->serializeEnvelope($payload,$this->responseHeaders);
- }
- $this->debug("Leaving serialize_return");
- }
-
- /**
- * sends an HTTP response
- *
- * The following fields are set by this function (when successful)
- *
- * outgoing_headers
- * response
- *
- * @access private
- */
- function send_response() {
- $this->debug('Enter send_response');
- if ($this->fault) {
- $payload = $this->fault->serialize();
- $this->outgoing_headers[] = "HTTP/1.0 500 Internal Server Error";
- $this->outgoing_headers[] = "Status: 500 Internal Server Error";
- } else {
- $payload = $this->responseSOAP;
- // Some combinations of PHP+Web server allow the Status
- // to come through as a header. Since OK is the default
- // just do nothing.
- // $this->outgoing_headers[] = "HTTP/1.0 200 OK";
- // $this->outgoing_headers[] = "Status: 200 OK";
- }
- // add debug data if in debug mode
- if(isset($this->debug_flag) && $this->debug_flag){
- while (strpos($this->debug_str, '--')) {
- $this->debug_str = str_replace('--', '- -', $this->debug_str);
- }
- $payload .= "<!--\n" . $this->debug_str . "\n-->";
- }
- $this->outgoing_headers[] = "Server: $this->title Server v$this->version";
- ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
- $this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this->version (".$rev[1].")";
- // Let the Web server decide about this
- //$this->outgoing_headers[] = "Connection: Close\r\n";
- $this->outgoing_headers[] = "Content-Type: text/xml; charset=$this->soap_defencoding";
- //begin code to compress payload - by John
- if (strlen($payload) > 1024 && isset($this->headers) && isset($this->headers['Accept-Encoding'])) {
- if (strstr($this->headers['Accept-Encoding'], 'deflate')) {
- if (function_exists('gzcompress')) {
- if (isset($this->debug_flag) && $this->debug_flag) {
- $payload .= "<!-- Content being deflated -->";
- }
- $this->outgoing_headers[] = "Content-Encoding: deflate";
- $payload = gzcompress($payload);
- } else {
- if (isset($this->debug_flag) && $this->debug_flag) {
- $payload .= "<!-- Content will not be deflated: no gzcompress -->";
- }
- }
- } else if (strstr($this->headers['Accept-Encoding'], 'gzip')) {
- if (function_exists('gzencode')) {
- if (isset($this->debug_flag) && $this->debug_flag) {
- $payload .= "<!-- Content being gzipped -->";
- }
- $this->outgoing_headers[] = "Content-Encoding: gzip";
- $payload = gzencode($payload);
- } else {
- if (isset($this->debug_flag) && $this->debug_flag) {
- $payload .= "<!-- Content will not be gzipped: no gzencode -->";
- }
- }
- }
- }
- //end code
- $this->outgoing_headers[] = "Content-Length: ".strlen($payload);
- reset($this->outgoing_headers);
- foreach($this->outgoing_headers as $hdr){
- header($hdr, false);
- }
- $this->response = join("\r\n",$this->outgoing_headers)."\r\n".$payload;
- print $payload;
- }
-
- /**
- * takes the value that was created by parsing the request
- * and compares to the method's signature, if available.
- *
- * @param mixed
- * @return boolean
- * @access private
- */
- function verify_method($operation,$request){
- if(isset($this->wsdl) && is_object($this->wsdl)){
- if($this->wsdl->getOperationData($operation)){
- return true;
- }
- } elseif(isset($this->operations[$operation])){
- return true;
- }
- return false;
- }
-
- /**
- * add a method to the dispatch map
- *
- * @param string $methodname
- * @param string $in array of input values
- * @param string $out array of output values
- * @access public
- */
- function add_to_map($methodname,$in,$out){
- $this->operations[$methodname] = array('name' => $methodname,'in' => $in,'out' => $out);
- }
-
- /**
- * register a service with the server
- *
- * @param string $methodname
- * @param string $in assoc array of input values: key = param name, value = param type
- * @param string $out assoc array of output values: key = param name, value = param type
- * @param string $namespace
- * @param string $soapaction
- * @param string $style optional (rpc|document)
- * @param string $use optional (encoded|literal)
- * @param string $documentation optional Description to include in WSDL
- * @access public
- */
- function register($name,$in=false,$out=false,$namespace=false,$soapaction=false,$style=false,$use=false,$documentation=''){
- if($this->externalWSDLURL){
- die('You cannot bind to an external WSDL file, and register methods outside of it! Please choose either WSDL or no WSDL.');
- }
- if(false == $in) {
- }
- if(false == $out) {
- }
- if(false == $namespace) {
- }
- if(false == $soapaction) {
- $SERVER_NAME = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $GLOBALS['SERVER_NAME'];
- $SCRIPT_NAME = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $GLOBALS['SCRIPT_NAME'];
- $soapaction = "http://$SERVER_NAME$SCRIPT_NAME/$name";
- }
- if(false == $style) {
- $style = "rpc";
- }
- if(false == $use) {
- $use = "encoded";
- }
-
- $this->operations[$name] = array(
- 'name' => $name,
- 'in' => $in,
- 'out' => $out,
- 'namespace' => $namespace,
- 'soapaction' => $soapaction,
- 'style' => $style);
- if($this->wsdl){
- $this->wsdl->addOperation($name,$in,$out,$namespace,$soapaction,$style,$use,$documentation);
- }
- return true;
- }
-
- /**
- * create a fault. this also acts as a flag to the server that a fault has occured.
- *
- * @param string faultcode
- * @param string faultstring
- * @param string faultactor
- * @param string faultdetail
- * @access public
- */
- function fault($faultcode,$faultstring,$faultactor='',$faultdetail=''){
- $this->fault = new soap_fault($faultcode,$faultactor,$faultstring,$faultdetail);
- }
-
- /**
- * prints html description of services
- *
- * @access private
- */
- function webDescription(){
- $b = '
- <html><head><title>NuSOAP: '.$this->wsdl->serviceName.'</title>
- <style type="text/css">
- body { font-family: arial; color: #000000; background-color: #ffffff; margin: 0px 0px 0px 0px; }
- p { font-family: arial; color: #000000; margin-top: 0px; margin-bottom: 12px; }
- pre { background-color: silver; padding: 5px; font-family: Courier New; font-size: x-small; color: #000000;}
- ul { margin-top: 10px; margin-left: 20px; }
- li { list-style-type: none; margin-top: 10px; color: #000000; }
- .content{
- margin-left: 0px; padding-bottom: 2em; }
- .nav {
- padding-top: 10px; padding-bottom: 10px; padding-left: 15px; font-size: .70em;
- margin-top: 10px; margin-left: 0px; color: #000000;
- background-color: #ccccff; width: 20%; margin-left: 20px; margin-top: 20px; }
- .title {
- font-family: arial; font-size: 26px; color: #ffffff;
- background-color: #999999; width: 105%; margin-left: 0px;
- padding-top: 10px; padding-bottom: 10px; padding-left: 15px;}
- .hidden {
- position: absolute; visibility: hidden; z-index: 200; left: 250px; top: 100px;
- font-family: arial; overflow: hidden; width: 600;
- padding: 20px; font-size: 10px; background-color: #999999;
- layer-background-color:#FFFFFF; }
- a,a:active { color: charcoal; font-weight: bold; }
- a:visited { color: #666666; font-weight: bold; }
- a:hover { color: cc3300; font-weight: bold; }
- </style>
- <script language="JavaScript" type="text/javascript">
- <!--
- // POP-UP CAPTIONS...
- function lib_bwcheck(){ //Browsercheck (needed)
- this.ver=navigator.appVersion
- this.agent=navigator.userAgent
- this.dom=document.getElementById?1:0
- this.opera5=this.agent.indexOf("Opera 5")>-1
- this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
- this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
- this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
- this.ie=this.ie4||this.ie5||this.ie6
- this.mac=this.agent.indexOf("Mac")>-1
- this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
- this.ns4=(document.layers && !this.dom)?1:0;
- this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
- return this
- }
- var bw = new lib_bwcheck()
- //Makes crossbrowser object.
- function makeObj(obj){
- this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?document.layers[obj]:0;
- if(!this.evnt) return false
- this.css=bw.dom||bw.ie4?this.evnt.style:bw.ns4?this.evnt:0;
- this.wref=bw.dom||bw.ie4?this.evnt:bw.ns4?this.css.document:0;
- this.writeIt=b_writeIt;
- return this
- }
- // A unit of measure that will be added when setting the position of a layer.
- //var px = bw.ns4||window.opera?"":"px";
- function b_writeIt(text){
- if (bw.ns4){this.wref.write(text);this.wref.close()}
- else this.wref.innerHTML = text
- }
- //Shows the messages
- var oDesc;
- function popup(divid){
- if(oDesc = new makeObj(divid)){
- oDesc.css.visibility = "visible"
- }
- }
- function popout(){ // Hides message
- if(oDesc) oDesc.css.visibility = "hidden"
- }
- //-->
- </script>
- </head>
- <body>
- <div class=content>
- <br><br>
- <div class=title>'.$this->wsdl->serviceName.'</div>
- <div class=nav>
- <p>View the <a href="'.(isset($GLOBALS['PHP_SELF']) ? $GLOBALS['PHP_SELF'] : $_SERVER['PHP_SELF']).'?wsdl">WSDL</a> for the service.
- Click on an operation name to view it&apos;s details.</p>
- <ul>';
- foreach($this->wsdl->getOperations() as $op => $data){
- $b .= "<li><a href='#' onclick=\"popup('$op')\">$op</a></li>";
- // create hidden div
- $b .= "<div id='$op' class='hidden'>
- <a href='#' onclick='popout()'><font color='#ffffff'>Close</font></a><br><br>";
- foreach($data as $donnie => $marie){ // loop through opdata
- if($donnie == 'input' || $donnie == 'output'){ // show input/output data
- $b .= "<font color='white'>".ucfirst($donnie).':</font><br>';
- foreach($marie as $captain => $tenille){ // loop through data
- if($captain == 'parts'){ // loop thru parts
- $b .= "&nbsp;&nbsp;$captain:<br>";
- //if(is_array($tenille)){
- foreach($tenille as $joanie => $chachi){
- $b .= "&nbsp;&nbsp;&nbsp;&nbsp;$joanie: $chachi<br>";
- }
- //}
- } else {
- $b .= "&nbsp;&nbsp;$captain: $tenille<br>";
- }
- }
- } else {
- $b .= "<font color='white'>".ucfirst($donnie).":</font> $marie<br>";
- }
- }
- $b .= '</div>';
- }
- $b .= '
- <ul>
- </div>
- </div></body></html>';
- return $b;
- }
-
- /**
- * sets up wsdl object
- * this acts as a flag to enable internal WSDL generation
- *
- * @param string $serviceName, name of the service
- * @param string $namespace optional tns namespace
- * @param string $endpoint optional URL of service endpoint
- * @param string $style optional (rpc|document) WSDL style (also specified by operation)
- * @param string $transport optional SOAP transport
- * @param string $schemaTargetNamespace optional targetNamespace for service schema
- */
- function configureWSDL($serviceName,$namespace = false,$endpoint = false,$style='rpc', $transport = 'http://schemas.xmlsoap.org/soap/http', $schemaTargetNamespace = false)
- {
- $SERVER_NAME = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $GLOBALS['SERVER_NAME'];
- $SERVER_PORT = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : $GLOBALS['SERVER_PORT'];
- if ($SERVER_PORT == 80) {
- $SERVER_PORT = '';
- } else {
- $SERVER_PORT = ':' . $SERVER_PORT;
- }
- $SCRIPT_NAME = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $GLOBALS['SCRIPT_NAME'];
- if(false == $namespace) {
- $namespace = "http://$SERVER_NAME/soap/$serviceName";
- }
-
- if(false == $endpoint) {
- if (isset($_SERVER['HTTPS'])) {
- $HTTPS = $_SERVER['HTTPS'];
- } elseif (isset($GLOBALS['HTTPS'])) {
- $HTTPS = $GLOBALS['HTTPS'];
- } else {
- $HTTPS = '0';
- }
- if ($HTTPS == '1' || $HTTPS == 'on') {
- $SCHEME = 'https';
- } else {
- $SCHEME = 'http';
- }
- $endpoint = "$SCHEME://$SERVER_NAME$SERVER_PORT$SCRIPT_NAME";
- }
-
- if(false == $schemaTargetNamespace) {
- $schemaTargetNamespace = $namespace;
- }
-
- $this->wsdl = new wsdl;
- $this->wsdl->serviceName = $serviceName;
- $this->wsdl->endpoint = $endpoint;
- $this->wsdl->namespaces['tns'] = $namespace;
- $this->wsdl->namespaces['soap'] = 'http://schemas.xmlsoap.org/wsdl/soap/';
- $this->wsdl->namespaces['wsdl'] = 'http://schemas.xmlsoap.org/wsdl/';
- if ($schemaTargetNamespace != $namespace) {
- $this->wsdl->namespaces['types'] = $schemaTargetNamespace;
- }
- $this->wsdl->schemas[$schemaTargetNamespace][0] = new xmlschema('', '', $this->wsdl->namespaces);
- $this->wsdl->schemas[$schemaTargetNamespace][0]->schemaTargetNamespace = $schemaTargetNamespace;
- $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/soap/encoding/'][0] = array('location' => '', 'loaded' => true);
- $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/wsdl/'][0] = array('location' => '', 'loaded' => true);
- $this->wsdl->bindings[$serviceName.'Binding'] = array(
- 'name'=>$serviceName.'Binding',
- 'style'=>$style,
- 'transport'=>$transport,
- 'portType'=>$serviceName.'PortType');
- $this->wsdl->ports[$serviceName.'Port'] = array(
- 'binding'=>$serviceName.'Binding',
- 'location'=>$endpoint,
- 'bindingType'=>'http://schemas.xmlsoap.org/wsdl/soap/');
- }
-}
-
-
-
-?><?php
-
-
-
-/**
-* parses a WSDL file, allows access to it's data, other utility methods
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class wsdl extends nusoap_base {
- // URL or filename of the root of this WSDL
- var $wsdl;
- // define internal arrays of bindings, ports, operations, messages, etc.
- var $schemas = array();
- var $currentSchema;
- var $message = array();
- var $complexTypes = array();
- var $messages = array();
- var $currentMessage;
- var $currentOperation;
- var $portTypes = array();
- var $currentPortType;
- var $bindings = array();
- var $currentBinding;
- var $ports = array();
- var $currentPort;
- var $opData = array();
- var $status = '';
- var $documentation = false;
- var $endpoint = '';
- // array of wsdl docs to import
- var $import = array();
- // parser vars
- var $parser;
- var $position = 0;
- var $depth = 0;
- var $depth_array = array();
- // for getting wsdl
- var $proxyhost = '';
- var $proxyport = '';
- var $proxyusername = '';
- var $proxypassword = '';
- var $timeout = 0;
- var $response_timeout = 30;
-
- /**
- * constructor
- *
- * @param string $wsdl WSDL document URL
- * @param string $proxyhost
- * @param string $proxyport
- * @param string $proxyusername
- * @param string $proxypassword
- * @param integer $timeout set the connection timeout
- * @param integer $response_timeout set the response timeout
- * @access public
- */
- function wsdl($wsdl = '',$proxyhost=false,$proxyport=false,$proxyusername=false,$proxypassword=false,$timeout=0,$response_timeout=30){
- $this->wsdl = $wsdl;
- $this->proxyhost = $proxyhost;
- $this->proxyport = $proxyport;
- $this->proxyusername = $proxyusername;
- $this->proxypassword = $proxypassword;
- $this->timeout = $timeout;
- $this->response_timeout = $response_timeout;
-
- // parse wsdl file
- if ($wsdl != "") {
- $this->debug('initial wsdl URL: ' . $wsdl);
- $this->parseWSDL($wsdl);
- }
- // imports
- // TODO: handle imports more properly, grabbing them in-line and nesting them
- $imported_urls = array();
- $imported = 1;
- while ($imported > 0) {
- $imported = 0;
- // Schema imports
- foreach ($this->schemas as $ns => $list) {
- foreach ($list as $xs) {
- $wsdlparts = parse_url($this->wsdl); // this is bogusly simple!
- foreach ($xs->imports as $ns2 => $list2) {
- for ($ii = 0; $ii < count($list2); $ii++) {
- if (! $list2[$ii]['loaded']) {
- $this->schemas[$ns]->imports[$ns2][$ii]['loaded'] = true;
- $url = $list2[$ii]['location'];
- if ($url != '') {
- $urlparts = parse_url($url);
- if (!isset($urlparts['host'])) {
- $url = $wsdlparts['scheme'] . '://' . $wsdlparts['host'] .
- substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];
- }
- if (! in_array($url, $imported_urls)) {
- $this->parseWSDL($url);
- $imported++;
- $imported_urls[] = $url;
- }
- } else {
- $this->debug("Unexpected scenario: empty URL for unloaded import");
- }
- }
- }
- }
- }
- }
- // WSDL imports
- $wsdlparts = parse_url($this->wsdl); // this is bogusly simple!
- foreach ($this->import as $ns => $list) {
- for ($ii = 0; $ii < count($list); $ii++) {
- if (! $list[$ii]['loaded']) {
- $this->import[$ns][$ii]['loaded'] = true;
- $url = $list[$ii]['location'];
- if ($url != '') {
- $urlparts = parse_url($url);
- if (!isset($urlparts['host'])) {
- $url = $wsdlparts['scheme'] . '://' . $wsdlparts['host'] .
- substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];
- }
- if (! in_array($url, $imported_urls)) {
- $this->parseWSDL($url);
- $imported++;
- $imported_urls[] = $url;
- }
- } else {
- $this->debug("Unexpected scenario: empty URL for unloaded import");
- }
- }
- }
- }
- }
- // add new data to operation data
- foreach($this->bindings as $binding => $bindingData) {
- if (isset($bindingData['operations']) && is_array($bindingData['operations'])) {
- foreach($bindingData['operations'] as $operation => $data) {
- $this->debug('post-parse data gathering for ' . $operation);
- $this->bindings[$binding]['operations'][$operation]['input'] =
- isset($this->bindings[$binding]['operations'][$operation]['input']) ?
- array_merge($this->bindings[$binding]['operations'][$operation]['input'], $this->portTypes[ $bindingData['portType'] ][$operation]['input']) :
- $this->portTypes[ $bindingData['portType'] ][$operation]['input'];
- $this->bindings[$binding]['operations'][$operation]['output'] =
- isset($this->bindings[$binding]['operations'][$operation]['output']) ?
- array_merge($this->bindings[$binding]['operations'][$operation]['output'], $this->portTypes[ $bindingData['portType'] ][$operation]['output']) :
- $this->portTypes[ $bindingData['portType'] ][$operation]['output'];
- if(isset($this->messages[ $this->bindings[$binding]['operations'][$operation]['input']['message'] ])){
- $this->bindings[$binding]['operations'][$operation]['input']['parts'] = $this->messages[ $this->bindings[$binding]['operations'][$operation]['input']['message'] ];
- }
- if(isset($this->messages[ $this->bindings[$binding]['operations'][$operation]['output']['message'] ])){
- $this->bindings[$binding]['operations'][$operation]['output']['parts'] = $this->messages[ $this->bindings[$binding]['operations'][$operation]['output']['message'] ];
- }
- if (isset($bindingData['style'])) {
- $this->bindings[$binding]['operations'][$operation]['style'] = $bindingData['style'];
- }
- $this->bindings[$binding]['operations'][$operation]['transport'] = isset($bindingData['transport']) ? $bindingData['transport'] : '';
- $this->bindings[$binding]['operations'][$operation]['documentation'] = isset($this->portTypes[ $bindingData['portType'] ][$operation]['documentation']) ? $this->portTypes[ $bindingData['portType'] ][$operation]['documentation'] : '';
- $this->bindings[$binding]['operations'][$operation]['endpoint'] = isset($bindingData['endpoint']) ? $bindingData['endpoint'] : '';
- }
- }
- }
- }
-
- /**
- * parses the wsdl document
- *
- * @param string $wsdl path or URL
- * @access private
- */
- function parseWSDL($wsdl = '')
- {
- if ($wsdl == '') {
- $this->debug('no wsdl passed to parseWSDL()!!');
- $this->setError('no wsdl passed to parseWSDL()!!');
- return false;
- }
-
- // parse $wsdl for url format
- $wsdl_props = parse_url($wsdl);
-
- if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'http' || $wsdl_props['scheme'] == 'https')) {
- $this->debug('getting WSDL http(s) URL ' . $wsdl);
- // get wsdl
- $tr = new soap_transport_http($wsdl);
- $tr->request_method = 'GET';
- $tr->useSOAPAction = false;
- if($this->proxyhost && $this->proxyport){
- $tr->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
- }
- if (isset($wsdl_props['user'])) {
- $tr->setCredentials($wsdl_props['user'],$wsdl_props['pass']);
- }
- $wsdl_string = $tr->send('', $this->timeout, $this->response_timeout);
- //$this->debug("WSDL request\n" . $tr->outgoing_payload);
- //$this->debug("WSDL response\n" . $tr->incoming_payload);
- $this->debug("transport debug data...\n" . $tr->debug_str);
- // catch errors
- if($err = $tr->getError() ){
- $errstr = 'HTTP ERROR: '.$err;
- $this->debug($errstr);
- $this->setError($errstr);
- unset($tr);
- return false;
- }
- unset($tr);
- } else {
- // $wsdl is not http(s), so treat it as a file URL or plain file path
- if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'file') && isset($wsdl_props['path'])) {
- $path = isset($wsdl_props['host']) ? ($wsdl_props['host'] . ':' . $wsdl_props['path']) : $wsdl_props['path'];
- } else {
- $path = $wsdl;
- }
- $this->debug('getting WSDL file ' . $path);
- if ($fp = @fopen($path, 'r')) {
- $wsdl_string = '';
- while ($data = fread($fp, 32768)) {
- $wsdl_string .= $data;
- }
- fclose($fp);
- } else {
- $errstr = "Bad path to WSDL file $path";
- $this->debug($errstr);
- $this->setError($errstr);
- return false;
- }
- }
- // end new code added
- // Create an XML parser.
- $this->parser = xml_parser_create();
- // Set the options for parsing the XML data.
- // xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
- xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
- // Set the object for the parser.
- xml_set_object($this->parser, $this);
- // Set the element handlers for the parser.
- xml_set_element_handler($this->parser, 'start_element', 'end_element');
- xml_set_character_data_handler($this->parser, 'character_data');
- // Parse the XML file.
- if (!xml_parse($this->parser, $wsdl_string, true)) {
- // Display an error message.
- $errstr = sprintf(
- 'XML error parsing WSDL from %s on line %d: %s',
- $wsdl,
- xml_get_current_line_number($this->parser),
- xml_error_string(xml_get_error_code($this->parser))
- );
- $this->debug($errstr);
- $this->debug("XML payload:\n" . $wsdl_string);
- $this->setError($errstr);
- return false;
- }
- // free the parser
- xml_parser_free($this->parser);
- // catch wsdl parse errors
- if($this->getError()){
- return false;
- }
- return true;
- }
-
- /**
- * start-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @param string $attrs associative array of attributes
- * @access private
- */
- function start_element($parser, $name, $attrs)
- {
- if ($this->status == 'schema') {
- $this->currentSchema->schemaStartElement($parser, $name, $attrs);
- $this->debug_str .= $this->currentSchema->debug_str;
- $this->currentSchema->debug_str = '';
- } elseif (ereg('schema$', $name)) {
- // $this->debug("startElement for $name ($attrs[name]). status = $this->status (".$this->getLocalPart($name).")");
- $this->status = 'schema';
- $this->currentSchema = new xmlschema('', '', $this->namespaces);
- $this->currentSchema->schemaStartElement($parser, $name, $attrs);
- $this->debug_str .= $this->currentSchema->debug_str;
- $this->currentSchema->debug_str = '';
- } else {
- // position in the total number of elements, starting from 0
- $pos = $this->position++;
- $depth = $this->depth++;
- // set self as current value for this depth
- $this->depth_array[$depth] = $pos;
- $this->message[$pos] = array('cdata' => '');
- // get element prefix
- if (ereg(':', $name)) {
- // get ns prefix
- $prefix = substr($name, 0, strpos($name, ':'));
- // get ns
- $namespace = isset($this->namespaces[$prefix]) ? $this->namespaces[$prefix] : '';
- // get unqualified name
- $name = substr(strstr($name, ':'), 1);
- }
-
- if (count($attrs) > 0) {
- foreach($attrs as $k => $v) {
- // if ns declarations, add to class level array of valid namespaces
- if (ereg("^xmlns", $k)) {
- if ($ns_prefix = substr(strrchr($k, ':'), 1)) {
- $this->namespaces[$ns_prefix] = $v;
- } else {
- $this->namespaces['ns' . (count($this->namespaces) + 1)] = $v;
- }
- if ($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema') {
- $this->XMLSchemaVersion = $v;
- $this->namespaces['xsi'] = $v . '-instance';
- }
- } //
- // expand each attribute
- $k = strpos($k, ':') ? $this->expandQname($k) : $k;
- if ($k != 'location' && $k != 'soapAction' && $k != 'namespace') {
- $v = strpos($v, ':') ? $this->expandQname($v) : $v;
- }
- $eAttrs[$k] = $v;
- }
- $attrs = $eAttrs;
- } else {
- $attrs = array();
- }
- // find status, register data
- switch ($this->status) {
- case 'message':
- if ($name == 'part') {
- if (isset($attrs['type'])) {
- $this->debug("msg " . $this->currentMessage . ": found part $attrs[name]: " . implode(',', $attrs));
- $this->messages[$this->currentMessage][$attrs['name']] = $attrs['type'];
- }
- if (isset($attrs['element'])) {
- $this->messages[$this->currentMessage][$attrs['name']] = $attrs['element'];
- }
- }
- break;
- case 'portType':
- switch ($name) {
- case 'operation':
- $this->currentPortOperation = $attrs['name'];
- $this->debug("portType $this->currentPortType operation: $this->currentPortOperation");
- if (isset($attrs['parameterOrder'])) {
- $this->portTypes[$this->currentPortType][$attrs['name']]['parameterOrder'] = $attrs['parameterOrder'];
- }
- break;
- case 'documentation':
- $this->documentation = true;
- break;
- // merge input/output data
- default:
- $m = isset($attrs['message']) ? $this->getLocalPart($attrs['message']) : '';
- $this->portTypes[$this->currentPortType][$this->currentPortOperation][$name]['message'] = $m;
- break;
- }
- break;
- case 'binding':
- switch ($name) {
- case 'binding':
- // get ns prefix
- if (isset($attrs['style'])) {
- $this->bindings[$this->currentBinding]['prefix'] = $prefix;
- }
- $this->bindings[$this->currentBinding] = array_merge($this->bindings[$this->currentBinding], $attrs);
- break;
- case 'header':
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus]['headers'][] = $attrs;
- break;
- case 'operation':
- if (isset($attrs['soapAction'])) {
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['soapAction'] = $attrs['soapAction'];
- }
- if (isset($attrs['style'])) {
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['style'] = $attrs['style'];
- }
- if (isset($attrs['name'])) {
- $this->currentOperation = $attrs['name'];
- $this->debug("current binding operation: $this->currentOperation");
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['name'] = $attrs['name'];
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['binding'] = $this->currentBinding;
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation]['endpoint'] = isset($this->bindings[$this->currentBinding]['endpoint']) ? $this->bindings[$this->currentBinding]['endpoint'] : '';
- }
- break;
- case 'input':
- $this->opStatus = 'input';
- break;
- case 'output':
- $this->opStatus = 'output';
- break;
- case 'body':
- if (isset($this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus])) {
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus] = array_merge($this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus], $attrs);
- } else {
- $this->bindings[$this->currentBinding]['operations'][$this->currentOperation][$this->opStatus] = $attrs;
- }
- break;
- }
- break;
- case 'service':
- switch ($name) {
- case 'port':
- $this->currentPort = $attrs['name'];
- $this->debug('current port: ' . $this->currentPort);
- $this->ports[$this->currentPort]['binding'] = $this->getLocalPart($attrs['binding']);
-
- break;
- case 'address':
- $this->ports[$this->currentPort]['location'] = $attrs['location'];
- $this->ports[$this->currentPort]['bindingType'] = $namespace;
- $this->bindings[ $this->ports[$this->currentPort]['binding'] ]['bindingType'] = $namespace;
- $this->bindings[ $this->ports[$this->currentPort]['binding'] ]['endpoint'] = $attrs['location'];
- break;
- }
- break;
- }
- // set status
- switch ($name) {
- case 'import':
- if (isset($attrs['location'])) {
- $this->import[$attrs['namespace']][] = array('location' => $attrs['location'], 'loaded' => false);
- $this->debug('parsing import ' . $attrs['namespace']. ' - ' . $attrs['location'] . ' (' . count($this->import[$attrs['namespace']]).')');
- } else {
- $this->import[$attrs['namespace']][] = array('location' => '', 'loaded' => true);
- if (! $this->getPrefixFromNamespace($attrs['namespace'])) {
- $this->namespaces['ns'.(count($this->namespaces)+1)] = $attrs['namespace'];
- }
- $this->debug('parsing import ' . $attrs['namespace']. ' - [no location] (' . count($this->import[$attrs['namespace']]).')');
- }
- break;
- //wait for schema
- //case 'types':
- // $this->status = 'schema';
- // break;
- case 'message':
- $this->status = 'message';
- $this->messages[$attrs['name']] = array();
- $this->currentMessage = $attrs['name'];
- break;
- case 'portType':
- $this->status = 'portType';
- $this->portTypes[$attrs['name']] = array();
- $this->currentPortType = $attrs['name'];
- break;
- case "binding":
- if (isset($attrs['name'])) {
- // get binding name
- if (strpos($attrs['name'], ':')) {
- $this->currentBinding = $this->getLocalPart($attrs['name']);
- } else {
- $this->currentBinding = $attrs['name'];
- }
- $this->status = 'binding';
- $this->bindings[$this->currentBinding]['portType'] = $this->getLocalPart($attrs['type']);
- $this->debug("current binding: $this->currentBinding of portType: " . $attrs['type']);
- }
- break;
- case 'service':
- $this->serviceName = $attrs['name'];
- $this->status = 'service';
- $this->debug('current service: ' . $this->serviceName);
- break;
- case 'definitions':
- foreach ($attrs as $name => $value) {
- $this->wsdl_info[$name] = $value;
- }
- break;
- }
- }
- }
-
- /**
- * end-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @access private
- */
- function end_element($parser, $name){
- // unset schema status
- if (/*ereg('types$', $name) ||*/ ereg('schema$', $name)) {
- $this->status = "";
- $this->schemas[$this->currentSchema->schemaTargetNamespace][] = $this->currentSchema;
- }
- if ($this->status == 'schema') {
- $this->currentSchema->schemaEndElement($parser, $name);
- } else {
- // bring depth down a notch
- $this->depth--;
- }
- // end documentation
- if ($this->documentation) {
- //TODO: track the node to which documentation should be assigned; it can be a part, message, etc.
- //$this->portTypes[$this->currentPortType][$this->currentPortOperation]['documentation'] = $this->documentation;
- $this->documentation = false;
- }
- }
-
- /**
- * element content handler
- *
- * @param string $parser XML parser object
- * @param string $data element content
- * @access private
- */
- function character_data($parser, $data)
- {
- $pos = isset($this->depth_array[$this->depth]) ? $this->depth_array[$this->depth] : 0;
- if (isset($this->message[$pos]['cdata'])) {
- $this->message[$pos]['cdata'] .= $data;
- }
- if ($this->documentation) {
- $this->documentation .= $data;
- }
- }
-
- function getBindingData($binding)
- {
- if (is_array($this->bindings[$binding])) {
- return $this->bindings[$binding];
- }
- }
-
- /**
- * returns an assoc array of operation names => operation data
- *
- * @param string $bindingType eg: soap, smtp, dime (only soap is currently supported)
- * @return array
- * @access public
- */
- function getOperations($bindingType = 'soap')
- {
- $ops = array();
- if ($bindingType == 'soap') {
- $bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
- }
- // loop thru ports
- foreach($this->ports as $port => $portData) {
- // binding type of port matches parameter
- if ($portData['bindingType'] == $bindingType) {
- //$this->debug("getOperations for port $port");
- //$this->debug("port data: " . $this->varDump($portData));
- //$this->debug("bindings: " . $this->varDump($this->bindings[ $portData['binding'] ]));
- // merge bindings
- if (isset($this->bindings[ $portData['binding'] ]['operations'])) {
- $ops = array_merge ($ops, $this->bindings[ $portData['binding'] ]['operations']);
- }
- }
- }
- return $ops;
- }
-
- /**
- * returns an associative array of data necessary for calling an operation
- *
- * @param string $operation , name of operation
- * @param string $bindingType , type of binding eg: soap
- * @return array
- * @access public
- */
- function getOperationData($operation, $bindingType = 'soap')
- {
- if ($bindingType == 'soap') {
- $bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
- }
- // loop thru ports
- foreach($this->ports as $port => $portData) {
- // binding type of port matches parameter
- if ($portData['bindingType'] == $bindingType) {
- // get binding
- //foreach($this->bindings[ $portData['binding'] ]['operations'] as $bOperation => $opData) {
- foreach(array_keys($this->bindings[ $portData['binding'] ]['operations']) as $bOperation) {
- if ($operation == $bOperation) {
- $opData = $this->bindings[ $portData['binding'] ]['operations'][$operation];
- return $opData;
- }
- }
- }
- }
- }
-
- /**
- * returns an array of information about a given type
- * returns false if no type exists by the given name
- *
- * typeDef = array(
- * 'elements' => array(), // refs to elements array
- * 'restrictionBase' => '',
- * 'phpType' => '',
- * 'order' => '(sequence|all)',
- * 'attrs' => array() // refs to attributes array
- * )
- *
- * @param $type string
- * @param $ns string
- * @return mixed
- * @access public
- * @see xmlschema
- */
- function getTypeDef($type, $ns) {
- if ((! $ns) && isset($this->namespaces['tns'])) {
- $ns = $this->namespaces['tns'];
- }
- if (isset($this->schemas[$ns])) {
- foreach ($this->schemas[$ns] as $xs) {
- $t = $xs->getTypeDef($type);
- $this->debug_str .= $xs->debug_str;
- $xs->debug_str = '';
- if ($t) {
- return $t;
- }
- }
- }
- return false;
- }
-
- /**
- * serialize the parsed wsdl
- *
- * @return string , serialization of WSDL
- * @access public
- */
- function serialize()
- {
- $xml = '<?xml version="1.0" encoding="ISO-8859-1"?><definitions';
- foreach($this->namespaces as $k => $v) {
- $xml .= " xmlns:$k=\"$v\"";
- }
- // 10.9.02 - add poulter fix for wsdl and tns declarations
- if (isset($this->namespaces['wsdl'])) {
- $xml .= " xmlns=\"" . $this->namespaces['wsdl'] . "\"";
- }
- if (isset($this->namespaces['tns'])) {
- $xml .= " targetNamespace=\"" . $this->namespaces['tns'] . "\"";
- }
- $xml .= '>';
- // imports
- if (sizeof($this->import) > 0) {
- foreach($this->import as $ns => $list) {
- foreach ($list as $ii) {
- if ($ii['location'] != '') {
- $xml .= '<import location="' . $ii['location'] . '" namespace="' . $ns . '" />';
- } else {
- $xml .= '<import namespace="' . $ns . '" />';
- }
- }
- }
- }
- // types
- if (count($this->schemas)>=1) {
- $xml .= '<types>';
- foreach ($this->schemas as $ns => $list) {
- foreach ($list as $xs) {
- $xml .= $xs->serializeSchema();
- }
- }
- $xml .= '</types>';
- }
- // messages
- if (count($this->messages) >= 1) {
- foreach($this->messages as $msgName => $msgParts) {
- $xml .= '<message name="' . $msgName . '">';
- if(is_array($msgParts)){
- foreach($msgParts as $partName => $partType) {
- // print 'serializing '.$partType.', sv: '.$this->XMLSchemaVersion.'<br>';
- if (strpos($partType, ':')) {
- $typePrefix = $this->getPrefixFromNamespace($this->getPrefix($partType));
- } elseif (isset($this->typemap[$this->namespaces['xsd']][$partType])) {
- // print 'checking typemap: '.$this->XMLSchemaVersion.'<br>';
- $typePrefix = 'xsd';
- } else {
- foreach($this->typemap as $ns => $types) {
- if (isset($types[$partType])) {
- $typePrefix = $this->getPrefixFromNamespace($ns);
- }
- }
- if (!isset($typePrefix)) {
- die("$partType has no namespace!");
- }
- }
- $xml .= '<part name="' . $partName . '" type="' . $typePrefix . ':' . $this->getLocalPart($partType) . '" />';
- }
- }
- $xml .= '</message>';
- }
- }
- // bindings & porttypes
- if (count($this->bindings) >= 1) {
- $binding_xml = '';
- $portType_xml = '';
- foreach($this->bindings as $bindingName => $attrs) {
- $binding_xml .= '<binding name="' . $bindingName . '" type="tns:' . $attrs['portType'] . '">';
- $binding_xml .= '<soap:binding style="' . $attrs['style'] . '" transport="' . $attrs['transport'] . '"/>';
- $portType_xml .= '<portType name="' . $attrs['portType'] . '">';
- foreach($attrs['operations'] as $opName => $opParts) {
- $binding_xml .= '<operation name="' . $opName . '">';
- $binding_xml .= '<soap:operation soapAction="' . $opParts['soapAction'] . '" style="'. $attrs['style'] . '"/>';
- if (isset($opParts['input']['encodingStyle']) && $opParts['input']['encodingStyle'] != '') {
- $enc_style = ' encodingStyle="' . $opParts['input']['encodingStyle'] . '"';
- } else {
- $enc_style = '';
- }
- $binding_xml .= '<input><soap:body use="' . $opParts['input']['use'] . '" namespace="' . $opParts['input']['namespace'] . '"' . $enc_style . '/></input>';
- if (isset($opParts['output']['encodingStyle']) && $opParts['output']['encodingStyle'] != '') {
- $enc_style = ' encodingStyle="' . $opParts['output']['encodingStyle'] . '"';
- } else {
- $enc_style = '';
- }
- $binding_xml .= '<output><soap:body use="' . $opParts['output']['use'] . '" namespace="' . $opParts['output']['namespace'] . '"' . $enc_style . '/></output>';
- $binding_xml .= '</operation>';
- $portType_xml .= '<operation name="' . $opParts['name'] . '"';
- if (isset($opParts['parameterOrder'])) {
- $portType_xml .= ' parameterOrder="' . $opParts['parameterOrder'] . '"';
- }
- $portType_xml .= '>';
- if(isset($opParts['documentation']) && $opParts['documentation'] != '') {
- $portType_xml .= '<documentation>' . htmlspecialchars($opParts['documentation']) . '</documentation>';
- }
- $portType_xml .= '<input message="tns:' . $opParts['input']['message'] . '"/>';
- $portType_xml .= '<output message="tns:' . $opParts['output']['message'] . '"/>';
- $portType_xml .= '</operation>';
- }
- $portType_xml .= '</portType>';
- $binding_xml .= '</binding>';
- }
- $xml .= $portType_xml . $binding_xml;
- }
- // services
- $xml .= '<service name="' . $this->serviceName . '">';
- if (count($this->ports) >= 1) {
- foreach($this->ports as $pName => $attrs) {
- $xml .= '<port name="' . $pName . '" binding="tns:' . $attrs['binding'] . '">';
- $xml .= '<soap:address location="' . $attrs['location'] . '"/>';
- $xml .= '</port>';
- }
- }
- $xml .= '</service>';
- return $xml . '</definitions>';
- }
-
- /**
- * serialize a PHP value according to a WSDL message definition
- *
- * TODO
- * - multi-ref serialization
- * - validate PHP values against type definitions, return errors if invalid
- *
- * @param string $ type name
- * @param mixed $ param value
- * @return mixed new param or false if initial value didn't validate
- */
- function serializeRPCParameters($operation, $direction, $parameters)
- {
- $this->debug('in serializeRPCParameters with operation '.$operation.', direction '.$direction.' and '.count($parameters).' param(s), and xml schema version ' . $this->XMLSchemaVersion);
-
- if ($direction != 'input' && $direction != 'output') {
- $this->debug('The value of the \$direction argument needs to be either "input" or "output"');
- $this->setError('The value of the \$direction argument needs to be either "input" or "output"');
- return false;
- }
- if (!$opData = $this->getOperationData($operation)) {
- $this->debug('Unable to retrieve WSDL data for operation: ' . $operation);
- $this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
- return false;
- }
- $this->debug($this->varDump($opData));
-
- // Get encoding style for output and set to current
- $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
- if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
- $encodingStyle = $opData['output']['encodingStyle'];
- $enc_style = $encodingStyle;
- }
-
- // set input params
- $xml = '';
- if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
-
- $use = $opData[$direction]['use'];
- $this->debug("use=$use");
- $this->debug('got ' . count($opData[$direction]['parts']) . ' part(s)');
- if (is_array($parameters)) {
- $parametersArrayType = $this->isArraySimpleOrStruct($parameters);
- $this->debug('have ' . $parametersArrayType . ' parameters');
- foreach($opData[$direction]['parts'] as $name => $type) {
- $this->debug('serializing part "'.$name.'" of type "'.$type.'"');
- // Track encoding style
- if (isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
- $encodingStyle = $opData[$direction]['encodingStyle'];
- $enc_style = $encodingStyle;
- } else {
- $enc_style = false;
- }
- // NOTE: add error handling here
- // if serializeType returns false, then catch global error and fault
- if ($parametersArrayType == 'arraySimple') {
- $p = array_shift($parameters);
- $this->debug('calling serializeType w/indexed param');
- $xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
- } elseif (isset($parameters[$name])) {
- $this->debug('calling serializeType w/named param');
- $xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
- } else {
- // TODO: only send nillable
- $this->debug('calling serializeType w/null param');
- $xml .= $this->serializeType($name, $type, null, $use, $enc_style);
- }
- }
- } else {
- $this->debug('no parameters passed.');
- }
- }
- return $xml;
- }
-
- /**
- * serialize a PHP value according to a WSDL message definition
- *
- * TODO
- * - multi-ref serialization
- * - validate PHP values against type definitions, return errors if invalid
- *
- * @param string $ type name
- * @param mixed $ param value
- * @return mixed new param or false if initial value didn't validate
- */
- function serializeParameters($operation, $direction, $parameters)
- {
- $this->debug('in serializeParameters with operation '.$operation.', direction '.$direction.' and '.count($parameters).' param(s), and xml schema version ' . $this->XMLSchemaVersion);
-
- if ($direction != 'input' && $direction != 'output') {
- $this->debug('The value of the \$direction argument needs to be either "input" or "output"');
- $this->setError('The value of the \$direction argument needs to be either "input" or "output"');
- return false;
- }
- if (!$opData = $this->getOperationData($operation)) {
- $this->debug('Unable to retrieve WSDL data for operation: ' . $operation);
- $this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
- return false;
- }
- $this->debug($this->varDump($opData));
-
- // Get encoding style for output and set to current
- $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
- if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
- $encodingStyle = $opData['output']['encodingStyle'];
- $enc_style = $encodingStyle;
- }
-
- // set input params
- $xml = '';
- if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
-
- $use = $opData[$direction]['use'];
- $this->debug("use=$use");
- $this->debug('got ' . count($opData[$direction]['parts']) . ' part(s)');
- if (is_array($parameters)) {
- $parametersArrayType = $this->isArraySimpleOrStruct($parameters);
- $this->debug('have ' . $parametersArrayType . ' parameters');
- foreach($opData[$direction]['parts'] as $name => $type) {
- $this->debug('serializing part "'.$name.'" of type "'.$type.'"');
- // Track encoding style
- if(isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
- $encodingStyle = $opData[$direction]['encodingStyle'];
- $enc_style = $encodingStyle;
- } else {
- $enc_style = false;
- }
- // NOTE: add error handling here
- // if serializeType returns false, then catch global error and fault
- if ($parametersArrayType == 'arraySimple') {
- $p = array_shift($parameters);
- $this->debug('calling serializeType w/indexed param');
- $xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
- } elseif (isset($parameters[$name])) {
- $this->debug('calling serializeType w/named param');
- $xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
- } else {
- // TODO: only send nillable
- $this->debug('calling serializeType w/null param');
- $xml .= $this->serializeType($name, $type, null, $use, $enc_style);
- }
- }
- } else {
- $this->debug('no parameters passed.');
- }
- }
- return $xml;
- }
-
- /**
- * serializes a PHP value according a given type definition
- *
- * @param string $name , name of type (part)
- * @param string $type , type of type, heh (type or element)
- * @param mixed $value , a native PHP value (parameter value)
- * @param string $use , use for part (encoded|literal)
- * @param string $encodingStyle , use to add encoding changes to serialisation
- * @return string serialization
- * @access public
- */
- function serializeType($name, $type, $value, $use='encoded', $encodingStyle=false)
- {
- $this->debug("in serializeType: $name, $type, $value, $use, $encodingStyle");
- if($use == 'encoded' && $encodingStyle) {
- $encodingStyle = ' SOAP-ENV:encodingStyle="' . $encodingStyle . '"';
- }
-
- // if a soap_val has been supplied, let its type override the WSDL
- if (is_object($value) && get_class($value) == 'soapval') {
- // TODO: get attributes from soapval?
- if ($value->type_ns) {
- $type = $value->type_ns . ':' . $value->type;
- } else {
- $type = $value->type;
- }
- $value = $value->value;
- $forceType = true;
- $this->debug("in serializeType: soapval overrides type to $type, value to $value");
- } else {
- $forceType = false;
- }
-
- $xml = '';
- if (strpos($type, ':')) {
- $uqType = substr($type, strrpos($type, ':') + 1);
- $ns = substr($type, 0, strrpos($type, ':'));
- $this->debug("got a prefixed type: $uqType, $ns");
- if ($this->getNamespaceFromPrefix($ns)) {
- $ns = $this->getNamespaceFromPrefix($ns);
- $this->debug("expanded prefixed type: $uqType, $ns");
- }
-
- if($ns == $this->XMLSchemaVersion){
-
- if (is_null($value)) {
- if ($use == 'literal') {
- // TODO: depends on nillable
- return "<$name/>";
- } else {
- return "<$name xsi:nil=\"true\"/>";
- }
- }
- if ($uqType == 'boolean' && !$value) {
- $value = 'false';
- } elseif ($uqType == 'boolean') {
- $value = 'true';
- }
- if ($uqType == 'string' && gettype($value) == 'string') {
- $value = $this->expandEntities($value);
- }
- // it's a scalar
- // TODO: what about null/nil values?
- // check type isn't a custom type extending xmlschema namespace
- if (!$this->getTypeDef($uqType, $ns)) {
- if ($use == 'literal') {
- if ($forceType) {
- return "<$name xsi:type=\"" . $this->getPrefixFromNamespace($this->XMLSchemaVersion) . ":$uqType\">$value</$name>";
- } else {
- return "<$name>$value</$name>";
- }
- } else {
- return "<$name xsi:type=\"" . $this->getPrefixFromNamespace($this->XMLSchemaVersion) . ":$uqType\"$encodingStyle>$value</$name>";
- }
- }
- } else if ($ns == 'http://xml.apache.org/xml-soap') {
- if ($uqType == 'Map') {
- $contents = '';
- foreach($value as $k => $v) {
- $this->debug("serializing map element: key $k, value $v");
- $contents .= '<item>';
- $contents .= $this->serialize_val($k,'key',false,false,false,false,$use);
- $contents .= $this->serialize_val($v,'value',false,false,false,false,$use);
- $contents .= '</item>';
- }
- if ($use == 'literal') {
- if ($forceType) {
- return "<$name xsi:type=\"" . $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap') . ":$uqType\">$contents</$name>";
- } else {
- return "<$name>$contents</$name>";
- }
- } else {
- return "<$name xsi:type=\"" . $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap') . ":$uqType\"$encodingStyle>$contents</$name>";
- }
- }
- }
- } else {
- $this->debug("No namespace for type $type");
- $ns = '';
- $uqType = $type;
- }
- if(!$typeDef = $this->getTypeDef($uqType, $ns)){
- $this->setError("$type ($uqType) is not a supported type.");
- $this->debug("$type ($uqType) is not a supported type.");
- return false;
- } else {
- foreach($typeDef as $k => $v) {
- $this->debug("typedef, $k: $v");
- }
- }
- $phpType = $typeDef['phpType'];
- $this->debug("serializeType: uqType: $uqType, ns: $ns, phptype: $phpType, arrayType: " . (isset($typeDef['arrayType']) ? $typeDef['arrayType'] : '') );
- // if php type == struct, map value to the <all> element names
- if ($phpType == 'struct') {
- if (isset($typeDef['typeClass']) && $typeDef['typeClass'] == 'element') {
- $elementName = $uqType;
- if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
- $elementNS = " xmlns=\"$ns\"";
- }
- } else {
- $elementName = $name;
- $elementNS = '';
- }
- if (is_null($value)) {
- if ($use == 'literal') {
- // TODO: depends on nillable
- return "<$elementName$elementNS/>";
- } else {
- return "<$elementName$elementNS xsi:nil=\"true\"/>";
- }
- }
- if ($use == 'literal') {
- if ($forceType) {
- $xml = "<$elementName$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">";
- } else {
- $xml = "<$elementName$elementNS>";
- }
- } else {
- $xml = "<$elementName$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>";
- }
-
- if (isset($typeDef['elements']) && is_array($typeDef['elements'])) {
- if (is_array($value)) {
- $xvalue = $value;
- } elseif (is_object($value)) {
- $xvalue = get_object_vars($value);
- } else {
- $this->debug("value is neither an array nor an object for XML Schema type $ns:$uqType");
- $xvalue = array();
- }
- // toggle whether all elements are present - ideally should validate against schema
- if(count($typeDef['elements']) != count($xvalue)){
- $optionals = true;
- }
- foreach($typeDef['elements'] as $eName => $attrs) {
- // if user took advantage of a minOccurs=0, then only serialize named parameters
- if(isset($optionals) && !isset($xvalue[$eName])){
- // do nothing
- } else {
- // get value
- if (isset($xvalue[$eName])) {
- $v = $xvalue[$eName];
- } else {
- $v = null;
- }
- // TODO: if maxOccurs > 1 (not just unbounded), then allow serialization of an array
- if (isset($attrs['maxOccurs']) && $attrs['maxOccurs'] == 'unbounded' && isset($v) && is_array($v) && $this->isArraySimpleOrStruct($v) == 'arraySimple') {
- $vv = $v;
- foreach ($vv as $k => $v) {
- if (isset($attrs['type'])) {
- // serialize schema-defined type
- $xml .= $this->serializeType($eName, $attrs['type'], $v, $use, $encodingStyle);
- } else {
- // serialize generic type
- $this->debug("calling serialize_val() for $v, $eName, false, false, false, false, $use");
- $xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
- }
- }
- } else {
- if (isset($attrs['type'])) {
- // serialize schema-defined type
- $xml .= $this->serializeType($eName, $attrs['type'], $v, $use, $encodingStyle);
- } else {
- // serialize generic type
- $this->debug("calling serialize_val() for $v, $eName, false, false, false, false, $use");
- $xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
- }
- }
- }
- }
- } else {
- $this->debug("Expected elements for XML Schema type $ns:$uqType");
- }
- $xml .= "</$elementName>";
- } elseif ($phpType == 'array') {
- if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
- $elementNS = " xmlns=\"$ns\"";
- } else {
- $elementNS = '';
- }
- if (is_null($value)) {
- if ($use == 'literal') {
- // TODO: depends on nillable
- return "<$name$elementNS/>";
- } else {
- return "<$name$elementNS xsi:nil=\"true\"/>";
- }
- }
- if (isset($typeDef['multidimensional'])) {
- $nv = array();
- foreach($value as $v) {
- $cols = ',' . sizeof($v);
- $nv = array_merge($nv, $v);
- }
- $value = $nv;
- } else {
- $cols = '';
- }
- if (is_array($value) && sizeof($value) >= 1) {
- $rows = sizeof($value);
- $contents = '';
- foreach($value as $k => $v) {
- $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
- //if (strpos($typeDef['arrayType'], ':') ) {
- if (!in_array($typeDef['arrayType'],$this->typemap['http://www.w3.org/2001/XMLSchema'])) {
- $contents .= $this->serializeType('item', $typeDef['arrayType'], $v, $use);
- } else {
- $contents .= $this->serialize_val($v, 'item', $typeDef['arrayType'], null, $this->XMLSchemaVersion, false, $use);
- }
- }
- $this->debug('contents: '.$this->varDump($contents));
- } else {
- $rows = 0;
- $contents = null;
- }
- // TODO: for now, an empty value will be serialized as a zero element
- // array. Revisit this when coding the handling of null/nil values.
- if ($use == 'literal') {
- $xml = "<$name$elementNS>"
- .$contents
- ."</$name>";
- } else {
- $xml = "<$name$elementNS xsi:type=\"".$this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/').':Array" '.
- $this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/')
- .':arrayType="'
- .$this->getPrefixFromNamespace($this->getPrefix($typeDef['arrayType']))
- .":".$this->getLocalPart($typeDef['arrayType'])."[$rows$cols]\">"
- .$contents
- ."</$name>";
- }
- } elseif ($phpType == 'scalar') {
- if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
- $elementNS = " xmlns=\"$ns\"";
- } else {
- $elementNS = '';
- }
- if ($use == 'literal') {
- if ($forceType) {
- return "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">$value</$name>";
- } else {
- return "<$name$elementNS>$value</$name>";
- }
- } else {
- return "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value</$name>";
- }
- }
- $this->debug('returning: '.$this->varDump($xml));
- return $xml;
- }
-
- /**
- * adds an XML Schema complex type to the WSDL types
- *
- * @param name
- * @param typeClass (complexType|simpleType|attribute)
- * @param phpType: currently supported are array and struct (php assoc array)
- * @param compositor (all|sequence|choice)
- * @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
- * @param elements = array ( name = array(name=>'',type=>'') )
- * @param attrs = array(
- * array(
- * 'ref' => "http://schemas.xmlsoap.org/soap/encoding/:arrayType",
- * "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"
- * )
- * )
- * @param arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
- * @see xmlschema
- *
- */
- function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType='') {
- if (count($elements) > 0) {
- foreach($elements as $n => $e){
- // expand each element
- foreach ($e as $k => $v) {
- $k = strpos($k,':') ? $this->expandQname($k) : $k;
- $v = strpos($v,':') ? $this->expandQname($v) : $v;
- $ee[$k] = $v;
- }
- $eElements[$n] = $ee;
- }
- $elements = $eElements;
- }
-
- if (count($attrs) > 0) {
- foreach($attrs as $n => $a){
- // expand each attribute
- foreach ($a as $k => $v) {
- $k = strpos($k,':') ? $this->expandQname($k) : $k;
- $v = strpos($v,':') ? $this->expandQname($v) : $v;
- $aa[$k] = $v;
- }
- $eAttrs[$n] = $aa;
- }
- $attrs = $eAttrs;
- }
-
- $restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
- $arrayType = strpos($arrayType,':') ? $this->expandQname($arrayType) : $arrayType;
-
- $typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
- $this->schemas[$typens][0]->addComplexType($name,$typeClass,$phpType,$compositor,$restrictionBase,$elements,$attrs,$arrayType);
- }
-
- /**
- * adds an XML Schema simple type to the WSDL types
- *
- * @param name
- * @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
- * @param typeClass (simpleType)
- * @param phpType: (scalar)
- * @see xmlschema
- *
- */
- function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar') {
- $restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
-
- $typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
- $this->schemas[$typens][0]->addSimpleType($name, $restrictionBase, $typeClass, $phpType);
- }
-
- /**
- * register a service with the server
- *
- * @param string $methodname
- * @param string $in assoc array of input values: key = param name, value = param type
- * @param string $out assoc array of output values: key = param name, value = param type
- * @param string $namespace optional The namespace for the operation
- * @param string $soapaction optional The soapaction for the operation
- * @param string $style (rpc|document) optional The style for the operation
- * @param string $use (encoded|literal) optional The use for the parameters (cannot mix right now)
- * @param string $documentation optional The description to include in the WSDL
- * @access public
- */
- function addOperation($name, $in = false, $out = false, $namespace = false, $soapaction = false, $style = 'rpc', $use = 'encoded', $documentation = ''){
- if ($style == 'rpc' && $use == 'encoded') {
- $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
- } else {
- $encodingStyle = '';
- }
- // get binding
- $this->bindings[ $this->serviceName . 'Binding' ]['operations'][$name] =
- array(
- 'name' => $name,
- 'binding' => $this->serviceName . 'Binding',
- 'endpoint' => $this->endpoint,
- 'soapAction' => $soapaction,
- 'style' => $style,
- 'input' => array(
- 'use' => $use,
- 'namespace' => $namespace,
- 'encodingStyle' => $encodingStyle,
- 'message' => $name . 'Request',
- 'parts' => $in),
- 'output' => array(
- 'use' => $use,
- 'namespace' => $namespace,
- 'encodingStyle' => $encodingStyle,
- 'message' => $name . 'Response',
- 'parts' => $out),
- 'namespace' => $namespace,
- 'transport' => 'http://schemas.xmlsoap.org/soap/http',
- 'documentation' => $documentation);
- // add portTypes
- // add messages
- if($in)
- {
- foreach($in as $pName => $pType)
- {
- if(strpos($pType,':')) {
- $pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
- }
- $this->messages[$name.'Request'][$pName] = $pType;
- }
- } else {
- $this->messages[$name.'Request']= '0';
- }
- if($out)
- {
- foreach($out as $pName => $pType)
- {
- if(strpos($pType,':')) {
- $pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
- }
- $this->messages[$name.'Response'][$pName] = $pType;
- }
- } else {
- $this->messages[$name.'Response']= '0';
- }
- return true;
- }
-}
-?><?php
-
-
-
-/**
-*
-* soap_parser class parses SOAP XML messages into native PHP values
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soap_parser extends nusoap_base {
-
- var $xml = '';
- var $xml_encoding = '';
- var $method = '';
- var $root_struct = '';
- var $root_struct_name = '';
- var $root_struct_namespace = '';
- var $root_header = '';
- var $document = ''; // incoming SOAP body (text)
- // determines where in the message we are (envelope,header,body,method)
- var $status = '';
- var $position = 0;
- var $depth = 0;
- var $default_namespace = '';
- var $namespaces = array();
- var $message = array();
- var $parent = '';
- var $fault = false;
- var $fault_code = '';
- var $fault_str = '';
- var $fault_detail = '';
- var $depth_array = array();
- var $debug_flag = true;
- var $soapresponse = NULL;
- var $responseHeaders = ''; // incoming SOAP headers (text)
- var $body_position = 0;
- // for multiref parsing:
- // array of id => pos
- var $ids = array();
- // array of id => hrefs => pos
- var $multirefs = array();
- // toggle for auto-decoding element content
- var $decode_utf8 = true;
-
- /**
- * constructor
- *
- * @param string $xml SOAP message
- * @param string $encoding character encoding scheme of message
- * @param string $method
- * @param string $decode_utf8 whether to decode UTF-8 to ISO-8859-1
- * @access public
- */
- function soap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
- $this->xml = $xml;
- $this->xml_encoding = $encoding;
- $this->method = $method;
- $this->decode_utf8 = $decode_utf8;
-
- // Check whether content has been read.
- if(!empty($xml)){
- $this->debug('Entering soap_parser(), length='.strlen($xml).', encoding='.$encoding);
- // Create an XML parser - why not xml_parser_create_ns?
- $this->parser = xml_parser_create($this->xml_encoding);
- // Set the options for parsing the XML data.
- //xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
- xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
- xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->xml_encoding);
- // Set the object for the parser.
- xml_set_object($this->parser, $this);
- // Set the element handlers for the parser.
- xml_set_element_handler($this->parser, 'start_element','end_element');
- xml_set_character_data_handler($this->parser,'character_data');
-
- // Parse the XML file.
- if(!xml_parse($this->parser,$xml,true)){
- // Display an error message.
- $err = sprintf('XML error parsing SOAP payload on line %d: %s',
- xml_get_current_line_number($this->parser),
- xml_error_string(xml_get_error_code($this->parser)));
- $this->debug($err);
- $this->debug("XML payload:\n" . $xml);
- $this->setError($err);
- } else {
- $this->debug('parsed successfully, found root struct: '.$this->root_struct.' of name '.$this->root_struct_name);
- // get final value
- $this->soapresponse = $this->message[$this->root_struct]['result'];
- // get header value: no, because this is documented as XML string
-// if($this->root_header != '' && isset($this->message[$this->root_header]['result'])){
-// $this->responseHeaders = $this->message[$this->root_header]['result'];
-// }
- // resolve hrefs/ids
- if(sizeof($this->multirefs) > 0){
- foreach($this->multirefs as $id => $hrefs){
- $this->debug('resolving multirefs for id: '.$id);
- $idVal = $this->buildVal($this->ids[$id]);
- foreach($hrefs as $refPos => $ref){
- $this->debug('resolving href at pos '.$refPos);
- $this->multirefs[$id][$refPos] = $idVal;
- }
- }
- }
- }
- xml_parser_free($this->parser);
- } else {
- $this->debug('xml was empty, didn\'t parse!');
- $this->setError('xml was empty, didn\'t parse!');
- }
- }
-
- /**
- * start-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @param string $attrs associative array of attributes
- * @access private
- */
- function start_element($parser, $name, $attrs) {
- // position in a total number of elements, starting from 0
- // update class level pos
- $pos = $this->position++;
- // and set mine
- $this->message[$pos] = array('pos' => $pos,'children'=>'','cdata'=>'');
- // depth = how many levels removed from root?
- // set mine as current global depth and increment global depth value
- $this->message[$pos]['depth'] = $this->depth++;
-
- // else add self as child to whoever the current parent is
- if($pos != 0){
- $this->message[$this->parent]['children'] .= '|'.$pos;
- }
- // set my parent
- $this->message[$pos]['parent'] = $this->parent;
- // set self as current parent
- $this->parent = $pos;
- // set self as current value for this depth
- $this->depth_array[$this->depth] = $pos;
- // get element prefix
- if(strpos($name,':')){
- // get ns prefix
- $prefix = substr($name,0,strpos($name,':'));
- // get unqualified name
- $name = substr(strstr($name,':'),1);
- }
- // set status
- if($name == 'Envelope'){
- $this->status = 'envelope';
- } elseif($name == 'Header'){
- $this->root_header = $pos;
- $this->status = 'header';
- } elseif($name == 'Body'){
- $this->status = 'body';
- $this->body_position = $pos;
- // set method
- } elseif($this->status == 'body' && $pos == ($this->body_position+1)){
- $this->status = 'method';
- $this->root_struct_name = $name;
- $this->root_struct = $pos;
- $this->message[$pos]['type'] = 'struct';
- $this->debug("found root struct $this->root_struct_name, pos $this->root_struct");
- }
- // set my status
- $this->message[$pos]['status'] = $this->status;
- // set name
- $this->message[$pos]['name'] = htmlspecialchars($name);
- // set attrs
- $this->message[$pos]['attrs'] = $attrs;
-
- // loop through atts, logging ns and type declarations
- $attstr = '';
- foreach($attrs as $key => $value){
- $key_prefix = $this->getPrefix($key);
- $key_localpart = $this->getLocalPart($key);
- // if ns declarations, add to class level array of valid namespaces
- if($key_prefix == 'xmlns'){
- if(ereg('^http://www.w3.org/[0-9]{4}/XMLSchema$',$value)){
- $this->XMLSchemaVersion = $value;
- $this->namespaces['xsd'] = $this->XMLSchemaVersion;
- $this->namespaces['xsi'] = $this->XMLSchemaVersion.'-instance';
- }
- $this->namespaces[$key_localpart] = $value;
- // set method namespace
- if($name == $this->root_struct_name){
- $this->methodNamespace = $value;
- }
- // if it's a type declaration, set type
- } elseif($key_localpart == 'type'){
- $value_prefix = $this->getPrefix($value);
- $value_localpart = $this->getLocalPart($value);
- $this->message[$pos]['type'] = $value_localpart;
- $this->message[$pos]['typePrefix'] = $value_prefix;
- if(isset($this->namespaces[$value_prefix])){
- $this->message[$pos]['type_namespace'] = $this->namespaces[$value_prefix];
- } else if(isset($attrs['xmlns:'.$value_prefix])) {
- $this->message[$pos]['type_namespace'] = $attrs['xmlns:'.$value_prefix];
- }
- // should do something here with the namespace of specified type?
- } elseif($key_localpart == 'arrayType'){
- $this->message[$pos]['type'] = 'array';
- /* do arrayType ereg here
- [1] arrayTypeValue ::= atype asize
- [2] atype ::= QName rank*
- [3] rank ::= '[' (',')* ']'
- [4] asize ::= '[' length~ ']'
- [5] length ::= nextDimension* Digit+
- [6] nextDimension ::= Digit+ ','
- */
- $expr = '([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\[([0-9]+),?([0-9]*)\]';
- if(ereg($expr,$value,$regs)){
- $this->message[$pos]['typePrefix'] = $regs[1];
- $this->message[$pos]['arrayTypePrefix'] = $regs[1];
- if (isset($this->namespaces[$regs[1]])) {
- $this->message[$pos]['arrayTypeNamespace'] = $this->namespaces[$regs[1]];
- } else if (isset($attrs['xmlns:'.$regs[1]])) {
- $this->message[$pos]['arrayTypeNamespace'] = $attrs['xmlns:'.$regs[1]];
- }
- $this->message[$pos]['arrayType'] = $regs[2];
- $this->message[$pos]['arraySize'] = $regs[3];
- $this->message[$pos]['arrayCols'] = $regs[4];
- }
- }
- // log id
- if($key == 'id'){
- $this->ids[$value] = $pos;
- }
- // root
- if($key_localpart == 'root' && $value == 1){
- $this->status = 'method';
- $this->root_struct_name = $name;
- $this->root_struct = $pos;
- $this->debug("found root struct $this->root_struct_name, pos $pos");
- }
- // for doclit
- $attstr .= " $key=\"$value\"";
- }
- // get namespace - must be done after namespace atts are processed
- if(isset($prefix)){
- $this->message[$pos]['namespace'] = $this->namespaces[$prefix];
- $this->default_namespace = $this->namespaces[$prefix];
- } else {
- $this->message[$pos]['namespace'] = $this->default_namespace;
- }
- if($this->status == 'header'){
- if ($this->root_header != $pos) {
- $this->responseHeaders .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
- }
- } elseif($this->root_struct_name != ''){
- $this->document .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
- }
- }
-
- /**
- * end-element handler
- *
- * @param string $parser XML parser object
- * @param string $name element name
- * @access private
- */
- function end_element($parser, $name) {
- // position of current element is equal to the last value left in depth_array for my depth
- $pos = $this->depth_array[$this->depth--];
-
- // get element prefix
- if(strpos($name,':')){
- // get ns prefix
- $prefix = substr($name,0,strpos($name,':'));
- // get unqualified name
- $name = substr(strstr($name,':'),1);
- }
-
- // build to native type
- if(isset($this->body_position) && $pos > $this->body_position){
- // deal w/ multirefs
- if(isset($this->message[$pos]['attrs']['href'])){
- // get id
- $id = substr($this->message[$pos]['attrs']['href'],1);
- // add placeholder to href array
- $this->multirefs[$id][$pos] = 'placeholder';
- // add set a reference to it as the result value
- $this->message[$pos]['result'] =& $this->multirefs[$id][$pos];
- // build complex values
- } elseif($this->message[$pos]['children'] != ''){
-
- // if result has already been generated (struct/array
- if(!isset($this->message[$pos]['result'])){
- $this->message[$pos]['result'] = $this->buildVal($pos);
- }
-
- // set value of simple type
- } else {
- //$this->debug('adding data for scalar value '.$this->message[$pos]['name'].' of value '.$this->message[$pos]['cdata']);
- if (isset($this->message[$pos]['type'])) {
- $this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
- } else {
- $parent = $this->message[$pos]['parent'];
- if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
- $this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
- } else {
- $this->message[$pos]['result'] = $this->message[$pos]['cdata'];
- }
- }
-
- /* add value to parent's result, if parent is struct/array
- $parent = $this->message[$pos]['parent'];
- if($this->message[$parent]['type'] != 'map'){
- if(strtolower($this->message[$parent]['type']) == 'array'){
- $this->message[$parent]['result'][] = $this->message[$pos]['result'];
- } else {
- $this->message[$parent]['result'][$this->message[$pos]['name']] = $this->message[$pos]['result'];
- }
- }
- */
- }
- }
-
- // for doclit
- if($this->status == 'header'){
- if ($this->root_header != $pos) {
- $this->responseHeaders .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
- }
- } elseif($pos >= $this->root_struct){
- $this->document .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
- }
- // switch status
- if($pos == $this->root_struct){
- $this->status = 'body';
- $this->root_struct_namespace = $this->message[$pos]['namespace'];
- } elseif($name == 'Body'){
- $this->status = 'envelope';
- } elseif($name == 'Header'){
- $this->status = 'envelope';
- } elseif($name == 'Envelope'){
- //
- }
- // set parent back to my parent
- $this->parent = $this->message[$pos]['parent'];
- }
-
- /**
- * element content handler
- *
- * @param string $parser XML parser object
- * @param string $data element content
- * @access private
- */
- function character_data($parser, $data){
- $pos = $this->depth_array[$this->depth];
- if ($this->xml_encoding=='UTF-8'){
- // TODO: add an option to disable this for folks who want
- // raw UTF-8 that, e.g., might not map to iso-8859-1
- // TODO: this can also be handled with xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
- if($this->decode_utf8){
- $data = utf8_decode($data);
- }
- }
- $this->message[$pos]['cdata'] .= $data;
- // for doclit
- if($this->status == 'header'){
- $this->responseHeaders .= $data;
- } else {
- $this->document .= $data;
- }
- }
-
- /**
- * get the parsed message
- *
- * @return mixed
- * @access public
- */
- function get_response(){
- return $this->soapresponse;
- }
-
- /**
- * get the parsed headers
- *
- * @return string XML or empty if no headers
- * @access public
- */
- function getHeaders(){
- return $this->responseHeaders;
- }
-
- /**
- * decodes entities
- *
- * @param string $text string to translate
- * @access private
- */
- function decode_entities($text){
- foreach($this->entities as $entity => $encoded){
- $text = str_replace($encoded,$entity,$text);
- }
- return $text;
- }
-
- /**
- * decodes simple types into PHP variables
- *
- * @param string $value value to decode
- * @param string $type XML type to decode
- * @param string $typens XML type namespace to decode
- * @access private
- */
- function decodeSimple($value, $type, $typens) {
- // TODO: use the namespace!
- if ((!isset($type)) || $type == 'string' || $type == 'long' || $type == 'unsignedLong') {
- return (string) $value;
- }
- if ($type == 'int' || $type == 'integer' || $type == 'short' || $type == 'byte') {
- return (int) $value;
- }
- if ($type == 'float' || $type == 'double' || $type == 'decimal') {
- return (double) $value;
- }
- if ($type == 'boolean') {
- if (strtolower($value) == 'false' || strtolower($value) == 'f') {
- return false;
- }
- return (boolean) $value;
- }
- if ($type == 'base64' || $type == 'base64Binary') {
- return base64_decode($value);
- }
- // obscure numeric types
- if ($type == 'nonPositiveInteger' || $type == 'negativeInteger'
- || $type == 'nonNegativeInteger' || $type == 'positiveInteger'
- || $type == 'unsignedInt'
- || $type == 'unsignedShort' || $type == 'unsignedByte') {
- return (int) $value;
- }
- // everything else
- return (string) $value;
- }
-
- /**
- * builds response structures for compound values (arrays/structs)
- *
- * @param string $pos position in node tree
- * @access private
- */
- function buildVal($pos){
- if(!isset($this->message[$pos]['type'])){
- $this->message[$pos]['type'] = '';
- }
- $this->debug('inside buildVal() for '.$this->message[$pos]['name']."(pos $pos) of type ".$this->message[$pos]['type']);
- // if there are children...
- if($this->message[$pos]['children'] != ''){
- $children = explode('|',$this->message[$pos]['children']);
- array_shift($children); // knock off empty
- // md array
- if(isset($this->message[$pos]['arrayCols']) && $this->message[$pos]['arrayCols'] != ''){
- $r=0; // rowcount
- $c=0; // colcount
- foreach($children as $child_pos){
- $this->debug("got an MD array element: $r, $c");
- $params[$r][] = $this->message[$child_pos]['result'];
- $c++;
- if($c == $this->message[$pos]['arrayCols']){
- $c = 0;
- $r++;
- }
- }
- // array
- } elseif($this->message[$pos]['type'] == 'array' || $this->message[$pos]['type'] == 'Array'){
- $this->debug('adding array '.$this->message[$pos]['name']);
- foreach($children as $child_pos){
- $params[] = &$this->message[$child_pos]['result'];
- }
- // apache Map type: java hashtable
- } elseif($this->message[$pos]['type'] == 'Map' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap'){
- foreach($children as $child_pos){
- $kv = explode("|",$this->message[$child_pos]['children']);
- $params[$this->message[$kv[1]]['result']] = &$this->message[$kv[2]]['result'];
- }
- // generic compound type
- //} elseif($this->message[$pos]['type'] == 'SOAPStruct' || $this->message[$pos]['type'] == 'struct') {
- } else {
- // Apache Vector type: treat as an array
- if ($this->message[$pos]['type'] == 'Vector' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap') {
- $notstruct = 1;
- } else {
- // is array or struct?
- foreach($children as $child_pos){
- if(isset($keys) && isset($keys[$this->message[$child_pos]['name']])){
- $notstruct = 1;
- break;
- }
- $keys[$this->message[$child_pos]['name']] = 1;
- }
- }
- //
- foreach($children as $child_pos){
- if(isset($notstruct)){
- $params[] = &$this->message[$child_pos]['result'];
- } else {
- if (isset($params[$this->message[$child_pos]['name']])) {
- // de-serialize repeated element name into an array
- if (!is_array($params[$this->message[$child_pos]['name']])) {
- $params[$this->message[$child_pos]['name']] = array($params[$this->message[$child_pos]['name']]);
- }
- $params[$this->message[$child_pos]['name']][] = &$this->message[$child_pos]['result'];
- } else {
- $params[$this->message[$child_pos]['name']] = &$this->message[$child_pos]['result'];
- }
- }
- }
- }
- return is_array($params) ? $params : array();
- } else {
- $this->debug('no children');
- if(strpos($this->message[$pos]['cdata'],'&')){
- return strtr($this->message[$pos]['cdata'],array_flip($this->entities));
- } else {
- return $this->message[$pos]['cdata'];
- }
- }
- }
-}
-
-
-
-?><?php
-
-
-
-/**
-*
-* soapclient higher level class for easy usage.
-*
-* usage:
-*
-* // instantiate client with server info
-* $soapclient = new soapclient( string path [ ,boolean wsdl] );
-*
-* // call method, get results
-* echo $soapclient->call( string methodname [ ,array parameters] );
-*
-* // bye bye client
-* unset($soapclient);
-*
-* @author Dietrich Ayala <dietrich@ganx4.com>
-* @access public
-*/
-class soapclient extends nusoap_base {
-
- var $username = '';
- var $password = '';
- var $authtype = '';
- var $requestHeaders = false; // SOAP headers in request (text)
- var $responseHeaders = ''; // SOAP headers from response (incomplete namespace resolution) (text)
- var $document = ''; // SOAP body response portion (incomplete namespace resolution) (text)
- var $endpoint;
- var $error_str = false;
- var $proxyhost = '';
- var $proxyport = '';
- var $proxyusername = '';
- var $proxypassword = '';
- var $xml_encoding = ''; // character set encoding of incoming (response) messages
- var $http_encoding = false;
- var $timeout = 0; // HTTP connection timeout
- var $response_timeout = 30; // HTTP response timeout
- var $endpointType = '';
- var $persistentConnection = false;
- var $defaultRpcParams = false; // This is no longer used
- var $request = ''; // HTTP request
- var $response = ''; // HTTP response
- var $responseData = ''; // SOAP payload of response
- // toggles whether the parser decodes element content w/ utf8_decode()
- var $decode_utf8 = true;
-
- /**
- * fault related variables
- *
- * @var fault
- * @var faultcode
- * @var faultstring
- * @var faultdetail
- * @access public
- */
- var $fault, $faultcode, $faultstring, $faultdetail;
-
- /**
- * constructor
- *
- * @param mixed $endpoint SOAP server or WSDL URL (string), or wsdl instance (object)
- * @param bool $wsdl optional, set to true if using WSDL
- * @param int $portName optional portName in WSDL document
- * @param string $proxyhost
- * @param string $proxyport
- * @param string $proxyusername
- * @param string $proxypassword
- * @param integer $timeout set the connection timeout
- * @param integer $response_timeout set the response timeout
- * @access public
- */
- function soapclient($endpoint,$wsdl = false,$proxyhost = false,$proxyport = false,$proxyusername = false, $proxypassword = false, $timeout = 0, $response_timeout = 30){
- $this->endpoint = $endpoint;
- $this->proxyhost = $proxyhost;
- $this->proxyport = $proxyport;
- $this->proxyusername = $proxyusername;
- $this->proxypassword = $proxypassword;
- $this->timeout = $timeout;
- $this->response_timeout = $response_timeout;
-
- // make values
- if($wsdl){
- $this->endpointType = 'wsdl';
- if (is_object($endpoint) && is_a($endpoint, 'wsdl')) {
- $this->wsdl = $endpoint;
- $this->endpoint = $this->wsdl->wsdl;
- $this->wsdlFile = $this->endpoint;
- $this->debug('existing wsdl instance created from ' . $this->endpoint);
- } else {
- $this->wsdlFile = $this->endpoint;
-
- // instantiate wsdl object and parse wsdl file
- $this->debug('instantiating wsdl class with doc: '.$endpoint);
- $this->wsdl =& new wsdl($this->wsdlFile,$this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword,$this->timeout,$this->response_timeout);
- }
- $this->debug("wsdl debug...\n".$this->wsdl->debug_str);
- $this->wsdl->debug_str = '';
- // catch errors
- if($errstr = $this->wsdl->getError()){
- $this->debug('got wsdl error: '.$errstr);
- $this->setError('wsdl error: '.$errstr);
- } elseif($this->operations = $this->wsdl->getOperations()){
- $this->debug( 'got '.count($this->operations).' operations from wsdl '.$this->wsdlFile);
- } else {
- $this->debug( 'getOperations returned false');
- $this->setError('no operations defined in the WSDL document!');
- }
- }
- }
-
- /**
- * calls method, returns PHP native type
- *
- * @param string $method SOAP server URL or path
- * @param array $params An array, associative or simple, of the parameters
- * for the method call, or a string that is the XML
- * for the call. For rpc style, this call will
- * wrap the XML in a tag named after the method, as
- * well as the SOAP Envelope and Body. For document
- * style, this will only wrap with the Envelope and Body.
- * IMPORTANT: when using an array with document style,
- * in which case there
- * is really one parameter, the root of the fragment
- * used in the call, which encloses what programmers
- * normally think of parameters. A parameter array
- * *must* include the wrapper.
- * @param string $namespace optional method namespace (WSDL can override)
- * @param string $soapAction optional SOAPAction value (WSDL can override)
- * @param boolean $headers optional array of soapval objects for headers
- * @param boolean $rpcParams optional no longer used
- * @param string $style optional (rpc|document) the style to use when serializing parameters (WSDL can override)
- * @param string $use optional (encoded|literal) the use when serializing parameters (WSDL can override)
- * @return mixed
- * @access public
- */
- function call($operation,$params=array(),$namespace='',$soapAction='',$headers=false,$rpcParams=null,$style='rpc',$use='encoded'){
- $this->operation = $operation;
- $this->fault = false;
- $this->error_str = '';
- $this->request = '';
- $this->response = '';
- $this->responseData = '';
- $this->faultstring = '';
- $this->faultcode = '';
- $this->opData = array();
-
- $this->debug("call: $operation, $params, $namespace, $soapAction, $headers, $style, $use; endpointType: $this->endpointType");
- if ($headers) {
- $this->requestHeaders = $headers;
- }
- // serialize parameters
- if($this->endpointType == 'wsdl' && $opData = $this->getOperationData($operation)){
- // use WSDL for operation
- $this->opData = $opData;
- foreach($opData as $key => $value){
- $this->debug("$key -> $value");
- }
- if (isset($opData['soapAction'])) {
- $soapAction = $opData['soapAction'];
- }
- $this->endpoint = $opData['endpoint'];
- $namespace = isset($opData['input']['namespace']) ? $opData['input']['namespace'] : ($namespace != '' ? $namespace : 'http://testuri.org');
- $style = $opData['style'];
- $use = $opData['input']['use'];
- // add ns to ns array
- if($namespace != '' && !isset($this->wsdl->namespaces[$namespace])){
- $this->wsdl->namespaces['nu'] = $namespace;
- }
- $nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);
- // serialize payload
- if (is_string($params)) {
- $this->debug("serializing param string for WSDL operation $operation");
- $payload = $params;
- } elseif (is_array($params)) {
- $this->debug("serializing param array for WSDL operation $operation");
- $payload = $this->wsdl->serializeRPCParameters($operation,'input',$params);
- } else {
- $this->debug('params must be array or string');
- $this->setError('params must be array or string');
- return false;
- }
- $usedNamespaces = $this->wsdl->usedNamespaces;
- // Partial fix for multiple encoding styles in the same function call
- $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
- if (isset($opData['output']['encodingStyle']) && $encodingStyle != $opData['output']['encodingStyle']) {
- $methodEncodingStyle = ' SOAP-ENV:encodingStyle="' . $opData['output']['encodingStyle'] . '"';
- } else {
- $methodEncodingStyle = '';
- }
- $this->debug("wsdl debug: \n".$this->wsdl->debug_str);
- $this->wsdl->debug_str = '';
- if ($errstr = $this->wsdl->getError()) {
- $this->debug('got wsdl error: '.$errstr);
- $this->setError('wsdl error: '.$errstr);
- return false;
- }
- } elseif($this->endpointType == 'wsdl') {
- // operation not in WSDL
- $this->setError( 'operation '.$operation.' not present.');
- $this->debug("operation '$operation' not present.");
- $this->debug("wsdl debug: \n".$this->wsdl->debug_str);
- $this->wsdl->debug_str = '';
- return false;
- } else {
- // no WSDL
- if($namespace == ''){
- $namespace = 'http://testuri.org';
- }
- //$this->namespaces['ns1'] = $namespace;
- $nsPrefix = 'ns1';
- // serialize
- $payload = '';
- if (is_string($params)) {
- $this->debug("serializing param string for operation $operation");
- $payload = $params;
- } elseif (is_array($params)) {
- $this->debug("serializing param array for operation $operation");
- foreach($params as $k => $v){
- $payload .= $this->serialize_val($v,$k,false,false,false,false,$use);
- }
- } else {
- $this->debug('params must be array or string');
- $this->setError('params must be array or string');
- return false;
- }
- $usedNamespaces = array();
- $methodEncodingStyle = '';
- }
- // wrap RPC calls with method element
- if ($style == 'rpc') {
- if ($use == 'literal') {
- $this->debug("wrapping RPC request with literal method element");
- $payload = "<$operation xmlns=\"$namespace\">" . $payload . "</$operation>";
- } else {
- $this->debug("wrapping RPC request with encoded method element");
- $payload = "<$nsPrefix:$operation$methodEncodingStyle xmlns:$nsPrefix=\"$namespace\">" .
- $payload .
- "</$nsPrefix:$operation>";
- }
- }
- // serialize envelope
- $soapmsg = $this->serializeEnvelope($payload,$this->requestHeaders,$usedNamespaces,$style,$use);
- $this->debug("endpoint: $this->endpoint, soapAction: $soapAction, namespace: $namespace, style: $style, use: $use");
- $this->debug('SOAP message length: ' . strlen($soapmsg) . ' contents: ' . substr($soapmsg, 0, 1000));
- // send
- $return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
- if($errstr = $this->getError()){
- $this->debug('Error: '.$errstr);
- return false;
- } else {
- $this->return = $return;
- $this->debug('sent message successfully and got a(n) '.gettype($return).' back');
-
- // fault?
- if(is_array($return) && isset($return['faultcode'])){
- $this->debug('got fault');
- $this->setError($return['faultcode'].': '.$return['faultstring']);
- $this->fault = true;
- foreach($return as $k => $v){
- $this->$k = $v;
- $this->debug("$k = $v<br>");
- }
- return $return;
- } else {
- // array of return values
- if(is_array($return)){
- // multiple 'out' parameters
- if(sizeof($return) > 1){
- return $return;
- }
- // single 'out' parameter
- return array_shift($return);
- // nothing returned (ie, echoVoid)
- } else {
- return "";
- }
- }
- }
- }
-
- /**
- * get available data pertaining to an operation
- *
- * @param string $operation operation name
- * @return array array of data pertaining to the operation
- * @access public
- */
- function getOperationData($operation){
- if(isset($this->operations[$operation])){
- return $this->operations[$operation];
- }
- $this->debug("No data for operation: $operation");
- }
-
- /**
- * send the SOAP message
- *
- * Note: if the operation has multiple return values
- * the return value of this method will be an array
- * of those values.
- *
- * @param string $msg a SOAPx4 soapmsg object
- * @param string $soapaction SOAPAction value
- * @param integer $timeout set connection timeout in seconds
- * @param integer $response_timeout set response timeout in seconds
- * @return mixed native PHP types.
- * @access private
- */
- function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) {
- // detect transport
- switch(true){
- // http(s)
- case ereg('^http',$this->endpoint):
- $this->debug('transporting via HTTP');
- if($this->persistentConnection == true && is_object($this->persistentConnection)){
- $http =& $this->persistentConnection;
- } else {
- $http = new soap_transport_http($this->endpoint);
- if ($this->persistentConnection) {
- $http->usePersistentConnection();
- }
- }
- $http->setContentType($this->getHTTPContentType(), $this->getHTTPContentTypeCharset());
- $http->setSOAPAction($soapaction);
- if($this->proxyhost && $this->proxyport){
- $http->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
- }
- if($this->username != '' && $this->password != '') {
- $http->setCredentials($this->username, $this->password, $this->authtype);
- }
- if($this->http_encoding != ''){
- $http->setEncoding($this->http_encoding);
- }
- $this->debug('sending message, length: '.strlen($msg));
- if(ereg('^http:',$this->endpoint)){
- //if(strpos($this->endpoint,'http:')){
- $this->responseData = $http->send($msg,$timeout,$response_timeout);
- } elseif(ereg('^https',$this->endpoint)){
- //} elseif(strpos($this->endpoint,'https:')){
- //if(phpversion() == '4.3.0-dev'){
- //$response = $http->send($msg,$timeout,$response_timeout);
- //$this->request = $http->outgoing_payload;
- //$this->response = $http->incoming_payload;
- //} else
- if (extension_loaded('curl')) {
- $this->responseData = $http->sendHTTPS($msg,$timeout,$response_timeout);
- } else {
- $this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
- }
- } else {
- $this->setError('no http/s in endpoint url');
- }
- $this->request = $http->outgoing_payload;
- $this->response = $http->incoming_payload;
- $this->debug("transport debug data...\n".$http->debug_str);
-
- // save transport object if using persistent connections
- if ($this->persistentConnection) {
- $http->debug_str = '';
- if (!is_object($this->persistentConnection)) {
- $this->persistentConnection = $http;
- }
- }
-
- if($err = $http->getError()){
- $this->setError('HTTP Error: '.$err);
- return false;
- } elseif($this->getError()){
- return false;
- } else {
- $this->debug('got response, length: '. strlen($this->responseData).' type: '.$http->incoming_headers['content-type']);
- return $this->parseResponse($http->incoming_headers, $this->responseData);
- }
- break;
- default:
- $this->setError('no transport found, or selected transport is not yet supported!');
- return false;
- break;
- }
- }
-
- /**
- * processes SOAP message returned from server
- *
- * @param array $headers The HTTP headers
- * @param string $data unprocessed response data from server
- * @return mixed value of the message, decoded into a PHP type
- * @access protected
- */
- function parseResponse($headers, $data) {
- $this->debug('Entering parseResponse() for data of length ' . strlen($data) . ' and type ' . $headers['content-type']);
- if (!strstr($headers['content-type'], 'text/xml')) {
- $this->setError('Response not of type text/xml');
- return false;
- }
- if (strpos($headers['content-type'], '=')) {
- $enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
- $this->debug('Got response encoding: ' . $enc);
- if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
- $this->xml_encoding = strtoupper($enc);
- } else {
- $this->xml_encoding = 'US-ASCII';
- }
- } else {
- // should be US-ASCII, but for XML, let's be pragmatic and admit UTF-8 is most common
- $this->xml_encoding = 'UTF-8';
- }
- $this->debug('Use encoding: ' . $this->xml_encoding . ' when creating soap_parser');
- $parser = new soap_parser($data,$this->xml_encoding,$this->operation,$this->decode_utf8);
- // add parser debug data to our debug
- $this->debug($parser->debug_str);
- // if parse errors
- if($errstr = $parser->getError()){
- $this->setError( $errstr);
- // destroy the parser object
- unset($parser);
- return false;
- } else {
- // get SOAP headers
- $this->responseHeaders = $parser->getHeaders();
- // get decoded message
- $return = $parser->get_response();
- // add document for doclit support
- $this->document = $parser->document;
- // destroy the parser object
- unset($parser);
- // return decode message
- return $return;
- }
- }
-
- /**
- * set the SOAP headers
- *
- * @param $headers string XML
- * @access public
- */
- function setHeaders($headers){
- $this->requestHeaders = $headers;
- }
-
- /**
- * get the response headers
- *
- * @return mixed object SOAPx4 soapval object or empty if no headers
- * @access public
- */
- function getHeaders(){
- if($this->responseHeaders != '') {
- return $this->responseHeaders;
- }
- }
-
- /**
- * set proxy info here
- *
- * @param string $proxyhost
- * @param string $proxyport
- * @param string $proxyusername
- * @param string $proxypassword
- * @access public
- */
- function setHTTPProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
- $this->proxyhost = $proxyhost;
- $this->proxyport = $proxyport;
- $this->proxyusername = $proxyusername;
- $this->proxypassword = $proxypassword;
- }
-
- /**
- * if authenticating, set user credentials here
- *
- * @param string $username
- * @param string $password
- * @param string $authtype (basic|digest)
- * @access public
- */
- function setCredentials($username, $password, $authtype = 'basic') {
- $this->username = $username;
- $this->password = $password;
- $this->authtype = $authtype;
- }
-
- /**
- * use HTTP encoding
- *
- * @param string $enc
- * @access public
- */
- function setHTTPEncoding($enc='gzip, deflate'){
- $this->http_encoding = $enc;
- }
-
- /**
- * use HTTP persistent connections if possible
- *
- * @access public
- */
- function useHTTPPersistentConnection(){
- $this->persistentConnection = true;
- }
-
- /**
- * gets the default RPC parameter setting.
- * If true, default is that call params are like RPC even for document style.
- * Each call() can override this value.
- *
- * This is no longer used.
- *
- * @access public
- * @deprecated
- */
- function getDefaultRpcParams() {
- return $this->defaultRpcParams;
- }
-
- /**
- * sets the default RPC parameter setting.
- * If true, default is that call params are like RPC even for document style
- * Each call() can override this value.
- *
- * @param boolean $rpcParams
- * @access public
- */
- function setDefaultRpcParams($rpcParams) {
- $this->defaultRpcParams = $rpcParams;
- }
-
- /**
- * dynamically creates proxy class, allowing user to directly call methods from wsdl
- *
- * @return object soap_proxy object
- * @access public
- */
- function getProxy(){
- $evalStr = '';
- foreach($this->operations as $operation => $opData){
- if($operation != ''){
- // create param string
- $paramStr = '';
- if(sizeof($opData['input']['parts']) > 0){
- foreach($opData['input']['parts'] as $name => $type){
- $paramStr .= "\$$name,";
- }
- $paramStr = substr($paramStr,0,strlen($paramStr)-1);
- }
- $opData['namespace'] = !isset($opData['namespace']) ? 'http://testuri.com' : $opData['namespace'];
- $evalStr .= "function $operation ($paramStr){
- // load params into array
- \$params = array($paramStr);
- return \$this->call('$operation',\$params,'".$opData['namespace']."','".(isset($opData['soapAction']) ? $opData['soapAction'] : '')."');
- }";
- unset($paramStr);
- }
- }
- $r = rand();
- $evalStr = 'class soap_proxy_'.$r.' extends soapclient {
- '.$evalStr.'
- }';
- //print "proxy class:<pre>$evalStr</pre>";
- // eval the class
- eval($evalStr);
- // instantiate proxy object
- eval("\$proxy = new soap_proxy_$r('');");
- // transfer current wsdl data to the proxy thereby avoiding parsing the wsdl twice
- $proxy->endpointType = 'wsdl';
- $proxy->wsdlFile = $this->wsdlFile;
- $proxy->wsdl = $this->wsdl;
- $proxy->operations = $this->operations;
- $proxy->defaultRpcParams = $this->defaultRpcParams;
- // transfer other state
- $proxy->username = $this->username;
- $proxy->password = $this->password;
- $proxy->proxyhost = $this->proxyhost;
- $proxy->proxyport = $this->proxyport;
- $proxy->proxyusername = $this->proxyusername;
- $proxy->proxypassword = $this->proxypassword;
- $proxy->timeout = $this->timeout;
- $proxy->response_timeout = $this->response_timeout;
- $proxy->http_encoding = $this->http_encoding;
- $proxy->persistentConnection = $this->persistentConnection;
- return $proxy;
- }
-
- /**
- * gets the HTTP body for the current request.
- *
- * @param string $soapmsg The SOAP payload
- * @return string The HTTP body, which includes the SOAP payload
- * @access protected
- */
- function getHTTPBody($soapmsg) {
- return $soapmsg;
- }
-
- /**
- * gets the HTTP content type for the current request.
- *
- * Note: getHTTPBody must be called before this.
- *
- * @return string the HTTP content type for the current request.
- * @access protected
- */
- function getHTTPContentType() {
- return 'text/xml';
- }
-
- /**
- * gets the HTTP content type charset for the current request.
- * returns false for non-text content types.
- *
- * Note: getHTTPBody must be called before this.
- *
- * @return string the HTTP content type charset for the current request.
- * @access protected
- */
- function getHTTPContentTypeCharset() {
- return $this->soap_defencoding;
- }
-
- /*
- * whether or not parser should decode utf8 element content
- *
- * @return always returns true
- * @access public
- */
- function decodeUTF8($bool){
- $this->decode_utf8 = $bool;
- return true;
- }
-}
-?>
diff --git a/tests/.htaccess b/tests/.htaccess
new file mode 100644
index 000000000000..3a4288278871
--- /dev/null
+++ b/tests/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/texvc.phtml b/texvc.phtml
deleted file mode 100644
index 7f427d8916a1..000000000000
--- a/texvc.phtml
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-include( "./LocalSettings.php" );
-include( "Setup.php" );
-header( "Content-type: text/xml; charset={$wgInputEncoding}" );
-print "<";
-print "?xml version=\"1.0\" encoding=\"utf-8\"?";
-print ">";
-?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><title>texvc</title></head><body>
-<?php
-print "<form method=\"post\" action=\"{$wgServer}{$wgScriptPath}/texvc_cgi.phtml\">"
-?>
-<textarea name='math' rows='10' cols='80'><?php
- global $math;
- $math = preg_replace ("/\\\\\\\\/", '\\', $math);
- print $math;
-?></textarea><br /><input type="submit" value="Preview" name="preview" /></form>
-<?php
-function xlinkToMathImage ( $tex, $outputhash )
-{
- global $wgMathPath;
- return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\" />";
-}
-
-function texvc_cgi_renderMath( $tex )
-{
- global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding;
- $dbr =& wfGetDB( DB_SLAVE );
- $mf = wfMsg( "math_failure" );
- $munk = wfMsg( "math_unknown_error" );
-
- $image = "";
- $outhtml = "";
- $outtex = "";
-
- $fname = "texvc_cgi_renderMath";
-
- $md5 = md5($tex);
- $md5_sql = pack("H32", $md5);
-
- $mathTable = $dbr->tableName( 'math' );
- $rpage = $dbr->selectRow( 'math', array('math_outputhash','math_html_conservativeness','math_html','math_mathml'),
- array( 'math_inputhash' => $md5_sql ) );
-
- if ( $rpage === false )
- {
- $cmd = "./math/texvc ".wfEscapeShellArg($wgTmpDirectory)." ".
- wfEscapeShellArg($wgMathDirectory)." ".wfEscapeShellArg($tex)." ".wfEscapeShellArg($wgInputEncoding);
- $contents = `$cmd`;
-
- if (strlen($contents) == 0)
- return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
- $retval = substr ($contents, 0, 1);
-
- if (($retval == "C") || ($retval == "M") || ($retval == "L")) {
- if ($retval == "C")
- $conservativeness = 2;
- else if ($retval == "M")
- $conservativeness = 1;
- else
- $conservativeness = 0;
- $outdata = substr ($contents, 33);
-
- $i = strpos($outdata, "\000");
-
- $outhtml = substr($outdata, 0, $i);
- $mathml = substr($outdata, $i+1);
-
- #$sql_html = "'".mysql_escape_string($outhtml)."'";
- #$sql_mathml = "'".mysql_escape_string($mathml)."'";
- } else if (($retval == "c") || ($retval == "m") || ($retval == "l")) {
- $outhtml = substr ($contents, 33);
- if ($retval == "c")
- $conservativeness = 2;
- else if ($retval == "m")
- $conservativeness = 1;
- else
- $conservativeness = 0;
- #$sql_html = "'".mysql_escape_string($outhtml)."'";
- $mathml = NULL;
- #$sql_mathml = 'NULL';
- } else if ($retval == "X") {
- $outhtml = NULL;
- $mathml = substr ($contents, 33);
- #$sql_html = 'NULL';
- #$sql_mathml = "'".mysql_escape_string($mathml)."'";
- $conservativeness = 0;
- } else if ($retval == "+") {
- $outhtml = NULL;
- $mathml = NULL;
- #$sql_html = 'NULL';
- #$sql_mathml = 'NULL';
- $conservativeness = 0;
- } else {
- if ($retval == "E")
- $errmsg = wfMsg( "math_lexing_error" );
- else if ($retval == "S")
- $errmsg = wfMsg( "math_syntax_error" );
- else if ($retval == "F")
- $errmsg = wfMsg( "math_unknown_function" );
- else
- $errmsg = $munk;
- return "<h3>".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."</h3>";
- }
-
- $outmd5 = substr ($contents, 1, 32);
- if (!preg_match("/^[a-f0-9]{32}$/", $outmd5))
- return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
-
- $outmd5_sql = pack("H32", $outmd5);
-
- # Someone may have inserted the same hash since the SELECT, but that's no big deal, just ignore errors
- $dbw =& wfGetDB( DB_MASTER );
- $dbw->insert( 'math',
- array(
- 'math_inputhash' => $md5_sql,
- 'math_outputhash' => $outmd5_sql,
- 'math_html_conservativeness' => $conservativeness,
- 'math_html' => $outhtml,
- 'math_mathml' => $mathml,
- ), $fname, array( 'IGNORE' )
- );
-
-// we don't really care if it fails
- } else {
- $outmd5 = unpack ("H32md5", $rpage->math_outputhash);
- $outmd5 = $outmd5 ['md5'];
- $outhtml = $rpage->math_html;
- $conservativeness = $rpage->math_html_conservativeness;
- $mathml = $rpage->math_mathml;
- }
- if ( is_null( $mathml ) || $mathml === '' )
- $mathml = "<h3>Failed to generate MathML</h3>";
- else
- $mathml = "<h3>MathML</h3><math xmlns=\"http://www.w3.org/1998/Math/MathML\">$mathml</math>";
- $image = "<h3>Image</h3>" . xlinkToMathImage ( $tex, $outmd5 );
- $cmd = "./math/texvc_tex ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
- $outtex = `$cmd`;
-
- if ( is_null( $outhtml ) || $outhtml === '' )
- $outhtml = "<h3>Failed to generate HTML</h3>";
- else
- if ( $conservativeness == 2)
- $outhtml = "<h3>HTML (conservative)</h3>" . $outhtml;
- else if ( $conservativeness == 1)
- $outhtml = "<h3>HTML (moderate)</h3>" . $outhtml;
- else
- $outhtml = "<h3>HTML (liberal)</h3>" . $outhtml;
-
- if ( $outtex == '' )
- $outtex = "<h3>Failed to generate TeX</h3>";
- else
- $outtex = "<h3>TeX</h3>" . wfEscapeHTML($outtex);
-
- return $outtex . $outhtml . $mathml . $image;
-}
-
-global $math;
-if ($math != '')
- print texvc_cgi_renderMath($math);
-?>
-</body></html>