r50408 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r50407‎ | r50408 | r50409 >
Date:03:09, 10 May 2009
Author:laner
Status:deferred
Tags:
Comment:
Initial import of the Plotters extension.

This extension allows users to create client side graphs (like pie, bar, etc) from data using javascript. The javascript is created by sysops in the MediaWiki namespace. Adding new scripts works like the Gadgets extension (as this extension borrows heavily from Gadgets).

Preprocessing scripts, and plotting scripts are available, and the javascript function for each should be defined as follows:

/* For preprocessing scripts */
function plotter_<functionname>_process( $data, $arg1, $arg2, ... ) {
...
}

/* For plotting scripts */
function plotter_<functionname>_draw( $data, $arg1, $arg2, ... ) {
...
}

You can use these in a parser function like so:

{{#plot:
|script=<functionname>
|data=1,2
3,4}}

Currently, only PlotKit is supported; but other javascript plotting libraries will be supported in the future.

This code is very alpha quality right now; many features may not work.
Modified paths:
  • /trunk/extensions/Plotter (added) (history)
  • /trunk/extensions/Plotter/README (added) (history)
  • /trunk/extensions/Plotter/SmoothGallery.i18n.php (added) (history)
  • /trunk/extensions/Plotter/SmoothGallery.php (added) (history)
  • /trunk/extensions/Plotter/SmoothGalleryClass.php (added) (history)
  • /trunk/extensions/Plotter/SmoothGalleryParser.php (added) (history)
  • /trunk/extensions/Plotter/jd.gallery.css.patch (added) (history)
  • /trunk/extensions/Plotter/jd.gallery.js.patch (added) (history)

Diff [purge]

Index: trunk/extensions/Plotter/SmoothGallery.php
@@ -0,0 +1,152 @@
 2+<?php
 3+# Copyright (C) 2004 Ryan Lane <rlane32@gmail.com>
 4+#
 5+# This program is free software; you can redistribute it and/or modify
 6+# it under the terms of the GNU General Public License as published by
 7+# the Free Software Foundation; either version 2 of the License, or
 8+# (at your option) any later version.
 9+#
 10+# This program is distributed in the hope that it will be useful,
 11+# but WITHOUT ANY WARRANTY; without even the implied warranty of
 12+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 13+# GNU General Public License for more details.
 14+#
 15+# You should have received a copy of the GNU General Public License along
 16+# with this program; if not, write to the Free Software Foundation, Inc.,
 17+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 18+# http://www.gnu.org/copyleft/gpl.html
 19+
 20+# SmoothGallery extension. Creates galleries of images that are in your wiki.
 21+#
 22+# SmoothGallery.php
 23+#
 24+# Extension info available at http://www.mediawiki.org/wiki/Extension:SmoothGallery
 25+# SmoothGallery available at http://smoothgallery.jondesign.net/
 26+#
 27+# sgallery Parser Function changes contributed by David Claughton <dave@eclecticdave.com>
 28+# infopane sliding and opacity patch provided by David Claughton <dave@eclecticdave.com>
 29+
 30+if( !defined( 'MEDIAWIKI' ) )
 31+ die( -1 );
 32+
 33+/**
 34+ * Add extension information to Special:Version
 35+ */
 36+$wgExtensionCredits['other'][] = array(
 37+ 'path' => __FILE__,
 38+ 'name' => 'SmoothGallery parser extension',
 39+ 'version' => '1.1d',
 40+ 'author' => 'Ryan Lane',
 41+ 'description' => 'Allows users to create galleries with images that have been uploaded. Allows most options of SmoothGallery',
 42+ 'descriptionmsg' => 'smoothgallery-desc',
 43+ 'url' => 'http://www.mediawiki.org/wiki/Extension:SmoothGallery',
 44+);
 45+
 46+$wgExtensionFunctions[] = "efSmoothGallery";
 47+
 48+$wgHooks['OutputPageParserOutput'][] = 'smoothGalleryParserOutput';
 49+$wgHooks['LanguageGetMagic'][] = 'smoothGalleryLanguageGetMagic';
 50+
 51+$dir = dirname(__FILE__) . '/';
 52+$wgExtensionMessagesFiles['SmoothGallery'] = $dir . 'SmoothGallery.i18n.php';
 53+$wgAutoloadClasses['SmoothGallery'] = $dir . 'SmoothGalleryClass.php';
 54+$wgAutoloadClasses['SmoothGalleryParser'] = $dir . 'SmoothGalleryParser.php';
 55+
 56+//sane defaults. always initialize to avoid register_globals vulnerabilities
 57+$wgSmoothGalleryDelimiter = "\n";
 58+$wgSmoothGalleryExtensionPath = $wgScriptPath . '/extensions/SmoothGallery';
 59+$wgSmoothGalleryAllowExternal = false;
 60+$wgSmoothGalleryThumbHeight = "75px";
 61+$wgSmoothGalleryThumbWidth = "100px";
 62+
 63+function efSmoothGallery() {
 64+ global $wgParser;
 65+
 66+ $wgParser->setHook( 'sgallery', 'initSmoothGallery' );
 67+ $wgParser->setHook( 'sgalleryset', 'initSmoothGallerySet' );
 68+
 69+ $wgParser->setFunctionHook( 'sgallery', 'initSmoothGalleryPF' );
 70+}
 71+
 72+function initSmoothGalleryPF( &$parser ) {
 73+ global $wgSmoothGalleryDelimiter;
 74+
 75+ $numargs = func_num_args();
 76+ if ( $numargs < 2 ) {
 77+ $input = "#SmoothGallery: no arguments specified";
 78+ return str_replace( '§', '<', '§pre>§nowiki>' . $input . '§/nowiki>§/pre>' );
 79+ }
 80+
 81+ // fetch all user-provided arguments (skipping $parser)
 82+ $input = "";
 83+ $argv = array();
 84+ $arg_list = func_get_args();
 85+ for ( $i = 1; $i < $numargs; $i++ ) {
 86+ $p1 = $arg_list[$i];
 87+
 88+ $aParam = explode( '=', $p1, 2 );
 89+ if ( count( $aParam ) < 2 ) {
 90+ continue;
 91+ }
 92+ SmoothGallery::debug( 'sgallery tag parameter: ', $aParam );
 93+ if ( $aParam[0] == "imagelist" ) {
 94+ $input = $aParam[1];
 95+ continue;
 96+ }
 97+ $sKey = trim( $aParam[0] );
 98+ $sVal = trim( $aParam[1] );
 99+
 100+ if ( $sKey != '' ){
 101+ $argv[$sKey] = $sVal;
 102+ }
 103+ }
 104+
 105+ $output = initSmoothGallery( $input, $argv, $parser );
 106+ return array( $output, 'noparse' => true, 'isHTML' => true);
 107+}
 108+
 109+function initSmoothGallery( $input, $argv, &$parser, $calledAsSet=false ) {
 110+ $sgParser = new SmoothGalleryParser( $input, $argv, $parser, $calledAsSet );
 111+ $sgGallery = new SmoothGallery();
 112+
 113+ $sgGallery->setParser( $parser );
 114+ $sgGallery->setSet( $calledAsSet );
 115+ $sgGallery->setArguments( $sgParser->getArguments() );
 116+ $sgGallery->setGalleries( $sgParser->getGalleries() );
 117+
 118+ $sgGallery->checkForErrors();
 119+ if ( $sgGallery->hasErrors() ) {
 120+ return $sgGallery->getErrors();
 121+ } else {
 122+ return $sgGallery->toHTML();
 123+ }
 124+}
 125+
 126+function initSmoothGallerySet( $input, $args, &$parser ) {
 127+ $output = initSmoothGallery( $input, $args, $parser, true );
 128+
 129+ return $output;
 130+}
 131+
 132+/**
 133+ * Hook callback that injects messages and things into the <head> tag
 134+ * Does nothing if $parserOutput->mSmoothGalleryTag is not set
 135+ */
 136+function smoothGalleryParserOutput( &$outputPage, &$parserOutput ) {
 137+ if ( !empty( $parserOutput->mSmoothGalleryTag ) ) {
 138+ SmoothGallery::setGalleryHeaders( $outputPage );
 139+ }
 140+ if ( !empty( $parserOutput->mSmoothGallerySetTag ) ) {
 141+ SmoothGallery::setGallerySetHeaders( $outputPage );
 142+ }
 143+ return true;
 144+}
 145+
 146+/**
 147+ * We ignore langCode - parser function names can be translated but
 148+ * we are not using this feature
 149+ */
 150+function smoothGalleryLanguageGetMagic( &$magicWords, $langCode ) {
 151+ $magicWords['sgallery'] = array(0, 'sgallery');
 152+ return true;
 153+}
Property changes on: trunk/extensions/Plotter/SmoothGallery.php
___________________________________________________________________
Name: svn:eol-style
1154 + native
Index: trunk/extensions/Plotter/jd.gallery.css.patch
@@ -0,0 +1,40 @@
 2+--- ../../SmoothGallery-1.0.1/css/jd.gallery.css 2006-12-23 11:35:13.000000000 -0600
 3+@@ -81,7 +81,7 @@
 4+ .jdGallery div.carouselContainer
 5+ {
 6+ position: absolute;
 7+- height: 135px;
 8++ height: 160px;
 9+ width: 100%;
 10+ z-index: 10;
 11+ margin: 0px;
 12+@@ -111,7 +111,7 @@
 13+ margin: 0px;
 14+ left: 0;
 15+ top: 0;
 16+- height: 115px;
 17++ height: 140px;
 18+ background: #333;
 19+ color: #fff;
 20+ text-indent: 0;
 21+@@ -122,7 +122,7 @@
 22+ {
 23+ position: absolute;
 24+ width: 100%;
 25+- height: 78px;
 26++ height: 123px;
 27+ top: 10px;
 28+ left: 0;
 29+ overflow: hidden;
 30+@@ -212,8 +212,10 @@
 31+ {
 32+ left: 0;
 33+ top: 0;
 34++ /*
 35+ width: 100%;
 36+ height: 100%;
 37++ */
 38+ }
 39+
 40+ .withArrows a.open
Index: trunk/extensions/Plotter/jd.gallery.js.patch
@@ -0,0 +1,12 @@
 2+--- ../../SmoothGallery-1.0.1/scripts/jd.gallery.js 2006-12-30 05:52:54.000000000 -0600
 3+@@ -315,7 +315,8 @@
 4+
 5+ this.constructThumbnails();
 6+
 7+- this.carouselInner.style.width = ((this.maxIter * (this.options.thumbWidth + this.options.thumbSpacing)) - this.options.thumbSpacing + this.options.thumbWidth) + "px";
 8++ /*this.carouselInner.style.width = ((this.maxIter * (this.options.thumbWidth + this.options.thumbSpacing)) - this.options.thumbSpacing + this.options.thumbWidth) + "px";*/
 9++ this.carouselInner.style.width = ((this.maxIter * (this.options.thumbWidth + this.options.thumbSpacing + 8)) + this.options.thumbSpacing) + "px";
 10+ },
 11+ toggleCarousel: function() {
 12+ if (this.carouselActive)
Index: trunk/extensions/Plotter/SmoothGalleryClass.php
@@ -0,0 +1,335 @@
 2+<?php
 3+
 4+class SmoothGallery {
 5+
 6+ var $parser;
 7+ var $set;
 8+ var $argumentArray, $galleriesArray;
 9+ var $errors;
 10+
 11+ function hasErrors() {
 12+ if ( $this->errors == '' ) {
 13+ return false;
 14+ } else {
 15+ return true;
 16+ }
 17+ }
 18+
 19+ function getErrors() {
 20+ return $this->errors;
 21+ }
 22+
 23+ function checkForErrors() {
 24+ foreach ( $this->galleriesArray["galleries"] as $galleryArray ) {
 25+ //We are being harsh for gallery sets.
 26+ //If even one gallery is missing all images, we
 27+ //are going to return an error to the user.
 28+ if ( !isset( $galleryArray["images"] ) ) {
 29+ wfLoadExtensionMessages( 'SmoothGallery' );
 30+ $error = wfMsg( "smoothgallery-error" );
 31+
 32+ if ( isset( $galleryArray["missing_images"] ) && isset( $galleryArray["invalid_images"] ) ) {
 33+ $error .= wfMsg( "smoothgallery-no-images", implode( ", " , $galleryArray["missing_images"] , count($galleryArray["missing_images"]) , count($galleryArray["missing_images"]) + count($galleryArray["invalid_images"]) ) ); // FIXME: 3rd (last) parameter should have the number of good images added.
 34+ $error .= wfMsg( "smoothgallery-invalid-images", implode( ", " , $galleryArray["invalid_images"] , count($galleryArray["invalid_images"]) ) );
 35+ } else if ( isset( $galleryArray["invalid_images"] ) ) {
 36+ $error .= wfMsg( "smoothgallery-invalid-images", implode( ", " , $galleryArray["invalid_images"] , count($galleryArray["invalid_images"]) ) );
 37+ } else if ( isset( $galleryArray["missing_images"] ) ) {
 38+ $error .= wfMsg( "smoothgallery-no-images", implode( ", " , $galleryArray["missing_images"] , count($galleryArray["missing_images"]) , count($galleryArray["missing_images"]) ) ); // FIXME: 3rd (last) parameter should have the number of good images added.
 39+ } else {
 40+ $error .= wfMsg( "smoothgallery-not-found" );
 41+ }
 42+
 43+ if ( $this->errors == '' ) {
 44+ $this->errors = $error;
 45+ } else {
 46+ $this->errors .= "<br />" . $error;
 47+ }
 48+ }
 49+ }
 50+
 51+ }
 52+
 53+ function setArguments( $argumentArray ) {
 54+ $this->argumentArray = $argumentArray;
 55+ }
 56+
 57+ function setGalleries( $galleriesArray ) {
 58+ $this->galleriesArray = $galleriesArray;
 59+ }
 60+
 61+ function setParser( &$parser ) {
 62+ $this->parser = $parser;
 63+ }
 64+
 65+ function setSet( $calledAsSet ) {
 66+ $this->set = $calledAsSet;
 67+ }
 68+
 69+ function toHTML () {
 70+ $output = '';
 71+ $fallbackOutput = '';
 72+
 73+ if ( $this->set ) {
 74+ //Open the div, and initialize any needed variables
 75+ $output = '<div id="' . $this->galleriesArray["gallery_set_name"] . '" style="width: ' . $this->argumentArray["width"] . ';height: ' . $this->argumentArray["height"] . '; display: none;" >';
 76+
 77+ //iterate through galleries, call renderGallery on each, and
 78+ //collect the fallback output
 79+ $i = 1;
 80+ foreach ( $this->galleriesArray["galleries"] as $galleryArray ) {
 81+ $output .= $this->renderGallery( $galleryArray );
 82+ $fallbackOutput .= $this->renderFallback( $galleryArray );
 83+ $i++;
 84+ }
 85+
 86+ $output .= '</div>';
 87+ $output .= '<div id="' . $this->galleriesArray["gallery_set_name"] . '-fallback">' . $fallbackOutput . '</div>';
 88+ $output .= $this->renderJavascript( $this->galleriesArray["gallery_set_name"] );
 89+ } else {
 90+ $output = $this->renderGallery( $this->galleriesArray["galleries"][0] );
 91+ $output .= $this->renderFallback( $this->galleriesArray["galleries"][0] );
 92+ $output .= $this->renderJavascript( $this->galleriesArray["galleries"][0]["gallery_name"] );
 93+ }
 94+
 95+ # flags for use by smoothGalleryParserOutput
 96+ $this->parser->mOutput->mSmoothGalleryTag = true;
 97+ if ( $this->set ) {
 98+ $this->parser->mOutput->mSmoothGallerySetTag = true;
 99+ }
 100+
 101+ //Finished, let's send it out
 102+ return $output;
 103+ }
 104+
 105+ function renderGallery ( $galleryArray ) {
 106+ global $wgSmoothGalleryDelimiter;
 107+ global $wgSmoothGalleryThumbHeight, $wgSmoothGalleryThumbWidth;
 108+
 109+ //Open the outer div of the gallery
 110+ if ( $this->set ) {
 111+ $output = '<div id="' . $galleryArray["gallery_name"] . '" class="galleryElement">';
 112+ $output .= '<h2>' . $galleryArray["gallery_name"] . '<h2>';
 113+ } else {
 114+ $output = '<div id="' . $galleryArray["gallery_name"] . '" style="width: ' . $this->argumentArray["width"] . ';height: ' . $this->argumentArray["height"] . '; display:none;">';
 115+ }
 116+
 117+ //TODO iterate over the images and output each
 118+ foreach ( $galleryArray["images"] as $imageArray ) {
 119+ if ( isset( $imageArray["external"] ) && $imageArray["external"] ) {
 120+ $thumbsizes = 'height="' . $wgSmoothGalleryThumbHeight . '" width="' . $wgSmoothGalleryThumbWidth . '" ';
 121+ $fullsizes = 'height="' . $this->argumentArray["height"] . '" width="' . $this->argumentArray["width"] . '" ';
 122+ } else {
 123+ $thumbsizes = '';
 124+ $fullsizes = '';
 125+ }
 126+ //Add the html for the image
 127+ $output .= '<div class="imageElement">';
 128+ $output .= '<h3>' . $imageArray["heading"] . '</h3>';
 129+ $output .= '<p>' . $imageArray["description"] . '</p>';
 130+ $output .= '<a href="' . $imageArray["full_url"] . '" title="open image" class="open"></a>';
 131+ $output .= '<a href="' . $imageArray["view_url"] . '" title="open image" class="open"></a>';
 132+ $output .= '<img src="' . $imageArray["full_thumb_url"] . '" class="full" alt="' . $imageArray["description"] . '" ' . $fullsizes . '/>';
 133+
 134+ if ( $this->argumentArray["carousel"] ) {
 135+ $output .= '<img src="' . $imageArray["icon_thumb_url"] . '" class="thumbnail" alt="' . $imageArray["description"] . '" ' . $thumbsizes . '/>';
 136+ }
 137+
 138+ $output .= '</div>';
 139+ }
 140+
 141+
 142+ //Close the outer div of the gallery
 143+ $output .= '</div>';
 144+
 145+ return $output;
 146+ }
 147+
 148+ function renderFallback ( $galleryArray ) {
 149+ $output = '';
 150+
 151+ if ( !isset( $galleryArray["images"] ) ) {
 152+ return $output;
 153+ }
 154+
 155+ if ( $this->argumentArray["fallback"] == "image" ) {
 156+ if ( !isset( $galleryArray["images"][0] ) ) {
 157+ return '';
 158+ }
 159+
 160+ $output .= '<div id="' . $galleryArray['gallery_name'] . '-fallback" class="MediaWikiSGallerySingleImage" style="width: ' . $this->argumentArray["width"] . ';height: ' . $this->argumentArray["height"] . ';" alt="' . $galleryArray["images"][0]["description"] . '">';
 161+ $output .= '<img src="' . $galleryArray["images"][0]["full_thumb_url"] . '" class="full" alt="' . $galleryArray["images"][0]["description"] . '" />';
 162+ $output .= '</div>';
 163+ } elseif ( $this->argumentArray["fallback"] == "image-warn" ) {
 164+ if ( !isset( $galleryArray["images"][0] ) ) {
 165+ return '';
 166+ }
 167+
 168+ $output .= '<div id="' . $galleryArray['gallery_name'] . '-fallback" class="MediaWikiSGalleryWarning" style="width: ' . $this->argumentArray["width"] . ';height: ' . $this->argumentArray["height"] . ';" alt="' . $galleryArray["images"][0]["description"] . '">';
 169+
 170+ wfLoadExtensionMessages( 'SmoothGallery' );
 171+ $output .= wfMsg("smoothgallery-javascript-disabled");
 172+
 173+ $output .= '<div class="MediaWikiSGallerySingleImage">';
 174+ $output .= '<img src="' . $galleryArray["images"][0]["full_thumb_url"] . '" class="full" alt="' . $galleryArray["images"][0]["description"] . '" />';
 175+ $output .= '</div></div>';
 176+ } else {
 177+ $output .= $this->renderPlainGallery ( $galleryArray );
 178+ }
 179+
 180+ return $output;
 181+ }
 182+
 183+ function renderPlainGallery ( $galleryArray ) {
 184+ global $wgVersion;
 185+
 186+ if ( !isset( $galleryArray["images"] ) ) {
 187+ return '';
 188+ }
 189+
 190+ //Wrapper div for plain old gallery, to be shown per default, if JS is off.
 191+ $output = '<div id="' . $galleryArray["gallery_name"] . '-fallback">';
 192+
 193+ $plain_gallery = new ImageGallery();
 194+
 195+ $i = 0;
 196+ foreach ( $galleryArray["images"] as $image ) {
 197+ if ( isset( $image["external"] ) && $image["external"] ) {
 198+ continue;
 199+ }
 200+
 201+ if ( version_compare( $wgVersion, "1.11", '<' ) ) {
 202+ $plain_gallery->add( $image["image_object"], $image["description"] ); //TODO: use text
 203+ } else {
 204+ $plain_gallery->add( $image["image_object"]->getTitle(), $image["description"] ); //TODO: use text
 205+ }
 206+ $i++;
 207+ }
 208+
 209+ // Return an empty div if there are no usable images in the gallery.
 210+ // This can happen if all images are external.
 211+ if ( $i == 0 ) {
 212+ return $output . '</div>';
 213+ }
 214+
 215+ $output .= $plain_gallery->toHTML();
 216+
 217+ //Close the wrapper div for the plain old gallery
 218+ $output .= '</div>';
 219+
 220+ return $output;
 221+ }
 222+
 223+ function renderJavascript ( $name ) {
 224+ //Output the javascript needed for the gallery with any
 225+ //options the user requested
 226+ $output = '<script type="text/javascript">';
 227+
 228+ $output .= 'document.getElementById("' . $name . '-fallback").style.display = "none";'; //hide plain gallery
 229+ $output .= 'document.getElementById("' . $name . '").style.display = "block";'; //show smooth gallery
 230+
 231+ $output .= 'function startGallery_' . $name . '() {';
 232+ if ( $this->set ) {
 233+ $output .= "var MediaWikiSGallerySet = new gallerySet($('" . $name . "'), {";
 234+ } else {
 235+ $output .= "var MediaWikiSGallery = new gallery($('" . $name . "'), {";
 236+ }
 237+
 238+ $output .= 'thumbWidth: 100, thumbHeight: 75'; //would be nice if we could change this to 120x120 to re-use thumbnails...
 239+
 240+ //Add user provided options
 241+ if ( $this->argumentArray["timed"] ) {
 242+ $output .= ', timed: true';
 243+ $output .= ', delay: ' . $this->argumentArray["delay"];
 244+ }
 245+
 246+ if ( !$this->argumentArray["carousel"] ) {
 247+ $output .= ', showCarousel: false';
 248+ }
 249+
 250+ if ( !$this->argumentArray["showarrows"] ) {
 251+ $output .= ', showArrows: false';
 252+ }
 253+
 254+ if ( !$this->argumentArray["showinfopane"] ) {
 255+ $output .= ', showInfopane: false';
 256+ }
 257+
 258+ if ( !$this->argumentArray["slideinfozoneslide"] ) {
 259+ $output .= ', slideInfoZoneSlide: false';
 260+ }
 261+
 262+ if ( $this->argumentArray["slideinfozoneopacity"] ) {
 263+ $output .= ', slideInfoZoneOpacity: ' . $this->argumentArray["slideinfozoneopacity"];
 264+ }
 265+
 266+ #$output .= ', useHistoryManager: true';
 267+ #$output .= ', preloader: true';
 268+ #$output .= ', preloaderImage: true';
 269+ #$output .= ', preloaderErrorImage: true';
 270+ #$output .= ', carouselPreloader: true';
 271+ #$output .= ", textPreloadingCarousel: '" . wfMsg("smoothgallery-loading") . "'";
 272+
 273+ $output .= '});';
 274+ #$output .= 'HistoryManager.start();';
 275+ $output .= '}';
 276+ $output .= "window.addEvent('domready', startGallery_$name);";
 277+ #$output .= 'addOnloadHook(startGallery_' . $name . ');';
 278+ $output .= '</script>';
 279+
 280+ return $output;
 281+ }
 282+
 283+ static function setGalleryHeaders( &$outputPage ) {
 284+ global $wgSmoothGalleryExtensionPath;
 285+
 286+ $extensionpath = $wgSmoothGalleryExtensionPath;
 287+
 288+ //Add mootools (required by SmoothGallery)
 289+ //You can use the compressed js if you want, but I
 290+ //generally don't trust them unless I wrote them myself
 291+ $outputPage->addScript( '<script src="' . $extensionpath . '/scripts/mootools.uncompressed.js" type="text/javascript"></script>' );
 292+
 293+ //Add SmoothGallery javascript
 294+ $outputPage->addScript( '<script src="' . $extensionpath . '/scripts/jd.gallery.js" type="text/javascript"></script>' );
 295+ $outputPage->addScript( '<script src="' . $extensionpath . '/scripts/HistoryManager.js" type="text/javascript"></script>' );
 296+
 297+ //Add SmoothGallery css
 298+ $outputPage->addLink(
 299+ array(
 300+ 'rel' => 'stylesheet',
 301+ 'type' => 'text/css',
 302+ 'href' => $extensionpath . '/css/jd.gallery.css'
 303+ )
 304+ );
 305+
 306+ #$outputPage->addScript( '<link rel="stylesheet" href="' . $extensionpath . '/css/jd.gallery.css" type="text/css" media="screen" charset="utf-8" />' );
 307+
 308+ $outputPage->addScript( '<style type="text/css">.jdGallery .slideInfoZone { overflow:auto ! important; }</style>' );
 309+
 310+ return true;
 311+ }
 312+
 313+ static function setGallerySetHeaders( &$outputPage ) {
 314+ global $wgSmoothGalleryExtensionPath;
 315+
 316+ $extensionpath = $wgSmoothGalleryExtensionPath;
 317+ $outputPage->addScript( '<script src="' . $extensionpath . '/scripts/jd.gallery.set.js" type="text/javascript"></script>' );
 318+
 319+ return true;
 320+ }
 321+
 322+ static function debug( $debugText, $debugArr = null ) {
 323+ global $wgSmoothGalleryDebug;
 324+
 325+ if ( isset( $debugArr ) ) {
 326+ if ( $wgSmoothGalleryDebug > 0 ) {
 327+ $text = $debugText . " " . implode( "::", $debugArr );
 328+ wfDebugLog( 'sgallery', $text, false );
 329+ }
 330+ } else {
 331+ if ( $wgSmoothGalleryDebug > 0 ) {
 332+ wfDebugLog( 'sgallery', $debugText, false );
 333+ }
 334+ }
 335+ }
 336+}
Property changes on: trunk/extensions/Plotter/SmoothGalleryClass.php
___________________________________________________________________
Name: svn:eol-style
1337 + native
Index: trunk/extensions/Plotter/SmoothGalleryParser.php
@@ -0,0 +1,330 @@
 2+<?php
 3+
 4+class SmoothGalleryParser {
 5+
 6+ var $set;
 7+ var $argumentArray;
 8+ var $galleriesArray;
 9+
 10+ function SmoothGalleryParser( $input, $argv, &$parser, $calledAsSet=false ) {
 11+ $this->set = $calledAsSet;
 12+ $this->parseArguments( $argv );
 13+ $this->parseGalleries( $input, $parser );
 14+ }
 15+
 16+ function getArguments() {
 17+ return $this->argumentArray;
 18+ }
 19+
 20+ function getGalleries() {
 21+ return $this->galleriesArray;
 22+ }
 23+
 24+ function parseArguments( $argv ) {
 25+ //Parse arguments, set defaults, and do sanity checks
 26+ if ( isset( $argv["height"] ) && is_numeric( $argv["height"] ) ) {
 27+ $this->argumentArray["height"] = $argv["height"] . "px";
 28+ } else {
 29+ $this->argumentArray["height"] = "300px";
 30+ }
 31+
 32+ if ( isset( $argv["width"] ) && is_numeric( $argv["width"] ) ) {
 33+ $this->argumentArray["width"] = $argv["width"] . "px";
 34+ } else {
 35+ $this->argumentArray["width"] = "400px";
 36+ }
 37+
 38+ if ( isset( $argv["showcarousel"] ) && $argv["showcarousel"] == "false" ) {
 39+ $this->argumentArray["carousel"] = false;
 40+ } else {
 41+ $this->argumentArray["carousel"] = true;
 42+ }
 43+
 44+ if ( isset( $argv["timed"] ) && $argv["timed"] == "true" ) {
 45+ $this->argumentArray["timed"] = true;
 46+ } else {
 47+ $this->argumentArray["timed"] = false;
 48+ }
 49+
 50+ if ( isset( $argv["delay"] ) && is_numeric($argv["delay"]) ) {
 51+ $this->argumentArray["delay"] = $argv["delay"];
 52+ } else {
 53+ $this->argumentArray["delay"] = "9000";
 54+ }
 55+
 56+ if ( isset( $argv["showarrows"] ) && $argv["showarrows"] == "false" ) {
 57+ $this->argumentArray["showarrows"] = false;
 58+ } else {
 59+ $this->argumentArray["showarrows"] = true;
 60+ }
 61+
 62+ if ( isset( $argv["showinfopane"] ) && $argv["showinfopane"] == "false" ) {
 63+ $this->argumentArray["showinfopane"] = false;
 64+ } else {
 65+ $this->argumentArray["showinfopane"] = true;
 66+ }
 67+
 68+ if ( isset( $argv["slideinfozoneslide"] ) && $argv["slideinfozoneslide"] == "false" ) {
 69+ $this->argumentArray["slideinfozoneslide"] = false;
 70+ } else {
 71+ $this->argumentArray["slideinfozoneslide"] = true;
 72+ }
 73+
 74+ if ( isset( $argv["slideinfozoneopacity"] ) && is_numeric($argv["slideinfozoneopacity"]) ) {
 75+ $this->argumentArray["slideinfozoneopacity"] = $argv["slideinfozoneopacity"];
 76+ } else {
 77+ $this->argumentArray["slideinfozoneopacity"] = "0.7";
 78+ }
 79+
 80+ if ( isset( $argv["fallback"] ) ) {
 81+ $this->argumentArray["fallback"] = htmlspecialchars( $argv["fallback"] );
 82+ } else {
 83+ $this->argumentArray["fallback"] = "gallery";
 84+ }
 85+
 86+ if ( isset( $argv["nolink"] ) && $argv["nolink"] == "true" ) {
 87+ $this->argumentArray["nolink"] = true;
 88+ } else {
 89+ $this->argumentArray["nolink"] = false;
 90+ }
 91+ }
 92+
 93+ function parseGalleries( $input, $parser ) {
 94+ $this->galleriesArray = Array();
 95+
 96+ if ( $this->set ) {
 97+ //This isn't currently working right, I need to enter
 98+ //a bug report with smooth gallery, so we'll leave
 99+ //the name alone for now.
 100+ #$this->galleriesArray["gallery_set_name"] = "MediaWikiSGallerySet" . mt_rand();
 101+ $this->galleriesArray["gallery_set_name"] = "MediaWikiSGallerySet";
 102+
 103+ //parse set into separate galleries
 104+ preg_match_all( "/<sgallery([\w]+)?[^>]*>(.*)<\/sgallery>/smU", $input, $galleries, PREG_SET_ORDER );
 105+
 106+ //iterate through galleries, call renderGallery on each, and
 107+ //collect the fallback output
 108+ $i = 0;
 109+ foreach ( $galleries as $galleryInput ) {
 110+ //TOFIX:
 111+ //This couldn't possibly be right... If these are different
 112+ //galleries in a gallery set, shouldn't they have unique names?
 113+ $name = "MediaWikiSGallery" . $i;
 114+
 115+ $this->galleriesArray["galleries"][$i] = $this->parseGallery( $galleryInput[2], $parser );
 116+ $this->galleriesArray["galleries"][$i]["gallery_name"] = $name;
 117+
 118+ $i++;
 119+ }
 120+ } else {
 121+ $name = "MediaWikiSGallery" . mt_rand();
 122+
 123+ $this->galleriesArray["galleries"][0] = $this->parseGallery( $input, $parser);
 124+ $this->galleriesArray["galleries"][0]["gallery_name"] = $name;
 125+ }
 126+
 127+ return $this->galleriesArray;
 128+ }
 129+
 130+ function parseGallery( $input, $parser ) {
 131+ global $wgTitle;
 132+ global $wgSmoothGalleryDelimiter;
 133+ global $wgSmoothGalleryAllowExternal;
 134+
 135+ $galleryArray = Array();
 136+
 137+ //Expand templates in the input
 138+ $input = $parser->recursiveTagParse( $input );
 139+
 140+ //The image array is a delimited list of images (strings)
 141+ $line_arr = preg_split( "/$wgSmoothGalleryDelimiter/", $input, -1, PREG_SPLIT_NO_EMPTY );
 142+
 143+ foreach ( $line_arr as $line ) {
 144+ $img_arr = explode( "|", $line, 2 );
 145+ $img = $img_arr[0];
 146+ if ( count( $img_arr ) > 1 ) {
 147+ $img_desc = $img_arr[1];
 148+ } else {
 149+ $img_desc = '';
 150+ }
 151+
 152+ if ( $wgSmoothGalleryAllowExternal &&
 153+ ( ( strlen( $img ) >= 7 && substr( $img, 0, 7 ) == "http://" ) ||
 154+ ( strlen( $img ) >= 7 && substr( $img, 0, 8 ) == "https://" ) )
 155+ ) {
 156+ $imageArray["title"] = null;
 157+ //TODO: internationalize
 158+ $imageArray["heading"] = "External Image";
 159+ $imageArray["description"] = $img_desc;
 160+ $imageArray["full_url"] = $img;
 161+ $imageArray["view_url"] = $img;
 162+ $imageArray["full_thumb_url"] = $img;
 163+ $imageArray["icon_thumb_url"] = $img;
 164+ $imageArray["image_object"] = null;
 165+ $imageArray["external"] = true;
 166+
 167+ $galleryArray["images"][] = $imageArray;
 168+
 169+ continue;
 170+ }
 171+
 172+ $title = Title::newFromText( $img, NS_IMAGE );
 173+
 174+ if ( is_null($title) ) {
 175+ $galleryArray["missing_images"][] = $title;
 176+ continue;
 177+ }
 178+
 179+ $ns = $title->getNamespace();
 180+
 181+ if ( $ns == NS_IMAGE ) {
 182+ if ( $img_desc != '' ) {
 183+ $galleryArray = $this->parseImage( $title, $parser, $galleryArray, true );
 184+ if ( isset( $galleryArray["descriptions"]["$title"] ) ) {
 185+ $galleryArray["descriptions"]["$title"] = $img_desc;
 186+ }
 187+ } else {
 188+ $galleryArray = $this->parseImage( $title, $parser, $galleryArray );
 189+ }
 190+ } else if ( $ns == NS_CATEGORY ) {
 191+ //list images in category
 192+ $cat_images = $this->smoothGalleryImagesByCat( $title );
 193+ if ( $cat_images ) {
 194+ foreach ( $cat_images as $title ) {
 195+ $galleryArray = $this->parseImage( $title, $parser, $galleryArray );
 196+ }
 197+ }
 198+ }
 199+ }
 200+
 201+ return $galleryArray;
 202+ }
 203+
 204+ function parseImage( $title, $parser, $galleryArray, $getDescription=false ) {
 205+ global $wgUser;
 206+ global $wgSmoothGalleryThumbHeight, $wgSmoothGalleryThumbWidth;
 207+
 208+ $imageArray = Array();
 209+
 210+ //Get the image object from the database
 211+ $img_obj = wfFindFile( $title );
 212+
 213+ if ( !$img_obj ) {
 214+ //The user asked for an image that doesn't exist, let's
 215+ //add this to the list of missing objects
 216+ $galleryArray["missing_images"][] = htmlspecialchars( $title->getDBkey() );
 217+
 218+ return $galleryArray;
 219+ }
 220+
 221+ //check media type. Only images are supported
 222+ $mtype = $img_obj->getMediaType();
 223+ if ( $mtype != MEDIATYPE_DRAWING && $mtype != MEDIATYPE_BITMAP ) {
 224+ $galleryArray["invalid_images"][] = htmlspecialchars( $title->getDBkey() );
 225+
 226+ return $galleryArray;
 227+ }
 228+
 229+ //Create a thumbnail the same size as our gallery so that
 230+ //full images fit correctly
 231+ $full_thumb_obj = $img_obj->getThumbnail( $this->argumentArray["width"], $this->argumentArray["height"] );
 232+ if ( !is_null($full_thumb_obj) ) {
 233+ $full_thumb = $full_thumb_obj->getUrl();
 234+ } else {
 235+ $galleryArray["missing_images"][] = htmlspecialchars( $title->getDBkey() );
 236+
 237+ return $galleryArray;
 238+ }
 239+
 240+ if ( $full_thumb == '' ) {
 241+ //The thumbnail we requested was larger than the image;
 242+ //we need to just provide the image
 243+ $full_thumb = $img_obj->getUrl();
 244+ }
 245+
 246+ $icon_thumb = '';
 247+ if ( $this->argumentArray["carousel"] ) {
 248+ //We are going to show a carousel to the user; we need
 249+ //to make icon thumbnails
 250+ //$thumb_obj = $img_obj->getThumbnail( 120, 120 ); //would be nice to reuse images already loaded...
 251+ $thumb_obj = $img_obj->getThumbnail( $wgSmoothGalleryThumbWidth, $wgSmoothGalleryThumbHeight );
 252+ if ( $thumb_obj ) {
 253+ $icon_thumb = $thumb_obj->getUrl();
 254+ }
 255+ else {
 256+ //The thumbnail we requested was larger than the image;
 257+ //we need to just provide the image
 258+ $icon_thumb = $img_obj->getUrl();
 259+ }
 260+ }
 261+
 262+ $fulldesc = '';
 263+
 264+ if ( $this->argumentArray["showinfopane"] ) {
 265+ if ( $getDescription ) {
 266+ //Load the image page from the database with the provided title from
 267+ //the image object
 268+ $db = wfGetDB( DB_SLAVE );
 269+ $img_rev = Revision::loadFromTitle( $db, $title );
 270+
 271+ //Get the text from the image page's description
 272+ $fulldesc = $img_rev->getText();
 273+ }
 274+
 275+ //convert wikitext to HTML
 276+ //TODO: find out why this doesn't work with special pages
 277+ if ( $parser ) {
 278+ $pout = $parser->recursiveTagParse( $fulldesc, $title, $parser->mOptions, true );
 279+ $fulldesc = strip_tags( $pout );
 280+ #$fulldesc = strip_tags( $pout->getText() );
 281+ } else { //fall back to HTML-escaping
 282+ $fulldesc = htmlspecialchars( $fulldesc );
 283+ }
 284+ }
 285+
 286+ $skin = $wgUser->getSkin();
 287+
 288+ //Everything is checked, and converted; add to the array and return
 289+ $imageArray["title"] = $title;
 290+
 291+ # We need the following for the image's div
 292+ $imageArray["heading"] = $skin->makeKnownLinkObj($img_obj->getTitle(), $img_obj->getName());
 293+ $imageArray["description"] = $fulldesc;
 294+ $imageArray["full_url"] = $title->getFullURL();
 295+ $imageArray["view_url"] = $img_obj->getViewURL();
 296+ $imageArray["full_thumb_url"] = $full_thumb;
 297+ $imageArray["icon_thumb_url"] = $icon_thumb;
 298+
 299+ # We need the image object for plain galleries
 300+ $imageArray["image_object"] = $img_obj;
 301+
 302+ $galleryArray["images"][] = $imageArray;
 303+
 304+ return $galleryArray;
 305+ }
 306+
 307+ function smoothGalleryImagesByCat( $title ) {
 308+ $name = $title->getDBkey();
 309+
 310+ $dbr = wfGetDB( DB_SLAVE );
 311+
 312+ list( $page, $categorylinks ) = $dbr->tableNamesN( 'page', 'categorylinks' );
 313+ $sql = "SELECT page_namespace, page_title FROM $page " .
 314+ "JOIN $categorylinks ON cl_from = page_id " .
 315+ "WHERE cl_to = " . $dbr->addQuotes( $name ) . " " .
 316+ "AND page_namespace = " . NS_IMAGE . " " .
 317+ "ORDER BY cl_sortkey";
 318+
 319+ $images = array();
 320+ $res = $dbr->query( $sql, 'smoothGalleryImagesByCat' );
 321+ while ( $row = $dbr->fetchObject( $res ) ) {
 322+ $img = Title::makeTitle( $row->page_namespace, $row->page_title );
 323+
 324+ $images[] = $img;
 325+ }
 326+ $dbr->freeResult($res);
 327+
 328+ return $images;
 329+ }
 330+
 331+}
Property changes on: trunk/extensions/Plotter/SmoothGalleryParser.php
___________________________________________________________________
Name: svn:eol-style
1332 + native
Index: trunk/extensions/Plotter/README
@@ -0,0 +1,5 @@
 2+This is an extension that integrates JonDesign's SmoothGallery, which is a set of Javascript and CSS that lets you make picture galleries. A number of features are available from SmoothGallery, and this extension aims to be an easy to use, and full featured integration with MediaWiki. JonDesign's SmoothGallery is released under the GPL.
 3+
 4+For more information on the SmoothGallery javascript gallery, see: http://smoothgallery.jondesign.net/what
 5+
 6+For more information on the SmoothGallery extension, see: http://www.mediawiki.org/wiki/Extension:SmoothGallery
Index: trunk/extensions/Plotter/SmoothGallery.i18n.php
@@ -0,0 +1,779 @@
 2+<?php
 3+/**
 4+ * Internationalisation file for extension SmoothGallery.
 5+ *
 6+ * @addtogroup Extensions
 7+ */
 8+
 9+$messages = array();
 10+
 11+$messages['en'] = array(
 12+ 'smoothgallery' => 'SmoothGallery',
 13+ 'smoothgallery-desc' => 'Allows users to create galleries with images that have been uploaded.
 14+Allows most options of SmoothGallery',
 15+ 'smoothgallery-title' => 'SmoothGallery',
 16+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 17+ 'smoothgallery-pagetext' => '',
 18+
 19+ 'smoothgallery-error' => '<b>SmoothGallery error:</b>',
 20+ 'smoothgallery-gallery-not-found' => 'The gallery requested does not exist.',
 21+ 'smoothgallery-not-found' => 'No images were added into the gallery.
 22+Please add at least one image.',
 23+ 'smoothgallery-no-images' => 'No images were found in this gallery.
 24+Make sure {{PLURAL:$3|the image|all images}} requested exist.
 25+The following {{PLURAL:$2|image|images}} were not found: $1',
 26+ 'smoothgallery-invalid-images' => 'The following requested {{PLURAL:$2|image was|images were}} of an invalid type: $1',
 27+ 'smoothgallery-unexpected-error' => 'There was an unexpected error.
 28+Please file a bug report.',
 29+ 'smoothgallery-javascript-disabled' => 'JavaScript is required to view this gallery properly.',
 30+);
 31+
 32+/** Message documentation (Message documentation)
 33+ * @author Purodha
 34+ */
 35+$messages['qqq'] = array(
 36+ 'smoothgallery-desc' => 'Shown in [[Special:Version]] as a short description of this extension. Do not translate links.',
 37+ 'smoothgallery-no-images' => '* $1 is a comma separated list
 38+* $2 is the number of elements in the list
 39+* $3 is the number of images actually requested',
 40+ 'smoothgallery-invalid-images' => '* $1 is a comma separated list
 41+* $2 is the number of elements in the list',
 42+);
 43+
 44+/** Afrikaans (Afrikaans)
 45+ * @author Naudefj
 46+ */
 47+$messages['af'] = array(
 48+ 'smoothgallery-javascript-disabled' => 'JavaScript word benodig om die galery ordentlik te besigtig.',
 49+);
 50+
 51+/** Arabic (العربية)
 52+ * @author Meno25
 53+ */
 54+$messages['ar'] = array(
 55+ 'smoothgallery' => 'معرض ناعم',
 56+ 'smoothgallery-desc' => 'يسمح للمستخدمين بإنشاء معارض بالصور التي تم رفعها.
 57+يسمح بمعظم خيارات المعرض الناعم',
 58+ 'smoothgallery-title' => 'معرض ناعم',
 59+ 'smoothgallery-smoothgallerytitle' => 'معرض ناعم: $1',
 60+ 'smoothgallery-error' => '<b>خطأ في المعرض الناعم:</b>',
 61+ 'smoothgallery-gallery-not-found' => 'المعرض المطلوب غير موجود.',
 62+ 'smoothgallery-not-found' => 'لا صور تمت إضافتها للمعرض.
 63+من فضلك أضف صورة واحدة على الأقل.',
 64+ 'smoothgallery-no-images' => 'لم يتم العثور على صور في هذا المعرض.
 65+تأكد من أن {{PLURAL:$3|الصورة|كل الصور}} المطلوبة موجودة.
 66+{{PLURAL:$2|الصورة|الصور}} التالية لم يتم العثور عليها: $1',
 67+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|الصورة|الصور}} المطلوبة التالية كانت من نوع غير صحيح: $1',
 68+ 'smoothgallery-unexpected-error' => 'حدث خطأ غير متوقع.
 69+من فضلك أبلغ عن هذا الخطأ.',
 70+ 'smoothgallery-javascript-disabled' => 'الجافاسكريبت مطلوب لرؤية هذا المعرض جيدا.',
 71+);
 72+
 73+/** Egyptian Spoken Arabic (مصرى)
 74+ * @author Ghaly
 75+ * @author Meno25
 76+ */
 77+$messages['arz'] = array(
 78+ 'smoothgallery' => 'معرض ناعم',
 79+ 'smoothgallery-desc' => 'يسمح للمستخدمين بإنشاء معارض بالصور التى تم رفعها.
 80+يسمح بمعظم خيارات المعرض الناعم',
 81+ 'smoothgallery-title' => 'معرض ناعم',
 82+ 'smoothgallery-smoothgallerytitle' => 'معرض ناعم: $1',
 83+ 'smoothgallery-error' => '<b>خطأ فى المعرض الناعم:</b>',
 84+ 'smoothgallery-gallery-not-found' => 'المعرض المطلوب غير موجود.',
 85+ 'smoothgallery-not-found' => 'لا صور تمت إضافتها للمعرض.
 86+من فضلك أضف صورة واحدة على الأقل.',
 87+ 'smoothgallery-no-images' => 'مافيش صور فى المعرض ده.
 88+اتأكد من ان {{PLURAL:$3|الصوره|كل الصور}} المطلوبة موجودة.
 89+{{PLURAL:$2|الصوره|الصور}} التالية مالقينهاش: $1',
 90+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|الصوره|الصور}} المطلوبة دى كانت من نوع مش صحيح: $1',
 91+ 'smoothgallery-unexpected-error' => 'حدث خطأ غير متوقع.
 92+من فضلك أبلغ عن هذا الخطأ.',
 93+ 'smoothgallery-javascript-disabled' => 'الجافاسكريبت مطلوب لرؤية هذا المعرض جيدا.',
 94+);
 95+
 96+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 97+ * @author EugeneZelenko
 98+ */
 99+$messages['be-tarask'] = array(
 100+ 'smoothgallery' => 'Плыўная галерэя',
 101+ 'smoothgallery-desc' => 'Дазваляе ўдзельнікам ствараць галерэі з выявамі, якія яны загрузілі.
 102+Падтрымлівае большасьць установак плыўнай галерэі',
 103+ 'smoothgallery-title' => 'Плыўная галерэя',
 104+ 'smoothgallery-smoothgallerytitle' => 'Плыўная галерэя: $1',
 105+ 'smoothgallery-error' => '<b>Памылка плыўнай галерэі:</b>',
 106+ 'smoothgallery-gallery-not-found' => 'Запатрабаваная галерэя не існуе.',
 107+ 'smoothgallery-not-found' => 'Выявы не былі дададзеныя ў галерэю.
 108+Калі ласка, дадайце хаця б адну.',
 109+ 'smoothgallery-no-images' => 'У гэтай галерэі не было знойдзена выяваў.
 110+Упэўніцеся, што {{PLURAL:$3|запытаная выява існуе|запытаныя выявы існуюць}}.
 111+{{PLURAL:$2|Наступная выява ня знойдзеная|Наступныя выявы ня знойдзеныя}}: $1',
 112+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Наступная запытаная выява мае|Наступныя запытаныя выявы маюць}} няслушны тып: $1',
 113+ 'smoothgallery-unexpected-error' => 'Адбылася нечаканая памылка.
 114+Калі ласка, дашліце паведамленьне пра памылку.',
 115+ 'smoothgallery-javascript-disabled' => 'Для прагляду гэтай галерэі неабходны JavaScript.',
 116+);
 117+
 118+/** Bulgarian (Български)
 119+ * @author DCLXVI
 120+ * @author Spiritia
 121+ */
 122+$messages['bg'] = array(
 123+ 'smoothgallery-desc' => 'Позволява на потребителите да създават галерии с качените от тях файлове.',
 124+ 'smoothgallery-gallery-not-found' => 'Поисканата галерия не съществува',
 125+ 'smoothgallery-not-found' => 'Не бяха добавени картинки в галерията. Необходимо е да се добави поне една картинка.',
 126+ 'smoothgallery-no-images' => 'Не бяха открити картинки в галерията.
 127+Уверете се, че {{PLURAL:$3|картинката съществува|всички картинки съществуват}}.
 128+{{PLURAL:$2|Следната картинка не беше намерена|Следните картинки не бяха намерени}}: $1',
 129+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Следният заявен файл е|Следните заявени файлове са}} от невалиден тип: $1',
 130+ 'smoothgallery-unexpected-error' => 'Възникна неочаквана грешка.
 131+Моля, съобщете за нея на администратор.',
 132+ 'smoothgallery-javascript-disabled' => 'За правилно показване на галерията е необходим Javascript.',
 133+);
 134+
 135+/** Bosnian (Bosanski)
 136+ * @author CERminator
 137+ */
 138+$messages['bs'] = array(
 139+ 'smoothgallery' => 'SmoothGallery',
 140+ 'smoothgallery-desc' => 'Omogućuje korisnicima da naprave galerije sa slikama koje su postavili.
 141+Omogućuje većinu opcija iz SmoothGallery',
 142+ 'smoothgallery-title' => 'SmoothGallery',
 143+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 144+ 'smoothgallery-error' => '<b>Greška u SmoothGallery:</b>',
 145+ 'smoothgallery-gallery-not-found' => 'Zahtijevana galerija ne postoji.',
 146+ 'smoothgallery-not-found' => 'Nijedna slika nije dodana u galeriju.
 147+Molimo dodajte barem jednu sliku.',
 148+ 'smoothgallery-no-images' => 'Nijedna slika nije pronađena u ovoj galeriji.
 149+Provjerite da {{PLURAL:$3|zahtjevana slika postoji|sve zahtijevane slike postoje}}.
 150+{{PLURAL:$2|Slijedeća slika nije pronađena|Slijedeće slike nisu pronađene}}: $1',
 151+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Slijedeća zatražena slika je|Slijedeće zatražene slike su}} nevaljanog tipa: $1',
 152+ 'smoothgallery-unexpected-error' => 'Desila se nepredviđena greška.
 153+Molimo ispunite izvještaj o grešci.',
 154+ 'smoothgallery-javascript-disabled' => 'Da bi ste pravilno pregledali ovu galeriju neophodna Vam je Javascript.',
 155+);
 156+
 157+/** German (Deutsch)
 158+ * @author MF-Warburg
 159+ * @author Purodha
 160+ * @author Raimond Spekking
 161+ * @author Umherirrender
 162+ */
 163+$messages['de'] = array(
 164+ 'smoothgallery' => 'SmoothGallery',
 165+ 'smoothgallery-desc' => 'Ermöglicht die Erstellung von interaktiven Bildgalerien',
 166+ 'smoothgallery-title' => 'SmoothGallery',
 167+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 168+ 'smoothgallery-error' => '<b>SmoothGallery-Fehler:</b>',
 169+ 'smoothgallery-gallery-not-found' => 'Die angeforderte Galerie ist nicht vorhanden.',
 170+ 'smoothgallery-not-found' => 'Die Galerie enthält keine Bilder. Bitte mindestens ein Bild hinzufügen.',
 171+ 'smoothgallery-no-images' => 'In dieser Galerie sind keine Bilder zu finden. {{PLURAL:$3|Ist das angeforderte Bild|Sind alle angeforderten Bilder}} vorhanden? Es {{PLURAL:$2|fehlt|fehlen}}: $1',
 172+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Das folgende Bild hat|Die folgenden Bilder haben}} einen ungültigen Typ: $1',
 173+ 'smoothgallery-unexpected-error' => 'Es ist ein unerwarteter Fehler aufgetreten. Bitte schreibe eine Fehlermeldung.',
 174+ 'smoothgallery-javascript-disabled' => 'JavaScript wird benötigt, um die Galerie darzustellen.',
 175+);
 176+
 177+/** Lower Sorbian (Dolnoserbski)
 178+ * @author Michawiki
 179+ */
 180+$messages['dsb'] = array(
 181+ 'smoothgallery' => 'SmoothGallery',
 182+ 'smoothgallery-desc' => 'Zmóžnja wužywarjam napóraś galerije z wobrazami, kótarež su se nagrali.
 183+Zmóžnja nejwěcej opcijow SmoothGallery',
 184+ 'smoothgallery-title' => 'SmoothGallery',
 185+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 186+ 'smoothgallery-error' => '<b>SmoothGallery zmólka:</b>',
 187+ 'smoothgallery-gallery-not-found' => 'Pominana galerija njeeksistěrujo.',
 188+ 'smoothgallery-not-found' => 'Galerija njewopśimujo wobraze.
 189+Pšosym pśidaj nanejmjenjej jaden wobraz.',
 190+ 'smoothgallery-no-images' => 'W toś tej galeriji njejsu se wobraze namakali.
 191+Pśeznań se, lěc {{PLURAL:$3|pominany wobraz eksistěrujo|wšej $3 pominanej wobraza eksistěrujotej|wše $3 pominane wobraze eksistěruju|wšych $3 pominanych wobrazow eksistěrujo}}.
 192+{{PLURAL:$2|Slědujucy wobraz njejo se namakał|Slědujucej wobraza njejstej se namakałej|Slědujuce wobraze njejsu se namakali|Slědujucych wobrazow njejo se namakało}}: $1',
 193+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Slědujucy pominany wobraz ma|Slědujucej pominanej wobraza matej|Slědujuce pominane wobraze maju|Slědujucych pominanych wobrazow ma}} njepłaśiwy typ: $1',
 194+ 'smoothgallery-unexpected-error' => 'Njewócakana zmólka jo nastała.
 195+Pšosym napiš powěźeńku zmólki.',
 196+ 'smoothgallery-javascript-disabled' => 'JavaScript jo trěbny, aby se galerija korektnje zwobrazniła.',
 197+);
 198+
 199+/** Esperanto (Esperanto)
 200+ * @author Yekrats
 201+ */
 202+$messages['eo'] = array(
 203+ 'smoothgallery' => 'GlataGalerio',
 204+ 'smoothgallery-title' => 'GlataGalerio',
 205+ 'smoothgallery-smoothgallerytitle' => 'GlataGalerio: $1',
 206+ 'smoothgallery-error' => '<b>Eraro en GlataGalerio:</b>',
 207+ 'smoothgallery-gallery-not-found' => 'La petita galerio ne ekzistas.',
 208+ 'smoothgallery-unexpected-error' => 'Okazis neatendita eraro.
 209+Bonvolu fari ciman raporton.',
 210+ 'smoothgallery-javascript-disabled' => 'Javascript estas deviga pro vidi ĉi tiun galerion ĝuste.',
 211+);
 212+
 213+/** Spanish (Español)
 214+ * @author Crazymadlover
 215+ */
 216+$messages['es'] = array(
 217+ 'smoothgallery' => 'SmoothGallery',
 218+ 'smoothgallery-desc' => 'Permite usuarios crear galerías con imágenes que han sido cargadas.
 219+Permite más opciones de SmoothGallery',
 220+ 'smoothgallery-title' => 'SmoothGallery',
 221+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 222+ 'smoothgallery-error' => '<b>error SmoothGallery:</b>',
 223+ 'smoothgallery-gallery-not-found' => 'La galería solicitada no existe.',
 224+ 'smoothgallery-not-found' => 'Ninguna imágen fue agregada dentro de la galería.
 225+Por favor agregue al menos una imagen.',
 226+ 'smoothgallery-no-images' => 'Ninguna imagen fue encontrada en esta galería.
 227+Asegúrese que {{PLURAL:$3|la imagen|todas las imágenes}} solicitadas existen.
 228+las siguientes {{PLURAL:$2|imagen|imágenes}} no fueron encontradas: $1',
 229+ 'smoothgallery-invalid-images' => 'La siguiente {{PLURAL:$2|imagen solicitada fue|imágenes solicitadas fueron}} de un tipo inválido: $1',
 230+ 'smoothgallery-unexpected-error' => 'Hubo un error error inesperado.
 231+Por favor archive un reporte de errores.',
 232+ 'smoothgallery-javascript-disabled' => 'JavaScript es requerido para ver esta galería apropiadamente.',
 233+);
 234+
 235+/** Finnish (Suomi)
 236+ * @author Str4nd
 237+ */
 238+$messages['fi'] = array(
 239+ 'smoothgallery-gallery-not-found' => 'Pyydettyä galleriaa ei ole.',
 240+);
 241+
 242+/** French (Français)
 243+ * @author Crochet.david
 244+ * @author Dereckson
 245+ * @author Grondin
 246+ * @author IAlex
 247+ * @author Sherbrooke
 248+ */
 249+$messages['fr'] = array(
 250+ 'smoothgallery' => 'SmoothGallery',
 251+ 'smoothgallery-desc' => 'Autorise les utilisateurs à créer des galeries avec des images téléchargées. Autorise plus d’options de SmoothGallery',
 252+ 'smoothgallery-title' => 'SmoothGallery',
 253+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery : $1',
 254+ 'smoothgallery-error' => "'''Erreur de SmoothGallery :'''",
 255+ 'smoothgallery-gallery-not-found' => 'La galerie demandée n’existe pas.',
 256+ 'smoothgallery-not-found' => 'Aucune image ajoutée à la galerie. Ajoutez au moins une image.',
 257+ 'smoothgallery-no-images' => 'Aucune image n’a été trouvée dans cette galerie.
 258+Vérifiez que {{PLURAL:$3|l’image requise existe|toutes les images requises existent}}.
 259+{{PLURAL:$2|Cette image n’a pas été trouvée|Ces images n’ont pas été trouvées}} : $1.',
 260+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|L’image demandée suivante est|Les images demandées suivantes sont}} d’un format incorrect : $1',
 261+ 'smoothgallery-unexpected-error' => 'Erreur inattendue. Prière de remplir un rapport de bogue.',
 262+ 'smoothgallery-javascript-disabled' => 'JavaScript est nécessaire pour voir cette galerie d’images (<code><nowiki><gallery>...</gallery></nowiki></code>).',
 263+);
 264+
 265+/** Galician (Galego)
 266+ * @author Alma
 267+ * @author Toliño
 268+ * @author Xosé
 269+ */
 270+$messages['gl'] = array(
 271+ 'smoothgallery' => 'Galería con transicións',
 272+ 'smoothgallery-desc' => 'Permítelle aos usuarios que creen galerías con imaxes que teñan cargado.
 273+Permite a maioría das opcións da SmoothGallery',
 274+ 'smoothgallery-title' => 'Galería con transicións',
 275+ 'smoothgallery-smoothgallerytitle' => 'Galería con transicións: $1',
 276+ 'smoothgallery-error' => '<b>Erro na Galería de transicións:</b>',
 277+ 'smoothgallery-gallery-not-found' => 'A galería que solicitou non existe.',
 278+ 'smoothgallery-not-found' => 'Non se engadiron imaxes á galería. Engada polo menos unha imaxe.',
 279+ 'smoothgallery-no-images' => 'Non se atoparon imaxes nesta galería.
 280+Asegúrese de que {{PLURAL:$3|existe a imaxe solicitada|existen todas as imaxes solicitadas}}.
 281+Non se {{PLURAL:$2|atopou a seguinte imaxe|atoparon as seguintes imaxes}}: $1',
 282+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|A seguinte imaxe solicitada tiña|As seguintes imaxes solicitadas tiñan}} un tipo inválido: $1',
 283+ 'smoothgallery-unexpected-error' => 'Produciuse un erro inesperado. Informe deste erro, por favor.',
 284+ 'smoothgallery-javascript-disabled' => 'Requírese o Javascript para ver correctamente esta galería.',
 285+);
 286+
 287+/** Swiss German (Alemannisch)
 288+ * @author Als-Holder
 289+ */
 290+$messages['gsw'] = array(
 291+ 'smoothgallery' => 'SmoothGallery',
 292+ 'smoothgallery-desc' => 'Macht s Benutzer megli Galerie aazlege mit Bilder, wu uffeglade wore sin.
 293+Erlaubt di meischte Optione vu SmoothGallery',
 294+ 'smoothgallery-title' => 'SmoothGallery',
 295+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 296+ 'smoothgallery-error' => '<b>SmoothGallery-Fähler:</b>',
 297+ 'smoothgallery-gallery-not-found' => 'Di aagforderet Galerii git s nit.',
 298+ 'smoothgallery-not-found' => 'In dr Galerii het s no kei Bilder. Bitte setz zmindescht ei Bild dryy.',
 299+ 'smoothgallery-no-images' => 'In däre Galerii sin kei Bilder gfunde wore. Git s {{PLURAL:$3|des aagforderet Bild|die aagforderete Bilder}} iberhaupt? S {{PLURAL:$2|fählt|fähle}}: $1',
 300+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Des Bild het|Die Bilder hän}} e uugiltige Typ: $1',
 301+ 'smoothgallery-unexpected-error' => 'S isch e nit erwartete Fähler ufträtte. Bitte schryyb e Fählermäldig.',
 302+ 'smoothgallery-javascript-disabled' => 'S bruucht JavaScript go die Gallerii bschaue.',
 303+);
 304+
 305+/** Hebrew (עברית)
 306+ * @author Rotemliss
 307+ * @author YaronSh
 308+ */
 309+$messages['he'] = array(
 310+ 'smoothgallery' => 'SmoothGallery',
 311+ 'smoothgallery-desc' => 'הוספת אפשרות למשתמשים ליצור גלריות עם תמונות שהועלו.
 312+אפשר להשתמש ברוב האפשרויות של SmoothGallery',
 313+ 'smoothgallery-title' => 'SmoothGallery',
 314+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 315+ 'smoothgallery-error' => '<b>שגיאת SmoothGallery:</b>',
 316+ 'smoothgallery-gallery-not-found' => 'הגלריה המבוקשת אינה קיימת.',
 317+ 'smoothgallery-not-found' => 'לא נוספו תמונות לגלריה.
 318+אנא הוסיפו לפחות תמונה אחת.',
 319+ 'smoothgallery-no-images' => 'לא נמצאו תמונות בגלריה זו.
 320+ודאו ש{{PLURAL:$3|התמונה שביקשתם אכן קיימת|כל התמונות שביקשתם אכן קיימות}}.
 321+{{PLURAL:$2|התמונה הבאה לא נמצאה|התמונות הבאות לא נמצאו}}: $1',
 322+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|התמונה הבאה שביקשתם היא|התמונות הבאות שביקשתם הן}} מסוג בלתי תקין: $1',
 323+ 'smoothgallery-unexpected-error' => 'אירעה שגיאה בלתי צפויה.
 324+אנא דווחו על תקלה זו.',
 325+ 'smoothgallery-javascript-disabled' => 'על מנת לצפות בדף זה כראוי נדרש JavaScript.',
 326+);
 327+
 328+/** Upper Sorbian (Hornjoserbsce)
 329+ * @author Michawiki
 330+ */
 331+$messages['hsb'] = array(
 332+ 'smoothgallery' => 'SmoothGallery',
 333+ 'smoothgallery-desc' => 'Dowola wužiwarjam galerije z wobrazami, kotrež su so naharali, wutworić. Dowola najwjace opcijow ze SmoothGallery',
 334+ 'smoothgallery-title' => 'SmoothGallery',
 335+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 336+ 'smoothgallery-error' => '<b>SmoothGallery zmylk:</b>',
 337+ 'smoothgallery-gallery-not-found' => 'Požadana galerija njeeksistuje.',
 338+ 'smoothgallery-not-found' => 'Žane wobrazy njebuchu ke galeriji přidate. Prošu přidaj znajmjeńša jedyn wobraz.',
 339+ 'smoothgallery-no-images' => 'W tutej galeriji njebuchu wobrazy namakane. Zawěsć, zo {{PLURAL:$3|požadany wobraz eksistuje|wšě $3 požadanej wobrazaj eksistujetej|wšě $3 požadane wobrazy eksistuja |wšěch $3 požadanych wobrazow eksistuje}}. {{PLURAL:$2|Slědowacy wobraz njebu namakany|Slědowacej wobrazaj njebuštej namakanej|Slědowace wobrazy njebuchu namakane|Slědowace wobraze njebuchu namakane}}: $1',
 340+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Slědowacy požadany wobraz ma|Slědowacej $2 požadanej wobrazaj matej|Slědowace $2 požadane wobrazy maja|Slědowaych $2 požadanych wobrazow ma}} njepłaćiwy typ: $1',
 341+ 'smoothgallery-unexpected-error' => 'Běše njewočakowany zmylk. Prošu spisaj zmylkowu rozprawu.',
 342+ 'smoothgallery-javascript-disabled' => 'Javascript je trjeba, zo by so tuta galerija prawje zwobrazniła.',
 343+);
 344+
 345+/** Interlingua (Interlingua)
 346+ * @author McDutchie
 347+ */
 348+$messages['ia'] = array(
 349+ 'smoothgallery' => 'SmoothGallery',
 350+ 'smoothgallery-desc' => 'Permitte al usatores crear galerias con imagines que ha essite cargate.
 351+Permitte le major parte del optiones de SmoothGallery',
 352+ 'smoothgallery-title' => 'SmoothGallery',
 353+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 354+ 'smoothgallery-error' => '<b>Error de SmoothGallery:</b>',
 355+ 'smoothgallery-gallery-not-found' => 'Le galeria requestate non existe.',
 356+ 'smoothgallery-not-found' => 'Nulle imagine esseva addite al galeria.
 357+Per favor adde al minus un imagine.',
 358+ 'smoothgallery-no-images' => 'Nulle imagine esseva trovate in iste galeria.
 359+Assecura te que {{PLURAL:$3|le imagine|tote le imagines}} requestate existe.
 360+Le sequente {{PLURAL:$2|imagine|imagines}} non esseva trovate: $1',
 361+ 'smoothgallery-invalid-images' => 'Le sequente {{PLURAL:$2|imagine|imagines}} requestate esseva de un typo invalide: $1',
 362+ 'smoothgallery-unexpected-error' => 'Il occurreva un error non expectate.
 363+Per favor reporta isto como un error in le software.',
 364+ 'smoothgallery-javascript-disabled' => 'JavaScript es requirite pro vider iste galeria correctemente.',
 365+);
 366+
 367+/** Japanese (日本語)
 368+ * @author Fryed-peach
 369+ */
 370+$messages['ja'] = array(
 371+ 'smoothgallery' => 'スムースギャラリー',
 372+ 'smoothgallery-desc' => 'アップロードされている画像を使ってギャラリーを作ることができるようにする。
 373+SmoothGallery のほとんどのオプションを利用可能とする',
 374+ 'smoothgallery-title' => 'スムースギャラリー',
 375+ 'smoothgallery-smoothgallerytitle' => 'スムースギャラリー: $1',
 376+ 'smoothgallery-error' => '<b>スムースギャラリーのエラー:</b>',
 377+ 'smoothgallery-gallery-not-found' => '要求したギャラリーは存在しません。',
 378+ 'smoothgallery-not-found' => 'このギャラリーには画像がありません。最低でも1つは画像を指定してください。',
 379+ 'smoothgallery-no-images' => 'このギャラリーには画像がありません。指定した{{PLURAL:$3|画像が|画像がすべて}}存在するか確認してください。次の画像は見つかりませんでした: $1',
 380+ 'smoothgallery-invalid-images' => '要求された次の画像は不正な形式です: $1',
 381+ 'smoothgallery-unexpected-error' => '予期せぬエラーが発生しました。バグ報告を提出してください。',
 382+ 'smoothgallery-javascript-disabled' => 'このギャラリーを正しく閲覧するには JavaScript が必要です。',
 383+);
 384+
 385+/** Javanese (Basa Jawa)
 386+ * @author Meursault2004
 387+ */
 388+$messages['jv'] = array(
 389+ 'smoothgallery-gallery-not-found' => 'Galeri sing disuwun ora ana.',
 390+ 'smoothgallery-javascript-disabled' => 'Javascript iku diperlokaké kanggo ndeleng galeri iki sacara bener.',
 391+);
 392+
 393+/** Khmer (ភាសាខ្មែរ)
 394+ * @author Chhorran
 395+ * @author Thearith
 396+ */
 397+$messages['km'] = array(
 398+ 'smoothgallery' => 'វិចិត្រសាលរាបស្មើ',
 399+ 'smoothgallery-desc' => 'អនុញ្ញាត​ឱ្យ​បង្កើត​វិចិត្រសាល​ជាមួយ​រូបភាព​ដែល​បាន​ផ្ទុកឡើង​។
 400+
 401+អនុញ្ញាត​ជម្រើស​ភាគច្រើន​នៃ​វិចិត្រសាលរាបស្មើ​',
 402+ 'smoothgallery-title' => 'វិចិត្រសាលរាបស្មើ',
 403+ 'smoothgallery-smoothgallerytitle' => 'វិចិត្រសាលរាបស្មើ​៖ $1',
 404+ 'smoothgallery-error' => 'កំហុស​វិចិត្រសាលរាបស្មើ​​៖',
 405+ 'smoothgallery-gallery-not-found' => 'មិនមានវិចិត្រសាលដែលត្រូវបានស្នើ​។',
 406+ 'smoothgallery-not-found' => 'មិនមាន​រូបភាព​ត្រូវ​បាន​បន្ថែម​ទៅ​ក្នុង​វិចិត្រសាល​ទេ​។
 407+
 408+សូម​បន្ថែម​រូបភាព​យ៉ាងហោច​មួយ​។',
 409+ 'smoothgallery-javascript-disabled' => 'តម្រូវឱ្យមាន Javascript ដើម្បី​មើលបានល្អ​វិចិត្រសាលនេះ​។',
 410+);
 411+
 412+/** Ripoarisch (Ripoarisch)
 413+ * @author Purodha
 414+ */
 415+$messages['ksh'] = array(
 416+ 'smoothgallery' => '<i lang="en">SmoothGallery</i>',
 417+ 'smoothgallery-desc' => 'Määt et müjjelesch, Jallerieje met huhjelade Bellder opzebouwe, met de miehßte Enstellunge fun <i lang="en">SmoothGallery</i>.',
 418+ 'smoothgallery-title' => '<i lang="en">SmoothGallery</i>',
 419+ 'smoothgallery-smoothgallerytitle' => '<i lang="en">SmoothGallery</i>: $1',
 420+ 'smoothgallery-error' => '<b><i lang="en">SmoothGallery</i> hät ene Fähler jefonge:</b>',
 421+ 'smoothgallery-gallery-not-found' => 'Die Jalleri jit et nit.',
 422+ 'smoothgallery-not-found' => 'En dä Jalleri sen kein Bellder dren.
 423+Bes esu joot, un donn winnichstens ein dobei!',
 424+ 'smoothgallery-no-images' => 'En dä Jalleri sen kein Belder dren.
 425+Bes de secher, dat et {{PLURAL:$3|dat Beld|die Belder|—}} övverhoup jitt?
 426+Hee {{PLURAL:$2|dat Beld wohr|die Belder wohre|—}} nit ze fenge: $1',
 427+ 'smoothgallery-invalid-images' => 'Hee {{PLURAL:$2|Hee dat Beld es en verkeehte Zoot Datei|die Belder hatte de verkeehte Dateitüp|—}}: $1',
 428+ 'smoothgallery-unexpected-error' => 'Ene Fähler es opjetrodde, wo mer nit automattesch met önjonn künne.
 429+Bes esu joot, un donn dä Fähler melde.',
 430+ 'smoothgallery-javascript-disabled' => 'Do moß JavaSkrip aanjeschalldt han, öm die Jalleri öhndlesch ze sinn ze krijje.',
 431+);
 432+
 433+/** Luxembourgish (Lëtzebuergesch)
 434+ * @author Robby
 435+ */
 436+$messages['lb'] = array(
 437+ 'smoothgallery' => 'SmoothGallerie',
 438+ 'smoothgallery-desc' => 'Erméiglecht de Benotzer et fir Gallerie mat Biller unzelleën déi eropgeluede goufen.
 439+Erméiglecht déi meescht Optioune vun SmoothGallerie',
 440+ 'smoothgallery-title' => 'SmoothGallerie',
 441+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallerie: $1',
 442+ 'smoothgallery-error' => '<b>SmoothGallerie Feeler:</b>',
 443+ 'smoothgallery-gallery-not-found' => 'Déi ugefrote Gallerie gëtt et net.',
 444+ 'smoothgallery-not-found' => "Et goufe keng Biller an d'Gallerie derbäigesat.
 445+Setzt w.e.g. mindestens ee Bild derbäi.",
 446+ 'smoothgallery-javascript-disabled' => 'JavaScriot gëtt gebraucht fir dës Gallerie korrekt ze gesinn.',
 447+);
 448+
 449+/** Marathi (मराठी)
 450+ * @author Kaustubh
 451+ * @author Mahitgar
 452+ */
 453+$messages['mr'] = array(
 454+ 'smoothgallery' => 'मुलायमप्रेक्षा',
 455+ 'smoothgallery-desc' => 'उपयोगकर्त्यांना चढवलेल्या चित्रणांपासून दीर्घा(प्रेक्षा)बनवण्याकरिता अनुमति देते.
 456+मुलायमदिर्घा(प्रेक्षा) बनविण्याकरिता सर्वाधिक पर्याय उपलब्ध करून देते.',
 457+ 'smoothgallery-title' => 'मुलायमप्रेक्षा',
 458+ 'smoothgallery-smoothgallerytitle' => 'मुलायमप्रेक्षा $1',
 459+ 'smoothgallery-error' => 'मुलायमप्रेक्षा त्रूटी',
 460+ 'smoothgallery-gallery-not-found' => 'विनंती केलेली प्रेक्षा(दिर्घा) अस्तित्वात नाही.',
 461+ 'smoothgallery-not-found' => 'प्रदर्शनात चित्रे वाढविलेली नाहीत.
 462+कृपया कमीतकमी एक चित्र वाढवा.',
 463+ 'smoothgallery-no-images' => 'प्रदर्शनात एकही चित्र सापडले नाही.
 464+कृपया खात्री करा की मागितलेली सर्व चित्रे अस्तित्वात आहेत.
 465+खालील चित्रे सापडली नाहीत: $1',
 466+ 'smoothgallery-invalid-images' => 'खालील मागितलेली चित्रे चुकीच्या प्रकारातील आहेत: $1',
 467+ 'smoothgallery-unexpected-error' => 'एक अनपेक्षित त्रुटी आलेली आहे.
 468+कृपया त्रुटी अहवाल पाठवा.',
 469+ 'smoothgallery-javascript-disabled' => 'हे प्रदर्शन पाहण्यासाठी जावास्क्रीप्टची गरज आहे.',
 470+);
 471+
 472+/** Dutch (Nederlands)
 473+ * @author SPQRobin
 474+ * @author Siebrand
 475+ * @author Tvdm
 476+ */
 477+$messages['nl'] = array(
 478+ 'smoothgallery' => 'SmoothGallery',
 479+ 'smoothgallery-desc' => 'Stelt gebruikers in staat galerijen te maken met aanwezige afbeeldingen. Ondersteunt bijna alle mogelijkheden van SmoothGallery',
 480+ 'smoothgallery-title' => 'SmoothGallery',
 481+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 482+ 'smoothgallery-error' => '<b>SmoothGallery fout:</b>',
 483+ 'smoothgallery-gallery-not-found' => 'De gevraagde galerij bestaat niet.',
 484+ 'smoothgallery-not-found' => 'Er zijn geen afbeeldingen opgenomen in een galerij.
 485+Voeg alstublieft tenminste één afbeelding toe.',
 486+ 'smoothgallery-no-images' => 'Er zijn geen bestanden aangetroffen in deze galerij.
 487+Zorg ervoor dat {{PLURAL:$3|het bestand bestaat|alle bestanden bestaan}}.
 488+De volgende {{PLURAL:$2|afbeelding is|afbeeldingen zijn}} niet aangetroffen: $1',
 489+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Het|De}} volgende aangevraagde {{PLURAL:$2|bestand heeft|bestanden hebben}} een ongeldig type: $1',
 490+ 'smoothgallery-unexpected-error' => 'Er is een onverwachte fout opgetreden. Dien alstublieft een foutrapport in.',
 491+ 'smoothgallery-javascript-disabled' => 'JavaScript dient ingeschakeld te zijn om deze galerij goed te kunnen bekijken.',
 492+);
 493+
 494+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 495+ * @author Harald Khan
 496+ */
 497+$messages['nn'] = array(
 498+ 'smoothgallery' => 'Jamnt galleri',
 499+ 'smoothgallery-desc' => 'Lèt brukarar oppretta galleri med bilete som er blitt lasta opp.
 500+Inneheld dei fleste av SmoothGallery sine valalternativ.',
 501+ 'smoothgallery-title' => 'Jamnt galleri',
 502+ 'smoothgallery-smoothgallerytitle' => 'Jamnt galleri: $1',
 503+ 'smoothgallery-error' => '<b>Feil med jamnt galleri:</b>',
 504+ 'smoothgallery-gallery-not-found' => 'Det etterspurde galleriet finst ikkje.',
 505+ 'smoothgallery-not-found' => 'Ingen bilete blei lagt til i galleriet.
 506+Legg til minst eitt bilete.',
 507+ 'smoothgallery-no-images' => 'Ingen bilete blei funne i dette galleriet.
 508+Forsikra deg om at {{PLURAL:$3|biletet|bileta}} finst.
 509+Følgjande {{PLURAL:$2|bilete|bilete}} blei ikkje funne: $1',
 510+ 'smoothgallery-invalid-images' => 'Følgjande etterspurde bilete var av ein ugyldig type: $1 <!--{{PLURAL:$2||}}-->',
 511+ 'smoothgallery-unexpected-error' => 'Ein uventa feil oppstod.
 512+Lever ein feilrapport.',
 513+ 'smoothgallery-javascript-disabled' => 'Javascript er nødvendig for å visa dette galleriet på rett måte.',
 514+);
 515+
 516+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 517+ * @author Jon Harald Søby
 518+ */
 519+$messages['no'] = array(
 520+ 'smoothgallery' => 'Mykt galleri',
 521+ 'smoothgallery-desc' => 'Lar brukere opprette gallerier med bilder som er blitt lastet opp. Inneholder de fleste av SmoothGallerys valgmuligheter.',
 522+ 'smoothgallery-title' => 'Mykt galleri',
 523+ 'smoothgallery-smoothgallerytitle' => 'Mykt galleri: $1',
 524+ 'smoothgallery-error' => '<b>Feil med mykt galleri:</b>',
 525+ 'smoothgallery-gallery-not-found' => 'Det etterspurte galleriet finnes ikke.',
 526+ 'smoothgallery-not-found' => 'Ingen bilder ble lagt til i galleriet. Legg til minst ett bilde.',
 527+ 'smoothgallery-no-images' => 'Ingen bilder ble funnet i dette galleriet. Forsikre deg om at alle bilder finnes. Følgende bilder ble ikke funnet. $1',
 528+ 'smoothgallery-invalid-images' => 'Følgende etterspurte bilder var av en ugyldig type: $1',
 529+ 'smoothgallery-unexpected-error' => 'Det var en uventet feil. Lever en feilrapport.',
 530+ 'smoothgallery-javascript-disabled' => 'Javascript er nødvendig for å vise dette galleriet korrekt.',
 531+);
 532+
 533+/** Occitan (Occitan)
 534+ * @author Cedric31
 535+ */
 536+$messages['oc'] = array(
 537+ 'smoothgallery' => 'Smoothgallery',
 538+ 'smoothgallery-desc' => "Autoriza los utilizaires a crear de galariás amb d'imatges telecargats. Autoriza mai d'opcions de SmoothGallery",
 539+ 'smoothgallery-title' => 'SmoothGallery',
 540+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 541+ 'smoothgallery-error' => "'''Error de SmoothGallery :'''",
 542+ 'smoothgallery-gallery-not-found' => "Cap d'imatge pas apondut a la galariá. Apondètz almens un imatge.",
 543+ 'smoothgallery-not-found' => "Cap d'imatge pas apondut a la galariá. Apondètz almens un imatge.",
 544+ 'smoothgallery-no-images' => "Cap d'imatge es pas estat trobat dins aquesta galariá.
 545+Verificatz que {{PLURAL:$3|l'imatge requerit existís|totes los imatges requerits existisson}}.
 546+{{PLURAL:$2|Aqueste imatge es pas estat trobat|Aquestes imatges son pas estats trobats}} : $1.",
 547+ 'smoothgallery-invalid-images' => "{{PLURAL:$2|L'imatge demandat seguent es|Los imatges demandats seguents son}} d’un format incorrècte : $1",
 548+ 'smoothgallery-unexpected-error' => "Error imprevista. Mercés d'emplenar un rapòrt de bòg.",
 549+ 'smoothgallery-javascript-disabled' => "JavaScript es necessari per veire aquesta galariá d'imatges (<code><nowiki><gallery>...</gallery></nowiki></code>).",
 550+);
 551+
 552+/** Polish (Polski)
 553+ * @author Derbeth
 554+ * @author Maikking
 555+ * @author Sp5uhe
 556+ */
 557+$messages['pl'] = array(
 558+ 'smoothgallery' => 'Płynna galeria',
 559+ 'smoothgallery-desc' => 'Pozwala użytkownikom na tworzenie galerii przesłanych zdjęć.
 560+Udostępnia większości opcji SmoothGallery',
 561+ 'smoothgallery-title' => 'Płynna galeria',
 562+ 'smoothgallery-smoothgallerytitle' => 'Płynna galeria: $1',
 563+ 'smoothgallery-error' => '<b>Błąd płynnej galerii:</b>',
 564+ 'smoothgallery-gallery-not-found' => 'Żądana galeria nie istnieje.',
 565+ 'smoothgallery-not-found' => 'Nie dodano żadnych grafik do tej galerii. Dodaj przynajmniej jedną grafikę.',
 566+ 'smoothgallery-no-images' => 'Nie odnaleziono grafik w tej galerii.
 567+Upewnij się, czy {{PLURAL:$3|szukana grafika istnieje|szukane grafiki istnieją}}.
 568+{{PLURAL:$2|Następująca grafika nie została odnaleziona|Następujące grafiki nie zostały odnalezione}}: $1',
 569+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Następująca żądana grafika jest|Następujące żądane grafiki są}} nieprawidłowego typu – $1',
 570+ 'smoothgallery-unexpected-error' => 'Wystąpił niespodziewany błąd. Prosimy o wypełnienie zgłoszenia błędu.',
 571+ 'smoothgallery-javascript-disabled' => 'Do obejrzenia tej galerii wymagany jest JavaScript.',
 572+);
 573+
 574+/** Piedmontese (Piemontèis)
 575+ * @author Bèrto 'd Sèra
 576+ */
 577+$messages['pms'] = array(
 578+ 'smoothgallery' => 'SmoothGallery',
 579+ 'smoothgallery-title' => 'SmoothGallery',
 580+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 581+ 'smoothgallery-error' => '<b>SmoothGallery eror:</b>',
 582+ 'smoothgallery-not-found' => "A l'é pa giontasse gnun-a figura a la galerìa. Për piasì, ch'a në gionta almanch un-a.",
 583+ 'smoothgallery-no-images' => "Pa gnun-a figura trovà ant sta galerìa-sì. Ch'a contròla che le figure dont a fa da manca a-i sio da bon. A son nen trovasse ste figure-sì: $1",
 584+ 'smoothgallery-unexpected-error' => "A l'é sta-ie n'eror amprevist. Për piasì, ch'a-j lo segnala aj programator.",
 585+);
 586+
 587+/** Pashto (پښتو)
 588+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 589+ */
 590+$messages['ps'] = array(
 591+ 'smoothgallery-javascript-disabled' => 'د همدې نندارتون د ښه ليدو لپاره Javascript
 592+ته اړتيا ده.',
 593+);
 594+
 595+/** Portuguese (Português)
 596+ * @author Malafaya
 597+ */
 598+$messages['pt'] = array(
 599+ 'smoothgallery' => 'SmoothGallery',
 600+ 'smoothgallery-desc' => 'Permite aos utilizadores criarem galerias com images que foram carregadas.
 601+Permite a maioria das opções do SmoothGallery',
 602+ 'smoothgallery-title' => 'SmoothGallery',
 603+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 604+ 'smoothgallery-error' => '<b>Erro no SmoothGallery:</b>',
 605+ 'smoothgallery-gallery-not-found' => 'A galeria requisitada não existe.',
 606+ 'smoothgallery-not-found' => 'Nenhuma imagem foi adicionada à galeria.
 607+Por favor, adicione pelo menos uma imagem.',
 608+ 'smoothgallery-no-images' => 'Nenhuma imagem foi encontrada nesta galeria.
 609+Cerifique-se que {{PLURAL:$3|a imagem pedida existe|todas as imagens pedidas existem}}.
 610+{{PLURAL:$2|A seguinte imagem não foi encontrada|As seguintes imagens não foram encontradas}}: $1',
 611+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|A seguinte imagem pedida era|As seguintes imagens pedidas eram}} de um tipo inválido: $1',
 612+ 'smoothgallery-unexpected-error' => 'Houve um erro inesperado.
 613+Por favor, reporte o problema.',
 614+ 'smoothgallery-javascript-disabled' => 'Javascript é requerido para visualizar esta galeria adequadamente.',
 615+);
 616+
 617+/** Brazilian Portuguese (Português do Brasil)
 618+ * @author Eduardo.mps
 619+ */
 620+$messages['pt-br'] = array(
 621+ 'smoothgallery' => 'SmoothGallery',
 622+ 'smoothgallery-desc' => 'Permite aos utilizadores criarem galerias com imagens que foram carregadas.
 623+Permite a maioria das opções do SmoothGallery',
 624+ 'smoothgallery-title' => 'SmoothGallery',
 625+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 626+ 'smoothgallery-error' => '<b>Erro no SmoothGallery:</b>',
 627+ 'smoothgallery-gallery-not-found' => 'A galeria requisitada não existe.',
 628+ 'smoothgallery-not-found' => 'Nenhuma imagem foi adicionada à galeria.
 629+Por favor, adicione pelo menos uma imagem.',
 630+ 'smoothgallery-no-images' => 'Nenhuma imagem foi encontrada nesta galeria.
 631+Cerifique-se que {{PLURAL:$3|a imagem requisitada existe|todas as imagens requisitadas existem}}.
 632+{{PLURAL:$2|A seguinte imagem não foi encontrada|As seguintes imagens não foram encontradas}}: $1',
 633+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|A seguinte imagem requisitada era|As seguintes imagens requisitadas eram}} de um tipo inválido: $1',
 634+ 'smoothgallery-unexpected-error' => 'Houve um erro inesperado.
 635+Por favor, reporte o problema.',
 636+ 'smoothgallery-javascript-disabled' => 'Javascript é requerido para visualizar esta galeria adequadamente.',
 637+);
 638+
 639+/** Romanian (Română)
 640+ * @author KlaudiuMihaila
 641+ */
 642+$messages['ro'] = array(
 643+ 'smoothgallery-gallery-not-found' => 'Galeria cerută nu există.',
 644+);
 645+
 646+/** Russian (Русский)
 647+ * @author Александр Сигачёв
 648+ */
 649+$messages['ru'] = array(
 650+ 'smoothgallery' => 'Плавная галерея',
 651+ 'smoothgallery-desc' => 'Позволяет участникам создавать галереи загруженных изображений . Поддерживает большинство настроек SmoothGallery',
 652+ 'smoothgallery-title' => 'Плавная галерея',
 653+ 'smoothgallery-smoothgallerytitle' => 'Плавная галерея: $1',
 654+ 'smoothgallery-error' => '<b>Ошибка плавной галереи:</b>',
 655+ 'smoothgallery-gallery-not-found' => 'Запрашиваемой галереи не существует.',
 656+ 'smoothgallery-not-found' => 'В галерею не было добавлено изображений. Пожалуйста, добавте хотя бы одно.',
 657+ 'smoothgallery-no-images' => 'Не найдено изображений для этой галереи.
 658+Убедитесь, что {{PLURAL:$3|требуемое изображение существует|все требуемые изображения существуют}}.
 659+{{PLURAL:$2|Следующее изображение не найдено|Следующие изображения не найдены}}: $1',
 660+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Следующее требуемое изображение имеет|Следующие требуемые изображения имеют}} неправильный тип: $1',
 661+ 'smoothgallery-unexpected-error' => 'Произошла непредвиденная ошибка.
 662+Пожалуйста, отправьте отчёт об ошибке.',
 663+ 'smoothgallery-javascript-disabled' => 'Для правильной работы этой галереи требуется Javascript.',
 664+);
 665+
 666+/** Slovak (Slovenčina)
 667+ * @author Helix84
 668+ */
 669+$messages['sk'] = array(
 670+ 'smoothgallery' => 'SmoothGallery',
 671+ 'smoothgallery-desc' => 'Umožňuje používateľom vytvárať galérie z nahraných obrázkov. Ponúka väčšinu z možností SmoothGallery',
 672+ 'smoothgallery-title' => 'SmoothGallery',
 673+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery: $1',
 674+ 'smoothgallery-error' => '<b>Chyba SmoothGallery:</b>',
 675+ 'smoothgallery-gallery-not-found' => 'Požadovaná galéria neexistuje.',
 676+ 'smoothgallery-not-found' => 'Žiadne obrázky neboli pridané do galérie. Prosím, pridajte aspoň jeden obrázok.',
 677+ 'smoothgallery-no-images' => 'V tejto galérii neboli nájdené žiadne obrázky.
 678+Uistite sa, že {{PLURAL:$3|požadovaný obrázok existuje|všetky požadované obrázky existujú}}.
 679+{{PLURAL:$2|Nasledovný obrázok nebol nájdený|Nasledovné obrázky neboli nájdené}}: $1',
 680+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Nasledovný požadovaný obrázok bol|Nasledovné požadované obrázky boli}} neplatného typu: $1',
 681+ 'smoothgallery-unexpected-error' => 'Nastala neočakávaná chyba. Prosím, podajte správu o chybe.',
 682+ 'smoothgallery-javascript-disabled' => 'Správne zobrazenie tejto galérie vyžaduje JavaScript.',
 683+);
 684+
 685+/** Serbian Cyrillic ekavian (ћирилица)
 686+ * @author Sasa Stefanovic
 687+ * @author Михајло Анђелковић
 688+ */
 689+$messages['sr-ec'] = array(
 690+ 'smoothgallery' => 'ЛакаГалерија',
 691+ 'smoothgallery-desc' => 'Омогућује корисницима да праве галерије са сликама које су послали.
 692+Омогућује већи број опција за SmoothGallery.',
 693+ 'smoothgallery-title' => 'ЛакаГалерија',
 694+ 'smoothgallery-smoothgallerytitle' => 'ЛакаГалерија: $1',
 695+ 'smoothgallery-error' => '<b>ЛакаГалерија грешка:</b>',
 696+ 'smoothgallery-gallery-not-found' => 'Захтевана галерија не постоји.',
 697+ 'smoothgallery-not-found' => 'Нема слика у галерији. Додајте најмање једну слику.',
 698+ 'smoothgallery-no-images' => 'Нису нађене слике у овој галерији.
 699+Осигурајте се да {{PLURAL:$3|захтевана слика постоји|све захтеване слике постоје}}.
 700+{{PLURAL:$2|Следећа слика није нађена|Следеће слике нису нађене}}: $1',
 701+ 'smoothgallery-invalid-images' => 'Тип {{PLURAL:$2|следеће захтеване слике|следећих захтеваних слика}} је био непознат: $1',
 702+ 'smoothgallery-unexpected-error' => 'Десила се неочекивана грешка. Молимо обавестите администраторе.',
 703+ 'smoothgallery-javascript-disabled' => 'Јаваскрипт је потребан да би се галерија нормално приказала.',
 704+);
 705+
 706+/** Swedish (Svenska)
 707+ * @author M.M.S.
 708+ * @author Najami
 709+ */
 710+$messages['sv'] = array(
 711+ 'smoothgallery' => 'SmoothGalleri',
 712+ 'smoothgallery-desc' => 'Låter användare skapa gallerier med bilder som blivit uppladdade.
 713+Innehåller de flesta av SmoothGalleris alternativ',
 714+ 'smoothgallery-title' => 'SmoothGalleri',
 715+ 'smoothgallery-smoothgallerytitle' => 'SmoothGalleri: $1',
 716+ 'smoothgallery-error' => '<b>Fel med SmoothGalleri:</b>',
 717+ 'smoothgallery-gallery-not-found' => 'Galleriet som du efterfrågade finns inte.',
 718+ 'smoothgallery-not-found' => 'Inga bilder lades till i galleriet.
 719+Lägg till minst en bild.',
 720+ 'smoothgallery-no-images' => 'Inga bilder hittades i det här galleriet.
 721+Försäkra dig om att {{PLURAL:$3|bilden|alla bilder}} finns.
 722+Följande {{PLURAL:$2|bild|bilder}} hittades inte: $1',
 723+ 'smoothgallery-invalid-images' => 'Följande efterfrågade {{PLURAL:$2|bild|bilder}} var av en ogiltig typ: $1',
 724+ 'smoothgallery-unexpected-error' => 'Du var ett oväntat fel.
 725+Var god lämna en felrapport.',
 726+ 'smoothgallery-javascript-disabled' => 'Javascript behövs för att visa det här galleriet korrekt.',
 727+);
 728+
 729+/** Tagalog (Tagalog)
 730+ * @author AnakngAraw
 731+ */
 732+$messages['tl'] = array(
 733+ 'smoothgallery' => 'SmoothGallery ("Makinis na Tanghalan/Galerya")',
 734+ 'smoothgallery-desc' => 'Nagpapahintulot sa mga tagagamit na makalikha ng mga galerya/tanghalan ng naikarga/ikinargang mga larawan.
 735+Nagpapahintulot sa lahat ng mga pilian (opsyon) ng SmoothGallery ("Makinis na Tanghalan/Galerya")',
 736+ 'smoothgallery-title' => 'SmoothGallery ("Makinis na Tanghalan/Galerya")',
 737+ 'smoothgallery-smoothgallerytitle' => 'SmoothGallery ("Makinis na Tanghalan/Galerya"): $1',
 738+ 'smoothgallery-error' => '<b>Kamalian sa SmoothGallery:</b>',
 739+ 'smoothgallery-gallery-not-found' => 'Hindi umiiral ang hiniling na tanghalan/galerya.',
 740+ 'smoothgallery-not-found' => 'Walang mga larawang naidagdag patungo sa tanghalan/galerya.
 741+Magdagdag po ng kahit na isang larawan lamang.',
 742+ 'smoothgallery-no-images' => 'Walang mga larawang natagpuan mula sa loob ng tanghalan/galeryang ito.
 743+Pakitiyak lamang na umiiral nga {{PLURAL:$3|ang larawan|ang mga larawang}}g hiniling.
 744+Hindi natagpuan ang sumusunod na {{PLURAL:$2|larawan|mga larawan}}: $1',
 745+ 'smoothgallery-invalid-images' => 'Ang sumusunod na hiniling na {{PLURAL:$2|larawan ay|mga larawan ay}} isang hindi tanggap na uri: $1',
 746+ 'smoothgallery-unexpected-error' => "Nagkaroon ng isang hindi inaasahang kamalian.
 747+Magpadala/magpasa lamang po ng isang ulat (report) ng depekto (''bug'').",
 748+ 'smoothgallery-javascript-disabled' => 'Kinakailangan ang Javascript upang matanaw/matingnan ng tama/wasto ang galerya/tanghalang ito.',
 749+);
 750+
 751+/** Vietnamese (Tiếng Việt)
 752+ * @author Minh Nguyen
 753+ * @author Vinhtantran
 754+ */
 755+$messages['vi'] = array(
 756+ 'smoothgallery' => 'Trang ảnh mượt mà',
 757+ 'smoothgallery-desc' => 'Cho phép thành viên tạo trang ảnh với những ảnh đã được tải lên.
 758+Cho phép phần lớn tùy chọn của SmoothGallery',
 759+ 'smoothgallery-title' => 'Trang ảnh mượt mà',
 760+ 'smoothgallery-smoothgallerytitle' => 'Trang ảnh mượt mà: $1',
 761+ 'smoothgallery-error' => '<b>Lỗi SmoothGallery:</b>',
 762+ 'smoothgallery-gallery-not-found' => 'Trang ảnh yêu cầu không tồn tại.',
 763+ 'smoothgallery-not-found' => 'Không có hình nào được thêm vào trang ảnh.
 764+Xin hãy thêm ít nhất một hình.',
 765+ 'smoothgallery-no-images' => 'Không tìm thấy hình nào trong trang trưng bày ảnh.
 766+Hãy chắc chắn rằng {{PLURAL:$3|hình|tất cả các hình}} được yêu cầu có tồn tại.
 767+{{PLURAL:$2|Hình|Những hình}} sau không tìm thấy: $1',
 768+ 'smoothgallery-invalid-images' => '{{PLURAL:$2|Hình|Những hình}} được yêu cầu sau có kiểu không phù hợp: $1',
 769+ 'smoothgallery-unexpected-error' => 'Xảy ra lỗi không lường được.
 770+Xin hãy đăng một báo cáo lỗi.',
 771+ 'smoothgallery-javascript-disabled' => 'Cần phải kích hoạt Javascript để trang ảnh hiển thị đúng.',
 772+);
 773+
 774+/** Volapük (Volapük)
 775+ * @author Smeira
 776+ */
 777+$messages['vo'] = array(
 778+ 'smoothgallery-gallery-not-found' => 'Magodem pavilöl no dabinon.',
 779+);
 780+
Property changes on: trunk/extensions/Plotter/SmoothGallery.i18n.php
___________________________________________________________________
Name: svn:eol-style
1781 + native

Status & tagging log