Index: branches/wmf/1.16wmf4/extensions/CentralNotice/patch-add-preferred.sql |
— | — | @@ -1,6 +0,0 @@ |
2 | | -# Support for one notice to supercede all others. This allows one notice to |
3 | | -# cancel out all the templates that a non preffered notice might have if they |
4 | | -# overlap. Use case is to be able to use one all language and projects notice |
5 | | -# and have it superceded by a specific one for en wikipedia. |
6 | | - |
7 | | -ALTER TABLE cn_notices ADD COLUMN not_preferred bool NOT NULL default '0'; |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.pg.psql |
— | — | @@ -1,29 +0,0 @@ |
2 | | - |
3 | | -BEGIN; |
4 | | -CREATE TABLE cn_notices ( |
5 | | - not_id SERIAL PRIMARY KEY, |
6 | | - not_name TEXT NOT NULL, |
7 | | - not_start TIMESTAMPTZ NOT NULL, |
8 | | - not_end TIMESTAMPTZ NOT NULL, |
9 | | - not_enabled SMALLINT NOT NULL DEFAULT 0, |
10 | | - not_preferred SMALLINT NOT NULL DEFAULT 0, |
11 | | - not_locked SMALLINT NOT NULL DEFAULT 0, |
12 | | - not_language TEXT NOT NULL, |
13 | | - not_project TEXT NOT NULL |
14 | | -); |
15 | | - |
16 | | -CREATE TABLE cn_assignments ( |
17 | | - asn_id SERIAL PRIMARY KEY, |
18 | | - not_id INTEGER NOT NULL, |
19 | | - tmp_id INTEGER NOT NULL, |
20 | | - tmp_weight INTEGER NOT NULL |
21 | | -); |
22 | | - |
23 | | -CREATE TABLE cn_templates ( |
24 | | - tmp_id SERIAL PRIMARY KEY, |
25 | | - tmp_name TEXT |
26 | | -); |
27 | | -COMMIT; |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/newCentralNotice.js |
— | — | @@ -0,0 +1,77 @@ |
| 2 | +/* |
| 3 | + * New Central Notice Javascript |
| 4 | + * |
| 5 | + * Mostly stubbed functionallity for central notice improvements |
| 6 | + * May or may not be used, definitely will be changed. |
| 7 | + * More of a sketch of what we think needs to be done. |
| 8 | + * |
| 9 | + * QUESTIONS: |
| 10 | + * 1. How do I determin if a user is logged in or not? |
| 11 | + * 2. How do I determin a users location? |
| 12 | + * |
| 13 | + */ |
| 14 | +( function( $ ) { |
| 15 | + $.centralNotice = { |
| 16 | + 'data': { |
| 17 | + 'getVars': {} |
| 18 | + }, |
| 19 | + 'fn': { |
| 20 | + 'loadBanner': function( bannerName ) { |
| 21 | + // get the requested banner from /centralnotice/banners/<bannername>/<wgUserLanguage>.js |
| 22 | + var request = $.ajax( { |
| 23 | + url: 'response.html', |
| 24 | + dataType: 'html', |
| 25 | + success: function( data ) { |
| 26 | + $.centralNotice.fn.displayBanner( data ); |
| 27 | + } |
| 28 | + }); |
| 29 | + }, |
| 30 | + 'loadCampaign': function( timestamp ) { |
| 31 | + var listURL; |
| 32 | + if ( timestamp ) { |
| 33 | + listURL = "TBD" |
| 34 | + } else { |
| 35 | + listURL = "/centralnotice/<project type>/<wgContentLanguage>.js" |
| 36 | + } |
| 37 | + var request = $.ajax( { |
| 38 | + url: listURL, |
| 39 | + dataType: 'json', |
| 40 | + success: function( data ) { |
| 41 | + $.centralNotice.fn.chooseBanner( data ); |
| 42 | + } |
| 43 | + } ); |
| 44 | + }, |
| 45 | + 'chooseBanner': function( bannerList ) { |
| 46 | + // pick a banner based on logged-in status and geotargetting |
| 47 | + var bannerHTML = bannerList[0].html; |
| 48 | + $.centralNotice.fn.displayBanner( bannerHTML ); |
| 49 | + }, |
| 50 | + 'displayBanner': function( bannerHTML ) { |
| 51 | + // inject the banner html into the page |
| 52 | + $( '#centralNotice' ).replaceWith( bannerHTML ); |
| 53 | + }, |
| 54 | + 'getQueryStringVariables': function() { |
| 55 | + document.location.search.replace( /\??(?:([^=]+)=([^&]*)&?)/g, function () { |
| 56 | + function decode( s ) { |
| 57 | + return decodeURIComponent( s.split( "+" ).join( " " ) ); |
| 58 | + } |
| 59 | + $.centralNotice.data.getVars[decode( arguments[1] )] = decode( arguments[2] ); |
| 60 | + } ); |
| 61 | + } |
| 62 | + } |
| 63 | + } |
| 64 | + $( document ).ready( function () { |
| 65 | + // initialize the query string vars |
| 66 | + $.centralNotice.fn.getQueryStringVariables(); |
| 67 | + if( $.centralNotice.data.getVars['forceBanner'] ) { |
| 68 | + // if we're forcing one banner |
| 69 | + $.centralNotice.fn.loadBanner( $.centralNotice.data.getVars['forceBanner'] ); |
| 70 | + } else if ( $.centralNotice.data.getVars['forceTimestamp'] ) { |
| 71 | + // if we're forcing a future campaign time |
| 72 | + $.centralNotice.fn.loadCampaign( $.centralNotice.data.getVars['forceTimestamp'] ); |
| 73 | + } else { |
| 74 | + // look for banners ready to go NOW |
| 75 | + $.centralNotice.fn.loadCampaign( ); |
| 76 | + } |
| 77 | + } ); //document ready |
| 78 | +} )( jQuery ); |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/newCentralNotice.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 79 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.php |
— | — | @@ -13,6 +13,9 @@ |
14 | 14 | // |
15 | 15 | $wgNoticeCentralPath = false; |
16 | 16 | |
| 17 | +// Whether to use local notice loader |
| 18 | +$wgNoticeUseLocalNotice = false; |
| 19 | + |
17 | 20 | // This guy does much the same, but with the local sitenotice/anonnotice. |
18 | 21 | // Static generation isn't quite supported yet. |
19 | 22 | // |
— | — | @@ -111,14 +114,22 @@ |
112 | 115 | |
113 | 116 | function efCentralNoticeSetup() { |
114 | 117 | global $wgHooks, $wgNoticeInfrastructure, $wgAutoloadClasses, $wgSpecialPages; |
115 | | - global $wgCentralNoticeLoader; |
| 118 | + global $wgCentralNoticeLoader, $wgNoticeUseLocalNotice; |
116 | 119 | |
117 | 120 | $dir = dirname( __FILE__ ) . '/'; |
118 | 121 | |
119 | 122 | if ( $wgCentralNoticeLoader ) { |
| 123 | + $wgHooks['LoadExtensionSchemaUpdates'][] = 'efCentralNoticeSchema'; |
120 | 124 | $wgHooks['BeforePageDisplay'][] = 'efCentralNoticeLoader'; |
121 | | - $wgHooks['SiteNoticeAfter'][] = 'efCentralNoticeDisplay'; |
122 | 125 | $wgHooks['MakeGlobalVariablesScript'][] = 'efCentralNoticeDefaults'; |
| 126 | + |
| 127 | + if ( $wgNoticeUseLocalNotice ) { |
| 128 | + $wgSpecialPages['NoticeLocal'] = 'SpecialNoticeLocal'; |
| 129 | + $wgAutoloadClasses['SpecialNoticeLocal'] = $dir . 'SpecialNoticeLocal.php'; |
| 130 | + $wgHooks['SiteNoticeBefore'][] = 'efCentralNoticeDisplayBefore'; |
| 131 | + } else { |
| 132 | + $wgHooks['SiteNoticeAfter'][] = 'efCentralNoticeDisplayAfter'; |
| 133 | + } |
123 | 134 | } |
124 | 135 | |
125 | 136 | $wgAutoloadClasses['NoticePage'] = $dir . 'NoticePage.php'; |
— | — | @@ -133,63 +144,81 @@ |
134 | 145 | |
135 | 146 | $wgSpecialPages['NoticeTemplate'] = 'SpecialNoticeTemplate'; |
136 | 147 | $wgAutoloadClasses['SpecialNoticeTemplate'] = $dir . 'SpecialNoticeTemplate.php'; |
| 148 | + |
137 | 149 | $wgAutoloadClasses['CentralNoticeDB'] = $dir . 'CentralNotice.db.php'; |
| 150 | + $wgAutoloadClasses['TemplatePager'] = $dir . 'TemplatePager.php'; |
138 | 151 | } |
139 | 152 | } |
140 | 153 | |
| 154 | +function efCentralNoticeSchema() { |
| 155 | + global $wgDBtype, $wgExtNewTables, $wgExtNewFields; |
| 156 | + |
| 157 | + $base = dirname( __FILE__ ); |
| 158 | + if ( $wgDBtype == 'mysql' ) { |
| 159 | + $wgExtNewTables[] = array( 'cn_notices', $base . '/CentralNotice.sql' ); |
| 160 | + $wgExtNewFields[] = array( 'cn_notices', 'not_preferred', $base . '/patches/patch-notice_preferred.sql' ); |
| 161 | + $wgExtNewTables[] = array( 'cn_notice_languages', $base . '/patches/patch-notice_languages.sql' ); |
| 162 | + $wgExtNewFields[] = array( 'cn_templates', 'tmp_display_anon', $base . '/patches/patch-template_settings.sql' ); |
| 163 | + } |
| 164 | + return true; |
| 165 | +} |
| 166 | + |
141 | 167 | function efCentralNoticeLoader( $out, $skin ) { |
142 | | - global $wgScript, $wgUser, $wgOut, $wgLang; |
143 | | - global $wgStyleVersion, $wgJsMimeType; |
144 | | - global $wgNoticeProject; |
| 168 | + global $wgUser, $wgOut, $wgLang; |
| 169 | + global $wgNoticeProject, $wgNoticeCentralPath, $wgNoticeLocalPath, $wgNoticeUseLocalNotice; |
145 | 170 | |
146 | | - global $wgNoticeCentralPath; |
147 | | - global $wgNoticeLocalPath; |
148 | | - |
149 | 171 | $lang = $wgLang->getCode(); |
150 | 172 | $centralNotice = "$wgNoticeProject/$lang/centralnotice.js"; |
151 | | - /* |
152 | | - $localNotice = ( is_object( $wgUser ) && $wgUser->isLoggedIn() ) |
153 | | - ? 'sitenotice.js' |
154 | | - : 'anonnotice.js'; |
155 | | - */ |
156 | 173 | |
157 | | - |
158 | 174 | if ( $wgNoticeCentralPath === false ) { |
159 | 175 | $centralLoader = SpecialPage::getTitleFor( 'NoticeText', $centralNotice )->getLocalUrl(); |
160 | 176 | } else { |
161 | 177 | $centralLoader = "$wgNoticeCentralPath/$centralNotice"; |
162 | 178 | } |
163 | | - $encCentralLoader = htmlspecialchars( $centralLoader ); |
164 | 179 | |
165 | | - /* |
166 | | - if ( $wgNoticeLocalPath === false ) { |
167 | | - $localLoader = SpecialPage::getTitleFor( 'NoticeLocal', $localNotice )->getLocalUrl(); |
168 | | - } else { |
169 | | - $localLoader = "$wgNoticeLocalPath/$localNotice"; |
| 180 | + // Load the notice text from <head> |
| 181 | + $wgOut->addScriptFile( $centralLoader ); |
| 182 | + |
| 183 | + if ( $wgNoticeUseLocalNotice ) { |
| 184 | + $localNotice = ( is_object( $wgUser ) && $wgUser->isLoggedIn() ) |
| 185 | + ? 'sitenotice.js' |
| 186 | + : 'anonnotice.js'; |
| 187 | + if ( $wgNoticeLocalPath === false ) { |
| 188 | + $localLoader = SpecialPage::getTitleFor( 'NoticeLocal', $localNotice )->getLocalUrl(); |
| 189 | + } else { |
| 190 | + $localLoader = "$wgNoticeLocalPath/$localNotice"; |
| 191 | + } |
| 192 | + $wgOut->addScriptFile( $localLoader ); |
170 | 193 | } |
171 | | - $encLocalLoader = htmlspecialchars( $localLoader ); |
172 | | - */ |
173 | 194 | |
174 | | - // Load the notice text from <head> |
175 | | - $wgOut->addScript( "<script type=\"{$wgJsMimeType}\" src=\"$encCentralLoader?$wgStyleVersion\"></script>\n" ); |
176 | | - |
177 | 195 | return true; |
178 | 196 | } |
179 | 197 | |
180 | 198 | function efCentralNoticeDefaults( &$vars ) { |
| 199 | + global $wgNoticeUseLocalNotice; |
| 200 | + |
181 | 201 | // Initialize these variables to empty, so if the notice script fails |
182 | 202 | // we don't have any surprises. |
183 | 203 | $vars['wgNotice'] = ''; |
184 | | - $vars['wgNoticeLocal'] = ''; |
| 204 | + if ( $wgNoticeUseLocalNotice ) { |
| 205 | + $vars['wgNoticeLocal'] = ''; |
| 206 | + } |
185 | 207 | return true; |
186 | 208 | } |
187 | 209 | |
188 | | -function efCentralNoticeDisplay( &$notice ) { |
| 210 | +function efCentralNoticeDisplayAfter( &$notice ) { |
189 | 211 | // Slip in load of the data... |
190 | 212 | $notice = |
191 | | - "<script type='text/javascript'>" . |
192 | | - "if (wgNotice != '') document.writeln(wgNotice);" . |
193 | | - "</script>" . |
| 213 | + Html::inlineScript( "if (wgNotice != '') document.writeln(wgNotice);" ) . |
194 | 214 | $notice; |
195 | 215 | return true; |
196 | 216 | } |
| 217 | + |
| 218 | +function efCentralNoticeDisplayBefore( &$notice ) { |
| 219 | + // Slip in load of the data... |
| 220 | + $notice = Html::inlineScript( |
| 221 | + "if (wgNotice != '') document.writeln(wgNotice);" . |
| 222 | + " if (wgNoticeLocal != '') document.writeln(wgNoticeLocal);" |
| 223 | + ); |
| 224 | + return false; |
| 225 | +} |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/TemplatePager.php |
— | — | @@ -0,0 +1,112 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +class TemplatePager extends ReverseChronologicalPager { |
| 5 | + var $onRemoveChange, $viewPage, $special; |
| 6 | + var $editable; |
| 7 | + |
| 8 | + function __construct( $special ) { |
| 9 | + $this->special = $special; |
| 10 | + $this->editable = $special->editable; |
| 11 | + parent::__construct(); |
| 12 | + |
| 13 | + // Override paging defaults |
| 14 | + list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset( 20, '' ); |
| 15 | + $this->mLimitsShown = array( 20, 50, 100 ); |
| 16 | + |
| 17 | + $msg = Xml::encodeJsVar( wfMsg( 'centralnotice-confirm-delete' ) ); |
| 18 | + $this->onRemoveChange = "if( this.checked ) { this.checked = confirm( $msg ) }"; |
| 19 | + $this->viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
| 20 | + } |
| 21 | + |
| 22 | + function getQueryInfo() { |
| 23 | + // Return all the banners in the database |
| 24 | + return array( |
| 25 | + 'tables' => 'cn_templates', |
| 26 | + 'fields' => array( 'tmp_name', 'tmp_id' ), |
| 27 | + ); |
| 28 | + } |
| 29 | + |
| 30 | + /** |
| 31 | + * Sort the banner list by tmp_id |
| 32 | + */ |
| 33 | + function getIndexField() { |
| 34 | + return 'tmp_id'; |
| 35 | + } |
| 36 | + |
| 37 | + /** |
| 38 | + * Generate the content of each table row (1 row = 1 banner) |
| 39 | + */ |
| 40 | + function formatRow( $row ) { |
| 41 | + |
| 42 | + // Begin banner row |
| 43 | + $htmlOut = Xml::openElement( 'tr' ); |
| 44 | + |
| 45 | + if ( $this->editable ) { |
| 46 | + // Remove box |
| 47 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
| 48 | + Xml::check( 'removeTemplates[]', false, |
| 49 | + array( |
| 50 | + 'value' => $row->tmp_name, |
| 51 | + 'onchange' => $this->onRemoveChange |
| 52 | + ) |
| 53 | + ) |
| 54 | + ); |
| 55 | + } |
| 56 | + |
| 57 | + // Link and Preview |
| 58 | + $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
| 59 | + $render = new SpecialNoticeText(); |
| 60 | + $render->project = 'wikipedia'; |
| 61 | + $render->language = $this->mRequest->getVal( 'wpUserLanguage' ); |
| 62 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
| 63 | + $this->getSkin()->makeLinkObj( $this->viewPage, |
| 64 | + htmlspecialchars( $row->tmp_name ), |
| 65 | + 'template=' . urlencode( $row->tmp_name ) ) . |
| 66 | + Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
| 67 | + $render->getHtmlNotice( $row->tmp_name ), |
| 68 | + array( 'class' => 'cn-bannerpreview') |
| 69 | + ) |
| 70 | + ); |
| 71 | + |
| 72 | + // End banner row |
| 73 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 74 | + |
| 75 | + return $htmlOut; |
| 76 | + } |
| 77 | + |
| 78 | + /** |
| 79 | + * Specify table headers |
| 80 | + */ |
| 81 | + function getStartBody() { |
| 82 | + $htmlOut = ''; |
| 83 | + $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
| 84 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 85 | + if ( $this->editable ) { |
| 86 | + $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
| 87 | + wfMsg ( 'centralnotice-remove' ) |
| 88 | + ); |
| 89 | + } |
| 90 | + $htmlOut .= Xml::element( 'th', array( 'align' => 'left' ), |
| 91 | + wfMsg ( 'centralnotice-templates' ) |
| 92 | + ); |
| 93 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 94 | + return $htmlOut; |
| 95 | + } |
| 96 | + |
| 97 | + /** |
| 98 | + * Close table and add Submit button |
| 99 | + */ |
| 100 | + function getEndBody() { |
| 101 | + global $wgUser; |
| 102 | + $htmlOut = ''; |
| 103 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 104 | + if ( $this->editable ) { |
| 105 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 106 | + $htmlOut .= Xml::tags( 'div', |
| 107 | + array( 'class' => 'cn-buttons' ), |
| 108 | + Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
| 109 | + ); |
| 110 | + } |
| 111 | + return $htmlOut; |
| 112 | + } |
| 113 | +} |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/TemplatePager.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 114 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/SpecialCentralNotice.php |
— | — | @@ -6,26 +6,34 @@ |
7 | 7 | } |
8 | 8 | |
9 | 9 | class CentralNotice extends SpecialPage { |
10 | | - |
| 10 | + var $centralNoticeDB; |
11 | 11 | /* Functions */ |
12 | 12 | |
13 | 13 | function CentralNotice() { |
14 | 14 | // Register special page |
15 | | - SpecialPage::SpecialPage( 'CentralNotice' ); |
| 15 | + parent::SpecialPage( 'CentralNotice' ); |
16 | 16 | |
17 | 17 | // Internationalization |
18 | 18 | wfLoadExtensionMessages( 'CentralNotice' ); |
| 19 | + |
| 20 | + $this->centralNoticeDB = new CentralNoticeDB(); |
19 | 21 | } |
20 | | - |
| 22 | + |
| 23 | + /** |
| 24 | + * Handle different types of page requests |
| 25 | + */ |
21 | 26 | function execute( $sub ) { |
22 | | - global $wgOut, $wgUser, $wgRequest; |
| 27 | + global $wgOut, $wgUser, $wgRequest, $wgExtensionAssetsPath; |
23 | 28 | |
24 | 29 | // Begin output |
25 | 30 | $this->setHeaders(); |
26 | | - |
27 | | - // Get current skin |
28 | | - $sk = $wgUser->getSkin(); |
29 | | - |
| 31 | + |
| 32 | + // Add style file to the output headers |
| 33 | + $wgOut->addExtensionStyle( "$wgExtensionAssetsPath/CentralNotice/centralnotice.css" ); |
| 34 | + |
| 35 | + // Add script file to the output headers |
| 36 | + $wgOut->addScriptFile( "$wgExtensionAssetsPath/CentralNotice/centralnotice.js" ); |
| 37 | + |
30 | 38 | // Check permissions |
31 | 39 | $this->editable = $wgUser->isAllowed( 'centralnotice-admin' ); |
32 | 40 | |
— | — | @@ -34,200 +42,187 @@ |
35 | 43 | |
36 | 44 | // Show header |
37 | 45 | $this->printHeader( $sub ); |
38 | | - |
| 46 | + |
| 47 | + // Begin Campaigns tab content |
| 48 | + $wgOut->addHTML( Xml::openElement( 'div', array( 'id' => 'preferences' ) ) ); |
| 49 | + |
39 | 50 | $method = $wgRequest->getVal( 'method' ); |
40 | | - // Handle form sumissions |
| 51 | + |
| 52 | + // Handle form submissions |
41 | 53 | if ( $this->editable && $wgRequest->wasPosted() ) { |
42 | | - |
43 | | - // Handle removing |
44 | | - $toRemove = $wgRequest->getArray( 'removeNotices' ); |
45 | | - if ( isset( $toRemove ) ) { |
46 | | - // Remove notices in list |
47 | | - foreach ( $toRemove as $template ) { |
48 | | - $this->removeNotice( $template ); |
| 54 | + |
| 55 | + // Check authentication token |
| 56 | + if ( $wgUser->matchEditToken( $wgRequest->getVal( 'authtoken' ) ) ) { |
| 57 | + |
| 58 | + // Handle removing campaigns |
| 59 | + $toRemove = $wgRequest->getArray( 'removeNotices' ); |
| 60 | + if ( isset( $toRemove ) ) { |
| 61 | + // Remove campaigns in list |
| 62 | + foreach ( $toRemove as $notice ) { |
| 63 | + $this->removeNotice( $notice ); |
| 64 | + } |
| 65 | + |
| 66 | + // Show list of campaigns |
| 67 | + $this->listNotices(); |
| 68 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
| 69 | + return; |
49 | 70 | } |
50 | 71 | |
51 | | - // Show list of notices |
52 | | - $this->listNotices(); |
53 | | - return; |
54 | | - } |
55 | | - |
56 | | - // Handle locking/unlocking |
57 | | - $lockedNotices = $wgRequest->getArray( 'locked' ); |
58 | | - if ( isset( $lockedNotices ) ) { |
59 | | - if ( $method == 'listNoticeDetail' ) { |
60 | | - $notice = $wgRequest->getVal ( 'notice' ); |
61 | | - $this->updateLock( $notice, '1' ); |
62 | | - } else { |
63 | | - // Build list of notices to lock |
64 | | - $unlockedNotices = array_diff( $this->getNoticesName(), $lockedNotices ); |
65 | | - |
66 | | - // Set locked/unlocked flag accordingly |
67 | | - foreach ( $lockedNotices as $notice ) { |
| 72 | + // Handle locking/unlocking campaigns |
| 73 | + $lockedNotices = $wgRequest->getArray( 'locked' ); |
| 74 | + if ( isset( $lockedNotices ) ) { |
| 75 | + if ( $method == 'listNoticeDetail' ) { |
| 76 | + $notice = $wgRequest->getVal ( 'notice' ); |
68 | 77 | $this->updateLock( $notice, '1' ); |
| 78 | + } else { |
| 79 | + // Build list of campaigns to lock |
| 80 | + $unlockedNotices = array_diff( $this->getNoticesName(), $lockedNotices ); |
| 81 | + |
| 82 | + // Set locked/unlocked flag accordingly |
| 83 | + foreach ( $lockedNotices as $notice ) { |
| 84 | + $this->updateLock( $notice, '1' ); |
| 85 | + } |
| 86 | + foreach ( $unlockedNotices as $notice ) { |
| 87 | + $this->updateLock( $notice, '0' ); |
| 88 | + } |
69 | 89 | } |
70 | | - foreach ( $unlockedNotices as $notice ) { |
71 | | - $this->updateLock( $notice, '0' ); |
72 | | - } |
73 | 90 | } |
74 | | - } |
75 | 91 | |
76 | | - // Handle enabling/disabling |
77 | | - $enabledNotices = $wgRequest->getArray( 'enabled' ); |
78 | | - if ( isset( $enabledNotices ) ) { |
79 | | - if ( $method == 'listNoticeDetail' ) { |
80 | | - $notice = $wgRequest->getVal ( 'notice' ); |
81 | | - $this->updateEnabled( $notice, '1' ); |
82 | | - } else { |
83 | | - // Build list of notices to disable |
84 | | - $disabledNotices = array_diff( $this->getNoticesName(), $enabledNotices ); |
85 | | - |
86 | | - // Set enabled/disabled flag accordingly |
87 | | - foreach ( $enabledNotices as $notice ) { |
| 92 | + // Handle enabling/disabling campaigns |
| 93 | + $enabledNotices = $wgRequest->getArray( 'enabled' ); |
| 94 | + if ( isset( $enabledNotices ) ) { |
| 95 | + if ( $method == 'listNoticeDetail' ) { |
| 96 | + $notice = $wgRequest->getVal ( 'notice' ); |
88 | 97 | $this->updateEnabled( $notice, '1' ); |
| 98 | + } else { |
| 99 | + // Build list of campaigns to disable |
| 100 | + $disabledNotices = array_diff( $this->getNoticesName(), $enabledNotices ); |
| 101 | + |
| 102 | + // Set enabled/disabled flag accordingly |
| 103 | + foreach ( $enabledNotices as $notice ) { |
| 104 | + $this->updateEnabled( $notice, '1' ); |
| 105 | + } |
| 106 | + foreach ( $disabledNotices as $notice ) { |
| 107 | + $this->updateEnabled( $notice, '0' ); |
| 108 | + } |
89 | 109 | } |
90 | | - foreach ( $disabledNotices as $notice ) { |
91 | | - $this->updateEnabled( $notice, '0' ); |
| 110 | + } |
| 111 | + |
| 112 | + // Handle setting preferred campaigns |
| 113 | + $preferredNotices = $wgRequest->getArray( 'preferred' ); |
| 114 | + if ( isset( $preferredNotices ) ) { |
| 115 | + // Set since this is a single display |
| 116 | + if ( $method == 'listNoticeDetail' ) { |
| 117 | + $notice = $wgRequest->getVal ( 'notice' ); |
| 118 | + $this->centralNoticeDB->updatePreferred( $notice, '1' ); |
92 | 119 | } |
| 120 | + else { |
| 121 | + // Build list of campaigns to unset |
| 122 | + $unsetNotices = array_diff( $this->getNoticesName(), $preferredNotices ); |
| 123 | + |
| 124 | + // Set flag accordingly |
| 125 | + foreach ( $preferredNotices as $notice ) { |
| 126 | + $this->centralNoticeDB->updatePreferred( $notice, '1' ); |
| 127 | + } |
| 128 | + foreach ( $unsetNotices as $notice ) { |
| 129 | + $this->centralNoticeDB->updatePreferred( $notice, '0' ); |
| 130 | + } |
| 131 | + } |
93 | 132 | } |
94 | | - } |
95 | 133 | |
96 | | - // Handle setting preferred |
97 | | - $preferredNotices = $wgRequest->getArray( 'preferred' ); |
98 | | - if ( isset( $preferredNotices ) ) { |
99 | | - // Set since this is a single display |
100 | | - if ( $method == 'listNoticeDetail' ) { |
101 | | - $notice = $wgRequest->getVal ( 'notice' ); |
102 | | - CentralNoticeDB::updatePreferred( $notice, '1' ); |
| 134 | + $noticeName = $wgRequest->getVal( 'notice' ); |
| 135 | + |
| 136 | + // Handle range setting |
| 137 | + $start = $wgRequest->getArray( 'start' ); |
| 138 | + $end = $wgRequest->getArray( 'end' ); |
| 139 | + if ( isset( $start ) && isset( $end ) ) { |
| 140 | + $updatedStart = sprintf( "%04d%02d%02d%02d%02d00", |
| 141 | + $start['year'], |
| 142 | + $start['month'], |
| 143 | + $start['day'], |
| 144 | + $start['hour'], |
| 145 | + $start['min'] ); |
| 146 | + $updatedEnd = sprintf( "%04d%02d%02d000000", |
| 147 | + $end['year'], |
| 148 | + $end['month'], |
| 149 | + $end['day'] ); |
| 150 | + $this->updateNoticeDate( $noticeName, $updatedStart, $updatedEnd ); |
103 | 151 | } |
104 | | - else { |
105 | | - // Build list of notices to unset |
106 | | - $unsetNotices = array_diff( $this->getNoticesName(), $preferredNotices ); |
107 | 152 | |
108 | | - // Set flag accordingly |
109 | | - foreach ( $preferredNotices as $notice ) { |
110 | | - CentralNoticeDB::updatePreferred( $notice, '1' ); |
| 153 | + // Handle updates if no post content came through |
| 154 | + if ( !isset( $lockedNotices ) && $method !== 'addNotice' ) { |
| 155 | + if ( $method == 'listNoticeDetail' ) { |
| 156 | + $notice = $wgRequest->getVal ( 'notice' ); |
| 157 | + $this->updateLock( $notice, 0 ); |
| 158 | + } else { |
| 159 | + $allNotices = $this->getNoticesName(); |
| 160 | + foreach ( $allNotices as $notice ) { |
| 161 | + $this->updateLock( $notice, '0' ); |
| 162 | + } |
111 | 163 | } |
112 | | - foreach ( $unsetNotices as $notice ) { |
113 | | - CentralNoticeDB::updatePreferred( $notice, '0' ); |
114 | | - } |
115 | 164 | } |
116 | | - } |
117 | 165 | |
118 | | - $noticeName = $wgRequest->getVal( 'notice' ); |
119 | | - |
120 | | - // Handle range setting |
121 | | - $start = $wgRequest->getArray( 'start' ); |
122 | | - $end = $wgRequest->getArray( 'end' ); |
123 | | - if ( isset( $start ) && isset( $end ) ) { |
124 | | - $updatedStart = sprintf( "%04d%02d%02d%02d%02d00", |
125 | | - $start['year'], |
126 | | - $start['month'], |
127 | | - $start['day'], |
128 | | - $start['hour'], |
129 | | - $start['min'] ); |
130 | | - $updatedEnd = sprintf( "%04d%02d%02d000000", |
131 | | - $end['year'], |
132 | | - $end['month'], |
133 | | - $end['day'] ); |
134 | | - $this->updateNoticeDate( $noticeName, $updatedStart, $updatedEnd ); |
135 | | - } |
136 | | - |
137 | | - // Handle updates if no post content came through |
138 | | - if ( !isset( $lockedNotices ) && $method !== 'addNotice' ) { |
139 | | - if ( $method == 'listNoticeDetail' ) { |
140 | | - $notice = $wgRequest->getVal ( 'notice' ); |
141 | | - $this->updateLock( $notice, 0 ); |
142 | | - } else { |
143 | | - $allNotices = $this->getNoticesName(); |
144 | | - foreach ( $allNotices as $notice ) { |
145 | | - $this->updateLock( $notice, '0' ); |
| 166 | + if ( !isset( $enabledNotices ) && $method !== 'addNotice' ) { |
| 167 | + if ( $method == 'listNoticeDetail' ) { |
| 168 | + $notice = $wgRequest->getVal ( 'notice' ); |
| 169 | + $this->updateEnabled( $notice, 0 ); |
| 170 | + } else { |
| 171 | + $allNotices = $this->getNoticesName(); |
| 172 | + foreach ( $allNotices as $notice ) { |
| 173 | + $this->updateEnabled( $notice, '0' ); |
| 174 | + } |
146 | 175 | } |
147 | 176 | } |
148 | | - } |
149 | 177 | |
150 | | - if ( !isset( $enabledNotices ) && $method !== 'addNotice' ) { |
151 | | - if ( $method == 'listNoticeDetail' ) { |
152 | | - $notice = $wgRequest->getVal ( 'notice' ); |
153 | | - $this->updateEnabled( $notice, 0 ); |
154 | | - } else { |
155 | | - $allNotices = $this->getNoticesName(); |
156 | | - foreach ( $allNotices as $notice ) { |
157 | | - $this->updateEnabled( $notice, '0' ); |
| 178 | + if ( !isset( $preferredNotices ) && $method !== 'addNotice' ) { |
| 179 | + if ( $method == 'listNoticeDetail' ) { |
| 180 | + $notice = $wgRequest->getVal ( 'notice' ); |
| 181 | + $this->centralNoticeDB->updatePreferred( $notice, 0 ); |
| 182 | + } else { |
| 183 | + $allNotices = $this->getNoticesName(); |
| 184 | + foreach ( $allNotices as $notice ) { |
| 185 | + $this->centralNoticeDB->updatePreferred( $notice, '0' ); |
| 186 | + } |
158 | 187 | } |
159 | 188 | } |
160 | | - } |
161 | 189 | |
162 | | - if ( !isset( $preferredNotices ) && $method !== 'addNotice' ) { |
163 | | - if ( $method == 'listNoticeDetail' ) { |
164 | | - $notice = $wgRequest->getVal ( 'notice' ); |
165 | | - CentralNoticeDB::updatePreferred( $notice, 0 ); |
166 | | - } else { |
167 | | - $allNotices = $this->getNoticesName(); |
168 | | - foreach ( $allNotices as $notice ) { |
169 | | - CentralNoticeDB::updatePreferred( $notice, '0' ); |
| 190 | + // Handle adding of campaign |
| 191 | + if ( $method == 'addNotice' ) { |
| 192 | + $noticeName = $wgRequest->getVal( 'noticeName' ); |
| 193 | + $start = $wgRequest->getArray( 'start' ); |
| 194 | + $project_name = $wgRequest->getVal( 'project_name' ); |
| 195 | + $project_languages = $wgRequest->getArray( 'project_languages' ); |
| 196 | + if ( $noticeName == '' ) { |
| 197 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-null-string' ); |
| 198 | + } else { |
| 199 | + $this->addNotice( $noticeName, '0', $start, $project_name, $project_languages ); |
170 | 200 | } |
171 | 201 | } |
172 | | - } |
173 | | - // Handle weight change |
174 | | - $updatedWeights = $wgRequest->getArray( 'weight' ); |
175 | | - if ( isset( $updatedWeights ) ) { |
176 | | - foreach ( $updatedWeights as $templateName => $weight ) { |
177 | | - $this->updateWeight( $noticeName, $templateName, $weight ); |
178 | | - } |
179 | | - } |
180 | | - } |
181 | 202 | |
182 | | - // Handle adding |
183 | | - $this->showAll = $wgRequest->getVal( 'showAll' ); |
184 | | - if ( $this->editable && $method == 'addNotice' ) { |
185 | | - $noticeName = $wgRequest->getVal( 'noticeName' ); |
186 | | - $start = $wgRequest->getArray( 'start' ); |
187 | | - $project_name = $wgRequest->getVal( 'project_name' ); |
188 | | - $project_language = $wgRequest->getVal( 'wpUserLanguage' ); |
189 | | - if ( $noticeName == '' ) { |
190 | | - $wgOut->addWikiMsg ( 'centralnotice-null-string' ); |
| 203 | + } else { |
| 204 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'sessionfailure' ); |
191 | 205 | } |
192 | | - else { |
193 | | - $this->addNotice( $noticeName, '0', $start, $project_name, $project_language ); |
194 | | - } |
195 | | - } |
196 | 206 | |
197 | | - // Handle removing |
198 | | - if ( $this->editable && $method == 'removeNotice' ) { |
199 | | - $noticeName = $wgRequest->getVal ( 'noticeName' ); |
200 | | - $this->removeNotice ( $noticeName ); |
201 | 207 | } |
202 | 208 | |
203 | | - // Handle adding of template |
204 | | - if ( $this->editable && $method == 'addTemplateTo' ) { |
205 | | - $noticeName = $wgRequest->getVal( 'noticeName' ); |
206 | | - $templateName = $wgRequest->getVal( 'templateName' ); |
207 | | - $templateWeight = $wgRequest->getVal ( 'weight' ); |
208 | | - $this->addTemplateTo( $noticeName, $templateName, $weight ); |
209 | | - $this->listNoticeDetail( $noticeName ); |
210 | | - return; |
211 | | - } |
212 | | - |
213 | | - // Handle removing of template |
214 | | - if ( $this->editable && $method == 'removeTemplateFor' ) { |
215 | | - $noticeName = $wgRequest->getVal ( 'noticeName' ); |
216 | | - $templateName = $wgRequest->getVal ( 'templateName ' ); |
217 | | - $this->removeTemplateFor( $noticeName , $templateName ); |
218 | | - } |
219 | | - |
220 | | - // Handle showing detail |
| 209 | + // Handle showing campaign detail |
221 | 210 | if ( $method == 'listNoticeDetail' ) { |
222 | 211 | $notice = $wgRequest->getVal ( 'notice' ); |
223 | 212 | $this->listNoticeDetail( $notice ); |
| 213 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
224 | 214 | return; |
225 | 215 | } |
226 | 216 | |
227 | | - // Show list of notices |
| 217 | + // Show list of campaigns |
228 | 218 | $this->listNotices(); |
| 219 | + |
| 220 | + // End Campaigns tab content |
| 221 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
229 | 222 | } |
230 | 223 | |
231 | | - // Update the enabled/disabled state of notice |
| 224 | + /** |
| 225 | + * Update the enabled/disabled state of a campaign |
| 226 | + */ |
232 | 227 | private function updateEnabled( $notice, $state ) { |
233 | 228 | $dbw = wfGetDB( DB_MASTER ); |
234 | 229 | $dbw->begin(); |
— | — | @@ -238,7 +233,7 @@ |
239 | 234 | $dbw->commit(); |
240 | 235 | } |
241 | 236 | |
242 | | - static public function printHeader() { |
| 237 | + public static function printHeader() { |
243 | 238 | global $wgOut, $wgTitle, $wgUser; |
244 | 239 | $sk = $wgUser->getSkin(); |
245 | 240 | |
— | — | @@ -246,56 +241,59 @@ |
247 | 242 | 'CentralNotice' => wfMsg( 'centralnotice-notices' ), |
248 | 243 | 'NoticeTemplate' => wfMsg ( 'centralnotice-templates' ) |
249 | 244 | ); |
250 | | - $htmlOut = Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
251 | | - $htmlOut .= Xml::openElement( 'tr' ); |
| 245 | + $htmlOut = Xml::openElement( 'ul', array( 'id' => 'preftoc' ) ); |
252 | 246 | foreach ( $pages as $page => $msg ) { |
253 | 247 | $title = SpecialPage::getTitleFor( $page ); |
254 | | - |
255 | | - $style = array( 'style' => 'border-bottom:solid 1px silver;' ); |
256 | | - if ( $page == $wgTitle->getText() ) { |
257 | | - $style = array( 'style' => 'border-bottom:solid 1px black;' ); |
| 248 | + $attribs = array(); |
| 249 | + if ( $wgTitle->equals( $title ) ) { |
| 250 | + $attribs['class'] = 'selected'; |
258 | 251 | } |
259 | | - |
260 | | - $htmlOut .= Xml::tags( 'td', $style, |
| 252 | + $htmlOut .= Xml::tags( 'li', $attribs, |
261 | 253 | $sk->makeLinkObj( $title, htmlspecialchars( $msg ) ) |
262 | 254 | ); |
263 | 255 | } |
264 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
265 | | - $htmlOut .= Xml::closeElement( 'table' ); |
| 256 | + $htmlOut .= Xml::closeElement( 'ul' ); |
266 | 257 | |
267 | 258 | $wgOut->addHTML( $htmlOut ); |
268 | 259 | } |
269 | 260 | |
| 261 | + /** |
| 262 | + * Get all the campaigns in the database |
| 263 | + * @return an array of campaign names |
| 264 | + */ |
270 | 265 | function getNoticesName() { |
271 | 266 | $dbr = wfGetDB( DB_SLAVE ); |
272 | | - $res = $dbr->select( 'cn_notices', 'not_name' ); |
| 267 | + $res = $dbr->select( 'cn_notices', 'not_name', null, __METHOD__ ); |
273 | 268 | $notices = array(); |
274 | 269 | while ( $row = $dbr->fetchObject( $res ) ) { |
275 | | - array_push( $notices, $row->not_name ); |
| 270 | + $notices[] = $row->not_name; |
276 | 271 | } |
277 | 272 | return $notices; |
278 | 273 | } |
279 | 274 | |
280 | | - function tableRow( $fields, $element = 'td' ) { |
| 275 | + /** |
| 276 | + * Build a table row. Needed since Xml::buildTableRow escapes all HTML. |
| 277 | + */ |
| 278 | + function tableRow( $fields, $element = 'td', $attribs = array() ) { |
281 | 279 | $cells = array(); |
282 | 280 | foreach ( $fields as $field ) { |
283 | 281 | $cells[] = Xml::tags( $element, array(), $field ); |
284 | 282 | } |
285 | | - return Xml::tags( 'tr', array(), implode( "\n", $cells ) ) . "\n"; |
| 283 | + return Xml::tags( 'tr', $attribs, implode( "\n", $cells ) ) . "\n"; |
286 | 284 | } |
287 | 285 | |
288 | 286 | function dateSelector( $prefix, $timestamp = null ) { |
289 | 287 | if ( $this->editable ) { |
290 | 288 | // Default ranges... |
291 | | - $years = range( 2007, 2012 ); |
| 289 | + $years = range( 2008, 2014 ); |
292 | 290 | $months = range( 1, 12 ); |
293 | 291 | $months = array_map( array( $this, 'addZero' ), $months ); |
294 | 292 | $days = range( 1 , 31 ); |
295 | 293 | $days = array_map( array( $this, 'addZero' ), $days ); |
296 | 294 | |
297 | | - // Normalize timestamp format... |
| 295 | + // Normalize timestamp format. If no timestamp passed, defaults to now. |
298 | 296 | $ts = wfTimestamp( TS_MW, $timestamp ); |
299 | | - |
| 297 | + |
300 | 298 | $fields = array( |
301 | 299 | array( "month", "centralnotice-month", $months, substr( $ts, 4, 2 ) ), |
302 | 300 | array( "day", "centralnotice-day", $days, substr( $ts, 6, 2 ) ), |
— | — | @@ -344,15 +342,11 @@ |
345 | 343 | return $out; |
346 | 344 | } |
347 | 345 | |
348 | | - /* |
349 | | - * listNotices |
350 | | - * |
| 346 | + /** |
351 | 347 | * Print out all campaigns found in db |
352 | 348 | */ |
353 | | - |
354 | 349 | function listNotices() { |
355 | | - global $wgOut, $wgRequest, $wgScript, $wgUser; |
356 | | - global $wgNoticeProject, $wgUserLang; |
| 350 | + global $wgOut, $wgUser, $wgLang, $wgRequest; |
357 | 351 | |
358 | 352 | // Get connection |
359 | 353 | $dbr = wfGetDB( DB_SLAVE ); |
— | — | @@ -363,83 +357,61 @@ |
364 | 358 | $readonly = array( 'disabled' => 'disabled' ); |
365 | 359 | } |
366 | 360 | |
367 | | - /* |
368 | | - * This is temporarily hard-coded |
369 | | - */ |
370 | | - $this->showAll = 'Y'; |
371 | | - |
372 | | - // If all languages should be shown |
373 | | - if ( isset( $this->showAll ) ) { |
374 | | - // Get only notices for all languages |
375 | | - $res = $dbr->select( 'cn_notices', |
| 361 | + // Get all campaigns from the database |
| 362 | + $res = $dbr->select( 'cn_notices', |
| 363 | + array( |
| 364 | + 'not_name', |
| 365 | + 'not_start', |
| 366 | + 'not_end', |
| 367 | + 'not_enabled', |
| 368 | + 'not_preferred', |
| 369 | + 'not_project', |
| 370 | + 'not_locked' |
| 371 | + ), |
| 372 | + null, |
| 373 | + __METHOD__, |
| 374 | + array( 'ORDER BY' => 'not_id DESC' ) |
| 375 | + ); |
| 376 | + |
| 377 | + // Begin building HTML |
| 378 | + $htmlOut = ''; |
| 379 | + |
| 380 | + // Begin Manage campaigns fieldset |
| 381 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 382 | + |
| 383 | + // If there are campaigns to show... |
| 384 | + if ( $dbr->numRows( $res ) >= 1 ) { |
| 385 | + if ( $this->editable ) { |
| 386 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
| 387 | + } |
| 388 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-manage' ) ); |
| 389 | + |
| 390 | + // Begin table of campaigns |
| 391 | + $htmlOut .= Xml::openElement( 'table', |
376 | 392 | array( |
377 | | - 'not_name', |
378 | | - 'not_start', |
379 | | - 'not_end', |
380 | | - 'not_enabled', |
381 | | - 'not_preferred', |
382 | | - 'not_project', |
383 | | - 'not_language', |
384 | | - 'not_locked' |
385 | | - ), |
386 | | - null, |
387 | | - __METHOD__, |
388 | | - array( 'ORDER BY' => 'not_id' ) |
| 393 | + 'cellpadding' => 9, |
| 394 | + 'width' => '100%', |
| 395 | + 'class' => 'wikitable sortable' |
| 396 | + ) |
389 | 397 | ); |
390 | | - } else { |
391 | | - // Get only notices for this language |
392 | | - $res = $dbr->select( 'cn_notices', |
393 | | - array( |
394 | | - 'not_name', |
395 | | - 'not_start', |
396 | | - 'not_end', |
397 | | - 'not_enabled', |
398 | | - 'not_preferred', |
399 | | - 'not_project', |
400 | | - 'not_locked' |
401 | | - ), |
402 | | - array ( 'not_language' => $wgUserLang ), |
403 | | - __METHOD__, |
404 | | - array( 'ORDER BY' => 'not_id' ) |
| 398 | + |
| 399 | + // Table headers |
| 400 | + $headers = array( |
| 401 | + wfMsgHtml( 'centralnotice-notice-name' ), |
| 402 | + wfMsgHtml( 'centralnotice-project-name' ), |
| 403 | + wfMsgHtml( 'centralnotice-project-lang' ), |
| 404 | + wfMsgHtml( 'centralnotice-start-date' ), |
| 405 | + wfMsgHtml( 'centralnotice-end-date' ), |
| 406 | + wfMsgHtml( 'centralnotice-enabled' ), |
| 407 | + wfMsgHtml( 'centralnotice-preferred' ), |
| 408 | + wfMsgHtml( 'centralnotice-locked' ), |
405 | 409 | ); |
406 | | - } |
407 | | - |
408 | | - // Build HTML |
409 | | - $htmlOut = ''; |
410 | | - if ( $this->editable ) { |
411 | | - $htmlOut .= Xml::openElement( 'form', |
412 | | - array( |
413 | | - 'method' => 'post', |
414 | | - 'action' => SpecialPage::getTitleFor( 'CentralNotice' )->getFullUrl() |
415 | | - ) |
416 | | - ); |
417 | | - } |
418 | | - $htmlOut .= Xml::fieldset( wfMsg( "centralnotice-manage" ) ); |
419 | | - $htmlOut .= Xml::openElement( 'table', |
420 | | - array( |
421 | | - 'cellpadding' => 9, |
422 | | - 'width' => '100%' |
423 | | - ) |
424 | | - ); |
425 | | - |
426 | | - // Headers |
427 | | - $headers = array( |
428 | | - wfMsgHtml( 'centralnotice-notice-name' ), |
429 | | - wfMsgHtml( 'centralnotice-project-name' ), |
430 | | - wfMsgHtml( 'centralnotice-project-lang' ), |
431 | | - wfMsgHtml( 'centralnotice-start-date' ), |
432 | | - wfMsgHtml( 'centralnotice-end-date' ), |
433 | | - wfMsgHtml( 'centralnotice-enabled' ), |
434 | | - wfMsgHtml( 'centralnotice-preferred' ), |
435 | | - wfMsgHtml( 'centralnotice-locked' ), |
436 | | - ); |
437 | | - if ( $this->editable ) { |
438 | | - $headers[] = wfMsgHtml( 'centralnotice-remove' ); |
439 | | - } |
440 | | - $htmlOut .= $this->tableRow( $headers, 'th' ); |
441 | | - |
442 | | - // Rows |
443 | | - if ( $dbr->numRows( $res ) >= 1 ) { |
| 410 | + if ( $this->editable ) { |
| 411 | + $headers[] = wfMsgHtml( 'centralnotice-remove' ); |
| 412 | + } |
| 413 | + $htmlOut .= $this->tableRow( $headers, 'th' ); |
| 414 | + |
| 415 | + // Table rows |
444 | 416 | while ( $row = $dbr->fetchObject( $res ) ) { |
445 | 417 | $fields = array(); |
446 | 418 | |
— | — | @@ -451,10 +423,17 @@ |
452 | 424 | // Project |
453 | 425 | $fields[] = htmlspecialchars( $this->getProjectName( $row->not_project ) ); |
454 | 426 | |
455 | | - // Language |
456 | | - if ( isset ( $this->showAll ) ) { |
457 | | - $fields[] = htmlspecialchars( $row->not_language ); |
| 427 | + // Languages |
| 428 | + $project_langs = array(); |
| 429 | + $project_langs = $this->getNoticeLanguages( $row->not_name ); |
| 430 | + $language_count = count( $project_langs ); |
| 431 | + $languageList = ''; |
| 432 | + if ( $language_count > 3 ) { |
| 433 | + $languageList = wfMsg ( 'centralnotice-multiple_languages', $language_count ); |
| 434 | + } elseif ( $language_count > 0 ) { |
| 435 | + $languageList = $wgLang->commaList( $project_langs ); |
458 | 436 | } |
| 437 | + $fields[] = $languageList; |
459 | 438 | |
460 | 439 | // Date and time calculations |
461 | 440 | $start_timestamp = wfTimestamp( TS_MW, $row->not_start ); |
— | — | @@ -478,105 +457,131 @@ |
479 | 458 | $fields[] = |
480 | 459 | Xml::check( 'enabled[]', ( $row->not_enabled == '1' ), |
481 | 460 | wfArrayMerge( $readonly, |
482 | | - array( 'value' => $row->not_name ) ) ); |
| 461 | + array( 'value' => $row->not_name, 'class' => 'noshiftselect' ) ) ); |
483 | 462 | |
484 | 463 | // Preferred |
485 | 464 | $fields[] = |
486 | 465 | Xml::check( 'preferred[]', ( $row->not_preferred == '1' ), |
487 | 466 | wfArrayMerge( $readonly, |
488 | | - array( 'value' => $row->not_name ) ) ); |
| 467 | + array( 'value' => $row->not_name, 'class' => 'noshiftselect' ) ) ); |
489 | 468 | |
490 | 469 | // Locked |
491 | 470 | $fields[] = |
492 | 471 | Xml::check( 'locked[]', ( $row->not_locked == '1' ), |
493 | 472 | wfArrayMerge( $readonly, |
494 | | - array( 'value' => $row->not_name ) ) ); |
| 473 | + array( 'value' => $row->not_name, 'class' => 'noshiftselect' ) ) ); |
495 | 474 | |
496 | 475 | if ( $this->editable ) { |
497 | 476 | // Remove |
498 | 477 | $fields[] = Xml::check( 'removeNotices[]', false, |
499 | | - array( 'value' => $row->not_name ) ); |
| 478 | + array( 'value' => $row->not_name, 'class' => 'noshiftselect' ) ); |
500 | 479 | } |
501 | | - |
502 | | - $htmlOut .= $this->tableRow( $fields ); |
| 480 | + |
| 481 | + // If campaign is currently active, set special class on table row. |
| 482 | + $attribs = array(); |
| 483 | + if ( wfTimestamp() > wfTimestamp( TS_UNIX , $row->not_start ) && wfTimestamp() < wfTimestamp( TS_UNIX , $row->not_end ) && $row->not_enabled == '1' ) { |
| 484 | + $attribs = array( 'class' => 'cn-active-campaign' ); |
| 485 | + } |
| 486 | + |
| 487 | + $htmlOut .= $this->tableRow( $fields, 'td', $attribs ); |
503 | 488 | } |
| 489 | + // End table of campaigns |
| 490 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 491 | + |
504 | 492 | if ( $this->editable ) { |
505 | | - $htmlOut .= $this->tableRow( |
| 493 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 494 | + $htmlOut .= Xml::openElement( 'div', array( 'class' => 'cn-buttons' ) ); |
| 495 | + $htmlOut .= Xml::submitButton( wfMsg( 'centralnotice-modify' ), |
506 | 496 | array( |
507 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ), |
508 | | - array( |
509 | | - 'id' => 'centralnoticesubmit', |
510 | | - 'name' => 'centralnoticesubmit' |
511 | | - ) |
512 | | - ) |
| 497 | + 'id' => 'centralnoticesubmit', |
| 498 | + 'name' => 'centralnoticesubmit' |
513 | 499 | ) |
514 | 500 | ); |
515 | | - } |
516 | | - |
517 | | - $htmlOut .= Xml::closeElement( 'table' ); |
518 | | - $htmlOut .= Xml::closeElement( 'fieldset' ); |
519 | | - if ( $this->editable ) { |
| 501 | + $htmlOut .= Xml::closeElement( 'div' ); |
520 | 502 | $htmlOut .= Xml::closeElement( 'form' ); |
521 | 503 | } |
522 | 504 | |
523 | | - |
524 | | - // No notices to show |
| 505 | + // No campaigns to show |
525 | 506 | } else { |
526 | | - $htmlOut = wfMsg( 'centralnotice-no-notices-exist' ); |
| 507 | + $htmlOut .= wfMsg( 'centralnotice-no-notices-exist' ); |
527 | 508 | } |
| 509 | + |
| 510 | + // End Manage Campaigns fieldset |
| 511 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
528 | 512 | |
529 | 513 | if ( $this->editable ) { |
530 | | - // Notice Adding |
531 | | - $htmlOut .= Xml::openElement( 'form', |
532 | | - array( |
533 | | - 'method' => 'post', |
534 | | - 'action' => SpecialPage::getTitleFor( 'CentralNotice' )->getLocalUrl() |
535 | | - ) |
536 | | - ); |
537 | | - $htmlOut .= Xml::openElement( 'fieldset' ); |
538 | | - $htmlOut .= Xml::element( 'legend', null, wfMsg( 'centralnotice-add-notice' ) ); |
| 514 | + |
| 515 | + // If there was an error, we'll need to restore the state of the form |
| 516 | + if ( $wgRequest->wasPosted() && ( $wgRequest->getVal( 'method' ) == 'addNotice' ) ) { |
| 517 | + $startArray = $wgRequest->getArray( 'start' ); |
| 518 | + $startTimestamp = $startArray['year'] . |
| 519 | + $startArray['month'] . |
| 520 | + $startArray['day'] . |
| 521 | + $startArray['hour'] . |
| 522 | + $startArray['min'] . '00' |
| 523 | + ; |
| 524 | + $projectSelected = $wgRequest->getVal( 'project_name' ); |
| 525 | + if ( $wgRequest->getArray( 'project_languages' ) ) { |
| 526 | + $noticeLanguages = $wgRequest->getArray( 'project_languages' ); |
| 527 | + } else { |
| 528 | + $noticeLanguages = array(); |
| 529 | + } |
| 530 | + } else { // Defaults |
| 531 | + $startTimestamp = null; |
| 532 | + $projectSelected = ''; |
| 533 | + $noticeLanguages = array(); |
| 534 | + } |
| 535 | + |
| 536 | + // Begin Add a campaign fieldset |
| 537 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 538 | + |
| 539 | + // Form for adding a campaign |
| 540 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
| 541 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-add-notice' ) ); |
539 | 542 | $htmlOut .= Xml::hidden( 'title', $this->getTitle()->getPrefixedText() ); |
540 | 543 | $htmlOut .= Xml::hidden( 'method', 'addNotice' ); |
541 | 544 | |
542 | 545 | $htmlOut .= Xml::openElement( 'table', array ( 'cellpadding' => 9 ) ); |
543 | | - |
544 | | - $table = array( |
545 | | - // Name |
546 | | - array( |
547 | | - wfMsgHtml( 'centralnotice-notice-name' ), |
548 | | - Xml::inputLabel( '', 'noticeName', 'noticeName', 25 ), |
549 | | - ), |
550 | | - // Start Date |
551 | | - array( |
552 | | - Xml::label( wfMsg( 'centralnotice-start-date' ), 'start-date' ), |
553 | | - $this->dateSelector( 'start' ), |
554 | | - ), |
555 | | - // Start Time |
556 | | - array( |
557 | | - wfMsgHtml( 'centralnotice-start-hour' ) . "(GMT)", |
558 | | - $this->timeSelector( 'start' ), |
559 | | - ), |
560 | | - // Project |
561 | | - array( |
562 | | - wfMsgHtml( 'centralnotice-project-name' ), |
563 | | - $this->projectDropDownList(), |
564 | | - ), |
565 | | - // Languages + All |
566 | | - $this->languageDropDownList( $wgUserLang ), |
567 | | - // Submit |
568 | | - array( |
569 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ) ), |
570 | | - ), |
| 546 | + |
| 547 | + // Name |
| 548 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 549 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-notice-name' ) ); |
| 550 | + $htmlOut .= Xml::tags( 'td', array(), Xml::input( 'noticeName', 25, $wgRequest->getVal( 'noticeName' ) ) ); |
| 551 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 552 | + // Start Date |
| 553 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 554 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-start-date' ) ); |
| 555 | + $htmlOut .= Xml::tags( 'td', array(), $this->dateSelector( 'start', $startTimestamp ) ); |
| 556 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 557 | + // Start Time |
| 558 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 559 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-start-hour' ) ); |
| 560 | + $htmlOut .= Xml::tags( 'td', array(), $this->timeSelector( 'start', $startTimestamp ) ); |
| 561 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 562 | + // Project |
| 563 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 564 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-project-name' ) ); |
| 565 | + $htmlOut .= Xml::tags( 'td', array(), $this->projectDropDownList( $projectSelected ) ); |
| 566 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 567 | + // Languages |
| 568 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 569 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), wfMsgHtml( 'yourlanguage' ) ); |
| 570 | + $htmlOut .= Xml::tags( 'td', array(), $this->languageMultiSelector( $noticeLanguages ) ); |
| 571 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 572 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 573 | + $htmlOut .= Xml::hidden( 'change', 'weight' ); |
| 574 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 575 | + |
| 576 | + // Submit button |
| 577 | + $htmlOut .= Xml::tags( 'div', |
| 578 | + array( 'class' => 'cn-buttons' ), |
| 579 | + Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
571 | 580 | ); |
572 | | - |
573 | | - foreach ( $table as $cells ) { |
574 | | - $htmlOut .= $this->tableRow( $cells ); |
575 | | - } |
576 | | - |
577 | | - $htmlOut .= Xml::hidden( 'change', 'weight' ); |
578 | | - $htmlOut .= Xml::closeElement( 'table' ); |
| 581 | + |
| 582 | + $htmlOut .= Xml::closeElement( 'form' ); |
| 583 | + |
| 584 | + // End Add a campaign fieldset |
579 | 585 | $htmlOut .= Xml::closeElement( 'fieldset' ); |
580 | | - $htmlOut .= Xml::closeElement( 'form' ); |
581 | 586 | } |
582 | 587 | |
583 | 588 | // Output HTML |
— | — | @@ -585,98 +590,130 @@ |
586 | 591 | |
587 | 592 | function listNoticeDetail( $notice ) { |
588 | 593 | global $wgOut, $wgRequest, $wgUser; |
589 | | - |
| 594 | + |
590 | 595 | if ( $wgRequest->wasPosted() ) { |
591 | | - // Handle removing of templates |
592 | | - $templateToRemove = $wgRequest->getArray( 'removeTemplates' ); |
593 | | - if ( isset( $templateToRemove ) ) { |
594 | | - foreach ( $templateToRemove as $template ) { |
595 | | - $this->removeTemplateFor( $notice, $template ); |
| 596 | + |
| 597 | + // Check authentication token |
| 598 | + if ( $wgUser->matchEditToken( $wgRequest->getVal( 'authtoken' ) ) ) { |
| 599 | + |
| 600 | + // Handle adding of banners to the campaign |
| 601 | + $templatesToAdd = $wgRequest->getArray( 'addTemplates' ); |
| 602 | + if ( isset( $templatesToAdd ) ) { |
| 603 | + $weight = $wgRequest->getArray( 'weight' ); |
| 604 | + foreach ( $templatesToAdd as $templateName ) { |
| 605 | + $templateId = $this->getTemplateId( $templateName ); |
| 606 | + $this->addTemplateTo( $notice, $templateName, $weight[$templateId] ); |
| 607 | + } |
596 | 608 | } |
597 | | - } |
| 609 | + |
| 610 | + // Handle removing of banners from the campaign |
| 611 | + $templateToRemove = $wgRequest->getArray( 'removeTemplates' ); |
| 612 | + if ( isset( $templateToRemove ) ) { |
| 613 | + foreach ( $templateToRemove as $template ) { |
| 614 | + $this->removeTemplateFor( $notice, $template ); |
| 615 | + } |
| 616 | + } |
| 617 | + |
| 618 | + // Handle new project name |
| 619 | + $projectName = $wgRequest->getVal( 'project_name' ); |
| 620 | + if ( isset( $projectName ) ) { |
| 621 | + $this->updateProjectName ( $notice, $projectName ); |
| 622 | + } |
| 623 | + |
| 624 | + // Handle new project languages |
| 625 | + $projectLangs = $wgRequest->getArray( 'project_languages' ); |
| 626 | + if ( isset( $projectLangs ) ) { |
| 627 | + $this->updateProjectLanguages( $notice, $projectLangs ); |
| 628 | + } |
| 629 | + |
| 630 | + // Handle weight change |
| 631 | + $updatedWeights = $wgRequest->getArray( 'weight' ); |
| 632 | + if ( isset( $updatedWeights ) ) { |
| 633 | + foreach ( $updatedWeights as $templateId => $weight ) { |
| 634 | + $this->updateWeight( $noticeName, $templateId, $weight ); |
| 635 | + } |
| 636 | + } |
598 | 637 | |
599 | | - // Handle new project name |
600 | | - $projectName = $wgRequest->getVal( 'project_name' ); |
601 | | - if ( isset( $projectName ) ) { |
602 | | - $this->updateProjectName ( $notice, $projectName ); |
| 638 | + $wgOut->redirect( $this->getTitle()->getLocalUrl( "method=listNoticeDetail¬ice=$notice" ) ); |
| 639 | + return; |
| 640 | + |
| 641 | + } else { |
| 642 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'sessionfailure' ); |
603 | 643 | } |
604 | | - |
605 | | - // Handle new user language |
606 | | - $projectLang = $wgRequest->getVal( 'wpUserLanguage' ); |
607 | | - if ( isset( $projectLang ) ) { |
608 | | - $this->updateProjectLanguage( $notice, $projectLang ); |
| 644 | + |
| 645 | + } |
| 646 | + |
| 647 | + $noticeId = $this->getNoticeId( $notice ); |
| 648 | + |
| 649 | + // Make sure notice exists |
| 650 | + if ( !$noticeId ) { |
| 651 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-notice-doesnt-exist' ); |
| 652 | + } else { |
| 653 | + $htmlOut = ''; |
| 654 | + |
| 655 | + // Begin Campaign detail fieldset |
| 656 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 657 | + |
| 658 | + if ( $this->editable ) { |
| 659 | + $htmlOut .= Xml::openElement( 'form', |
| 660 | + array( |
| 661 | + 'method' => 'post', |
| 662 | + 'action' => $this->getTitle()->getLocalUrl( "method=listNoticeDetail¬ice=$notice" ) |
| 663 | + ) |
| 664 | + ); |
609 | 665 | } |
610 | | - |
611 | | - // Handle adding of templates |
612 | | - $templatesToAdd = $wgRequest->getArray( 'addTemplates' ); |
613 | | - if ( isset( $templatesToAdd ) ) { |
614 | | - $weight = $wgRequest->getArray( 'weight' ); |
615 | | - foreach ( $templatesToAdd as $template ) { |
616 | | - $this->addTemplateTo( $notice, $template, $weight[$template] ); |
| 666 | + |
| 667 | + $output_detail = $this->noticeDetailForm( $notice ); |
| 668 | + $output_assigned = $this->assignedTemplatesForm( $notice ); |
| 669 | + $output_templates = $this->addTemplatesForm( $notice ); |
| 670 | + |
| 671 | + $htmlOut .= $output_detail; |
| 672 | + |
| 673 | + // Catch for no banners so that we don't double message |
| 674 | + if ( $output_assigned == '' && $output_templates == '' ) { |
| 675 | + $htmlOut .= wfMsg( 'centralnotice-no-templates' ); |
| 676 | + $htmlOut .= Xml::element( 'p' ); |
| 677 | + $newPage = $this->getTitleFor( 'NoticeTemplate', 'add' ); |
| 678 | + $sk = $wgUser->getSkin(); |
| 679 | + $htmlOut .= $sk->makeLinkObj( $newPage, wfMsgHtml( 'centralnotice-add-template' ) ); |
| 680 | + $htmlOut .= Xml::element( 'p' ); |
| 681 | + } elseif ( $output_assigned == '' ) { |
| 682 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-assigned-templates' ) ); |
| 683 | + $htmlOut .= wfMsg( 'centralnotice-no-templates-assigned' ); |
| 684 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
| 685 | + if ( $this->editable ) { |
| 686 | + $htmlOut .= $output_templates; |
617 | 687 | } |
| 688 | + } else { |
| 689 | + $htmlOut .= $output_assigned; |
| 690 | + if ( $this->editable ) { |
| 691 | + $htmlOut .= $output_templates; |
| 692 | + } |
618 | 693 | } |
619 | | - $wgOut->redirect( SpecialPage::getTitleFor( 'CentralNotice' )->getLocalUrl( "method=listNoticeDetail¬ice=$notice" ) ); |
620 | | - return; |
621 | | - } |
622 | | - |
623 | | - $htmlOut = ''; |
624 | | - if ( $this->editable ) { |
625 | | - $htmlOut .= Xml::openElement( 'form', |
626 | | - array( |
627 | | - 'method' => 'post', |
628 | | - 'action' => SpecialPage::getTitleFor( 'CentralNotice' )->getLocalUrl( "method=listNoticeDetail¬ice=$notice" ) |
629 | | - ) |
630 | | - ); |
631 | | - } |
632 | | - |
633 | | - /* |
634 | | - * Temporarily hard coded |
635 | | - */ |
636 | | - $this->showAll = 'Y'; |
637 | | - |
638 | | - $output_detail = $this->noticeDetailForm( $notice ); |
639 | | - $output_assigned = $this->assignedTemplatesForm( $notice ); |
640 | | - $output_templates = $this->addTemplatesForm( $notice ); |
641 | | - |
642 | | - // No notices returned |
643 | | - if ( $output_detail == '' ) { |
644 | | - $htmlOut .= wfMsg( 'centralnotice-no-notices-exist' ); |
645 | | - } else { |
646 | | - $htmlOut .= $output_detail; |
647 | | - } |
648 | | - |
649 | | - // Catch for no templates so that we dont' double message |
650 | | - if ( $output_assigned == '' && $output_templates == '' ) { |
651 | | - $htmlOut .= wfMsg( 'centralnotice-no-templates' ); |
652 | | - $htmlOut .= Xml::element( 'p' ); |
653 | | - $newPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'add' ); |
654 | | - $sk = $wgUser->getSkin(); |
655 | | - $htmlOut .= $sk->makeLinkObj( $newPage, wfMsgHtml( 'centralnotice-add-template' ) ); |
656 | | - $htmlOut .= Xml::element( 'p' ); |
657 | | - } elseif ( $output_assigned == '' ) { |
658 | | - $htmlOut .= wfMsg( 'centralnotice-no-templates-assigned' ); |
659 | 694 | if ( $this->editable ) { |
660 | | - $htmlOut .= $output_templates; |
| 695 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 696 | + |
| 697 | + // Submit button |
| 698 | + $htmlOut .= Xml::tags( 'div', |
| 699 | + array( 'class' => 'cn-buttons' ), |
| 700 | + Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
| 701 | + ); |
661 | 702 | } |
662 | | - } else { |
663 | | - $htmlOut .= $output_assigned; |
| 703 | + |
664 | 704 | if ( $this->editable ) { |
665 | | - $htmlOut .= $output_templates; |
| 705 | + $htmlOut .= Xml::closeElement( 'form' ); |
666 | 706 | } |
| 707 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
| 708 | + $wgOut->addHTML( $htmlOut ); |
667 | 709 | } |
668 | | - |
669 | | - if ( $this->editable ) { |
670 | | - $htmlOut .= Xml::tags( 'tr', null, |
671 | | - Xml::tags( 'td', array( 'collspan' => 2 ), |
672 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
673 | | - ) |
674 | | - ); |
675 | | - $htmlOut .= Xml::closeElement( 'form' ); |
676 | | - } |
677 | | - $wgOut->addHTML( $htmlOut ); |
678 | 710 | } |
679 | | - |
| 711 | + |
| 712 | + /** |
| 713 | + * Create form for managing campaign settings (start date, end date, languages, etc.) |
| 714 | + */ |
680 | 715 | function noticeDetailForm( $notice ) { |
| 716 | + global $wgRequest; |
| 717 | + |
681 | 718 | if ( $this->editable ) { |
682 | 719 | $readonly = array(); |
683 | 720 | } else { |
— | — | @@ -684,6 +721,7 @@ |
685 | 722 | } |
686 | 723 | $dbr = wfGetDB( DB_SLAVE ); |
687 | 724 | |
| 725 | + // Get campaign info from database |
688 | 726 | $row = $dbr->selectRow( 'cn_notices', |
689 | 727 | array( |
690 | 728 | 'not_id', |
— | — | @@ -693,85 +731,100 @@ |
694 | 732 | 'not_enabled', |
695 | 733 | 'not_preferred', |
696 | 734 | 'not_project', |
697 | | - 'not_language', |
698 | 735 | 'not_locked' |
699 | 736 | ), |
700 | 737 | array( 'not_name' => $notice ), |
701 | | - __METHOD__, |
702 | | - array( 'ORDER BY' => 'not_id' ) |
| 738 | + __METHOD__ |
703 | 739 | ); |
704 | | - |
| 740 | + |
705 | 741 | if ( $row ) { |
| 742 | + |
| 743 | + // If there was an error, we'll need to restore the state of the form |
| 744 | + if ( $wgRequest->wasPosted() ) { |
| 745 | + $startArray = $wgRequest->getArray( 'start' ); |
| 746 | + $startTimestamp = $startArray['year'] . |
| 747 | + $startArray['month'] . |
| 748 | + $startArray['day'] . |
| 749 | + $startArray['hour'] . |
| 750 | + $startArray['min'] . '00' |
| 751 | + ; |
| 752 | + $endArray = $wgRequest->getArray( 'end' ); |
| 753 | + $endTimestamp = $endArray['year'] . |
| 754 | + $endArray['month'] . |
| 755 | + $endArray['day'] . '000000' |
| 756 | + ; |
| 757 | + $projectSelected = $wgRequest->getVal( 'project_name' ); |
| 758 | + $noticeLanguages = $wgRequest->getArray( 'project_languages' ); |
| 759 | + } else { // Defaults |
| 760 | + $startTimestamp = $row->not_start; |
| 761 | + $endTimestamp = $row->not_end; |
| 762 | + $projectSelected = $row->not_project; |
| 763 | + $noticeLanguages = $this->getNoticeLanguages( $notice ); |
| 764 | + } |
| 765 | + |
706 | 766 | // Build Html |
707 | | - $htmlOut = Xml::fieldset( $notice ); |
| 767 | + $htmlOut = ''; |
| 768 | + $htmlOut .= Xml::tags( 'h2', null, wfMsg( 'centralnotice-notice-heading', $notice ) ); |
708 | 769 | $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
709 | 770 | |
710 | 771 | // Rows |
711 | | - $table = array( |
712 | | - // Day |
713 | | - array( |
714 | | - wfMsgHtml( 'centralnotice-start-date' ), |
715 | | - $this->dateSelector( "start", $row->not_start ), |
716 | | - ), |
717 | | - // Time of day |
718 | | - array( |
719 | | - wfMsgHtml( 'centralnotice-start-time' ), |
720 | | - $this->timeSelector( "start", $row->not_start, "[$row->not_name]" ), |
721 | | - ), |
722 | | - // End |
723 | | - array( |
724 | | - wfMsgHtml( 'centralnotice-end-date' ), |
725 | | - $this->dateSelector( "end", $row->not_end, "[$row->not_name]" ), |
726 | | - ), |
727 | | - // Project |
728 | | - array( |
729 | | - wfMsgHtml( 'centralnotice-project-name' ), |
730 | | - $this->projectDropDownList( $row->not_project ) |
731 | | - ), |
732 | | - // Language |
733 | | - $this->languageDropDownList( $row->not_language ), |
734 | | - // Enabled |
735 | | - array( |
736 | | - wfMsgHtml( 'centralnotice-enabled' ), |
737 | | - Xml::check( 'enabled[]', ( $row->not_enabled == '1' ), |
738 | | - wfArrayMerge( $readonly, |
739 | | - array( 'value' => $row->not_name ) ) ) |
740 | | - ), |
741 | | - // Preferred |
742 | | - array( |
743 | | - wfMsgHtml( 'centralnotice-preferred' ), |
744 | | - Xml::check( 'preferred[]', ( $row->not_preferred == '1' ), |
745 | | - wfArrayMerge( $readonly, |
746 | | - array( 'value' => $row->not_name ) ) ), |
747 | | - ), |
| 772 | + // Start Date |
| 773 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 774 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-start-date' ) ); |
| 775 | + $htmlOut .= Xml::tags( 'td', array(), $this->dateSelector( 'start', $startTimestamp ) ); |
| 776 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 777 | + // Start Time |
| 778 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 779 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-start-hour' ) . "(GMT)" ); |
| 780 | + $htmlOut .= Xml::tags( 'td', array(), $this->timeSelector( 'start', $startTimestamp ) ); |
| 781 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 782 | + // End Date |
| 783 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 784 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-end-date' ) ); |
| 785 | + $htmlOut .= Xml::tags( 'td', array(), $this->dateSelector( 'end', $endTimestamp ) ); |
| 786 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 787 | + // Project |
| 788 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 789 | + $htmlOut .= Xml::tags( 'td', array(), wfMsgHtml( 'centralnotice-project-name' ) ); |
| 790 | + $htmlOut .= Xml::tags( 'td', array(), $this->projectDropDownList( $projectSelected ) ); |
| 791 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 792 | + // Languages |
| 793 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 794 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), wfMsgHtml( 'yourlanguage' ) ); |
| 795 | + $htmlOut .= Xml::tags( 'td', array(), $this->languageMultiSelector( $noticeLanguages ) ); |
| 796 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 797 | + // Enabled |
| 798 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 799 | + $htmlOut .= Xml::tags( 'td', array(), Xml::label( wfMsgHtml( 'centralnotice-enabled' ), 'enabled[]' ) ); |
| 800 | + $htmlOut .= Xml::tags( 'td', array(), Xml::check( 'enabled[]', ( $row->not_enabled == '1' ), wfArrayMerge( $readonly, array( 'value' => $row->not_name, 'id' => 'enabled[]' ) ) ) ); |
| 801 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 802 | + // Preferred |
| 803 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 804 | + $htmlOut .= Xml::tags( 'td', array(), Xml::label( wfMsgHtml( 'centralnotice-preferred' ), 'preferred[]' ) ); |
| 805 | + $htmlOut .= Xml::tags( 'td', array(), Xml::check( 'preferred[]', ( $row->not_preferred == '1' ), wfArrayMerge( $readonly, array( 'value' => $row->not_name, 'id' => 'preferred[]' ) ) ) ); |
| 806 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 807 | + // Locked |
| 808 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 809 | + $htmlOut .= Xml::tags( 'td', array(), Xml::label( wfMsgHtml( 'centralnotice-locked' ), 'locked[]' ) ); |
| 810 | + $htmlOut .= Xml::tags( 'td', array(), Xml::check( 'locked[]', ( $row->not_locked == '1' ), wfArrayMerge( $readonly, array( 'value' => $row->not_name, 'id' => 'locked[]' ) ) ) ); |
| 811 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 812 | + if ( $this->editable ) { |
748 | 813 | // Locked |
749 | | - array( |
750 | | - wfMsgHtml( 'centralnotice-locked' ), |
751 | | - Xml::check( 'locked[]', ( $row->not_locked == '1' ), |
752 | | - wfArrayMerge( $readonly, |
753 | | - array( 'value' => $row->not_name ) ) ), |
754 | | - ), |
755 | | - ); |
756 | | - if ( $this->editable ) { |
757 | | - // Remove |
758 | | - $table[] = array( |
759 | | - wfMsgHtml( 'centralnotice-remove' ), |
760 | | - Xml::check( 'removeNotices[]', false, |
761 | | - array( 'value' => $row->not_name ) ) |
762 | | - ); |
| 814 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 815 | + $htmlOut .= Xml::tags( 'td', array(), Xml::label( wfMsgHtml( 'centralnotice-remove' ), 'removeNotices[]' ) ); |
| 816 | + $htmlOut .= Xml::tags( 'td', array(), Xml::check( 'removeNotices[]', false, array( 'value' => $row->not_name, 'id' => 'removeNotices[]' ) ) ); |
| 817 | + $htmlOut .= Xml::closeElement( 'tr' ); |
763 | 818 | } |
764 | | - foreach ( $table as $cells ) { |
765 | | - $htmlOut .= $this->tableRow( $cells ); |
766 | | - } |
767 | 819 | $htmlOut .= Xml::closeElement( 'table' ); |
768 | | - $htmlOut .= Xml::closeElement( 'fieldset' ) ; |
769 | 820 | return $htmlOut; |
770 | 821 | } else { |
771 | 822 | return ''; |
772 | 823 | } |
773 | 824 | } |
774 | 825 | |
775 | | - |
| 826 | + /** |
| 827 | + * Create form for managing banners assigned to a campaign |
| 828 | + */ |
776 | 829 | function assignedTemplatesForm( $notice ) { |
777 | 830 | global $wgUser; |
778 | 831 | $sk = $wgUser->getSkin(); |
— | — | @@ -784,6 +837,7 @@ |
785 | 838 | 'cn_templates' |
786 | 839 | ), |
787 | 840 | array( |
| 841 | + 'cn_templates.tmp_id', |
788 | 842 | 'cn_templates.tmp_name', |
789 | 843 | 'cn_assignments.tmp_weight' |
790 | 844 | ), |
— | — | @@ -796,12 +850,12 @@ |
797 | 851 | array( 'ORDER BY' => 'cn_notices.not_id' ) |
798 | 852 | ); |
799 | 853 | |
800 | | - // No templates found |
| 854 | + // No banners found |
801 | 855 | if ( $dbr->numRows( $res ) < 1 ) { |
802 | 856 | return; |
803 | 857 | } |
804 | 858 | |
805 | | - // Build Assigned Template HTML |
| 859 | + // Build Assigned banners HTML |
806 | 860 | $htmlOut = Xml::hidden( 'change', 'weight' ); |
807 | 861 | $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-assigned-templates' ) ); |
808 | 862 | $htmlOut .= Xml::openElement( 'table', |
— | — | @@ -819,7 +873,7 @@ |
820 | 874 | $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '70%' ), |
821 | 875 | wfMsg ( "centralnotice-templates" ) ); |
822 | 876 | |
823 | | - // Rows |
| 877 | + // Table rows |
824 | 878 | while ( $row = $dbr->fetchObject( $res ) ) { |
825 | 879 | |
826 | 880 | $htmlOut .= Xml::openElement( 'tr' ); |
— | — | @@ -833,10 +887,10 @@ |
834 | 888 | |
835 | 889 | // Weight |
836 | 890 | $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
837 | | - $this->weightDropDown( "weight[$row->tmp_name]", $row->tmp_weight ) |
| 891 | + $this->weightDropDown( "weight[$row->tmp_id]", $row->tmp_weight ) |
838 | 892 | ); |
839 | 893 | |
840 | | - $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate/view' ); |
| 894 | + $viewPage = $this->getTitleFor( 'NoticeTemplate', 'view' ); |
841 | 895 | $render = new SpecialNoticeText(); |
842 | 896 | $render->project = 'wikipedia'; |
843 | 897 | global $wgRequest; |
— | — | @@ -846,7 +900,8 @@ |
847 | 901 | htmlspecialchars( $row->tmp_name ), |
848 | 902 | 'template=' . urlencode( $row->tmp_name ) ) . |
849 | 903 | Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
850 | | - $render->getHtmlNotice( $row->tmp_name ) |
| 904 | + $render->getHtmlNotice( $row->tmp_name ), |
| 905 | + array( 'class' => 'cn-bannerpreview') |
851 | 906 | ) |
852 | 907 | ); |
853 | 908 | |
— | — | @@ -872,87 +927,23 @@ |
873 | 928 | } |
874 | 929 | } |
875 | 930 | |
876 | | - |
| 931 | + /** |
| 932 | + * Create form for adding banners to a campaign |
| 933 | + */ |
877 | 934 | function addTemplatesForm( $notice ) { |
878 | | - global $wgUser; |
879 | | - $sk = $wgUser->getSkin(); |
| 935 | + $pager = new CentralNoticePager( $this ); |
880 | 936 | $dbr = wfGetDB( DB_SLAVE ); |
881 | 937 | $res = $dbr->select( 'cn_templates', 'tmp_name', '', '', array( 'ORDER BY' => 'tmp_id' ) ); |
882 | | - |
883 | | - $res_assignments = $dbr->select( |
884 | | - array( |
885 | | - 'cn_notices', |
886 | | - 'cn_assignments', |
887 | | - 'cn_templates' |
888 | | - ), |
889 | | - array( |
890 | | - 'cn_templates.tmp_name', |
891 | | - ), |
892 | | - array( |
893 | | - 'cn_notices.not_name' => $notice, |
894 | | - 'cn_notices.not_id = cn_assignments.not_id', |
895 | | - 'cn_assignments.tmp_id = cn_templates.tmp_id' |
896 | | - ), |
897 | | - __METHOD__, |
898 | | - array( 'ORDER BY' => 'cn_notices.not_id' ) |
899 | | - ); |
900 | | - |
| 938 | + |
901 | 939 | if ( $dbr->numRows( $res ) > 0 ) { |
902 | 940 | // Build HTML |
903 | 941 | $htmlOut = Xml::fieldset( wfMsg( "centralnotice-available-templates" ) ); |
904 | | - $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
905 | | - |
906 | | - |
907 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
908 | | - wfMsg ( "centralnotice-add" ) ); |
909 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
910 | | - wfMsg ( "centralnotice-weight" ) ); |
911 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '70%' ), |
912 | | - wfMsg ( "centralnotice-templates" ) ); |
913 | | - |
914 | | - // Find dups |
915 | | - $templatesAssigned = $this->selectTemplatesAssigned( $notice ); |
916 | | - |
917 | | - // Build rows |
918 | | - while ( $row = $dbr->fetchObject( $res ) ) { |
919 | | - if ( !in_array ( $row->tmp_name, $templatesAssigned ) ) { |
920 | | - $htmlOut .= Xml::openElement( 'tr' ); |
921 | | - |
922 | | - // Add |
923 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
924 | | - Xml::check( 'addTemplates[]', '', array ( 'value' => $row->tmp_name ) ) |
925 | | - ); |
926 | | - |
927 | | - // Weight |
928 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
929 | | - Xml::listDropDown( "weight[$row->tmp_name]", |
930 | | - $this->dropDownList( wfMsg( 'centralnotice-weight' ), range ( 0, 100, 5 ) ) , |
931 | | - '', |
932 | | - '25', |
933 | | - '', |
934 | | - '' ) |
935 | | - ); |
936 | | - |
937 | | - // Render preview |
938 | | - $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate/view' ); |
939 | | - $render = new SpecialNoticeText(); |
940 | | - $render->project = 'wikipedia'; |
941 | | - global $wgRequest; |
942 | | - $render->language = $wgRequest->getVal( 'wpUserLanguage' ); |
943 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
944 | | - $sk->makeLinkObj( $viewPage, |
945 | | - htmlspecialchars( $row->tmp_name ), |
946 | | - 'template=' . urlencode( $row->tmp_name ) ) . |
947 | | - Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
948 | | - $render->getHtmlNotice( $row->tmp_name ) |
949 | | - ) |
950 | | - ); |
951 | | - |
952 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
953 | | - } |
954 | | - } |
955 | | - |
956 | | - $htmlOut .= Xml::closeElement( 'table' ); |
| 942 | + |
| 943 | + // Show paginated list of banners |
| 944 | + $htmlOut .= Xml::tags( 'div', array( 'class' => 'cn-pager' ), $pager->getNavigationBar() ); |
| 945 | + $htmlOut .= $pager->getBody(); |
| 946 | + $htmlOut .= Xml::tags( 'div', array( 'class' => 'cn-pager' ), $pager->getNavigationBar() ); |
| 947 | + |
957 | 948 | $htmlOut .= Xml::closeElement( 'fieldset' ); |
958 | 949 | } else { |
959 | 950 | // Nothing found |
— | — | @@ -961,36 +952,11 @@ |
962 | 953 | return $htmlOut; |
963 | 954 | } |
964 | 955 | |
965 | | - |
966 | | - function selectTemplatesAssigned ( $notice ) { |
967 | | - $dbr = wfGetDB( DB_SLAVE ); |
968 | | - $res = $dbr->select( |
969 | | - array( |
970 | | - 'cn_notices', |
971 | | - 'cn_assignments', |
972 | | - 'cn_templates' |
973 | | - ), |
974 | | - array( |
975 | | - 'cn_templates.tmp_name', |
976 | | - ), |
977 | | - array( |
978 | | - 'cn_notices.not_name' => $notice, |
979 | | - 'cn_notices.not_id = cn_assignments.not_id', |
980 | | - 'cn_assignments.tmp_id = cn_templates.tmp_id' |
981 | | - ), |
982 | | - __METHOD__, |
983 | | - array( 'ORDER BY' => 'cn_notices.not_id' ) |
984 | | - ); |
985 | | - $templateNames = array(); |
986 | | - foreach ( $res as $row ) { |
987 | | - array_push( $templateNames, $row->tmp_name ) ; |
988 | | - } |
989 | | - return $templateNames; |
990 | | - } |
991 | | - |
992 | 956 | /** |
993 | | - * Lookup function for active notice under a given language and project |
994 | | - * Returns an id for the running notice |
| 957 | + * Lookup function for active banners under a given language and project. This function is |
| 958 | + * called by SpecialNoticeText::getJsOutput() in order to build the static Javascript files for |
| 959 | + * each project. |
| 960 | + * @return A 2D array of running banners with associated weights and settings |
995 | 961 | */ |
996 | 962 | static function selectNoticeTemplates( $project, $language ) { |
997 | 963 | $dbr = wfGetDB( DB_SLAVE ); |
— | — | @@ -998,44 +964,54 @@ |
999 | 965 | $res = $dbr->select( |
1000 | 966 | array( |
1001 | 967 | 'cn_notices', |
| 968 | + 'cn_notice_languages', |
1002 | 969 | 'cn_assignments', |
1003 | | - 'cn_templates', |
| 970 | + 'cn_templates' |
1004 | 971 | ), |
1005 | 972 | array( |
1006 | 973 | 'tmp_name', |
1007 | | - 'SUM(tmp_weight) AS total_weight' |
| 974 | + 'SUM(tmp_weight) AS total_weight', |
| 975 | + 'tmp_display_anon', |
| 976 | + 'tmp_display_account' |
1008 | 977 | ), |
1009 | 978 | array ( |
1010 | 979 | "not_start <= $encTimestamp", |
1011 | 980 | "not_end >= $encTimestamp", |
1012 | 981 | "not_enabled = 1", |
1013 | | - "not_language" => array( '', $language ), |
| 982 | + 'nl_notice_id = cn_notices.not_id', |
| 983 | + 'nl_language' => $language, |
1014 | 984 | "not_project" => array( '', $project ), |
1015 | 985 | 'cn_notices.not_id=cn_assignments.not_id', |
1016 | | - 'cn_assignments.tmp_id=cn_templates.tmp_id', |
| 986 | + 'cn_assignments.tmp_id=cn_templates.tmp_id' |
1017 | 987 | ), |
1018 | 988 | __METHOD__, |
1019 | 989 | array( |
1020 | | - 'GROUP BY' => 'tmp_name', |
| 990 | + 'GROUP BY' => 'tmp_name' |
1021 | 991 | ) |
1022 | 992 | ); |
1023 | | - $templateWeights = array(); |
| 993 | + $templates = array(); |
1024 | 994 | foreach ( $res as $row ) { |
1025 | | - $name = $row->tmp_name; |
1026 | | - $weight = intval( $row->total_weight ); |
1027 | | - $templateWeights[$name] = $weight; |
| 995 | + $template = array(); |
| 996 | + $template['name'] = $row->tmp_name; |
| 997 | + $template['weight'] = intval( $row->total_weight ); |
| 998 | + $template['display_anon'] = intval( $row->tmp_display_anon ); |
| 999 | + $template['display_account'] = intval( $row->tmp_display_account ); |
| 1000 | + $templates[] = $template; |
1028 | 1001 | } |
1029 | | - return $templateWeights; |
| 1002 | + return $templates; |
1030 | 1003 | } |
1031 | 1004 | |
1032 | | - function addNotice( $noticeName, $enabled, $start, $project_name, $project_language ) { |
| 1005 | + function addNotice( $noticeName, $enabled, $start, $project_name, $project_languages ) { |
1033 | 1006 | global $wgOut; |
1034 | 1007 | |
1035 | 1008 | $dbr = wfGetDB( DB_SLAVE ); |
1036 | 1009 | $res = $dbr->select( 'cn_notices', 'not_name', array( 'not_name' => $noticeName ) ); |
1037 | 1010 | if ( $dbr->numRows( $res ) > 0 ) { |
1038 | | - $wgOut->addWikiMsg( 'centralnotice-notice-exists' ); |
| 1011 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-notice-exists' ); |
1039 | 1012 | return; |
| 1013 | + } elseif ( empty( $project_languages ) ) { |
| 1014 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-no-language' ); |
| 1015 | + return; |
1040 | 1016 | } else { |
1041 | 1017 | $dbw = wfGetDB( DB_MASTER ); |
1042 | 1018 | $dbw->begin(); |
— | — | @@ -1059,10 +1035,18 @@ |
1060 | 1036 | 'not_enabled' => $enabled, |
1061 | 1037 | 'not_start' => $dbr->timestamp( $startTs ), |
1062 | 1038 | 'not_end' => $dbr->timestamp( $endTs ), |
1063 | | - 'not_project' => $project_name, |
1064 | | - 'not_language' => $project_language |
| 1039 | + 'not_project' => $project_name |
1065 | 1040 | ) |
1066 | 1041 | ); |
| 1042 | + $not_id = $dbw->insertId(); |
| 1043 | + |
| 1044 | + // Do multi-row insert for campaign languages |
| 1045 | + $insertArray = array(); |
| 1046 | + foreach( $project_languages as $code ) { |
| 1047 | + $insertArray[] = array( 'nl_notice_id' => $not_id, 'nl_language' => $code ); |
| 1048 | + } |
| 1049 | + $res = $dbw->insert( 'cn_notice_languages', $insertArray, __METHOD__, array( 'IGNORE' ) ); |
| 1050 | + |
1067 | 1051 | $dbw->commit(); |
1068 | 1052 | return; |
1069 | 1053 | } |
— | — | @@ -1076,12 +1060,12 @@ |
1077 | 1061 | array( 'not_name' => $noticeName ) |
1078 | 1062 | ); |
1079 | 1063 | if ( $dbr->numRows( $res ) < 1 ) { |
1080 | | - $wgOut->addWikiMsg( 'centralnotice-notice-doesnt-exist' ); |
| 1064 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-remove-notice-doesnt-exist' ); |
1081 | 1065 | return; |
1082 | 1066 | } |
1083 | 1067 | $row = $dbr->fetchObject( $res ); |
1084 | 1068 | if ( $row->not_locked == '1' ) { |
1085 | | - $wgOut->addWikiMsg( 'centralnotice-notice-is-locked' ); |
| 1069 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-notice-is-locked' ); |
1086 | 1070 | return; |
1087 | 1071 | } else { |
1088 | 1072 | $dbw = wfGetDB( DB_MASTER ); |
— | — | @@ -1089,6 +1073,7 @@ |
1090 | 1074 | $noticeId = htmlspecialchars( $this->getNoticeId( $noticeName ) ); |
1091 | 1075 | $res = $dbw->delete( 'cn_assignments', array ( 'not_id' => $noticeId ) ); |
1092 | 1076 | $res = $dbw->delete( 'cn_notices', array ( 'not_name' => $noticeName ) ); |
| 1077 | + $res = $dbw->delete( 'cn_notice_languages', array ( 'nl_notice_id' => $noticeId ) ); |
1093 | 1078 | $dbw->commit(); |
1094 | 1079 | return; |
1095 | 1080 | } |
— | — | @@ -1109,7 +1094,7 @@ |
1110 | 1095 | ) |
1111 | 1096 | ); |
1112 | 1097 | if ( $dbr->numRows( $res ) > 0 ) { |
1113 | | - $wgOut->addWikiMsg( 'centralnotice-template-already-exists' ); |
| 1098 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-template-already-exists' ); |
1114 | 1099 | } else { |
1115 | 1100 | $dbw = wfGetDB( DB_MASTER ); |
1116 | 1101 | $dbw->begin(); |
— | — | @@ -1125,23 +1110,35 @@ |
1126 | 1111 | } |
1127 | 1112 | } |
1128 | 1113 | |
1129 | | - function getNoticeId ( $noticeName ) { |
| 1114 | + /** |
| 1115 | + * Lookup the ID for a campaign based on the campaign name |
| 1116 | + */ |
| 1117 | + public static function getNoticeId( $noticeName ) { |
1130 | 1118 | $dbr = wfGetDB( DB_SLAVE ); |
1131 | 1119 | $eNoticeName = htmlspecialchars( $noticeName ); |
1132 | | - $res = $dbr->select( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) ); |
1133 | | - $row = $dbr->fetchObject( $res ); |
1134 | | - return $row->not_id; |
| 1120 | + $row = $dbr->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) ); |
| 1121 | + if ( $row ) { |
| 1122 | + return $row->not_id; |
| 1123 | + } else { |
| 1124 | + return; |
| 1125 | + } |
1135 | 1126 | } |
1136 | 1127 | |
1137 | | - function getNoticeLanguage ( $noticeName ) { |
1138 | | - $dbr = wfGetDB( DB_SLAVE ); |
1139 | | - $eNoticeName = htmlspecialchars( $noticeName ); |
1140 | | - $res = $dbr->select( 'cn_notices', 'not_language', array( 'not_name' => $eNoticeName ) ); |
1141 | | - $row = $dbr->fetchObject( $res ); |
1142 | | - return $row->not_language; |
| 1128 | + function getNoticeLanguages( $noticeName ) { |
| 1129 | + $dbr = wfGetDB( DB_SLAVE ); |
| 1130 | + $eNoticeName = htmlspecialchars( $noticeName ); |
| 1131 | + $row = $dbr->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) ); |
| 1132 | + $languages = array(); |
| 1133 | + if ( $row ) { |
| 1134 | + $res = $dbr->select( 'cn_notice_languages', 'nl_language', array( 'nl_notice_id' => $row->not_id ) ); |
| 1135 | + foreach ( $res as $langRow ) { |
| 1136 | + $languages[] = $langRow->nl_language; |
| 1137 | + } |
| 1138 | + } |
| 1139 | + return $languages; |
1143 | 1140 | } |
1144 | 1141 | |
1145 | | - function getNoticeProjectName ( $noticeName ) { |
| 1142 | + function getNoticeProjectName( $noticeName ) { |
1146 | 1143 | $dbr = wfGetDB( DB_SLAVE ); |
1147 | 1144 | $eNoticeName = htmlspecialchars( $noticeName ); |
1148 | 1145 | $res = $dbr->select( 'cn_notices', 'not_project', array( 'not_name' => $eNoticeName ) ); |
— | — | @@ -1149,7 +1146,7 @@ |
1150 | 1147 | return $row->not_project; |
1151 | 1148 | } |
1152 | 1149 | |
1153 | | - function getTemplateId ( $templateName ) { |
| 1150 | + function getTemplateId( $templateName ) { |
1154 | 1151 | $dbr = wfGetDB( DB_SLAVE ); |
1155 | 1152 | $templateName = htmlspecialchars ( $templateName ); |
1156 | 1153 | $res = $dbr->select( 'cn_templates', 'tmp_id', array( 'tmp_name' => $templateName ) ); |
— | — | @@ -1158,33 +1155,29 @@ |
1159 | 1156 | } |
1160 | 1157 | |
1161 | 1158 | function removeTemplateFor( $noticeName, $templateName ) { |
1162 | | - global $wgOut; |
1163 | | - |
1164 | 1159 | $dbw = wfGetDB( DB_MASTER ); |
1165 | 1160 | $dbw->begin(); |
1166 | 1161 | $noticeId = $this->getNoticeId( $noticeName ); |
1167 | 1162 | $templateId = $this->getTemplateId( $templateName ); |
1168 | | - $res = $dbw->delete( 'cn_assignments', array ( 'tmp_id' => $templateId, 'not_id' => $noticeId ) ); |
| 1163 | + $dbw->delete( 'cn_assignments', array ( 'tmp_id' => $templateId, 'not_id' => $noticeId ) ); |
1169 | 1164 | $dbw->commit(); |
1170 | 1165 | } |
1171 | 1166 | |
1172 | | - function updateNoticeDate ( $noticeName, $start, $end ) { |
| 1167 | + function updateNoticeDate( $noticeName, $start, $end ) { |
1173 | 1168 | global $wgOut; |
1174 | 1169 | |
1175 | 1170 | $dbr = wfGetDB( DB_SLAVE ); |
1176 | | - $project_name = $this->getNoticeProjectname( $noticeName ); |
1177 | | - $project_language = $this->getNoticeLanguage( $noticeName ); |
1178 | 1171 | |
1179 | | - // Start / end dont line up |
| 1172 | + // Start/end don't line up |
1180 | 1173 | if ( $start > $end || $end < $start ) { |
1181 | | - $wgOut->addWikiMsg( 'centralnotice-invalid-date-range3' ); |
| 1174 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-invalid-date-range3' ); |
1182 | 1175 | return; |
1183 | 1176 | } |
1184 | 1177 | |
1185 | | - // Invalid notice name |
| 1178 | + // Invalid campaign name |
1186 | 1179 | $res = $dbr->select( 'cn_notices', 'not_name', array( 'not_name' => $noticeName ) ); |
1187 | 1180 | if ( $dbr->numRows( $res ) < 1 ) { |
1188 | | - $wgOut->addWikiMsg( 'centralnotice-doesnt-exist' ); |
| 1181 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-notice-doesnt-exist' ); |
1189 | 1182 | } |
1190 | 1183 | |
1191 | 1184 | // Overlap over a date within the same project and language |
— | — | @@ -1203,7 +1196,7 @@ |
1204 | 1197 | $dbw->commit(); |
1205 | 1198 | } |
1206 | 1199 | |
1207 | | - function updateLock ( $noticeName, $isLocked ) { |
| 1200 | + function updateLock( $noticeName, $isLocked ) { |
1208 | 1201 | global $wgOut; |
1209 | 1202 | |
1210 | 1203 | $dbr = wfGetDB( DB_SLAVE ); |
— | — | @@ -1211,7 +1204,7 @@ |
1212 | 1205 | array( 'not_name' => $noticeName ) |
1213 | 1206 | ); |
1214 | 1207 | if ( $dbr->numRows( $res ) < 1 ) { |
1215 | | - $wgOut->addWikiMsg( 'centralnotice-doesnt-exist' ); |
| 1208 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-doesnt-exist' ); |
1216 | 1209 | } else { |
1217 | 1210 | $dbw = wfGetDB( DB_MASTER ); |
1218 | 1211 | $dbw->begin(); |
— | — | @@ -1223,19 +1216,16 @@ |
1224 | 1217 | } |
1225 | 1218 | } |
1226 | 1219 | |
1227 | | - function updateWeight ( $noticeName, $templateName, $weight ) { |
| 1220 | + function updateWeight( $noticeName, $templateId, $weight ) { |
1228 | 1221 | $dbw = wfGetDB( DB_MASTER ); |
1229 | | - $dbw->begin(); |
1230 | 1222 | $noticeId = $this->getNoticeId( $noticeName ); |
1231 | | - $templateId = $this->getTemplateId( $templateName ); |
1232 | | - $res = $dbw->update( 'cn_assignments', |
| 1223 | + $dbw->update( 'cn_assignments', |
1233 | 1224 | array ( 'tmp_weight' => $weight ), |
1234 | 1225 | array( |
1235 | 1226 | 'tmp_id' => $templateId, |
1236 | 1227 | 'not_id' => $noticeId |
1237 | 1228 | ) |
1238 | 1229 | ); |
1239 | | - $dbw->commit(); |
1240 | 1230 | } |
1241 | 1231 | |
1242 | 1232 | function projectDropDownList( $selected = '' ) { |
— | — | @@ -1257,50 +1247,62 @@ |
1258 | 1248 | } |
1259 | 1249 | } |
1260 | 1250 | } |
| 1251 | + |
| 1252 | + /** |
| 1253 | + * Generates a multiple select list of all languages. |
| 1254 | + * @param $selected The language codes of the selected languages |
| 1255 | + * @param $customisedOnly If true only languages which have some content are listed |
| 1256 | + * @return multiple select list |
| 1257 | + */ |
| 1258 | + function languageMultiSelector( $selected = array(), $customisedOnly = true ) { |
| 1259 | + global $wgContLanguageCode, $wgExtensionAssetsPath, $wgLang; |
| 1260 | + $scriptPath = "$wgExtensionAssetsPath/CentralNotice"; |
| 1261 | + // Make sure the site language is in the list; a custom language code might not have a defined name... |
| 1262 | + $languages = Language::getLanguageNames( $customisedOnly ); |
| 1263 | + if( !array_key_exists( $wgContLanguageCode, $languages ) ) { |
| 1264 | + $languages[$wgContLanguageCode] = $wgContLanguageCode; |
| 1265 | + } |
| 1266 | + ksort( $languages ); |
1261 | 1267 | |
1262 | | - function languageDropDownList( $selected = '' ) { |
1263 | | - // Language |
1264 | | - list( $lsLabel, $lsSelect ) = Xml::languageSelector( $selected ); |
1265 | | - |
| 1268 | + $options = "\n"; |
| 1269 | + foreach( $languages as $code => $name ) { |
| 1270 | + $options .= Xml::option( |
| 1271 | + wfMsg( 'centralnotice-language-listing', $code, $name ), |
| 1272 | + $code, |
| 1273 | + in_array( $code, $selected ) |
| 1274 | + ) . "\n"; |
| 1275 | + } |
| 1276 | + $htmlOut = ''; |
1266 | 1277 | if ( $this->editable ) { |
1267 | | - /* |
1268 | | - * Dirty hack to add our very own "All" option |
1269 | | - */ |
1270 | | - // Strip selected flag |
1271 | | - if ( $selected == '' ) { |
1272 | | - $lsSelect = str_replace( ' selected="selected"', '', $lsSelect ); |
1273 | | - } |
1274 | | - |
1275 | | - // Find the first select tag |
1276 | | - $insertPoint = stripos( $lsSelect , '<option' ); |
1277 | | - |
1278 | | - // Create our own option |
1279 | | - $option = Xml::option( 'All languages', '', ( $selected == '' ) ); |
1280 | | - |
1281 | | - // Insert our option |
1282 | | - $lsSelect = substr( $lsSelect, 0, $insertPoint ) . $option . substr( $lsSelect, $insertPoint ); |
1283 | | - |
1284 | | - return array( $lsLabel, $lsSelect ); |
| 1278 | + $htmlOut .= Xml::tags( 'select', |
| 1279 | + array( 'multiple' => 'multiple', 'size' => 4, 'id' => 'project_languages[]', 'name' => 'project_languages[]' ), |
| 1280 | + $options |
| 1281 | + ); |
| 1282 | + $buttons = array(); |
| 1283 | + $buttons[] = '<a href="#" onclick="selectLanguages(true);return false;">' . wfMsg( 'powersearch-toggleall' ) . '</a>'; |
| 1284 | + $buttons[] = '<a href="#" onclick="selectLanguages(false);return false;">' . wfMsg( 'powersearch-togglenone' ) . '</a>'; |
| 1285 | + $buttons[] = '<a href="#" onclick="top10Languages();return false;">' . wfMsg( 'centralnotice-top-ten-languages' ) . '</a>'; |
| 1286 | + $htmlOut .= Xml::tags( 'div', |
| 1287 | + array( 'style' => 'margin-top: 0.2em;' ), |
| 1288 | + '<img src="'.$scriptPath.'/up-arrow.png" style="vertical-align:baseline;"/>' . wfMsg( 'centralnotice-select', $wgLang->commaList( $buttons ) ) |
| 1289 | + ); |
1285 | 1290 | } else { |
1286 | | - if ( $selected == '' ) { |
1287 | | - $lang = 'All languages'; |
1288 | | - } else { |
1289 | | - global $wgLang; |
1290 | | - $name = $wgLang->getLanguageName( $selected ); |
1291 | | - $lang = htmlspecialchars( "$selected - $name" ); |
1292 | | - } |
1293 | | - return array( $lsLabel, $lang ); |
| 1291 | + $htmlOut .= Xml::tags( 'select', |
| 1292 | + array( 'multiple' => 'multiple', 'size' => 4, 'id' => 'project_languages[]', 'name' => 'project_languages[]', 'disabled' => 'disabled' ), |
| 1293 | + $options |
| 1294 | + ); |
1294 | 1295 | } |
| 1296 | + return $htmlOut; |
1295 | 1297 | } |
1296 | | - |
| 1298 | + |
1297 | 1299 | function getProjectName( $value ) { |
1298 | 1300 | return $value; // @fixme -- use wfMsg() |
1299 | 1301 | } |
1300 | 1302 | |
1301 | 1303 | function updateProjectName( $notice, $projectName ) { |
1302 | | - $dbw = wfGetDB( DB_MASTER ); |
1303 | | - $dbw->begin(); |
1304 | | - $res = $dbw->update( 'cn_notices', |
| 1304 | + $dbw = wfGetDB( DB_MASTER ); |
| 1305 | + $dbw->begin(); |
| 1306 | + $res = $dbw->update( 'cn_notices', |
1305 | 1307 | array ( 'not_project' => $projectName ), |
1306 | 1308 | array( |
1307 | 1309 | 'not_name' => $notice |
— | — | @@ -1309,19 +1311,37 @@ |
1310 | 1312 | $dbw->commit(); |
1311 | 1313 | } |
1312 | 1314 | |
1313 | | - function updateProjectLanguage( $notice, $language ) { |
1314 | | - $dbw = wfGetDB( DB_MASTER ); |
1315 | | - $dbw->begin(); |
1316 | | - $res = $dbw->update( 'cn_notices', |
1317 | | - array ( 'not_language' => $language ), |
1318 | | - array( |
1319 | | - 'not_name' => $notice |
1320 | | - ) |
1321 | | - ); |
| 1315 | + function updateProjectLanguages( $notice, $newLanguages ) { |
| 1316 | + $dbw = wfGetDB( DB_MASTER ); |
| 1317 | + $dbw->begin(); |
| 1318 | + |
| 1319 | + // Get the previously assigned languages |
| 1320 | + $oldLanguages = array(); |
| 1321 | + $oldLanguages = $this->getNoticeLanguages( $notice ); |
| 1322 | + |
| 1323 | + // Get the notice id |
| 1324 | + $row = $this->getNoticeId( $notice ); |
| 1325 | + |
| 1326 | + // Add newly assigned languages |
| 1327 | + $addLanguages = array_diff( $newLanguages, $oldLanguages ); |
| 1328 | + $insertArray = array(); |
| 1329 | + foreach( $addLanguages as $code ) { |
| 1330 | + $insertArray[] = array( 'nl_notice_id' => $row->not_id, 'nl_language' => $code ); |
| 1331 | + } |
| 1332 | + $res = $dbw->insert( 'cn_notice_languages', $insertArray, __METHOD__, array( 'IGNORE' ) ); |
| 1333 | + |
| 1334 | + // Remove disassociated languages |
| 1335 | + $removeLanguages = array_diff( $oldLanguages, $newLanguages ); |
| 1336 | + if ( $removeLanguages ) { |
| 1337 | + $res = $dbw->delete( 'cn_notice_languages', |
| 1338 | + array( 'nl_notice_id' => $row->not_id, 'nl_language' => $removeLanguages ) |
| 1339 | + ); |
| 1340 | + } |
| 1341 | + |
1322 | 1342 | $dbw->commit(); |
1323 | 1343 | } |
1324 | 1344 | |
1325 | | - function dropDownList ( $text, $values ) { |
| 1345 | + public static function dropDownList( $text, $values ) { |
1326 | 1346 | $dropDown = "* {$text}\n"; |
1327 | 1347 | foreach ( $values as $value ) { |
1328 | 1348 | $dropDown .= "**{$value}\n"; |
— | — | @@ -1329,7 +1349,7 @@ |
1330 | 1350 | return $dropDown; |
1331 | 1351 | } |
1332 | 1352 | |
1333 | | - function addZero ( $text ) { |
| 1353 | + function addZero( $text ) { |
1334 | 1354 | // Prepend a 0 for text needing it |
1335 | 1355 | if ( strlen( $text ) == 1 ) { |
1336 | 1356 | $text = "0{$text}"; |
— | — | @@ -1337,3 +1357,118 @@ |
1338 | 1358 | return $text; |
1339 | 1359 | } |
1340 | 1360 | } |
| 1361 | + |
| 1362 | + |
| 1363 | +class CentralNoticePager extends TemplatePager { |
| 1364 | + var $viewPage, $special; |
| 1365 | + var $editable; |
| 1366 | + |
| 1367 | + function __construct( $special ) { |
| 1368 | + parent::__construct( $special ); |
| 1369 | + } |
| 1370 | + |
| 1371 | + /** |
| 1372 | + * Pull banners from the database |
| 1373 | + */ |
| 1374 | + function getQueryInfo() { |
| 1375 | + $notice = $this->mRequest->getVal( 'notice' ); |
| 1376 | + $noticeId = CentralNotice::getNoticeId( $notice ); |
| 1377 | + if ( $noticeId ) { |
| 1378 | + // Return all the banners not already assigned to the current campaign |
| 1379 | + return array( |
| 1380 | + 'tables' => array( 'cn_assignments', 'cn_templates' ), |
| 1381 | + 'fields' => array( 'cn_templates.tmp_name', 'cn_templates.tmp_id' ), |
| 1382 | + 'conds' => array( 'cn_assignments.tmp_id IS NULL' ), |
| 1383 | + 'join_conds' => array( |
| 1384 | + 'cn_assignments' => array( |
| 1385 | + 'LEFT JOIN', |
| 1386 | + "cn_assignments.tmp_id = cn_templates.tmp_id AND cn_assignments.not_id = $noticeId" |
| 1387 | + ) |
| 1388 | + ) |
| 1389 | + ); |
| 1390 | + } else { |
| 1391 | + // Return all the banners in the database |
| 1392 | + return array( |
| 1393 | + 'tables' => 'cn_templates', |
| 1394 | + 'fields' => array( 'tmp_name', 'tmp_id' ), |
| 1395 | + ); |
| 1396 | + } |
| 1397 | + } |
| 1398 | + |
| 1399 | + /** |
| 1400 | + * Generate the content of each table row (1 row = 1 banner) |
| 1401 | + */ |
| 1402 | + function formatRow( $row ) { |
| 1403 | + |
| 1404 | + // Begin banner row |
| 1405 | + $htmlOut = Xml::openElement( 'tr' ); |
| 1406 | + |
| 1407 | + if ( $this->editable ) { |
| 1408 | + // Add box |
| 1409 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
| 1410 | + Xml::check( 'addTemplates[]', '', array ( 'value' => $row->tmp_name ) ) |
| 1411 | + ); |
| 1412 | + // Weight select |
| 1413 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
| 1414 | + Xml::listDropDown( "weight[$row->tmp_id]", |
| 1415 | + CentralNotice::dropDownList( wfMsg( 'centralnotice-weight' ), range ( 0, 100, 5 ) ) , |
| 1416 | + '', |
| 1417 | + '25', |
| 1418 | + '', |
| 1419 | + '' ) |
| 1420 | + ); |
| 1421 | + } |
| 1422 | + |
| 1423 | + // Link and Preview |
| 1424 | + $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
| 1425 | + $render = new SpecialNoticeText(); |
| 1426 | + $render->project = 'wikipedia'; |
| 1427 | + $render->language = $this->mRequest->getVal( 'wpUserLanguage' ); |
| 1428 | + $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
| 1429 | + $this->getSkin()->makeLinkObj( $this->viewPage, |
| 1430 | + htmlspecialchars( $row->tmp_name ), |
| 1431 | + 'template=' . urlencode( $row->tmp_name ) ) . |
| 1432 | + Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
| 1433 | + $render->getHtmlNotice( $row->tmp_name ), |
| 1434 | + array( 'class' => 'cn-bannerpreview') |
| 1435 | + ) |
| 1436 | + ); |
| 1437 | + |
| 1438 | + // End banner row |
| 1439 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 1440 | + |
| 1441 | + return $htmlOut; |
| 1442 | + } |
| 1443 | + |
| 1444 | + /** |
| 1445 | + * Specify table headers |
| 1446 | + */ |
| 1447 | + function getStartBody() { |
| 1448 | + $htmlOut = ''; |
| 1449 | + $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
| 1450 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 1451 | + if ( $this->editable ) { |
| 1452 | + $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
| 1453 | + wfMsg ( "centralnotice-add" ) |
| 1454 | + ); |
| 1455 | + $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
| 1456 | + wfMsg ( "centralnotice-weight" ) |
| 1457 | + ); |
| 1458 | + } |
| 1459 | + $htmlOut .= Xml::element( 'th', array( 'align' => 'left' ), |
| 1460 | + wfMsg ( 'centralnotice-templates' ) |
| 1461 | + ); |
| 1462 | + $htmlOut .= Xml::closeElement( 'tr' ); |
| 1463 | + return $htmlOut; |
| 1464 | + } |
| 1465 | + |
| 1466 | + /** |
| 1467 | + * Close table |
| 1468 | + */ |
| 1469 | + function getEndBody() { |
| 1470 | + global $wgUser; |
| 1471 | + $htmlOut = ''; |
| 1472 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 1473 | + return $htmlOut; |
| 1474 | + } |
| 1475 | +} |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/centralnotice.css |
— | — | @@ -0,0 +1,62 @@ |
| 2 | +/* Stylesheet for the CentralNotice extension. |
| 3 | + * |
| 4 | + * @file |
| 5 | + * @ingroup Extensions |
| 6 | + * @author Ryan Kaldari <rkaldari@wikimedia.org> |
| 7 | + * @copyright © 2010 by Ryan Kaldari |
| 8 | + * @licence GNU General Public Licence 2.0 or later |
| 9 | + */ |
| 10 | + |
| 11 | +#preferences fieldset.prefsection { |
| 12 | + margin:0; |
| 13 | + padding: 1em; |
| 14 | + border-top: 1px solid; |
| 15 | +} |
| 16 | +#preferences fieldset.prefsection:first-child { |
| 17 | + border-top: none; |
| 18 | +} |
| 19 | +#preferences fieldset.prefsection h2 { |
| 20 | + border:none; |
| 21 | +} |
| 22 | +#preferences div.cn-pager { |
| 23 | + margin:1em 0; |
| 24 | +} |
| 25 | +#preferences div.cn-error { |
| 26 | + color:#AA0000; |
| 27 | + margin:1em; |
| 28 | +} |
| 29 | +#preferences fieldset.prefsection div.cn-error { |
| 30 | + margin:0; |
| 31 | +} |
| 32 | +#preferences table tr.cn-active-campaign { |
| 33 | + background-color: #ddffdd; |
| 34 | +} |
| 35 | +#preferences div.cn-buttons { |
| 36 | + padding:1em; |
| 37 | +} |
| 38 | +#preferences fieldset.prefsection div.cn-buttons { |
| 39 | + padding:0; |
| 40 | +} |
| 41 | +#preferences div.cn-buttons input { |
| 42 | + margin-right:0.25em; |
| 43 | +} |
| 44 | +#preferences input#clone { |
| 45 | + margin-left:0.25em; |
| 46 | +} |
| 47 | +#preferences fieldset.prefsection fieldset.cn-bannerpreview { |
| 48 | + border-style: solid; |
| 49 | + border-width: 1px; |
| 50 | +} |
| 51 | + |
| 52 | +/* Vector-specific definitions */ |
| 53 | +body.skin-vector #preferences fieldset.prefsection { |
| 54 | + border-color:#CCCCCC; |
| 55 | +} |
| 56 | +body.skin-vector #preferences fieldset.prefsection fieldset.cn-bannerpreview { |
| 57 | + border-color:#CCCCCC; |
| 58 | +} |
| 59 | + |
| 60 | +/* Monobook-specific definitions */ |
| 61 | +body.skin-monobook #preferences fieldset.prefsection { |
| 62 | + border-color:#AAAAAA; |
| 63 | +} |
\ No newline at end of file |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/centralnotice.css |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 64 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/down-arrow.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/down-arrow.png |
___________________________________________________________________ |
Added: svn:mime-type |
2 | 65 | + image/png |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-notice_languages.sql |
— | — | @@ -0,0 +1,7 @@ |
| 2 | +-- Update to allow for any number of languages per notice. |
| 3 | + |
| 4 | +CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_notice_languages ( |
| 5 | + `nl_notice_id` int unsigned NOT NULL, |
| 6 | + `nl_language` varchar(32) NOT NULL |
| 7 | +) /*$wgDBTableOptions*/; |
| 8 | +CREATE UNIQUE INDEX /*i*/nl_notice_id_language ON /*$wgDBprefix*/cn_notice_languages (nl_notice_id, nl_language); |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-notice_languages.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 9 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-template_settings.sql |
— | — | @@ -0,0 +1,7 @@ |
| 2 | +-- Update to support controlling whether banners are displayed to anon and/or logged in users. |
| 3 | +-- Two flags are stored in the database for each banner, one indicating whether or not the banner |
| 4 | +-- is displayed to anonymous users, the other indicating whether or not the banner is displayed |
| 5 | +-- to logged in users. |
| 6 | + |
| 7 | +ALTER TABLE /*$wgDBprefix*/cn_templates ADD `tmp_display_anon` BOOLEAN NOT NULL DEFAULT 1; |
| 8 | +ALTER TABLE /*$wgDBprefix*/cn_templates ADD `tmp_display_account` BOOLEAN NOT NULL DEFAULT 1; |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-template_settings.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 9 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-notice_preferred.sql |
— | — | @@ -0,0 +1,6 @@ |
| 2 | +-- Support for one notice to supercede all others. This allows one notice to |
| 3 | +-- cancel out all the templates that a non preffered notice might have if they |
| 4 | +-- overlap. Use case is to be able to use one all language and projects notice |
| 5 | +-- and have it superceded by a specific one for en wikipedia. |
| 6 | + |
| 7 | +ALTER TABLE /*$wgDBprefix*/cn_notices ADD COLUMN not_preferred bool NOT NULL default '0'; |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/patches/patch-notice_preferred.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 8 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.sql |
— | — | @@ -1,26 +1,32 @@ |
2 | | -CREATE TABLE `cn_notices` ( |
3 | | - `not_id` int NOT NULL auto_increment, |
4 | | - `not_name` varchar(255) NOT NULL, |
5 | | - `not_start` char(14) NOT NULL, |
6 | | - `not_end` char(14) NOT NULL, |
7 | | - `not_enabled` bool NOT NULL default '0', |
8 | | - `not_preferred` bool NOT NULL default '0', |
9 | | - `not_locked` bool NOT NULL default '0', |
10 | | - `not_language` varchar(32) NOT NULL, |
11 | | - `not_project` varchar(255) NOT NULL, |
12 | | - PRIMARY KEY (`not_id`) |
| 2 | +CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_notices ( |
| 3 | + `not_id` int NOT NULL PRIMARY KEY auto_increment, |
| 4 | + `not_name` varchar(255) NOT NULL, |
| 5 | + `not_start` char(14) NOT NULL, |
| 6 | + `not_end` char(14) NOT NULL, |
| 7 | + `not_enabled` bool NOT NULL default '0', |
| 8 | + `not_preferred` bool NOT NULL default '0', |
| 9 | + `not_locked` bool NOT NULL default '0', |
| 10 | + `not_language` varchar(32) NOT NULL, |
| 11 | + `not_project` varchar(255) NOT NULL |
13 | 12 | ) /*$wgDBTableOptions*/; |
14 | 13 | |
15 | | -CREATE TABLE `cn_assignments` ( |
16 | | - `asn_id` int NOT NULL auto_increment, |
17 | | - `not_id` int NOT NULL, |
18 | | - `tmp_id` int NOT NULL, |
19 | | - `tmp_weight` int NOT NULL, |
20 | | - PRIMARY KEY (`asn_id`) |
| 14 | +CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_assignments ( |
| 15 | + `asn_id` int NOT NULL PRIMARY KEY auto_increment, |
| 16 | + `not_id` int NOT NULL, |
| 17 | + `tmp_id` int NOT NULL, |
| 18 | + `tmp_weight` int NOT NULL |
21 | 19 | ) /*$wgDBTableOptions*/; |
22 | 20 | |
23 | | -CREATE TABLE `cn_templates` ( |
24 | | - `tmp_id` int NOT NULL auto_increment, |
25 | | - `tmp_name` varchar(255) default NULL, |
26 | | - PRIMARY KEY (`tmp_id`) |
| 21 | +-- FIXME: make tmp_name UNIQUE |
| 22 | +CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_templates ( |
| 23 | + `tmp_id` int NOT NULL PRIMARY KEY auto_increment, |
| 24 | + `tmp_name` varchar(255) default NULL, |
| 25 | + `tmp_display_anon` BOOLEAN NOT NULL DEFAULT 1, |
| 26 | + `tmp_display_account` BOOLEAN NOT NULL DEFAULT 1 |
27 | 27 | ) /*$wgDBTableOptions*/; |
| 28 | + |
| 29 | +CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_notice_languages ( |
| 30 | + `nl_notice_id` int unsigned NOT NULL, |
| 31 | + `nl_language` varchar(32) NOT NULL |
| 32 | +) /*$wgDBTableOptions*/; |
| 33 | +CREATE UNIQUE INDEX /*i*/nl_notice_id_language ON /*$wgDBprefix*/cn_notice_languages (nl_notice_id, nl_language); |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.i18n.php |
— | — | @@ -7,87 +7,119 @@ |
8 | 8 | |
9 | 9 | $messages = array(); |
10 | 10 | |
| 11 | +// Don't create a message named "centralnotice-template" or beginning with "centralnotice-template-" since those terms are reserved in CentralNotice |
| 12 | + |
11 | 13 | $messages['en'] = array( |
12 | 14 | 'centralnotice' => 'Central notice admin', |
13 | | - 'noticetemplate' => 'Central notice template', |
| 15 | + 'noticetemplate' => 'Central notice banner', |
14 | 16 | 'centralnotice-desc' => 'Adds a central sitenotice', |
15 | 17 | 'centralnotice-summary' => 'This module allows you to edit your currently setup central notices. |
16 | 18 | It can also be used to add or remove old notices.', |
17 | | - 'centralnotice-query' => 'Modify current notices', |
18 | | - 'centralnotice-notice-name' => 'Notice name', |
| 19 | + 'centralnotice-query' => 'Modify current campaigns', |
| 20 | + 'centralnotice-notice-name' => 'Campaign name', |
19 | 21 | 'centralnotice-end-date' => 'End date', |
20 | 22 | 'centralnotice-enabled' => 'Enabled', |
21 | 23 | 'centralnotice-modify' => 'Submit', |
| 24 | + 'centralnotice-save-banner' => 'Save banner', |
22 | 25 | 'centralnotice-preview' => 'Preview', |
23 | | - 'centralnotice-add-new' => 'Add a new central notice', |
| 26 | + 'centralnotice-add-new' => 'Add a new campaign', |
24 | 27 | 'centralnotice-remove' => 'Remove', |
25 | 28 | 'centralnotice-translate-heading' => 'Translation for $1', |
26 | | - 'centralnotice-manage' => 'Manage central notice', |
| 29 | + 'centralnotice-manage' => 'Manage campaigns', |
| 30 | + 'centralnotice-manage-templates' => 'Manage banners', |
27 | 31 | 'centralnotice-add' => 'Add', |
28 | | - 'centralnotice-add-notice' => 'Add a notice', |
29 | | - 'centralnotice-add-template' => 'Add a template', |
30 | | - 'centralnotice-show-notices' => 'Show notices', |
31 | | - 'centralnotice-list-templates' => 'List templates', |
| 32 | + 'centralnotice-add-notice' => 'Add a campaign', |
| 33 | + 'centralnotice-edit-notice' => 'Edit campaign', |
| 34 | + 'centralnotice-add-template' => 'Add a banner', |
| 35 | + 'centralnotice-show-notices' => 'Show campaigns', |
| 36 | + 'centralnotice-list-templates' => 'List banners', |
| 37 | + 'centralnotice-multiple_languages' => 'multiple ($1)', |
| 38 | + 'centralnotice-language-listing' => '$1 - $2', |
32 | 39 | 'centralnotice-translations' => 'Translations', |
33 | 40 | 'centralnotice-translate-to' => 'Translate to', |
34 | 41 | 'centralnotice-translate' => 'Translate', |
35 | 42 | 'centralnotice-english' => 'English', |
36 | | - 'centralnotice-template-name' => 'Template name', |
37 | | - 'centralnotice-templates' => 'Templates', |
| 43 | + 'centralnotice-banner-name' => 'Banner name:', |
| 44 | + 'centralnotice-banner' => 'Banner', |
| 45 | + 'centralnotice-banner-heading' => 'Banner: $1', |
| 46 | + 'centralnotice-templates' => 'Banners', |
38 | 47 | 'centralnotice-weight' => 'Weight', |
39 | 48 | 'centralnotice-locked' => 'Locked', |
40 | | - 'centralnotice-notices' => 'Notices', |
41 | | - 'centralnotice-notice-exists' => 'Notice already exists. |
42 | | -Not adding', |
43 | | - 'centralnotice-template-exists' => 'Template already exists. |
44 | | -Not adding', |
45 | | - 'centralnotice-notice-doesnt-exist' => 'Notice does not exist. |
46 | | -Nothing to remove', |
47 | | - 'centralnotice-template-still-bound' => 'Template is still bound to a notice. |
| 49 | + 'centralnotice-notice' => 'Campaign', |
| 50 | + 'centralnotice-notice-heading' => 'Campaign: $1', |
| 51 | + 'centralnotice-notices' => 'Campaigns', |
| 52 | + 'centralnotice-notice-exists' => 'Campaign already exists. |
| 53 | +Not adding.', |
| 54 | + 'centralnotice-no-language' => 'No language was selected for the campaign. Not adding.', |
| 55 | + 'centralnotice-template-exists' => 'Banner already exists. |
| 56 | +Not adding.', |
| 57 | + 'centralnotice-notice-doesnt-exist' => 'Campaign does not exist.', |
| 58 | + 'centralnotice-remove-notice-doesnt-exist' => 'Campaign does not exist. |
| 59 | +Nothing to remove.', |
| 60 | + 'centralnotice-template-still-bound' => 'Banner is still bound to a campaign. |
48 | 61 | Not removing.', |
49 | | - 'centralnotice-template-body' => 'Template body:', |
| 62 | + 'centralnotice-template-body' => 'Banner body:', |
50 | 63 | 'centralnotice-day' => 'Day', |
51 | 64 | 'centralnotice-year' => 'Year', |
52 | 65 | 'centralnotice-month' => 'Month', |
53 | 66 | 'centralnotice-hours' => 'Hour', |
54 | 67 | 'centralnotice-min' => 'Minute', |
55 | 68 | 'centralnotice-project-lang' => 'Project language', |
| 69 | + 'centralnotice-select' => 'Select: $1', |
| 70 | + 'centralnotice-top-ten-languages' => 'Top 10 languages', |
56 | 71 | 'centralnotice-project-name' => 'Project name', |
57 | 72 | 'centralnotice-start-date' => 'Start date', |
58 | 73 | 'centralnotice-start-time' => 'Start time (UTC)', |
59 | | - 'centralnotice-assigned-templates' => 'Assigned templates', |
60 | | - 'centralnotice-no-templates' => 'No templates found. |
| 74 | + 'centralnotice-assigned-templates' => 'Assigned banners', |
| 75 | + 'centralnotice-no-templates' => 'No banners found. |
61 | 76 | Add some!', |
62 | | - 'centralnotice-no-templates-assigned' => 'No templates assigned to notice. |
| 77 | + 'centralnotice-no-templates-assigned' => 'No banners assigned to campaign. |
63 | 78 | Add some!', |
64 | | - 'centralnotice-available-templates' => 'Available templates', |
65 | | - 'centralnotice-template-already-exists' => 'Template is already tied to campaign. |
66 | | -Not adding', |
67 | | - 'centralnotice-preview-template' => 'Preview template', |
68 | | - 'centralnotice-start-hour' => 'Start time', |
| 79 | + 'centralnotice-available-templates' => 'Available banners', |
| 80 | + 'centralnotice-template-already-exists' => 'Banner is already tied to campaign. |
| 81 | +Not adding.', |
| 82 | + 'centralnotice-preview-template' => 'Preview banner', |
| 83 | + 'centralnotice-start-hour' => 'Start time (GMT)', |
69 | 84 | 'centralnotice-change-lang' => 'Change translation language', |
70 | 85 | 'centralnotice-weights' => 'Weights', |
71 | | - 'centralnotice-notice-is-locked' => 'Notice is locked. |
72 | | -Not removing', |
73 | | - 'centralnotice-overlap' => 'Notice overlaps within the time of another notice. |
74 | | -Not adding', |
| 86 | + 'centralnotice-notice-is-locked' => 'Campaign is locked. |
| 87 | +Not removing.', |
| 88 | + 'centralnotice-overlap' => 'Campaign overlaps within the time of another campaign. |
| 89 | +Not adding.', |
75 | 90 | 'centralnotice-invalid-date-range' => 'Invalid date range. |
76 | | -Not updating', |
| 91 | +Not updating.', |
77 | 92 | 'centralnotice-null-string' => 'Cannot add a null string. |
78 | | -Not adding', |
| 93 | +Not adding.', |
79 | 94 | 'centralnotice-confirm-delete' => 'Are you sure you want to delete this item? |
80 | 95 | This action will be unrecoverable.', |
81 | | - 'centralnotice-no-notices-exist' => 'No notices exist. |
| 96 | + 'centralnotice-no-notices-exist' => 'No campaigns exist. |
82 | 97 | Add one below.', |
83 | | - 'centralnotice-no-templates-translate' => 'There are not any templates to edit translations for', |
| 98 | + 'centralnotice-no-templates-translate' => 'There are not any banners to edit translations for.', |
84 | 99 | 'centralnotice-number-uses' => 'Uses', |
85 | | - 'centralnotice-edit-template' => 'Edit template', |
| 100 | + 'centralnotice-settings' => 'Settings', |
| 101 | + 'centralnotice-edit-template' => 'Edit banner', |
| 102 | + 'centralnotice-edit-template-summary' => 'To create a localizable message, enclose a hyphenated string in three curly brackets, e.g. {{{jimbo-quote}}}.', |
86 | 103 | 'centralnotice-message' => 'Message', |
87 | 104 | 'centralnotice-message-not-set' => 'Message not set', |
88 | 105 | 'centralnotice-clone' => 'Clone', |
89 | | - 'centralnotice-clone-notice' => 'Create a copy of the template', |
90 | | - 'centralnotice-preview-all-template-translations' => 'Preview all available translations of template', |
91 | | - |
| 106 | + 'centralnotice-clone-notice' => 'Create a copy of the banner', |
| 107 | + 'centralnotice-clone-name' => 'Name:', |
| 108 | + 'centralnotice-preview-all-template-translations' => 'Preview all available translations of banner', |
| 109 | + 'centralnotice-insert' => 'Insert: $1', |
| 110 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} button', |
| 111 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} button', |
| 112 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} button', |
| 113 | + 'centralnotice-translate-button' => 'Help translate button', |
| 114 | + 'centralnotice-donate-button' => 'Donate button', |
| 115 | + 'centralnotice-expanded-banner' => 'Expanded banner', |
| 116 | + 'centralnotice-collapsed-banner' => 'Collapsed banner', |
| 117 | + 'centralnotice-banner-display' => 'Display to:', |
| 118 | + 'centralnotice-banner-anonymous' => 'Anonymous users', |
| 119 | + 'centralnotice-banner-logged-in' => 'Logged in users', |
| 120 | + 'centralnotice-banner-type' => 'Banner type:', |
| 121 | + 'centralnotice-banner-hidable' => 'Static/Hidable', |
| 122 | + 'centralnotice-banner-collapsible' => 'Collapsible', |
| 123 | + |
92 | 124 | 'right-centralnotice-admin' => 'Manage central notices', |
93 | 125 | 'right-centralnotice-translate' => 'Translate central notices', |
94 | 126 | |
— | — | @@ -99,33 +131,41 @@ |
100 | 132 | /** Message documentation (Message documentation) |
101 | 133 | * @author Bennylin |
102 | 134 | * @author Darth Kule |
| 135 | + * @author EugeneZelenko |
103 | 136 | * @author Fryed-peach |
| 137 | + * @author Hamilton Abreu |
104 | 138 | * @author Jon Harald Søby |
105 | 139 | * @author Lloffiwr |
106 | 140 | * @author Nike |
107 | 141 | * @author Purodha |
| 142 | + * @author The Evil IP address |
108 | 143 | */ |
109 | 144 | $messages['qqq'] = array( |
110 | 145 | 'centralnotice' => 'Name of Special:CentralNotice in Special:SpecialPages and title of the page', |
111 | 146 | 'noticetemplate' => 'Title of Special:NoticeTemplate', |
112 | | - 'centralnotice-desc' => 'Short description of the Centralnotice extension, shown in [[Special:Version]]. Do not translate or change links.', |
| 147 | + 'centralnotice-desc' => '{{desc}}', |
113 | 148 | 'centralnotice-summary' => 'Used in Special:CentralNotice', |
114 | 149 | 'centralnotice-end-date' => '{{Identical|End date}}', |
115 | 150 | 'centralnotice-enabled' => '{{Identical|Enabled}}', |
116 | 151 | 'centralnotice-modify' => '{{Identical|Submit}}', |
| 152 | + 'centralnotice-save-banner' => 'Label for the submit button which saves a CentralNotice banner.', |
117 | 153 | 'centralnotice-preview' => '{{Identical|Preview}}', |
118 | 154 | 'centralnotice-remove' => '{{Identical|Remove}}', |
119 | 155 | 'centralnotice-translate-heading' => 'Fieldset label. $1 is a name of a template.', |
120 | 156 | 'centralnotice-add' => '{{Identical|Add}}', |
| 157 | + 'centralnotice-multiple_languages' => '$1 is a number. More precisely, the number of languages a notice is available in. It is always greater than 3.', |
| 158 | + 'centralnotice-language-listing' => 'A language listing for the language multi-select box. First parameter is the language code. Second parameter is the name of the language.', |
121 | 159 | 'centralnotice-translate' => '{{Identical|Translate}}', |
122 | | - 'centralnotice-notice-exists' => 'Errore message displayed in Special:CentralNotice when trying to add a notice with the same name of another notice', |
123 | | - 'centralnotice-template-exists' => 'Errore message displayed in Special:NoticeTemplate when trying to add a template with the same name of another template', |
| 160 | + 'centralnotice-notice-exists' => 'Error message displayed in Special:CentralNotice when trying to add a notice with the same name of another notice', |
| 161 | + 'centralnotice-template-exists' => 'Error message displayed in Special:NoticeTemplate when trying to add a template with the same name of another template', |
| 162 | + 'centralnotice-day' => '{{Identical|Day}}', |
| 163 | + 'centralnotice-select' => '{{Identical|Select}}', |
124 | 164 | 'centralnotice-start-date' => 'Used in Special:CentralNotice. |
125 | 165 | |
126 | 166 | {{Identical|Start date}}', |
127 | 167 | 'centralnotice-start-time' => 'Used in Special:CentralNotice', |
128 | 168 | 'centralnotice-available-templates' => 'Used in Special:NoticeTemplate', |
129 | | - 'centralnotice-notice-is-locked' => 'Errore message displayed in Special:CentralNotice when trying to delete a locked notice', |
| 169 | + 'centralnotice-notice-is-locked' => 'Error message displayed in Special:CentralNotice when trying to delete a locked notice', |
130 | 170 | 'centralnotice-invalid-date-range' => '{{Identical|Date}}', |
131 | 171 | 'centralnotice-no-notices-exist' => 'Used in Special:CentralNotice when there are no notices', |
132 | 172 | 'centralnotice-number-uses' => 'Column header in table with sitenotice campaign information. |
— | — | @@ -134,6 +174,8 @@ |
135 | 175 | |
136 | 176 | Maximum length of the message is 5% of the total width of the table.', |
137 | 177 | 'centralnotice-message' => '{{Identical|Message}}', |
| 178 | + 'centralnotice-clone-name' => '{{Identical|Name}}', |
| 179 | + 'centralnotice-insert' => '{{Identical|Insert}}', |
138 | 180 | 'right-centralnotice-admin' => '{{doc-right}}', |
139 | 181 | 'right-centralnotice-translate' => '{{doc-right}}', |
140 | 182 | 'action-centralnotice-admin' => '{{doc-action}}', |
— | — | @@ -166,7 +208,7 @@ |
167 | 209 | 'centralnotice-translate-to' => 'Vertaal na', |
168 | 210 | 'centralnotice-translate' => 'Vertaal', |
169 | 211 | 'centralnotice-english' => 'Engels', |
170 | | - 'centralnotice-template-name' => 'Sjabloonnaam', |
| 212 | + 'centralnotice-banner-name' => 'Sjabloonnaam', |
171 | 213 | 'centralnotice-templates' => 'Sjablone', |
172 | 214 | 'centralnotice-weight' => 'Gewig', |
173 | 215 | 'centralnotice-locked' => 'Gesluit', |
— | — | @@ -255,7 +297,7 @@ |
256 | 298 | 'centralnotice-translate-to' => 'Translate në', |
257 | 299 | 'centralnotice-translate' => 'Përkthej', |
258 | 300 | 'centralnotice-english' => 'Anglisht', |
259 | | - 'centralnotice-template-name' => 'Emri Template', |
| 301 | + 'centralnotice-banner-name' => 'Emri Template', |
260 | 302 | 'centralnotice-templates' => 'Templates', |
261 | 303 | 'centralnotice-weight' => 'Peshë', |
262 | 304 | 'centralnotice-locked' => 'I bllokuar', |
— | — | @@ -278,13 +320,15 @@ |
279 | 321 | * @author Juanpabl |
280 | 322 | */ |
281 | 323 | $messages['an'] = array( |
282 | | - 'centralnotice-desc' => 'Adibe una "sitenotice" zentral', |
| 324 | + 'centralnotice-desc' => 'Adibe una "sitenotice" central', |
283 | 325 | 'centralnotice-end-date' => 'Calendata final', |
284 | 326 | 'centralnotice-modify' => 'Ninviar', |
285 | | - 'centralnotice-start-date' => 'Calendata de prenzipio', |
| 327 | + 'centralnotice-preview' => 'Previsualizar', |
| 328 | + 'centralnotice-start-date' => 'Calendata de prencipio', |
286 | 329 | 'centralnotice-invalid-date-range' => "Rango de datos no conforme. |
287 | 330 | No s'está adautando.", |
288 | 331 | 'centralnotice-message' => 'Mensache', |
| 332 | + 'centralnotice-insert' => 'Insertar: $1', |
289 | 333 | ); |
290 | 334 | |
291 | 335 | /** Arabic (العربية) |
— | — | @@ -317,7 +361,7 @@ |
318 | 362 | 'centralnotice-translate-to' => 'ترجم إلى', |
319 | 363 | 'centralnotice-translate' => 'ترجم', |
320 | 364 | 'centralnotice-english' => 'الإنجليزية', |
321 | | - 'centralnotice-template-name' => 'اسم القالب', |
| 365 | + 'centralnotice-banner-name' => 'اسم القالب', |
322 | 366 | 'centralnotice-templates' => 'القوالب', |
323 | 367 | 'centralnotice-weight' => 'الوزن', |
324 | 368 | 'centralnotice-locked' => 'مغلق', |
— | — | @@ -425,7 +469,7 @@ |
426 | 470 | 'centralnotice-translate-to' => 'ترجم لـ', |
427 | 471 | 'centralnotice-translate' => 'ترجم', |
428 | 472 | 'centralnotice-english' => 'انجليزى', |
429 | | - 'centralnotice-template-name' => 'اسم القالب', |
| 473 | + 'centralnotice-banner-name' => 'اسم القالب', |
430 | 474 | 'centralnotice-templates' => 'قوالب', |
431 | 475 | 'centralnotice-weight' => 'الوزن', |
432 | 476 | 'centralnotice-locked' => 'مقفول', |
— | — | @@ -528,6 +572,8 @@ |
529 | 573 | * @author EugeneZelenko |
530 | 574 | * @author Jim-by |
531 | 575 | * @author Red Winged Duck |
| 576 | + * @author Wizardist |
| 577 | + * @author Александр Сигачёв |
532 | 578 | */ |
533 | 579 | $messages['be-tarask'] = array( |
534 | 580 | 'centralnotice' => 'Кіраваньне цэнтралізаванымі паведамленьнямі', |
— | — | @@ -535,80 +581,108 @@ |
536 | 582 | 'centralnotice-desc' => 'Дадае цэнтралізаванае паведамленьне сайту', |
537 | 583 | 'centralnotice-summary' => 'Гэты модуль дазваляе Вам рэдагаваць Вашыя актуальныя цэнтралізаваныя паведамленьні. |
538 | 584 | Ён таксама можа выкарыстоўвацца для даданьня ці выдаленьня старых паведамленьняў.', |
539 | | - 'centralnotice-query' => 'Зьмяніць цяперашняе паведамленьне', |
540 | | - 'centralnotice-notice-name' => 'Назва паведамленьня', |
| 585 | + 'centralnotice-query' => 'Зьмяніць цяперашнюю кампанію', |
| 586 | + 'centralnotice-notice-name' => 'Назва кампаніі', |
541 | 587 | 'centralnotice-end-date' => 'Дата заканчэньня', |
542 | 588 | 'centralnotice-enabled' => 'Уключана', |
543 | 589 | 'centralnotice-modify' => 'Захаваць', |
| 590 | + 'centralnotice-save-banner' => 'Захаваць банэр', |
544 | 591 | 'centralnotice-preview' => 'Папярэдні прагляд', |
545 | | - 'centralnotice-add-new' => 'Дадаць новае цэнтралізаванае паведамленьне', |
| 592 | + 'centralnotice-add-new' => 'Дадаць новую кампанію', |
546 | 593 | 'centralnotice-remove' => 'Выдаліць', |
547 | 594 | 'centralnotice-translate-heading' => 'Пераклад для $1', |
548 | | - 'centralnotice-manage' => 'Кіраваньне цэнтралізаванымі паведамленьнямі', |
| 595 | + 'centralnotice-manage' => 'Кіраваньне кампаніямі', |
| 596 | + 'centralnotice-manage-templates' => 'Кіраваньне паведамленьнямі', |
549 | 597 | 'centralnotice-add' => 'Дадаць', |
550 | | - 'centralnotice-add-notice' => 'Дадаць паведамленьне', |
551 | | - 'centralnotice-add-template' => 'Дадаць шаблён', |
552 | | - 'centralnotice-show-notices' => 'Паказаць паведамленьні', |
553 | | - 'centralnotice-list-templates' => 'Сьпіс шаблёнаў', |
| 598 | + 'centralnotice-add-notice' => 'Дадаць кампанію', |
| 599 | + 'centralnotice-edit-notice' => 'Рэдагаваць кампанію', |
| 600 | + 'centralnotice-add-template' => 'Дадаць паведамленьне', |
| 601 | + 'centralnotice-show-notices' => 'Паказаць кампаніі', |
| 602 | + 'centralnotice-list-templates' => 'Сьпіс паведамленьняў', |
| 603 | + 'centralnotice-multiple_languages' => 'некалькі ($1)', |
554 | 604 | 'centralnotice-translations' => 'Пераклады', |
555 | 605 | 'centralnotice-translate-to' => 'Пераклад на', |
556 | 606 | 'centralnotice-translate' => 'Пераклад', |
557 | 607 | 'centralnotice-english' => 'Ангельская', |
558 | | - 'centralnotice-template-name' => 'Назва шаблёну', |
559 | | - 'centralnotice-templates' => 'Шаблёны', |
| 608 | + 'centralnotice-banner-name' => 'Назва паведамленьня', |
| 609 | + 'centralnotice-banner' => 'Паведамленьне', |
| 610 | + 'centralnotice-banner-heading' => 'Банэр: $1', |
| 611 | + 'centralnotice-templates' => 'Паведамленьні', |
560 | 612 | 'centralnotice-weight' => 'Вага', |
561 | 613 | 'centralnotice-locked' => 'Заблякаваны', |
562 | | - 'centralnotice-notices' => 'Паведамленьні', |
563 | | - 'centralnotice-notice-exists' => 'Паведамленьне ўжо існуе. |
564 | | -Новае не было дададзенае', |
565 | | - 'centralnotice-template-exists' => 'Шаблён ужо існуе. |
566 | | -Новы шаблён ня быў дададзены', |
567 | | - 'centralnotice-notice-doesnt-exist' => 'Паведамленьне не існуе. |
| 614 | + 'centralnotice-notice' => 'Кампанія', |
| 615 | + 'centralnotice-notice-heading' => 'Кампанія: $1', |
| 616 | + 'centralnotice-notices' => 'Кампаніі', |
| 617 | + 'centralnotice-notice-exists' => 'Кампанія ўжо існуе. |
| 618 | +Новая не дададзеная.', |
| 619 | + 'centralnotice-no-language' => 'Для кампаніі ня выбраная мова. Не дададзеная.', |
| 620 | + 'centralnotice-template-exists' => 'Паведамленьне ужо існуе. |
| 621 | +Новае паведамленьне не дададзенае.', |
| 622 | + 'centralnotice-notice-doesnt-exist' => 'Кампанія не існуе.', |
| 623 | + 'centralnotice-remove-notice-doesnt-exist' => 'Кампанія не існуе. |
568 | 624 | Няма чаго выдаляць', |
569 | | - 'centralnotice-template-still-bound' => 'Шаблён па-ранейшаму зьвязаны з паведамленьнем. |
| 625 | + 'centralnotice-template-still-bound' => 'Паведамленьне па-ранейшаму зьвязанае з кампаніяй. |
570 | 626 | Не выдаляецца.', |
571 | | - 'centralnotice-template-body' => 'Зьмест шаблёну:', |
| 627 | + 'centralnotice-template-body' => 'Зьмест паведамленьня:', |
572 | 628 | 'centralnotice-day' => 'Дзень', |
573 | 629 | 'centralnotice-year' => 'Год', |
574 | 630 | 'centralnotice-month' => 'Месяц', |
575 | 631 | 'centralnotice-hours' => 'Гадзіна', |
576 | 632 | 'centralnotice-min' => 'Хвіліна', |
577 | 633 | 'centralnotice-project-lang' => 'Мова праекту', |
| 634 | + 'centralnotice-select' => 'Выбраць: $1', |
| 635 | + 'centralnotice-top-ten-languages' => '10 моваў', |
578 | 636 | 'centralnotice-project-name' => 'Назва праекту', |
579 | 637 | 'centralnotice-start-date' => 'Дата пачатку', |
580 | 638 | 'centralnotice-start-time' => 'Час пачатку (UTC)', |
581 | | - 'centralnotice-assigned-templates' => 'Прызначаныя шаблёны', |
582 | | - 'centralnotice-no-templates' => 'Шаблёны ня знойдзеныя. |
| 639 | + 'centralnotice-assigned-templates' => 'Прызначаныя паведамленьні', |
| 640 | + 'centralnotice-no-templates' => 'Паведамленьні ня знойдзеныя. |
583 | 641 | Дадайце якія-небудзь!', |
584 | | - 'centralnotice-no-templates-assigned' => 'Няма зьвязаных з паведамленьнем шаблёнаў. |
585 | | -Дадайце які-небудзь!', |
586 | | - 'centralnotice-available-templates' => 'Даступныя шаблёны', |
587 | | - 'centralnotice-template-already-exists' => 'Шаблён ужо выкарыстоўваецца ў кампаніі. |
588 | | -Ня быў дададзены', |
589 | | - 'centralnotice-preview-template' => 'Папярэдні прагляд шаблёну', |
590 | | - 'centralnotice-start-hour' => 'Час пачатку', |
| 642 | + 'centralnotice-no-templates-assigned' => 'Няма зьвязаных з кампаніяй паведамленьняў. |
| 643 | +Дадайце якое-небудзь!', |
| 644 | + 'centralnotice-available-templates' => 'Даступныя паведамленьні', |
| 645 | + 'centralnotice-template-already-exists' => 'Паведамленьне ужо выкарыстоўваецца ў кампаніі. |
| 646 | +Не дададзенае.', |
| 647 | + 'centralnotice-preview-template' => 'Папярэдні прагляд паведамленьня', |
| 648 | + 'centralnotice-start-hour' => 'Час пачатку (GMT)', |
591 | 649 | 'centralnotice-change-lang' => 'Зьмяніць мову перакладу', |
592 | 650 | 'centralnotice-weights' => 'Вагі', |
593 | | - 'centralnotice-notice-is-locked' => 'Паведамленьне заблякаванае. |
594 | | -Не выдаляецца', |
595 | | - 'centralnotice-overlap' => 'Час паведамленьня перакрываецца часам іншага паведамленьня. |
596 | | -Новае паведамленьне не было дададзенае', |
| 651 | + 'centralnotice-notice-is-locked' => 'Кампанія заблякаванае. |
| 652 | +Не выдаляецца.', |
| 653 | + 'centralnotice-overlap' => 'Час кампаніі перакрываецца часам іншай кампаніі. |
| 654 | +Не дададзеная.', |
597 | 655 | 'centralnotice-invalid-date-range' => 'Няслушны дыяпазон датаў. |
598 | 656 | Не абнаўляецца', |
599 | 657 | 'centralnotice-null-string' => 'Немагчыма дадаць пусты радок. |
600 | 658 | Не дадаецца', |
601 | 659 | 'centralnotice-confirm-delete' => 'Вы ўпэўнены, што жадаеце выдаліць гэты элемэнт? |
602 | 660 | Гэта дзеяньне немагчыма будзе адмяніць.', |
603 | | - 'centralnotice-no-notices-exist' => 'Паведамленьняў няма. |
604 | | -Дадайце адно ніжэй', |
605 | | - 'centralnotice-no-templates-translate' => 'Няма шаблёнаў для рэдагаваньня перакладаў для', |
| 661 | + 'centralnotice-no-notices-exist' => 'Кампаніяў няма. |
| 662 | +Дадайце адну ніжэй.', |
| 663 | + 'centralnotice-no-templates-translate' => 'Няма паведамленьняў для рэдагаваньня перакладаў', |
606 | 664 | 'centralnotice-number-uses' => 'Выкарыстоўвае', |
607 | | - 'centralnotice-edit-template' => 'Рэдагаваць шаблён', |
| 665 | + 'centralnotice-edit-template' => 'Рэдагаваць паведамленьне', |
| 666 | + 'centralnotice-edit-template-summary' => 'Каб стварыць лякалізуемае паведамленьне, атачыце дэфісны радок у тры фігурныя дужкі, напрыклад, {{{цытата-джымба}}}.', |
608 | 667 | 'centralnotice-message' => 'Паведамленьне', |
609 | 668 | 'centralnotice-message-not-set' => 'Паведамленьне не ўсталяванае', |
610 | 669 | 'centralnotice-clone' => 'Копія', |
611 | | - 'centralnotice-clone-notice' => 'Стварыць копію шаблёну', |
612 | | - 'centralnotice-preview-all-template-translations' => 'Праглядзець усе даступныя пераклады шаблёну', |
| 670 | + 'centralnotice-clone-notice' => 'Стварыць копію паведамленьня', |
| 671 | + 'centralnotice-clone-name' => 'Назва:', |
| 672 | + 'centralnotice-preview-all-template-translations' => 'Праглядзець усе даступныя пераклады паведамленьня', |
| 673 | + 'centralnotice-insert' => 'Уставіць: $1', |
| 674 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} кнопку', |
| 675 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} кнопку', |
| 676 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} кнопку', |
| 677 | + 'centralnotice-translate-button' => 'Кнопка дапамогі ў перакладзе', |
| 678 | + 'centralnotice-donate-button' => 'Кнопка ахвяраваньняў', |
| 679 | + 'centralnotice-expanded-banner' => 'Разгорнуты банэр', |
| 680 | + 'centralnotice-collapsed-banner' => 'Згорнуты банэр', |
| 681 | + 'centralnotice-banner-display' => 'Паказваць у:', |
| 682 | + 'centralnotice-banner-anonymous' => 'Ананімныя ўдзельнікі', |
| 683 | + 'centralnotice-banner-logged-in' => 'Удзельнікі:', |
| 684 | + 'centralnotice-banner-type' => 'Тып банэра:', |
| 685 | + 'centralnotice-banner-hidable' => 'Фіксаваны / Хаваемы', |
| 686 | + 'centralnotice-banner-collapsible' => 'Згортваемы', |
613 | 687 | 'right-centralnotice-admin' => 'Кіраваньне цэнтральнымі паведамленьнямі', |
614 | 688 | 'right-centralnotice-translate' => 'пераклад цэнтралізаваных паведамленьняў', |
615 | 689 | 'action-centralnotice-admin' => 'кіраваньне цэнтралізаванымі паведамленьнямі', |
— | — | @@ -647,7 +721,7 @@ |
648 | 722 | 'centralnotice-translate-to' => 'Превеждане на', |
649 | 723 | 'centralnotice-translate' => 'Превеждане', |
650 | 724 | 'centralnotice-english' => 'Английски', |
651 | | - 'centralnotice-template-name' => 'Име на шаблона', |
| 725 | + 'centralnotice-banner-name' => 'Име на шаблона', |
652 | 726 | 'centralnotice-templates' => 'Шаблони', |
653 | 727 | 'centralnotice-weight' => 'Тежест', |
654 | 728 | 'centralnotice-locked' => 'Заключено', |
— | — | @@ -705,7 +779,7 @@ |
706 | 780 | 'centralnotice-translate-to' => 'যে ভাষায় অনুবাদ করা হচ্ছে তা হল', |
707 | 781 | 'centralnotice-translate' => 'অনুবাদ', |
708 | 782 | 'centralnotice-english' => 'ইংরেজি', |
709 | | - 'centralnotice-template-name' => 'টেম্পলেটের নাম', |
| 783 | + 'centralnotice-banner-name' => 'টেম্পলেটের নাম', |
710 | 784 | 'centralnotice-templates' => 'টেম্পলেট', |
711 | 785 | 'centralnotice-weight' => 'ওজন', |
712 | 786 | 'centralnotice-locked' => 'অবরুদ্ধ', |
— | — | @@ -766,6 +840,7 @@ |
767 | 841 | /** Breton (Brezhoneg) |
768 | 842 | * @author Fohanno |
769 | 843 | * @author Fulup |
| 844 | + * @author Gwendal |
770 | 845 | * @author Y-M D |
771 | 846 | */ |
772 | 847 | $messages['br'] = array( |
— | — | @@ -793,7 +868,8 @@ |
794 | 869 | 'centralnotice-translate-to' => 'Treiñ e', |
795 | 870 | 'centralnotice-translate' => 'Treiñ', |
796 | 871 | 'centralnotice-english' => 'Saozneg', |
797 | | - 'centralnotice-template-name' => 'Anv ar patrom', |
| 872 | + 'centralnotice-banner-name' => 'Anv ar patrom', |
| 873 | + 'centralnotice-banner' => 'Giton', |
798 | 874 | 'centralnotice-templates' => 'Patromoù', |
799 | 875 | 'centralnotice-weight' => 'Pouez', |
800 | 876 | 'centralnotice-locked' => 'Prennet', |
— | — | @@ -804,6 +880,8 @@ |
805 | 881 | N'eo ket bet ouzhpennet.", |
806 | 882 | 'centralnotice-notice-doesnt-exist' => "N'eus ket seus an ali-mañ. |
807 | 883 | N'eus netra da zilemel", |
| 884 | + 'centralnotice-remove-notice-doesnt-exist' => "N'eus ket seus an ali-mañ. |
| 885 | +N'eus netra da zilemel", |
808 | 886 | 'centralnotice-template-still-bound' => "Liammet eo c'hoazh ar patrom gant un ali. |
809 | 887 | N'eo ket bet dilammet.", |
810 | 888 | 'centralnotice-template-body' => 'Korf ar patrom :', |
— | — | @@ -813,6 +891,8 @@ |
814 | 892 | 'centralnotice-hours' => 'Eur', |
815 | 893 | 'centralnotice-min' => 'Munutenn', |
816 | 894 | 'centralnotice-project-lang' => 'Yezh ar raktres', |
| 895 | + 'centralnotice-select' => 'Diuzit : $1', |
| 896 | + 'centralnotice-top-ten-languages' => 'An 10 yezh implijetañ', |
817 | 897 | 'centralnotice-project-name' => 'Anv ar raktres', |
818 | 898 | 'centralnotice-start-date' => 'Deiziad kregiñ', |
819 | 899 | 'centralnotice-start-time' => 'Eur kregiñ (UTC)', |
— | — | @@ -825,7 +905,7 @@ |
826 | 906 | 'centralnotice-template-already-exists' => "Liammet eo c'hoazh ar patrom gant ur c'houlzad. |
827 | 907 | N'eo ket bet ouzhpennet.", |
828 | 908 | 'centralnotice-preview-template' => 'Rakwelet ar patrom', |
829 | | - 'centralnotice-start-hour' => 'Eurvezh kregiñ', |
| 909 | + 'centralnotice-start-hour' => 'Eurvezh kregiñ (GMT)', |
830 | 910 | 'centralnotice-change-lang' => 'Cheñch yezh an droidigezh', |
831 | 911 | 'centralnotice-weights' => 'Pouezioù', |
832 | 912 | 'centralnotice-notice-is-locked' => "Prenet eo an ali. |
— | — | @@ -843,11 +923,23 @@ |
844 | 924 | 'centralnotice-no-templates-translate' => "N'eus patrom ebet da dreiñ", |
845 | 925 | 'centralnotice-number-uses' => 'Implijoù', |
846 | 926 | 'centralnotice-edit-template' => 'Kemmañ ar patrom', |
| 927 | + 'centralnotice-edit-template-summary' => "Da grouiñ ur gemennadenn da vezañ lec'helaet, enklozañ un neudennad gant ur varrennig-stagañ etre teir briataenn, da skouer {{{jimbo-quote}}}.", |
847 | 928 | 'centralnotice-message' => 'Kemennadenn', |
848 | 929 | 'centralnotice-message-not-set' => "N'eo ket bet savet ar gemennadenn", |
849 | 930 | 'centralnotice-clone' => 'Eilañ', |
850 | 931 | 'centralnotice-clone-notice' => 'Krouiñ un eiladenn eus ar patrom', |
| 932 | + 'centralnotice-clone-name' => 'Anv :', |
851 | 933 | 'centralnotice-preview-all-template-translations' => 'Rakwellit an holl droidigezhioù a zo evit ar patrom-mañ', |
| 934 | + 'centralnotice-insert' => "Ensoc'hañ : $1", |
| 935 | + 'centralnotice-hide-button' => 'Bouton {{int:centralnotice-shared-hide}}', |
| 936 | + 'centralnotice-collapse-button' => 'Bouton {{int:centralnotice-shared-collapse}}', |
| 937 | + 'centralnotice-expand-button' => 'Bouton {{int:centralnotice-shared-expand}}', |
| 938 | + 'centralnotice-translate-button' => 'Bouton sikour evit an droidigezh', |
| 939 | + 'centralnotice-donate-button' => 'Bouton donezonadur', |
| 940 | + 'centralnotice-banner-anonymous' => 'Implijerien dizanv', |
| 941 | + 'centralnotice-banner-logged-in' => 'Implijerien kevreet', |
| 942 | + 'centralnotice-banner-hidable' => 'Statek/Masklus', |
| 943 | + 'centralnotice-banner-collapsible' => 'Digreskus', |
852 | 944 | 'right-centralnotice-admin' => 'Merañ an alioù kreiz', |
853 | 945 | 'right-centralnotice-translate' => 'Treiñ an alioù kreiz', |
854 | 946 | 'action-centralnotice-admin' => 'merañ an alioù kreiz', |
— | — | @@ -883,17 +975,17 @@ |
884 | 976 | 'centralnotice-translate-to' => 'Prevedi na', |
885 | 977 | 'centralnotice-translate' => 'Prijevod', |
886 | 978 | 'centralnotice-english' => 'engleski jezik', |
887 | | - 'centralnotice-template-name' => 'Naslov šablona', |
| 979 | + 'centralnotice-banner-name' => 'Naslov šablona', |
888 | 980 | 'centralnotice-templates' => 'Šabloni', |
889 | 981 | 'centralnotice-weight' => 'Težina', |
890 | 982 | 'centralnotice-locked' => 'Zaključano', |
| 983 | + 'centralnotice-notice-heading' => 'Kampanja: $1', |
891 | 984 | 'centralnotice-notices' => 'Obavještenja', |
892 | 985 | 'centralnotice-notice-exists' => 'Obavještenje već postoji. |
893 | 986 | Ne može se dodati', |
894 | 987 | 'centralnotice-template-exists' => 'Šablon već postoji. |
895 | 988 | Ne dodaje se', |
896 | | - 'centralnotice-notice-doesnt-exist' => 'Obavještenje ne postoji. |
897 | | -Ništa se ne uklanja', |
| 989 | + 'centralnotice-notice-doesnt-exist' => 'Kampanja ne postoji.', |
898 | 990 | 'centralnotice-template-still-bound' => 'Šablon je još uvijek povezan sa obavještenje. |
899 | 991 | Ne uklanja se', |
900 | 992 | 'centralnotice-template-body' => 'Tijelo šablona:', |
— | — | @@ -915,7 +1007,7 @@ |
916 | 1008 | 'centralnotice-template-already-exists' => 'Šablon je već povezan sa kampanjom. |
917 | 1009 | Ne dodaje se', |
918 | 1010 | 'centralnotice-preview-template' => 'Izgled šablona', |
919 | | - 'centralnotice-start-hour' => 'Vrijeme početka', |
| 1011 | + 'centralnotice-start-hour' => 'Početno vrijeme (UTC)', |
920 | 1012 | 'centralnotice-change-lang' => 'Promjena jezika prijevoda', |
921 | 1013 | 'centralnotice-weights' => 'Težina', |
922 | 1014 | 'centralnotice-notice-is-locked' => 'Obavještenje je zaključano. |
— | — | @@ -937,7 +1029,9 @@ |
938 | 1030 | 'centralnotice-message-not-set' => 'Poruka nije postavljena', |
939 | 1031 | 'centralnotice-clone' => 'Klon', |
940 | 1032 | 'centralnotice-clone-notice' => 'Pravi kopiju šablona', |
| 1033 | + 'centralnotice-clone-name' => 'Ime:', |
941 | 1034 | 'centralnotice-preview-all-template-translations' => 'Pregled svih dostupnih prijevoda za šablon', |
| 1035 | + 'centralnotice-insert' => 'Ubaci: $1', |
942 | 1036 | 'right-centralnotice-admin' => 'Uređivanje središnjeg obavještenja', |
943 | 1037 | 'right-centralnotice-translate' => 'Prevođenje središnjeg obavještenja', |
944 | 1038 | 'action-centralnotice-admin' => 'uređujete središnje obavještenje', |
— | — | @@ -979,7 +1073,7 @@ |
980 | 1074 | 'centralnotice-translate-to' => 'Tradueix a', |
981 | 1075 | 'centralnotice-translate' => 'Tradueix', |
982 | 1076 | 'centralnotice-english' => 'Anglès', |
983 | | - 'centralnotice-template-name' => 'Nom de la plantilla', |
| 1077 | + 'centralnotice-banner-name' => 'Nom de la plantilla', |
984 | 1078 | 'centralnotice-templates' => 'Plantilles', |
985 | 1079 | 'centralnotice-weight' => 'Pes', |
986 | 1080 | 'centralnotice-locked' => 'Bloquejat', |
— | — | @@ -1040,6 +1134,11 @@ |
1041 | 1135 | 'centralnotice-preferred' => 'Preferit', |
1042 | 1136 | ); |
1043 | 1137 | |
| 1138 | +/** Sorani (کوردی) */ |
| 1139 | +$messages['ckb'] = array( |
| 1140 | + 'centralnotice-modify' => 'ناردن', |
| 1141 | +); |
| 1142 | + |
1044 | 1143 | /** Czech (Česky) |
1045 | 1144 | * @author Danny B. |
1046 | 1145 | * @author Li-sung |
— | — | @@ -1056,28 +1155,39 @@ |
1057 | 1156 | 'centralnotice-end-date' => 'Datum konce', |
1058 | 1157 | 'centralnotice-enabled' => 'Zapnuto', |
1059 | 1158 | 'centralnotice-modify' => 'Odeslat', |
| 1159 | + 'centralnotice-save-banner' => 'Uložit banner', |
1060 | 1160 | 'centralnotice-preview' => 'Náhled', |
1061 | 1161 | 'centralnotice-add-new' => 'Přidat nové centrální oznámení', |
1062 | 1162 | 'centralnotice-remove' => 'Odstranit', |
1063 | 1163 | 'centralnotice-translate-heading' => 'Překlad šablony „$1“', |
1064 | 1164 | 'centralnotice-manage' => 'Spravovat centralizovaná oznámení', |
| 1165 | + 'centralnotice-manage-templates' => 'Správa bannerů', |
1065 | 1166 | 'centralnotice-add' => 'Přidat', |
1066 | 1167 | 'centralnotice-add-notice' => 'Přidat oznámení', |
| 1168 | + 'centralnotice-edit-notice' => 'Upravit kampaň', |
1067 | 1169 | 'centralnotice-add-template' => 'Přidat šablonu', |
1068 | 1170 | 'centralnotice-show-notices' => 'Zobrazit oznámení', |
1069 | 1171 | 'centralnotice-list-templates' => 'Seznam šablon', |
| 1172 | + 'centralnotice-multiple_languages' => 'více ($1)', |
1070 | 1173 | 'centralnotice-translations' => 'Překlady', |
1071 | 1174 | 'centralnotice-translate-to' => 'Přeložit do jazyka', |
1072 | 1175 | 'centralnotice-translate' => 'Přeložit', |
1073 | 1176 | 'centralnotice-english' => 'Anglicky', |
1074 | | - 'centralnotice-template-name' => 'Název šablony', |
| 1177 | + 'centralnotice-banner-name' => 'Název šablony', |
| 1178 | + 'centralnotice-banner' => 'Banner', |
| 1179 | + 'centralnotice-banner-heading' => 'Banner: $1', |
1075 | 1180 | 'centralnotice-templates' => 'Šablony', |
1076 | 1181 | 'centralnotice-weight' => 'Váha', |
1077 | 1182 | 'centralnotice-locked' => 'Uzamčeno', |
| 1183 | + 'centralnotice-notice' => 'Kampaň', |
| 1184 | + 'centralnotice-notice-heading' => 'Kampaň: $1', |
1078 | 1185 | 'centralnotice-notices' => 'Oznámení', |
1079 | 1186 | 'centralnotice-notice-exists' => 'Oznámení už existuje. Nepřidáno.', |
| 1187 | + 'centralnotice-no-language' => 'Pro kampaň nebyl vybrán žádný jazyk. Oznámení nebylo přidáno.', |
1080 | 1188 | 'centralnotice-template-exists' => 'Šablona už existuje. Nepřidána.', |
1081 | | - 'centralnotice-notice-doesnt-exist' => 'Oznámení neexistuje. Není co odstranit.', |
| 1189 | + 'centralnotice-notice-doesnt-exist' => 'Kampaň neexistuje.', |
| 1190 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampaň neexistuje. |
| 1191 | +Není co odstranit.', |
1082 | 1192 | 'centralnotice-template-still-bound' => 'Šablona je stále navázána na oznámení. Nebude odstraněna.', |
1083 | 1193 | 'centralnotice-template-body' => 'Tělo šablony:', |
1084 | 1194 | 'centralnotice-day' => 'Den', |
— | — | @@ -1086,6 +1196,8 @@ |
1087 | 1197 | 'centralnotice-hours' => 'Hodiny', |
1088 | 1198 | 'centralnotice-min' => 'Minuty', |
1089 | 1199 | 'centralnotice-project-lang' => 'Jazyk projektu', |
| 1200 | + 'centralnotice-select' => 'Vybrat: $1', |
| 1201 | + 'centralnotice-top-ten-languages' => '10 největších jazyků', |
1090 | 1202 | 'centralnotice-project-name' => 'Název projektu', |
1091 | 1203 | 'centralnotice-start-date' => 'Datum začátku', |
1092 | 1204 | 'centralnotice-start-time' => 'Čas začátku (UTC)', |
— | — | @@ -1096,7 +1208,7 @@ |
1097 | 1209 | 'centralnotice-template-already-exists' => 'Šablona už byla s kampaní svázána. |
1098 | 1210 | Nebude přidána.', |
1099 | 1211 | 'centralnotice-preview-template' => 'Náhled šablony', |
1100 | | - 'centralnotice-start-hour' => 'Čas začátku', |
| 1212 | + 'centralnotice-start-hour' => 'Čas začátku (GMT)', |
1101 | 1213 | 'centralnotice-change-lang' => 'Změnit překládaný jazyk', |
1102 | 1214 | 'centralnotice-weights' => 'Váhy', |
1103 | 1215 | 'centralnotice-notice-is-locked' => 'Oznámení je uzamčeno. Nebude odstraněno.', |
— | — | @@ -1110,11 +1222,27 @@ |
1111 | 1223 | 'centralnotice-no-templates-translate' => 'Nejsou žádné šablony, které by šlo přeložit', |
1112 | 1224 | 'centralnotice-number-uses' => 'Použití', |
1113 | 1225 | 'centralnotice-edit-template' => 'Upravit šablonu', |
| 1226 | + 'centralnotice-edit-template-summary' => 'Lokalizovatelnou zprávu vytvoříte uzavřením identifikátoru se spojovníky do složených závorek, např. {{{citát-jimbo}}}.', |
1114 | 1227 | 'centralnotice-message' => 'Zpráva', |
1115 | 1228 | 'centralnotice-message-not-set' => 'Zpráva nebyla nastavena', |
1116 | 1229 | 'centralnotice-clone' => 'Naklonovat', |
1117 | 1230 | 'centralnotice-clone-notice' => 'Vytvořit kopii šablony', |
| 1231 | + 'centralnotice-clone-name' => 'Název:', |
1118 | 1232 | 'centralnotice-preview-all-template-translations' => 'Náhled všech dostupných překladů šablony', |
| 1233 | + 'centralnotice-insert' => 'Vložit: $1', |
| 1234 | + 'centralnotice-hide-button' => 'Tlačítko „{{int:centralnotice-shared-hide}}“', |
| 1235 | + 'centralnotice-collapse-button' => 'Tlačítko „{{int:centralnotice-shared-collapse}}“', |
| 1236 | + 'centralnotice-expand-button' => 'Tlačítko „{{int:centralnotice-shared-expand}}“', |
| 1237 | + 'centralnotice-translate-button' => 'Tlačítko „Pomozte s překladem“', |
| 1238 | + 'centralnotice-donate-button' => 'Tlačítko „Přispějte“', |
| 1239 | + 'centralnotice-expanded-banner' => 'Rozbalený banner', |
| 1240 | + 'centralnotice-collapsed-banner' => 'Sbalený banner', |
| 1241 | + 'centralnotice-banner-display' => 'Zobrazovat:', |
| 1242 | + 'centralnotice-banner-anonymous' => 'Anonymním uživatelům', |
| 1243 | + 'centralnotice-banner-logged-in' => 'Přihlášeným uživatelům', |
| 1244 | + 'centralnotice-banner-type' => 'Typ banneru:', |
| 1245 | + 'centralnotice-banner-hidable' => 'Statický/skrývatelný', |
| 1246 | + 'centralnotice-banner-collapsible' => 'Sbalitelný', |
1119 | 1247 | 'right-centralnotice-admin' => 'Správa centralizovaných oznámení', |
1120 | 1248 | 'right-centralnotice-translate' => 'Překlad centralizovaných oznámení', |
1121 | 1249 | 'action-centralnotice-admin' => 'spravovat centralizovaná oznámení', |
— | — | @@ -1124,6 +1252,7 @@ |
1125 | 1253 | |
1126 | 1254 | /** Welsh (Cymraeg) |
1127 | 1255 | * @author Lloffiwr |
| 1256 | + * @author Xxglennxx |
1128 | 1257 | */ |
1129 | 1258 | $messages['cy'] = array( |
1130 | 1259 | 'centralnotice' => "Gweinyddu'r hysbysiad canolog", |
— | — | @@ -1150,15 +1279,19 @@ |
1151 | 1280 | 'centralnotice-translate-to' => "Cyfieithu i'r", |
1152 | 1281 | 'centralnotice-translate' => 'Cyfieithu', |
1153 | 1282 | 'centralnotice-english' => 'Saesneg', |
1154 | | - 'centralnotice-template-name' => "Enw'r nodyn", |
| 1283 | + 'centralnotice-banner-name' => "Enw'r nodyn", |
1155 | 1284 | 'centralnotice-templates' => 'Nodiadau', |
1156 | 1285 | 'centralnotice-weight' => 'Pwys', |
1157 | 1286 | 'centralnotice-locked' => 'Ar glo', |
1158 | 1287 | 'centralnotice-notices' => 'Hysbysiadau', |
1159 | 1288 | 'centralnotice-notice-exists' => "Mae'r hysbysiad eisoes ar gael. |
1160 | 1289 | Ni chaiff ei ychwanegu", |
1161 | | - 'centralnotice-notice-doesnt-exist' => "Nid yw'r hysbysiad ar gael. |
1162 | | -Dim i gael gwared ohono", |
| 1290 | + 'centralnotice-template-exists' => "Mae'r faner yn bodoli'n barod. |
| 1291 | +Ddim yn ychwanegu", |
| 1292 | + 'centralnotice-notice-doesnt-exist' => "Nid yw'r ymgyrch i gael.", |
| 1293 | + 'centralnotice-template-still-bound' => "Mae'r faner yn perthyn i ymgyrch o hyd. |
| 1294 | +Ddim yn tynnu.", |
| 1295 | + 'centralnotice-template-body' => 'Corff y faner:', |
1163 | 1296 | 'centralnotice-day' => 'Dydd', |
1164 | 1297 | 'centralnotice-year' => 'Blwyddyn', |
1165 | 1298 | 'centralnotice-month' => 'Mis', |
— | — | @@ -1168,6 +1301,8 @@ |
1169 | 1302 | 'centralnotice-project-name' => "Enw'r prosiect", |
1170 | 1303 | 'centralnotice-start-date' => 'Dyddiad cychwyn', |
1171 | 1304 | 'centralnotice-start-time' => 'Amser cychwyn (UTC)', |
| 1305 | + 'centralnotice-no-templates' => 'Ni chanfuwyd unrhyw faner. |
| 1306 | +Ychwanegu rhai!', |
1172 | 1307 | 'centralnotice-start-hour' => 'Amser dechrau', |
1173 | 1308 | 'centralnotice-weights' => 'Pwysau', |
1174 | 1309 | 'centralnotice-notice-is-locked' => "Mae'r hysbysiad wedi ei gloi. |
— | — | @@ -1192,7 +1327,7 @@ |
1193 | 1328 | 'centralnotice-preview' => 'Forhåndsvisning', |
1194 | 1329 | 'centralnotice-add' => 'Tilføj', |
1195 | 1330 | 'centralnotice-english' => 'Engelsk', |
1196 | | - 'centralnotice-template-name' => 'Skabelonnavn', |
| 1331 | + 'centralnotice-banner-name' => 'Skabelonnavn', |
1197 | 1332 | 'centralnotice-templates' => 'Skabeloner', |
1198 | 1333 | 'centralnotice-locked' => 'Låst', |
1199 | 1334 | 'centralnotice-day' => 'Dag', |
— | — | @@ -1210,15 +1345,18 @@ |
1211 | 1346 | ); |
1212 | 1347 | |
1213 | 1348 | /** German (Deutsch) |
| 1349 | + * @author Kghbln |
| 1350 | + * @author McDutchie |
1214 | 1351 | * @author Metalhead64 |
1215 | 1352 | * @author Purodha |
1216 | 1353 | * @author Raimond Spekking |
| 1354 | + * @author The Evil IP address |
1217 | 1355 | * @author Umherirrender |
1218 | 1356 | */ |
1219 | 1357 | $messages['de'] = array( |
1220 | | - 'centralnotice' => 'Administrierung der zentralen Meldungen', |
1221 | | - 'noticetemplate' => 'Zentrale Meldungs-Vorlage', |
1222 | | - 'centralnotice-desc' => "Fügt eine zentrale ''sitenotice'' hinzu", |
| 1358 | + 'centralnotice' => 'Verwaltung zentraler Meldungen', |
| 1359 | + 'noticetemplate' => 'Vorlage für die zentrale Meldung', |
| 1360 | + 'centralnotice-desc' => 'Ermöglicht es, zentrale Meldungen für das Wiki zu erstellen', |
1223 | 1361 | 'centralnotice-summary' => 'Diese Erweiterung erlaubt die Konfiguration zentraler Meldungen. |
1224 | 1362 | Sie kann auch zur Erstellung neuer und Löschung alter Meldungen verwendet werden.', |
1225 | 1363 | 'centralnotice-query' => 'Aktuelle Meldung ändern', |
— | — | @@ -1226,31 +1364,41 @@ |
1227 | 1365 | 'centralnotice-end-date' => 'Enddatum', |
1228 | 1366 | 'centralnotice-enabled' => 'Aktiviert', |
1229 | 1367 | 'centralnotice-modify' => 'OK', |
| 1368 | + 'centralnotice-save-banner' => 'Banner speichern', |
1230 | 1369 | 'centralnotice-preview' => 'Vorschau', |
1231 | 1370 | 'centralnotice-add-new' => 'Füge eine neue zentrale Meldung hinzu', |
1232 | 1371 | 'centralnotice-remove' => 'Entfernen', |
1233 | 1372 | 'centralnotice-translate-heading' => 'Übersetzung von „$1“', |
1234 | 1373 | 'centralnotice-manage' => 'Zentrale Meldungen verwalten', |
| 1374 | + 'centralnotice-manage-templates' => 'Banner verwalten', |
1235 | 1375 | 'centralnotice-add' => 'Hinzufügen', |
1236 | 1376 | 'centralnotice-add-notice' => 'Hinzufügen einer Meldung', |
| 1377 | + 'centralnotice-edit-notice' => 'Meldung bearbeiten', |
1237 | 1378 | 'centralnotice-add-template' => 'Hinzufügen einer Vorlage', |
1238 | 1379 | 'centralnotice-show-notices' => 'Zeige Meldungen', |
1239 | 1380 | 'centralnotice-list-templates' => 'Vorlagen auflisten', |
| 1381 | + 'centralnotice-multiple_languages' => 'mehrere ($1)', |
1240 | 1382 | 'centralnotice-translations' => 'Übersetzungen', |
1241 | 1383 | 'centralnotice-translate-to' => 'Übersetzen in', |
1242 | 1384 | 'centralnotice-translate' => 'Übersetzen', |
1243 | 1385 | 'centralnotice-english' => 'Englisch', |
1244 | | - 'centralnotice-template-name' => 'Name der Vorlage', |
| 1386 | + 'centralnotice-banner-name' => 'Name der Vorlage', |
| 1387 | + 'centralnotice-banner' => 'Vorlage', |
| 1388 | + 'centralnotice-banner-heading' => 'Vorlage: $1', |
1245 | 1389 | 'centralnotice-templates' => 'Vorlagen', |
1246 | 1390 | 'centralnotice-weight' => 'Gewicht', |
1247 | 1391 | 'centralnotice-locked' => 'Gesperrt', |
| 1392 | + 'centralnotice-notice' => 'Meldung', |
| 1393 | + 'centralnotice-notice-heading' => 'Meldung: $1', |
1248 | 1394 | 'centralnotice-notices' => 'Meldungen', |
1249 | 1395 | 'centralnotice-notice-exists' => 'Meldung ist bereits vorhanden. |
1250 | | -Nicht hinzugefügt.', |
| 1396 | +Sie wird daher nicht hinzugefügt.', |
| 1397 | + 'centralnotice-no-language' => 'Für die Meldung wurde keine Sprache ausgewählt. Sie wird daher nicht hinzugefügt.', |
1251 | 1398 | 'centralnotice-template-exists' => 'Vorlage ist bereits vorhanden. |
1252 | | -Nicht hinzugefügt.', |
1253 | | - 'centralnotice-notice-doesnt-exist' => 'Meldung ist nicht vorhanden. |
1254 | | -Entfernung nicht möglich.', |
| 1399 | +Sie wird daher nicht hinzugefügt.', |
| 1400 | + 'centralnotice-notice-doesnt-exist' => 'Meldung ist nicht vorhanden.', |
| 1401 | + 'centralnotice-remove-notice-doesnt-exist' => 'Die Meldung ist nicht vorhanden. |
| 1402 | +Entfernen nicht möglich.', |
1255 | 1403 | 'centralnotice-template-still-bound' => 'Vorlage ist noch an eine Meldung gebunden. |
1256 | 1404 | Entfernung nicht möglich.', |
1257 | 1405 | 'centralnotice-template-body' => 'Vorlagentext:', |
— | — | @@ -1260,53 +1408,75 @@ |
1261 | 1409 | 'centralnotice-hours' => 'Stunde', |
1262 | 1410 | 'centralnotice-min' => 'Minute', |
1263 | 1411 | 'centralnotice-project-lang' => 'Projektsprache', |
| 1412 | + 'centralnotice-select' => 'Auswählen: $1', |
| 1413 | + 'centralnotice-top-ten-languages' => 'Top-10-Sprachen', |
1264 | 1414 | 'centralnotice-project-name' => 'Projektname', |
1265 | 1415 | 'centralnotice-start-date' => 'Startdatum', |
1266 | 1416 | 'centralnotice-start-time' => 'Startzeit (UTC)', |
1267 | 1417 | 'centralnotice-assigned-templates' => 'Zugewiesene Vorlagen', |
1268 | | - 'centralnotice-no-templates' => 'Es sind keine Vorlagen im System vorhanden.', |
| 1418 | + 'centralnotice-no-templates' => 'Es sind keine Vorlagen gefunden worden. |
| 1419 | +Füge eine hinzu.', |
1269 | 1420 | 'centralnotice-no-templates-assigned' => 'Es sind keine Vorlagen an Meldungen zugewiesen. |
1270 | 1421 | Füge eine hinzu.', |
1271 | 1422 | 'centralnotice-available-templates' => 'Verfügbare Vorlagen', |
1272 | | - 'centralnotice-template-already-exists' => 'Vorlage ist bereits an die Kampagne gebunden. |
1273 | | -Nicht hinzugefügt.', |
| 1423 | + 'centralnotice-template-already-exists' => 'Vorlage ist bereits mit der Meldung verbunden. |
| 1424 | +Sie wird daher nicht hinzugefügt.', |
1274 | 1425 | 'centralnotice-preview-template' => 'Vorschau Vorlage', |
1275 | | - 'centralnotice-start-hour' => 'Startzeit', |
| 1426 | + 'centralnotice-start-hour' => 'Startzeit (GMT)', |
1276 | 1427 | 'centralnotice-change-lang' => 'Übersetzungssprache ändern', |
1277 | 1428 | 'centralnotice-weights' => 'Gewicht', |
1278 | 1429 | 'centralnotice-notice-is-locked' => 'Meldung ist gesperrt. |
1279 | | -Entfernung nicht möglich.', |
| 1430 | +Sie wird daher nicht entfernt.', |
1280 | 1431 | 'centralnotice-overlap' => 'Die Meldung überschneidet sich mit dem Zeitraum einer anderen Meldung. |
1281 | | -Nicht hinzugefügt.', |
| 1432 | +Sie wird daher nicht hinzugefügt.', |
1282 | 1433 | 'centralnotice-invalid-date-range' => 'Ungültiger Zeitraum. |
1283 | | -Nicht aktualisiert.', |
1284 | | - 'centralnotice-null-string' => 'Es kann kein Nullstring hinzugefügt werden. |
1285 | | -Nichts hinzugefügt.', |
| 1434 | +Er wird daher nicht aktualisiert.', |
| 1435 | + 'centralnotice-null-string' => 'Es kann keine leere Meldung hinzugefügt werden. |
| 1436 | +Sie wird daher nicht hinzugefügt.', |
1286 | 1437 | 'centralnotice-confirm-delete' => 'Bist du sicher, dass du den Eintrag löschen möchtest? |
1287 | 1438 | Die Aktion kann nicht rückgängig gemacht werden.', |
1288 | 1439 | 'centralnotice-no-notices-exist' => 'Es sind keine Meldungen vorhanden. |
1289 | 1440 | Füge eine hinzu.', |
1290 | 1441 | 'centralnotice-no-templates-translate' => 'Es gibt keine Vorlagen, für die Übersetzungen zu bearbeiten wären', |
1291 | 1442 | 'centralnotice-number-uses' => 'Nutzungen', |
| 1443 | + 'centralnotice-settings' => 'Einstellungen', |
1292 | 1444 | 'centralnotice-edit-template' => 'Vorlage bearbeiten', |
| 1445 | + 'centralnotice-edit-template-summary' => 'Um eine zu übersetzende Nachricht zu erstellen, füge einen von drei geschweiften Klammern und mit Bindestrich umgebenen Text ein, z. B. {{{jimbo-zitat}}}.', |
1293 | 1446 | 'centralnotice-message' => 'Nachricht', |
1294 | 1447 | 'centralnotice-message-not-set' => 'Nachricht nicht gesetzt', |
1295 | 1448 | 'centralnotice-clone' => 'Klon erstellen', |
1296 | 1449 | 'centralnotice-clone-notice' => 'Erstelle eine Kopie der Vorlage', |
| 1450 | + 'centralnotice-clone-name' => 'Name:', |
1297 | 1451 | 'centralnotice-preview-all-template-translations' => 'Vorschau aller verfügbaren Übersetzungen einer Vorlage', |
| 1452 | + 'centralnotice-insert' => 'Einfügen: $1', |
| 1453 | + 'centralnotice-hide-button' => 'Button {{int:centralnotice-shared-hide}}', |
| 1454 | + 'centralnotice-collapse-button' => 'Button {{int:centralnotice-shared-collapse}}', |
| 1455 | + 'centralnotice-expand-button' => 'Button {{int:centralnotice-shared-collapse}}', |
| 1456 | + 'centralnotice-translate-button' => 'Übersetzungshilfen-Button', |
| 1457 | + 'centralnotice-donate-button' => 'Spendenbutton', |
| 1458 | + 'centralnotice-expanded-banner' => 'Ausgeklappte Vorlage', |
| 1459 | + 'centralnotice-collapsed-banner' => 'Eingeklappte Vorlage', |
| 1460 | + 'centralnotice-banner-display' => 'Anzeigen für:', |
| 1461 | + 'centralnotice-banner-anonymous' => 'Unangemeldete Benutzer', |
| 1462 | + 'centralnotice-banner-logged-in' => 'Angemeldete Benutzer', |
| 1463 | + 'centralnotice-banner-type' => 'Bannertyp:', |
| 1464 | + 'centralnotice-banner-hidable' => 'Statisch/Ausblendbar', |
| 1465 | + 'centralnotice-banner-collapsible' => 'Einklappbar', |
1298 | 1466 | 'right-centralnotice-admin' => 'Zentrale Meldungen verwalten', |
1299 | 1467 | 'right-centralnotice-translate' => 'Zentrale Meldungen übersetzen', |
1300 | | - 'action-centralnotice-admin' => 'Zentrale Seitennotiz verwalten', |
| 1468 | + 'action-centralnotice-admin' => 'zentrale Meldungen verwalten', |
1301 | 1469 | 'action-centralnotice-translate' => 'Zentrale Seitennotiz übersetzen', |
1302 | 1470 | 'centralnotice-preferred' => 'Bevorzugt', |
1303 | 1471 | ); |
1304 | 1472 | |
1305 | 1473 | /** German (formal address) (Deutsch (Sie-Form)) |
1306 | 1474 | * @author Imre |
| 1475 | + * @author Kghbln |
1307 | 1476 | */ |
1308 | 1477 | $messages['de-formal'] = array( |
1309 | 1478 | 'centralnotice-confirm-delete' => 'Sind Sie sicher, dass Sie den Eintrag löschen möchten? |
1310 | 1479 | Die Aktion kann nicht rückgängig gemacht werden.', |
| 1480 | + 'centralnotice-edit-template-summary' => 'Um eine zu übersetzende Nachricht zu erstellen, fügen Sie einen von drei geschweiften Klammern und mit Bindestrich umgebenen Text ein, z. B. {{{jimbo-zitat}}}.', |
1311 | 1481 | ); |
1312 | 1482 | |
1313 | 1483 | /** Zazaki (Zazaki) |
— | — | @@ -1337,7 +1507,7 @@ |
1338 | 1508 | 'centralnotice-translate-to' => 'Ci ra çarnayîş bike', |
1339 | 1509 | 'centralnotice-translate' => 'Çarnayiş', |
1340 | 1510 | 'centralnotice-english' => 'Ingilizkî', |
1341 | | - 'centralnotice-template-name' => 'Nameyê templateyî', |
| 1511 | + 'centralnotice-banner-name' => 'Nameyê templateyî', |
1342 | 1512 | 'centralnotice-templates' => 'Templetan', |
1343 | 1513 | 'centralnotice-weight' => 'Ebat', |
1344 | 1514 | 'centralnotice-locked' => 'Kafilnaye', |
— | — | @@ -1387,6 +1557,7 @@ |
1388 | 1558 | 'centralnotice-no-templates-translate' => 'Hin templeteyan çino ke ti biçarne', |
1389 | 1559 | 'centralnotice-number-uses' => 'Ça de kar keno', |
1390 | 1560 | 'centralnotice-edit-template' => 'Template bivurne', |
| 1561 | + 'centralnotice-edit-template-summary' => 'Seba mesajanê lokali viraştişi, yew tire u hire paranatezi de bikefilne, mesela {{{jimbo-quote}}}.', |
1391 | 1562 | 'centralnotice-message' => 'Mesaj', |
1392 | 1563 | 'centralnotice-message-not-set' => 'Mesaj nişiravt', |
1393 | 1564 | 'centralnotice-clone' => 'Kopye bike', |
— | — | @@ -1413,31 +1584,41 @@ |
1414 | 1585 | 'centralnotice-end-date' => 'Kóńcny datum', |
1415 | 1586 | 'centralnotice-enabled' => 'Zmóžnjony', |
1416 | 1587 | 'centralnotice-modify' => 'Wótpósłaś', |
| 1588 | + 'centralnotice-save-banner' => 'Chórgoj składowaś', |
1417 | 1589 | 'centralnotice-preview' => 'Pśeglěd', |
1418 | 1590 | 'centralnotice-add-new' => 'Nowu centralnu powěźeńku pśidaś', |
1419 | 1591 | 'centralnotice-remove' => 'Wótwónoźeś', |
1420 | 1592 | 'centralnotice-translate-heading' => 'Pśełožk za $1', |
1421 | 1593 | 'centralnotice-manage' => 'Centralne powěźeńki zastojaś', |
| 1594 | + 'centralnotice-manage-templates' => 'Chórgoje zrědowaś', |
1422 | 1595 | 'centralnotice-add' => 'Pśidaś', |
1423 | 1596 | 'centralnotice-add-notice' => 'Powěźeńku pśidaś', |
| 1597 | + 'centralnotice-edit-notice' => 'Kampanju wobźěłaś', |
1424 | 1598 | 'centralnotice-add-template' => 'Pśedłogu pśidaś', |
1425 | 1599 | 'centralnotice-show-notices' => 'Powěźeńki pokazaś', |
1426 | 1600 | 'centralnotice-list-templates' => 'Pśedłogi nalistowaś', |
| 1601 | + 'centralnotice-multiple_languages' => 'někotare ($1)', |
1427 | 1602 | 'centralnotice-translations' => 'Pśełožki', |
1428 | 1603 | 'centralnotice-translate-to' => 'Pśełoźiś do', |
1429 | 1604 | 'centralnotice-translate' => 'Pśełožiś', |
1430 | 1605 | 'centralnotice-english' => 'Engelšćina', |
1431 | | - 'centralnotice-template-name' => 'Mě pśedłogi', |
| 1606 | + 'centralnotice-banner-name' => 'Mě pśedłogi', |
| 1607 | + 'centralnotice-banner' => 'Chórgoj', |
| 1608 | + 'centralnotice-banner-heading' => 'Chórgoj: $1', |
1432 | 1609 | 'centralnotice-templates' => 'Pśedłogi', |
1433 | 1610 | 'centralnotice-weight' => 'Wažnosć', |
1434 | 1611 | 'centralnotice-locked' => 'Zastajony', |
| 1612 | + 'centralnotice-notice' => 'Kampanja', |
| 1613 | + 'centralnotice-notice-heading' => 'Kampanja: $1', |
1435 | 1614 | 'centralnotice-notices' => 'Powěźeńki', |
1436 | 1615 | 'centralnotice-notice-exists' => 'Powěźeńka južo eksistěrujo. |
1437 | 1616 | Žedno pśidaśe', |
| 1617 | + 'centralnotice-no-language' => 'Za kampanju njejo se žedna rěč wubrała. Pśidawa se nic.', |
1438 | 1618 | 'centralnotice-template-exists' => 'Pśedłoga južo eksistěrujo. |
1439 | 1619 | Žedno pśidaśe', |
1440 | | - 'centralnotice-notice-doesnt-exist' => 'Powěźeńka njeeksistěrujo. |
1441 | | -Žedno wótpóranje', |
| 1620 | + 'centralnotice-notice-doesnt-exist' => 'Kampanja njeeksistěrujo.', |
| 1621 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampanja njeeksistěrujo. |
| 1622 | +Njejo nic za wótpóranje.', |
1442 | 1623 | 'centralnotice-template-still-bound' => 'Pśedłoga jo hyšći z powěźeńku zwězana. |
1443 | 1624 | Žedno wótpóranje.', |
1444 | 1625 | 'centralnotice-template-body' => 'Tekst pśedłogi:', |
— | — | @@ -1447,6 +1628,8 @@ |
1448 | 1629 | 'centralnotice-hours' => 'Góźina', |
1449 | 1630 | 'centralnotice-min' => 'Minuta', |
1450 | 1631 | 'centralnotice-project-lang' => 'Projektowa rěc', |
| 1632 | + 'centralnotice-select' => 'Wubraś: $1', |
| 1633 | + 'centralnotice-top-ten-languages' => 'Nejlěpšych 10 rěcow', |
1451 | 1634 | 'centralnotice-project-name' => 'Projektowe mě', |
1452 | 1635 | 'centralnotice-start-date' => 'Startowy datum', |
1453 | 1636 | 'centralnotice-start-time' => 'Startowy cas (UTC)', |
— | — | @@ -1459,7 +1642,7 @@ |
1460 | 1643 | 'centralnotice-template-already-exists' => 'Pśedłoga jo južo z kampanju zwězana. |
1461 | 1644 | Žedno pśidaśe', |
1462 | 1645 | 'centralnotice-preview-template' => 'Pśeglěd pśedłogi', |
1463 | | - 'centralnotice-start-hour' => 'Startowy cas', |
| 1646 | + 'centralnotice-start-hour' => 'Startowy cas (GMT)', |
1464 | 1647 | 'centralnotice-change-lang' => 'Pśełožkowu rěc změniś', |
1465 | 1648 | 'centralnotice-weights' => 'Wagi', |
1466 | 1649 | 'centralnotice-notice-is-locked' => 'Powěźeńka jo zastajona. |
— | — | @@ -1477,11 +1660,27 @@ |
1478 | 1661 | 'centralnotice-no-templates-translate' => 'Njejsu pśedłogi, za kótarež deje se pśełožki wobźěłaś', |
1479 | 1662 | 'centralnotice-number-uses' => 'Wužyśa', |
1480 | 1663 | 'centralnotice-edit-template' => 'Pśedłogu wobźěłaś', |
| 1664 | + 'centralnotice-edit-template-summary' => 'Aby lokalizěrujobnu powěźeńku napórał, wobdaj znamuškowy rěd z wězawku z wuzgibnjonymi spinkami, na pś. {{{citat-jimbo}}}.', |
1481 | 1665 | 'centralnotice-message' => 'Powěźeńka', |
1482 | 1666 | 'centralnotice-message-not-set' => 'Powěźeńka njestajona', |
1483 | 1667 | 'centralnotice-clone' => 'Klonowaś', |
1484 | 1668 | 'centralnotice-clone-notice' => 'Kopiju pśedłogi napóraś', |
| 1669 | + 'centralnotice-clone-name' => 'Mě:', |
1485 | 1670 | 'centralnotice-preview-all-template-translations' => 'Pśeglěd wšych k dispoziciji stojecych pśełožkow pśedłogi', |
| 1671 | + 'centralnotice-insert' => 'Zasunuś: $1', |
| 1672 | + 'centralnotice-hide-button' => 'Tłocašk {{int:centralnotice-shared-hide}}', |
| 1673 | + 'centralnotice-collapse-button' => 'Tłocašk {{int:centralnotice-shared-collapse}}', |
| 1674 | + 'centralnotice-expand-button' => 'Tłocašk {{int:centralnotice-shared-expand}}', |
| 1675 | + 'centralnotice-translate-button' => 'Tłocašk pśełožowańskeje pomocy', |
| 1676 | + 'centralnotice-donate-button' => 'Pósćiwański tłocašk', |
| 1677 | + 'centralnotice-expanded-banner' => 'Wótcynjona chórgoj', |
| 1678 | + 'centralnotice-collapsed-banner' => 'Złožona chórgoj', |
| 1679 | + 'centralnotice-banner-display' => 'Zwobrazniś za:', |
| 1680 | + 'centralnotice-banner-anonymous' => 'Anonymne wužywarje', |
| 1681 | + 'centralnotice-banner-logged-in' => 'Pśizjawjone wužywarje', |
| 1682 | + 'centralnotice-banner-type' => 'Chórgojowy typ:', |
| 1683 | + 'centralnotice-banner-hidable' => 'Statiski/Chowajobny', |
| 1684 | + 'centralnotice-banner-collapsible' => 'Fałdujobny', |
1486 | 1685 | 'right-centralnotice-admin' => 'Centralne powěźeńki zastojaś', |
1487 | 1686 | 'right-centralnotice-translate' => 'Centralne powěźeńki pśełožiś', |
1488 | 1687 | 'action-centralnotice-admin' => 'Centralne powěźeńki zastojaś', |
— | — | @@ -1498,6 +1697,7 @@ |
1499 | 1698 | |
1500 | 1699 | /** Greek (Ελληνικά) |
1501 | 1700 | * @author Badseed |
| 1701 | + * @author Crazymadlover |
1502 | 1702 | * @author K sal 15 |
1503 | 1703 | * @author Lou |
1504 | 1704 | * @author Omnipaedista |
— | — | @@ -1529,10 +1729,12 @@ |
1530 | 1730 | 'centralnotice-translate-to' => 'Μετάφραση σε', |
1531 | 1731 | 'centralnotice-translate' => 'Μετάφραση', |
1532 | 1732 | 'centralnotice-english' => 'Αγγλικά', |
1533 | | - 'centralnotice-template-name' => 'Όνομα προτύπου', |
| 1733 | + 'centralnotice-banner-name' => 'Όνομα προτύπου', |
| 1734 | + 'centralnotice-banner' => 'Διαφημιστικό', |
1534 | 1735 | 'centralnotice-templates' => 'Πρότυπα', |
1535 | 1736 | 'centralnotice-weight' => 'Βάρος', |
1536 | 1737 | 'centralnotice-locked' => 'Κλειδωμένο', |
| 1738 | + 'centralnotice-notice' => 'Εκστρατεία', |
1537 | 1739 | 'centralnotice-notices' => 'Ανακοινώσεις', |
1538 | 1740 | 'centralnotice-notice-exists' => 'Η σημείωση υπάρχει ήδη. |
1539 | 1741 | Δεν προστίθεται', |
— | — | @@ -1592,6 +1794,7 @@ |
1593 | 1795 | ); |
1594 | 1796 | |
1595 | 1797 | /** Esperanto (Esperanto) |
| 1798 | + * @author Michawiki |
1596 | 1799 | * @author Yekrats |
1597 | 1800 | */ |
1598 | 1801 | $messages['eo'] = array( |
— | — | @@ -1605,13 +1808,16 @@ |
1606 | 1809 | 'centralnotice-end-date' => 'Fina dato', |
1607 | 1810 | 'centralnotice-enabled' => 'Ŝaltita', |
1608 | 1811 | 'centralnotice-modify' => 'Enigi', |
| 1812 | + 'centralnotice-save-banner' => 'Konservi rubandon', |
1609 | 1813 | 'centralnotice-preview' => 'Antaŭrigardo', |
1610 | 1814 | 'centralnotice-add-new' => 'Aldoni novan centralan noticon', |
1611 | 1815 | 'centralnotice-remove' => 'Forigi', |
1612 | 1816 | 'centralnotice-translate-heading' => 'Traduko por $1', |
1613 | 1817 | 'centralnotice-manage' => 'Administri centralan noticon', |
| 1818 | + 'centralnotice-manage-templates' => 'Administri rubandojn', |
1614 | 1819 | 'centralnotice-add' => 'Aldoni', |
1615 | 1820 | 'centralnotice-add-notice' => 'Aldoni noticon', |
| 1821 | + 'centralnotice-edit-notice' => 'Redakti kampanjon', |
1616 | 1822 | 'centralnotice-add-template' => 'Aldoni ŝablonon', |
1617 | 1823 | 'centralnotice-show-notices' => 'Montri noticojn', |
1618 | 1824 | 'centralnotice-list-templates' => 'Rigardi ŝablonojn', |
— | — | @@ -1619,17 +1825,22 @@ |
1620 | 1826 | 'centralnotice-translate-to' => 'Traduki al', |
1621 | 1827 | 'centralnotice-translate' => 'Traduki', |
1622 | 1828 | 'centralnotice-english' => 'Angla', |
1623 | | - 'centralnotice-template-name' => 'Ŝablona nomo', |
| 1829 | + 'centralnotice-banner-name' => 'Ŝablona nomo', |
| 1830 | + 'centralnotice-banner' => 'Paĝrubando', |
| 1831 | + 'centralnotice-banner-heading' => 'Rubando: $1', |
1624 | 1832 | 'centralnotice-templates' => 'Ŝablonoj', |
1625 | 1833 | 'centralnotice-weight' => 'Graveco', |
1626 | 1834 | 'centralnotice-locked' => 'Ŝlosita', |
| 1835 | + 'centralnotice-notice' => 'Kampanjo', |
| 1836 | + 'centralnotice-notice-heading' => 'Kampanjo: $1', |
1627 | 1837 | 'centralnotice-notices' => 'Noticoj', |
1628 | 1838 | 'centralnotice-notice-exists' => 'Notico jam ekzistas. |
1629 | 1839 | Ne aldonante', |
1630 | 1840 | 'centralnotice-template-exists' => 'Ŝablono jam ekzistas. |
1631 | 1841 | Ne aldonante', |
1632 | | - 'centralnotice-notice-doesnt-exist' => 'Notico ne ekzistas. |
1633 | | -Neniu forigi', |
| 1842 | + 'centralnotice-notice-doesnt-exist' => 'Kampanjo ne ekzistas.', |
| 1843 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampanjo ne ekzistas. |
| 1844 | +Nenio por forigi.', |
1634 | 1845 | 'centralnotice-template-still-bound' => 'Ŝablono ankoraŭ estas ligita al notico. |
1635 | 1846 | Ne forigante.', |
1636 | 1847 | 'centralnotice-template-body' => 'Ŝablona korpo:', |
— | — | @@ -1639,6 +1850,8 @@ |
1640 | 1851 | 'centralnotice-hours' => 'Horo', |
1641 | 1852 | 'centralnotice-min' => 'Minuto', |
1642 | 1853 | 'centralnotice-project-lang' => 'Projekta lingvo', |
| 1854 | + 'centralnotice-select' => 'Elekti: $1', |
| 1855 | + 'centralnotice-top-ten-languages' => '10 plej gravaj lingvoj', |
1643 | 1856 | 'centralnotice-project-name' => 'Projekta nomo', |
1644 | 1857 | 'centralnotice-start-date' => 'Komenca dato', |
1645 | 1858 | 'centralnotice-start-time' => 'Komenca tempo (UTC)', |
— | — | @@ -1673,7 +1886,19 @@ |
1674 | 1887 | 'centralnotice-message-not-set' => 'Mesaĝo ne estis ŝaltita', |
1675 | 1888 | 'centralnotice-clone' => 'Kloni', |
1676 | 1889 | 'centralnotice-clone-notice' => 'Krei duplikaton de la ŝablono', |
| 1890 | + 'centralnotice-clone-name' => 'Nomo:', |
1677 | 1891 | 'centralnotice-preview-all-template-translations' => 'Antaŭvidi ĉiujn haveblajn tradukojn de ŝablono', |
| 1892 | + 'centralnotice-insert' => 'Enmeti: $1', |
| 1893 | + 'centralnotice-hide-button' => 'butono {{int:centralnotice-shared-hide}}', |
| 1894 | + 'centralnotice-collapse-button' => 'butono {{int:centralnotice-shared-collapse}}', |
| 1895 | + 'centralnotice-expand-button' => 'butono {{int:centralnotice-shared-expand}}', |
| 1896 | + 'centralnotice-translate-button' => 'Butono de helpo al la tradukado', |
| 1897 | + 'centralnotice-donate-button' => 'Donaca butono', |
| 1898 | + 'centralnotice-expanded-banner' => 'Etendita rubando', |
| 1899 | + 'centralnotice-collapsed-banner' => 'Maletendita rubando', |
| 1900 | + 'centralnotice-banner-type' => 'Rubanda tipo:', |
| 1901 | + 'centralnotice-banner-hidable' => 'Statika/Kaŝebla', |
| 1902 | + 'centralnotice-banner-collapsible' => 'Maletendebla', |
1678 | 1903 | 'right-centralnotice-admin' => 'Administri centralajn noticojn', |
1679 | 1904 | 'right-centralnotice-translate' => 'Traduki centralajn noticojn', |
1680 | 1905 | 'action-centralnotice-admin' => 'administri centralajn noticojn', |
— | — | @@ -1682,6 +1907,7 @@ |
1683 | 1908 | ); |
1684 | 1909 | |
1685 | 1910 | /** Spanish (Español) |
| 1911 | + * @author Crazymadlover |
1686 | 1912 | * @author Imre |
1687 | 1913 | * @author Locos epraix |
1688 | 1914 | * @author McDutchie |
— | — | @@ -1700,13 +1926,16 @@ |
1701 | 1927 | 'centralnotice-end-date' => 'Fecha de fin', |
1702 | 1928 | 'centralnotice-enabled' => 'Habilitado', |
1703 | 1929 | 'centralnotice-modify' => 'Enviar', |
| 1930 | + 'centralnotice-save-banner' => 'Grabar banner', |
1704 | 1931 | 'centralnotice-preview' => 'Previsualizar', |
1705 | 1932 | 'centralnotice-add-new' => 'Añadir un nuevo aviso central', |
1706 | 1933 | 'centralnotice-remove' => 'Quitar', |
1707 | 1934 | 'centralnotice-translate-heading' => 'Traducción para $1', |
1708 | 1935 | 'centralnotice-manage' => 'Gestionar aviso central', |
| 1936 | + 'centralnotice-manage-templates' => 'Gestionar banners', |
1709 | 1937 | 'centralnotice-add' => 'Añadir', |
1710 | 1938 | 'centralnotice-add-notice' => 'Añadir un aviso', |
| 1939 | + 'centralnotice-edit-notice' => 'Editar campaña', |
1711 | 1940 | 'centralnotice-add-template' => 'Añadir una plantilla', |
1712 | 1941 | 'centralnotice-show-notices' => 'Mostrar avisos', |
1713 | 1942 | 'centralnotice-list-templates' => 'Listar plantillas', |
— | — | @@ -1714,17 +1943,22 @@ |
1715 | 1944 | 'centralnotice-translate-to' => 'Traducir al', |
1716 | 1945 | 'centralnotice-translate' => 'Traducir', |
1717 | 1946 | 'centralnotice-english' => 'Inglés', |
1718 | | - 'centralnotice-template-name' => 'Nombre de la plantilla', |
| 1947 | + 'centralnotice-banner-name' => 'Nombre de la plantilla', |
| 1948 | + 'centralnotice-banner' => 'Banner', |
| 1949 | + 'centralnotice-banner-heading' => 'Banner: $1', |
1719 | 1950 | 'centralnotice-templates' => 'Plantillas', |
1720 | 1951 | 'centralnotice-weight' => 'Peso', |
1721 | 1952 | 'centralnotice-locked' => 'Cerrada con llave', |
| 1953 | + 'centralnotice-notice' => 'Campaña', |
| 1954 | + 'centralnotice-notice-heading' => 'Campaña: $1', |
1722 | 1955 | 'centralnotice-notices' => 'Avisos', |
1723 | 1956 | 'centralnotice-notice-exists' => 'El aviso ya existe. |
1724 | 1957 | No se ha añadido', |
1725 | 1958 | 'centralnotice-template-exists' => 'La plantilla ya exixte. |
1726 | 1959 | No se ha añadido', |
1727 | | - 'centralnotice-notice-doesnt-exist' => 'El aviso no existe. |
1728 | | -No hay nada que borrar', |
| 1960 | + 'centralnotice-notice-doesnt-exist' => 'La campaña no existe.', |
| 1961 | + 'centralnotice-remove-notice-doesnt-exist' => 'La campaña no existe. |
| 1962 | +Nada que remover.', |
1729 | 1963 | 'centralnotice-template-still-bound' => 'La plantilla todavía está enlazada a un aviso. |
1730 | 1964 | No se borrará.', |
1731 | 1965 | 'centralnotice-template-body' => 'Cuerpo de la plantilla:', |
— | — | @@ -1734,6 +1968,8 @@ |
1735 | 1969 | 'centralnotice-hours' => 'Hora', |
1736 | 1970 | 'centralnotice-min' => 'Minuto', |
1737 | 1971 | 'centralnotice-project-lang' => 'Idioma del proyecto', |
| 1972 | + 'centralnotice-select' => 'Seleccionar: $1', |
| 1973 | + 'centralnotice-top-ten-languages' => 'Idiomas top 10', |
1738 | 1974 | 'centralnotice-project-name' => 'Nombre del proyecto', |
1739 | 1975 | 'centralnotice-start-date' => 'Fecha de inicio', |
1740 | 1976 | 'centralnotice-start-time' => 'Hora de inicio (UTC)', |
— | — | @@ -1764,11 +2000,24 @@ |
1765 | 2001 | 'centralnotice-no-templates-translate' => 'No hay plantillas de las que editar traducciones', |
1766 | 2002 | 'centralnotice-number-uses' => 'Usos', |
1767 | 2003 | 'centralnotice-edit-template' => 'Editar plantilla', |
| 2004 | + 'centralnotice-edit-template-summary' => 'Para crear un mensaje localizable, encierre una cadena con guión dentro de tres llaves, por ejemplo {{{jimbo-quote}}}.', |
1768 | 2005 | 'centralnotice-message' => 'Mensaje', |
1769 | 2006 | 'centralnotice-message-not-set' => 'No se ha establecido un mensaje', |
1770 | 2007 | 'centralnotice-clone' => 'Clonar', |
1771 | 2008 | 'centralnotice-clone-notice' => 'Crear una copia de la plantilla', |
| 2009 | + 'centralnotice-clone-name' => 'Nombre:', |
1772 | 2010 | 'centralnotice-preview-all-template-translations' => 'Previsualizar todas las traducciones disponibles de la plantilla', |
| 2011 | + 'centralnotice-insert' => 'Insertar: $1', |
| 2012 | + 'centralnotice-hide-button' => 'Ocultar botón', |
| 2013 | + 'centralnotice-collapse-button' => 'Colapsar botón', |
| 2014 | + 'centralnotice-expand-button' => 'Expandir botón', |
| 2015 | + 'centralnotice-translate-button' => 'Botón de ayuda a la traducción', |
| 2016 | + 'centralnotice-donate-button' => 'Botón de donación', |
| 2017 | + 'centralnotice-expanded-banner' => 'Banner expandido', |
| 2018 | + 'centralnotice-collapsed-banner' => 'Banner colapsado', |
| 2019 | + 'centralnotice-banner-type' => 'Tipo de banner:', |
| 2020 | + 'centralnotice-banner-hidable' => 'Estático/Ocultable', |
| 2021 | + 'centralnotice-banner-collapsible' => 'Colapsable', |
1773 | 2022 | 'right-centralnotice-admin' => 'Gestionar avisos centrales', |
1774 | 2023 | 'right-centralnotice-translate' => 'Traducir avisos centrales', |
1775 | 2024 | 'action-centralnotice-admin' => 'gestionar avisos centrales', |
— | — | @@ -1804,7 +2053,7 @@ |
1805 | 2054 | 'centralnotice-translate-to' => 'Tõlgi', |
1806 | 2055 | 'centralnotice-translate' => 'Tõlgi', |
1807 | 2056 | 'centralnotice-english' => 'Inglise', |
1808 | | - 'centralnotice-template-name' => 'Malli nimi', |
| 2057 | + 'centralnotice-banner-name' => 'Malli nimi', |
1809 | 2058 | 'centralnotice-templates' => 'Mallid', |
1810 | 2059 | 'centralnotice-weight' => 'Kaal', |
1811 | 2060 | 'centralnotice-locked' => 'Lukustatud', |
— | — | @@ -1815,9 +2064,7 @@ |
1816 | 2065 | 'centralnotice-template-exists' => 'Mall on juba olemas. |
1817 | 2066 | |
1818 | 2067 | Ei lisatud.', |
1819 | | - 'centralnotice-notice-doesnt-exist' => 'Teadet ei ole. |
1820 | | - |
1821 | | -Ei ole midagi eemaldada', |
| 2068 | + 'centralnotice-notice-doesnt-exist' => 'Teadet pole.', |
1822 | 2069 | 'centralnotice-template-still-bound' => 'Mall on ikka teatega seotud. |
1823 | 2070 | Ei eemaldata', |
1824 | 2071 | 'centralnotice-template-body' => 'Malli sisu:', |
— | — | @@ -1840,7 +2087,7 @@ |
1841 | 2088 | 'centralnotice-template-already-exists' => 'Mall on juba kampaaniaga seotud. |
1842 | 2089 | Ei lisata', |
1843 | 2090 | 'centralnotice-preview-template' => 'Malli eelvaade', |
1844 | | - 'centralnotice-start-hour' => 'Algusaeg', |
| 2091 | + 'centralnotice-start-hour' => 'Algusaeg (UTC)', |
1845 | 2092 | 'centralnotice-change-lang' => 'Tõlkekeele vahetamine', |
1846 | 2093 | 'centralnotice-weights' => 'Raskused', |
1847 | 2094 | 'centralnotice-notice-is-locked' => 'Teade on lukustatud. |
— | — | @@ -1876,7 +2123,7 @@ |
1877 | 2124 | 'centralnotice-end-date' => 'Bukaera data', |
1878 | 2125 | 'centralnotice-enabled' => 'Gaitua', |
1879 | 2126 | 'centralnotice-modify' => 'Bidali', |
1880 | | - 'centralnotice-preview' => 'Aurreikusi', |
| 2127 | + 'centralnotice-preview' => 'Aurrikusi', |
1881 | 2128 | 'centralnotice-add-new' => 'Mezu orokor berri bat gehitu', |
1882 | 2129 | 'centralnotice-remove' => 'Ezabatu', |
1883 | 2130 | 'centralnotice-translate-heading' => '$1(r)entzat itzulpena', |
— | — | @@ -1889,11 +2136,12 @@ |
1890 | 2137 | 'centralnotice-translations' => 'Itzulpenak', |
1891 | 2138 | 'centralnotice-translate-to' => 'Hona itzuli', |
1892 | 2139 | 'centralnotice-translate' => 'Itzuli', |
1893 | | - 'centralnotice-english' => 'Ingelera', |
1894 | | - 'centralnotice-template-name' => 'Txantiloi izena', |
| 2140 | + 'centralnotice-english' => 'Ingelesa', |
| 2141 | + 'centralnotice-banner-name' => 'Txantiloi izena', |
1895 | 2142 | 'centralnotice-templates' => 'Txantiloiak', |
1896 | 2143 | 'centralnotice-weight' => 'Pisua', |
1897 | 2144 | 'centralnotice-locked' => 'Babesturik', |
| 2145 | + 'centralnotice-notice' => 'Kanpaina', |
1898 | 2146 | 'centralnotice-notices' => 'Berriak', |
1899 | 2147 | 'centralnotice-notice-exists' => 'Berria badago dagoeneko. |
1900 | 2148 | Ez da gehituko', |
— | — | @@ -1914,11 +2162,16 @@ |
1915 | 2163 | 'centralnotice-edit-template' => 'Txantiloia aldatu', |
1916 | 2164 | 'centralnotice-message' => 'Mezua', |
1917 | 2165 | 'centralnotice-clone-notice' => 'Txantiloia honen kopia sortu', |
| 2166 | + 'centralnotice-clone-name' => 'Izena', |
1918 | 2167 | ); |
1919 | 2168 | |
1920 | 2169 | /** Persian (فارسی) |
| 2170 | + * @author Bersam |
| 2171 | + * @author Ebraminio |
1921 | 2172 | * @author Huji |
1922 | 2173 | * @author Komeil 4life |
| 2174 | + * @author Sahim |
| 2175 | + * @author Wayiran |
1923 | 2176 | */ |
1924 | 2177 | $messages['fa'] = array( |
1925 | 2178 | 'centralnotice' => 'مدیر اعلان متمرکز', |
— | — | @@ -1931,31 +2184,41 @@ |
1932 | 2185 | 'centralnotice-end-date' => 'تاریخ پایان', |
1933 | 2186 | 'centralnotice-enabled' => 'فعال', |
1934 | 2187 | 'centralnotice-modify' => 'ارسال', |
| 2188 | + 'centralnotice-save-banner' => 'پرچم ذخیره', |
1935 | 2189 | 'centralnotice-preview' => 'پیشنمایش', |
1936 | 2190 | 'centralnotice-add-new' => 'افزودن یک اعلان متمرکز جدید', |
1937 | 2191 | 'centralnotice-remove' => 'حذف', |
1938 | 2192 | 'centralnotice-translate-heading' => 'ترجمه از $1', |
1939 | 2193 | 'centralnotice-manage' => 'مدیریت اعلان متمرکز', |
| 2194 | + 'centralnotice-manage-templates' => 'پرچمهای مدیریت', |
1940 | 2195 | 'centralnotice-add' => 'اضافه کردن', |
1941 | 2196 | 'centralnotice-add-notice' => 'اضافه کردن خبر', |
| 2197 | + 'centralnotice-edit-notice' => 'ویرایش کمپین', |
1942 | 2198 | 'centralnotice-add-template' => 'اضافه کردن الگو', |
1943 | 2199 | 'centralnotice-show-notices' => 'نمایش اعلانها', |
1944 | 2200 | 'centralnotice-list-templates' => 'فهرست الگوها', |
| 2201 | + 'centralnotice-multiple_languages' => 'چندگانه ($1)', |
1945 | 2202 | 'centralnotice-translations' => 'ترجمهها', |
1946 | 2203 | 'centralnotice-translate-to' => 'ترجمه به', |
1947 | 2204 | 'centralnotice-translate' => 'ترجمه کردن', |
1948 | 2205 | 'centralnotice-english' => 'انگلیسی', |
1949 | | - 'centralnotice-template-name' => 'نام الگو', |
| 2206 | + 'centralnotice-banner-name' => 'نام الگو', |
| 2207 | + 'centralnotice-banner' => 'پرچم', |
| 2208 | + 'centralnotice-banner-heading' => 'پرچم: $1', |
1950 | 2209 | 'centralnotice-templates' => 'الگوها', |
1951 | 2210 | 'centralnotice-weight' => 'وزن', |
1952 | 2211 | 'centralnotice-locked' => 'قفل شده', |
| 2212 | + 'centralnotice-notice' => 'کمپین', |
| 2213 | + 'centralnotice-notice-heading' => 'کمپین: $1', |
1953 | 2214 | 'centralnotice-notices' => 'اعلانات', |
1954 | 2215 | 'centralnotice-notice-exists' => 'اعلان از قبل وجود دارد. |
1955 | 2216 | افزوده نشد', |
| 2217 | + 'centralnotice-no-language' => 'هیچ زبانی برای کمپین انتخاب نشده است. اضاقه نشده است.', |
1956 | 2218 | 'centralnotice-template-exists' => 'الگو از قبل وجود دارد. |
1957 | 2219 | افزوده نشد', |
1958 | | - 'centralnotice-notice-doesnt-exist' => 'اعلان وجود ندارد. |
1959 | | -چیزی برای حذف وجود ندارد', |
| 2220 | + 'centralnotice-notice-doesnt-exist' => 'کمپین وجود ندارد.', |
| 2221 | + 'centralnotice-remove-notice-doesnt-exist' => 'کمپین وجود ندارد. |
| 2222 | +چیزی برای حذف نیست.', |
1960 | 2223 | 'centralnotice-template-still-bound' => 'الگو هنوز در اتصال با یک اعلان است. |
1961 | 2224 | حذف نشد', |
1962 | 2225 | 'centralnotice-template-body' => 'بدنه قالب:', |
— | — | @@ -1965,6 +2228,8 @@ |
1966 | 2229 | 'centralnotice-hours' => 'ساعت', |
1967 | 2230 | 'centralnotice-min' => 'دقیقه', |
1968 | 2231 | 'centralnotice-project-lang' => 'زبان پروژه', |
| 2232 | + 'centralnotice-select' => 'انتخاب: $1', |
| 2233 | + 'centralnotice-top-ten-languages' => '۱۰ زبان برتر', |
1969 | 2234 | 'centralnotice-project-name' => 'نام پروژه', |
1970 | 2235 | 'centralnotice-start-date' => 'تاریخ آغاز', |
1971 | 2236 | 'centralnotice-start-time' => 'زمان آغاز', |
— | — | @@ -1977,7 +2242,7 @@ |
1978 | 2243 | 'centralnotice-template-already-exists' => 'الگو از قبل به اعلان گره خورده است. |
1979 | 2244 | افزوده نشد', |
1980 | 2245 | 'centralnotice-preview-template' => 'الگو نمایش', |
1981 | | - 'centralnotice-start-hour' => 'زمان شروع', |
| 2246 | + 'centralnotice-start-hour' => 'زمان شروع (GMT)', |
1982 | 2247 | 'centralnotice-change-lang' => 'تغییر زبان ترجمه', |
1983 | 2248 | 'centralnotice-weights' => 'وزنها', |
1984 | 2249 | 'centralnotice-notice-is-locked' => 'اعلان قفل شدهاست. |
— | — | @@ -1994,12 +2259,29 @@ |
1995 | 2260 | یکی اضافه کنید', |
1996 | 2261 | 'centralnotice-no-templates-translate' => 'الگویی وجود ندارد که ترجمهاش را ویرایش کنید', |
1997 | 2262 | 'centralnotice-number-uses' => 'کاربردها', |
| 2263 | + 'centralnotice-settings' => 'تنظیمات', |
1998 | 2264 | 'centralnotice-edit-template' => 'الگو ویرایش', |
| 2265 | + 'centralnotice-edit-template-summary' => 'برای ساختن یک پیغام قابل محلیسازی، یک رشتهٔ قابل شکستن را در سه کروشه قرار دهید. مانند {{{jimbo-quote}}}.', |
1999 | 2266 | 'centralnotice-message' => 'پیام', |
2000 | 2267 | 'centralnotice-message-not-set' => 'پیغام تنظیم نشده', |
2001 | 2268 | 'centralnotice-clone' => 'کلون', |
2002 | 2269 | 'centralnotice-clone-notice' => 'ایجاد یک کپی از الگو', |
| 2270 | + 'centralnotice-clone-name' => 'نام:', |
2003 | 2271 | 'centralnotice-preview-all-template-translations' => 'پیشنمایش تمام ترجمههای موجود از الگو', |
| 2272 | + 'centralnotice-insert' => 'درج: $1', |
| 2273 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} دکمه', |
| 2274 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} دکمه', |
| 2275 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} دکمه', |
| 2276 | + 'centralnotice-translate-button' => 'راهنمای ترجمهٔ دکمه', |
| 2277 | + 'centralnotice-donate-button' => 'دکمهٔ کمک مالی', |
| 2278 | + 'centralnotice-expanded-banner' => 'پرچم گستردهشده:', |
| 2279 | + 'centralnotice-collapsed-banner' => 'پرچم متلاشیشده', |
| 2280 | + 'centralnotice-banner-display' => 'نمایش به:', |
| 2281 | + 'centralnotice-banner-anonymous' => 'کاربران ناشناس', |
| 2282 | + 'centralnotice-banner-logged-in' => 'کاربران واردشده', |
| 2283 | + 'centralnotice-banner-type' => 'نوع پرچم:', |
| 2284 | + 'centralnotice-banner-hidable' => 'ایستا/نهفتنی', |
| 2285 | + 'centralnotice-banner-collapsible' => 'متلاشیپذیر', |
2004 | 2286 | 'right-centralnotice-admin' => 'مدیریت اعلانهای متمرکز', |
2005 | 2287 | 'right-centralnotice-translate' => 'ترجمهٔ اعلانهای متمرکز', |
2006 | 2288 | 'action-centralnotice-admin' => 'مدیریت اعلانهای متمرکز', |
— | — | @@ -2008,6 +2290,7 @@ |
2009 | 2291 | ); |
2010 | 2292 | |
2011 | 2293 | /** Finnish (Suomi) |
| 2294 | + * @author Centerlink |
2012 | 2295 | * @author Crt |
2013 | 2296 | * @author Nike |
2014 | 2297 | * @author Tarmo |
— | — | @@ -2037,7 +2320,7 @@ |
2038 | 2321 | 'centralnotice-translate-to' => 'Käännös:', |
2039 | 2322 | 'centralnotice-translate' => 'Käännä', |
2040 | 2323 | 'centralnotice-english' => 'Englanniksi', |
2041 | | - 'centralnotice-template-name' => 'Mallineen nimi', |
| 2324 | + 'centralnotice-banner-name' => 'Mallineen nimi', |
2042 | 2325 | 'centralnotice-templates' => 'Mallineet', |
2043 | 2326 | 'centralnotice-weight' => 'Paino', |
2044 | 2327 | 'centralnotice-locked' => 'Lukittu', |
— | — | @@ -2087,6 +2370,7 @@ |
2088 | 2371 | 'centralnotice-no-templates-translate' => 'Ei mallineita, joiden käännöksiä voisi muokata', |
2089 | 2372 | 'centralnotice-number-uses' => 'Käyttää', |
2090 | 2373 | 'centralnotice-edit-template' => 'Muokkaa mallinetta', |
| 2374 | + 'centralnotice-edit-template-summary' => 'Käännettävän viestin luomiseksi sisällytä tavutettu merkkijono kolmen aaltosulkeen sisään, esim. {{{jimbo-quote}}}.', |
2091 | 2375 | 'centralnotice-message' => 'Viesti', |
2092 | 2376 | 'centralnotice-message-not-set' => 'Viestiä ei ole asetettu', |
2093 | 2377 | 'centralnotice-clone' => 'Kahdenna', |
— | — | @@ -2103,8 +2387,10 @@ |
2104 | 2388 | * @author Crochet.david |
2105 | 2389 | * @author Grondin |
2106 | 2390 | * @author IAlex |
| 2391 | + * @author Jean-Frédéric |
2107 | 2392 | * @author McDutchie |
2108 | 2393 | * @author Meithal |
| 2394 | + * @author Peter17 |
2109 | 2395 | * @author PieRRoMaN |
2110 | 2396 | * @author Sherbrooke |
2111 | 2397 | * @author Urhixidur |
— | — | @@ -2121,31 +2407,41 @@ |
2122 | 2408 | 'centralnotice-end-date' => 'Date de fin', |
2123 | 2409 | 'centralnotice-enabled' => 'Activé', |
2124 | 2410 | 'centralnotice-modify' => 'Soumettre', |
| 2411 | + 'centralnotice-save-banner' => 'Enregistrer la bannière', |
2125 | 2412 | 'centralnotice-preview' => 'Prévisualiser', |
2126 | 2413 | 'centralnotice-add-new' => 'Ajouter un nouvel avis central', |
2127 | 2414 | 'centralnotice-remove' => 'Supprimer', |
2128 | 2415 | 'centralnotice-translate-heading' => 'Traduction de l’avis « $1 »', |
2129 | 2416 | 'centralnotice-manage' => 'Gérer les avis centraux', |
| 2417 | + 'centralnotice-manage-templates' => 'Gérer les bannières', |
2130 | 2418 | 'centralnotice-add' => 'Ajouter', |
2131 | 2419 | 'centralnotice-add-notice' => 'Ajouter un avis', |
| 2420 | + 'centralnotice-edit-notice' => 'Modifier la campagne', |
2132 | 2421 | 'centralnotice-add-template' => 'Ajouter un modèle', |
2133 | 2422 | 'centralnotice-show-notices' => 'Afficher les avis', |
2134 | 2423 | 'centralnotice-list-templates' => 'Lister les modèles', |
| 2424 | + 'centralnotice-multiple_languages' => 'multiple ($1)', |
2135 | 2425 | 'centralnotice-translations' => 'Traductions', |
2136 | 2426 | 'centralnotice-translate-to' => 'Traduire en', |
2137 | 2427 | 'centralnotice-translate' => 'Traduire', |
2138 | 2428 | 'centralnotice-english' => 'anglais', |
2139 | | - 'centralnotice-template-name' => 'Nom du modèle', |
| 2429 | + 'centralnotice-banner-name' => 'Nom du modèle', |
| 2430 | + 'centralnotice-banner' => 'Bannière', |
| 2431 | + 'centralnotice-banner-heading' => 'Bannière : $1', |
2140 | 2432 | 'centralnotice-templates' => 'Modèles', |
2141 | 2433 | 'centralnotice-weight' => 'Poids', |
2142 | 2434 | 'centralnotice-locked' => 'Verrouillé', |
| 2435 | + 'centralnotice-notice' => 'Campagne', |
| 2436 | + 'centralnotice-notice-heading' => 'Campagne : $1', |
2143 | 2437 | 'centralnotice-notices' => 'Avis', |
2144 | 2438 | 'centralnotice-notice-exists' => 'L’avis existe déjà. |
2145 | 2439 | Il n’a pas été ajouté.', |
| 2440 | + 'centralnotice-no-language' => 'Aucune langue n’a été sélectionnée pour la campagne. Non ajoutée.', |
2146 | 2441 | 'centralnotice-template-exists' => 'Le modèle existe déjà. |
2147 | 2442 | Il n’a pas été ajouté.', |
2148 | | - 'centralnotice-notice-doesnt-exist' => 'L’avis n’existe pas. |
2149 | | -Il n’y a rien à supprimer.', |
| 2443 | + 'centralnotice-notice-doesnt-exist' => 'La campagne n’existe pas.', |
| 2444 | + 'centralnotice-remove-notice-doesnt-exist' => 'La campagne n’existe pas. |
| 2445 | +Rien à supprimer.', |
2150 | 2446 | 'centralnotice-template-still-bound' => 'Le modèle est encore lié à un avis. |
2151 | 2447 | Il n’a pas été supprimé.', |
2152 | 2448 | 'centralnotice-template-body' => 'Corps du modèle :', |
— | — | @@ -2155,6 +2451,8 @@ |
2156 | 2452 | 'centralnotice-hours' => 'Heure', |
2157 | 2453 | 'centralnotice-min' => 'Minute', |
2158 | 2454 | 'centralnotice-project-lang' => 'Langue du projet', |
| 2455 | + 'centralnotice-select' => 'Sélectionnez : $1', |
| 2456 | + 'centralnotice-top-ten-languages' => 'Les 10 langues les plus utilisées', |
2159 | 2457 | 'centralnotice-project-name' => 'Nom du projet', |
2160 | 2458 | 'centralnotice-start-date' => 'Date de début', |
2161 | 2459 | 'centralnotice-start-time' => 'Heure de début (UTC)', |
— | — | @@ -2167,7 +2465,7 @@ |
2168 | 2466 | 'centralnotice-template-already-exists' => 'Le modèle est déjà attaché à une campagne. |
2169 | 2467 | Il n’a pas été ajouté.', |
2170 | 2468 | 'centralnotice-preview-template' => 'Prévisualiser le modèle', |
2171 | | - 'centralnotice-start-hour' => 'Heure de début', |
| 2469 | + 'centralnotice-start-hour' => 'Heure de départ (GMT)', |
2172 | 2470 | 'centralnotice-change-lang' => 'Modifier la langue de traduction', |
2173 | 2471 | 'centralnotice-weights' => 'Poids', |
2174 | 2472 | 'centralnotice-notice-is-locked' => 'L’avis est verrouillé. |
— | — | @@ -2185,11 +2483,27 @@ |
2186 | 2484 | 'centralnotice-no-templates-translate' => 'Il n’y a aucun modèle à traduire', |
2187 | 2485 | 'centralnotice-number-uses' => 'Utilisations', |
2188 | 2486 | 'centralnotice-edit-template' => 'Modifier le modèle', |
| 2487 | + 'centralnotice-edit-template-summary' => 'Pour créer un message localisable, entourez une chaîne à trait d’union de trois accolades, par exemple {{{jimbo-quote}}}.', |
2189 | 2488 | 'centralnotice-message' => 'Message', |
2190 | 2489 | 'centralnotice-message-not-set' => 'Message non renseigné', |
2191 | 2490 | 'centralnotice-clone' => 'Dupliquer', |
2192 | 2491 | 'centralnotice-clone-notice' => 'Créer une copie du modèle', |
| 2492 | + 'centralnotice-clone-name' => 'Nom :', |
2193 | 2493 | 'centralnotice-preview-all-template-translations' => 'Prévisualiser toutes les traductions disponibles du modèle', |
| 2494 | + 'centralnotice-insert' => 'Insérer : $1', |
| 2495 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} le bouton', |
| 2496 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} le bouton', |
| 2497 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} le bouton', |
| 2498 | + 'centralnotice-translate-button' => "Bouton d'aide à la traduction", |
| 2499 | + 'centralnotice-donate-button' => 'Bouton de donation', |
| 2500 | + 'centralnotice-expanded-banner' => 'Bannière étendue', |
| 2501 | + 'centralnotice-collapsed-banner' => 'Bannière réduite', |
| 2502 | + 'centralnotice-banner-display' => 'Afficher aux :', |
| 2503 | + 'centralnotice-banner-anonymous' => 'Utilisateurs anonymes', |
| 2504 | + 'centralnotice-banner-logged-in' => 'Utilisateurs identifiés', |
| 2505 | + 'centralnotice-banner-type' => 'Type de bannière :', |
| 2506 | + 'centralnotice-banner-hidable' => 'Statique/masquable', |
| 2507 | + 'centralnotice-banner-collapsible' => 'Réductible', |
2194 | 2508 | 'right-centralnotice-admin' => 'Gérer les avis centraux', |
2195 | 2509 | 'right-centralnotice-translate' => 'Traduire les avis centraux', |
2196 | 2510 | 'action-centralnotice-admin' => 'gérer les avis centraux', |
— | — | @@ -2203,19 +2517,24 @@ |
2204 | 2518 | $messages['frp'] = array( |
2205 | 2519 | 'centralnotice' => 'Administracion des avis centrâls', |
2206 | 2520 | 'noticetemplate' => 'Modèlo des avis centrâls', |
2207 | | - 'centralnotice-desc' => 'Apond un sitenotice centrâl.', |
| 2521 | + 'centralnotice-desc' => 'Apond un avis centrâl du seto.', |
| 2522 | + 'centralnotice-summary' => 'Ceti modulo vos pèrmèt de changiér voutros paramètres d’avis centrâls. |
| 2523 | +Pôt asse-ben étre utilisâ por apondre des avis ou ben nen enlevar los ples vielys.', |
2208 | 2524 | 'centralnotice-query' => 'Changiér los avis d’ora', |
2209 | 2525 | 'centralnotice-notice-name' => 'Nom de l’avis', |
2210 | 2526 | 'centralnotice-end-date' => 'Dâta de fin', |
2211 | 2527 | 'centralnotice-enabled' => 'Activâ', |
2212 | 2528 | 'centralnotice-modify' => 'Sometre', |
| 2529 | + 'centralnotice-save-banner' => 'Encartar lo modèlo', |
2213 | 2530 | 'centralnotice-preview' => 'Prèvisualisacion', |
2214 | | - 'centralnotice-add-new' => 'Apondre un novél avis centrâl', |
2215 | | - 'centralnotice-remove' => 'Suprimar', |
2216 | | - 'centralnotice-translate-heading' => 'Traduccion de l’avis « $1 »', |
2217 | | - 'centralnotice-manage' => 'Administrar los avis centrâls', |
| 2531 | + 'centralnotice-add-new' => 'Apondre un novél avis', |
| 2532 | + 'centralnotice-remove' => 'Enlevar', |
| 2533 | + 'centralnotice-translate-heading' => 'Traduccion de « $1 »', |
| 2534 | + 'centralnotice-manage' => 'Administrar los avis', |
| 2535 | + 'centralnotice-manage-templates' => 'Administrar los modèlos', |
2218 | 2536 | 'centralnotice-add' => 'Apondre', |
2219 | 2537 | 'centralnotice-add-notice' => 'Apondre un avis', |
| 2538 | + 'centralnotice-edit-notice' => 'Changiér l’avis', |
2220 | 2539 | 'centralnotice-add-template' => 'Apondre un modèlo', |
2221 | 2540 | 'centralnotice-show-notices' => 'Fâre vêre los avis', |
2222 | 2541 | 'centralnotice-list-templates' => 'Listar los modèlos', |
— | — | @@ -2223,19 +2542,24 @@ |
2224 | 2543 | 'centralnotice-translate-to' => 'Traduire en', |
2225 | 2544 | 'centralnotice-translate' => 'Traduire', |
2226 | 2545 | 'centralnotice-english' => 'Anglès', |
2227 | | - 'centralnotice-template-name' => 'Nom du modèlo', |
| 2546 | + 'centralnotice-banner-name' => 'Nom du modèlo', |
| 2547 | + 'centralnotice-banner' => 'Modèlo', |
| 2548 | + 'centralnotice-banner-heading' => 'Modèlo : $1', |
2228 | 2549 | 'centralnotice-templates' => 'Modèlos', |
2229 | 2550 | 'centralnotice-weight' => 'Pêds', |
2230 | 2551 | 'centralnotice-locked' => 'Vèrrolyê', |
| 2552 | + 'centralnotice-notice' => 'Avis', |
| 2553 | + 'centralnotice-notice-heading' => 'Avis : $1', |
2231 | 2554 | 'centralnotice-notices' => 'Avis', |
2232 | 2555 | 'centralnotice-notice-exists' => 'L’avis ègziste ja. |
2233 | 2556 | Il at pas étâ apondu.', |
2234 | 2557 | 'centralnotice-template-exists' => 'Lo modèlo ègziste ja. |
2235 | 2558 | Il at pas étâ apondu.', |
2236 | | - 'centralnotice-notice-doesnt-exist' => 'L’avis ègziste pas. |
2237 | | -Y at ren a suprimar.', |
| 2559 | + 'centralnotice-notice-doesnt-exist' => 'L’avis ègziste pas.', |
| 2560 | + 'centralnotice-remove-notice-doesnt-exist' => 'L’avis ègziste pas. |
| 2561 | +Y at ren a enlevar.', |
2238 | 2562 | 'centralnotice-template-still-bound' => 'Lo modèlo est adés liyê a un avis. |
2239 | | -Il at pas étâ suprimâ.', |
| 2563 | +Il at pas étâ enlevâ.', |
2240 | 2564 | 'centralnotice-template-body' => 'Côrp du modèlo :', |
2241 | 2565 | 'centralnotice-day' => 'Jorn', |
2242 | 2566 | 'centralnotice-year' => 'An', |
— | — | @@ -2243,6 +2567,8 @@ |
2244 | 2568 | 'centralnotice-hours' => 'Hora', |
2245 | 2569 | 'centralnotice-min' => 'Menuta', |
2246 | 2570 | 'centralnotice-project-lang' => 'Lengoua du projèt', |
| 2571 | + 'centralnotice-select' => 'Chouèsésséd : $1', |
| 2572 | + 'centralnotice-top-ten-languages' => 'Les 10 lengoues les ples utilisâs', |
2247 | 2573 | 'centralnotice-project-name' => 'Nom du projèt', |
2248 | 2574 | 'centralnotice-start-date' => 'Dâta de comencement', |
2249 | 2575 | 'centralnotice-start-time' => 'Hora de comencement (UTC)', |
— | — | @@ -2252,32 +2578,45 @@ |
2253 | 2579 | 'centralnotice-no-templates-assigned' => 'Gins de modèlo assignê a l’avis. |
2254 | 2580 | Apondéd-nen !', |
2255 | 2581 | 'centralnotice-available-templates' => 'Modèlos disponiblos', |
2256 | | - 'centralnotice-template-already-exists' => 'Lo modèlo est ja atachiê a una propaganda. |
| 2582 | + 'centralnotice-template-already-exists' => 'Lo modèlo est ja atachiê a un avis. |
2257 | 2583 | Il at pas étâ apondu.', |
2258 | 2584 | 'centralnotice-preview-template' => 'Prèvisualisacion du modèlo', |
2259 | | - 'centralnotice-start-hour' => 'Hora de comencement', |
| 2585 | + 'centralnotice-start-hour' => 'Hora de comencement (UTC)', |
2260 | 2586 | 'centralnotice-change-lang' => 'Changiér la lengoua de traduccion', |
2261 | 2587 | 'centralnotice-weights' => 'Pêds', |
2262 | 2588 | 'centralnotice-notice-is-locked' => 'L’avis est vèrrolyê. |
2263 | | -Il at pas étâ suprimâ.', |
| 2589 | +Il at pas étâ enlevâ.', |
2264 | 2590 | 'centralnotice-overlap' => 'L’avis côvre tot ou ben partia du temps d’un ôtro avis. |
2265 | 2591 | Il at pas étâ apondu.', |
2266 | 2592 | 'centralnotice-invalid-date-range' => 'Entèrvalo de dâtes fôx por l’avis. |
2267 | 2593 | Il at pas étâ betâ a jorn.', |
2268 | 2594 | 'centralnotice-null-string' => 'Empossiblo d’apondre un avis vouedo. |
2269 | 2595 | Il at pas étâ apondu.', |
2270 | | - 'centralnotice-confirm-delete' => 'Éte-vos de sûr de volêr suprimar ceti èlèment ? |
| 2596 | + 'centralnotice-confirm-delete' => 'Éte-vos de sûr de volêr enlevar ceti èlèment ? |
2271 | 2597 | Cela accion porrat pas étre rècupèrâ.', |
2272 | 2598 | 'centralnotice-no-notices-exist' => 'Nion avis ègziste. |
2273 | 2599 | Apondéd-nen ce-desot.', |
2274 | | - 'centralnotice-no-templates-translate' => 'Y at gins de modèlo a traduire', |
| 2600 | + 'centralnotice-no-templates-translate' => 'Y at gins de modèlo a traduire.', |
2275 | 2601 | 'centralnotice-number-uses' => 'Usâjos', |
2276 | 2602 | 'centralnotice-edit-template' => 'Changiér lo modèlo', |
| 2603 | + 'centralnotice-edit-template-summary' => 'Por fâre un mèssâjo localisâblo, entremâd una chêna a trèt d’union de três colâdes, per ègzemplo {{{jimbo-quote}}}.', |
2277 | 2604 | 'centralnotice-message' => 'Mèssâjo', |
2278 | 2605 | 'centralnotice-message-not-set' => 'Mèssâjo pas rensègnê', |
2279 | 2606 | 'centralnotice-clone' => 'Copiyér', |
2280 | 2607 | 'centralnotice-clone-notice' => 'Fâre una copia du modèlo', |
| 2608 | + 'centralnotice-clone-name' => 'Nom :', |
2281 | 2609 | 'centralnotice-preview-all-template-translations' => 'Prèvisualisar totes les traduccions disponibles du modèlo', |
| 2610 | + 'centralnotice-insert' => 'Entrebetar : $1', |
| 2611 | + 'centralnotice-hide-button' => 'Boton {{int:centralnotice-shared-hide}}', |
| 2612 | + 'centralnotice-collapse-button' => 'Boton {{int:centralnotice-shared-collapse}}', |
| 2613 | + 'centralnotice-expand-button' => 'Boton {{int:centralnotice-shared-expand}}', |
| 2614 | + 'centralnotice-translate-button' => 'Boton d’éde a la traduccion', |
| 2615 | + 'centralnotice-donate-button' => 'Boton de donacion', |
| 2616 | + 'centralnotice-expanded-banner' => 'Modèlo ètendu', |
| 2617 | + 'centralnotice-collapsed-banner' => 'Modèlo rèduit', |
| 2618 | + 'centralnotice-banner-type' => 'Tipo de modèlo:', |
| 2619 | + 'centralnotice-banner-hidable' => 'Statico / cachâblo', |
| 2620 | + 'centralnotice-banner-collapsible' => 'Rèductiblo', |
2282 | 2621 | 'right-centralnotice-admin' => 'Administrar los avis centrâls', |
2283 | 2622 | 'right-centralnotice-translate' => 'Traduire los avis centrâls', |
2284 | 2623 | 'action-centralnotice-admin' => 'administrar los avis centrâls', |
— | — | @@ -2306,31 +2645,41 @@ |
2307 | 2646 | 'centralnotice-end-date' => 'Data da fin', |
2308 | 2647 | 'centralnotice-enabled' => 'Permitido', |
2309 | 2648 | 'centralnotice-modify' => 'Enviar', |
| 2649 | + 'centralnotice-save-banner' => 'Gardar o cartel', |
2310 | 2650 | 'centralnotice-preview' => 'Vista previa', |
2311 | 2651 | 'centralnotice-add-new' => 'Engadir un novo aviso central', |
2312 | 2652 | 'centralnotice-remove' => 'Eliminar', |
2313 | 2653 | 'centralnotice-translate-heading' => 'Traducións de "$1"', |
2314 | 2654 | 'centralnotice-manage' => 'Xestionar o aviso central', |
| 2655 | + 'centralnotice-manage-templates' => 'Xestionar os carteis', |
2315 | 2656 | 'centralnotice-add' => 'Engadir', |
2316 | 2657 | 'centralnotice-add-notice' => 'Engadir un aviso', |
| 2658 | + 'centralnotice-edit-notice' => 'Editar o aviso', |
2317 | 2659 | 'centralnotice-add-template' => 'Engadir un modelo', |
2318 | 2660 | 'centralnotice-show-notices' => 'Amosar os avisos', |
2319 | 2661 | 'centralnotice-list-templates' => 'Listar os modelos', |
| 2662 | + 'centralnotice-multiple_languages' => 'múltiple ($1)', |
2320 | 2663 | 'centralnotice-translations' => 'Traducións', |
2321 | 2664 | 'centralnotice-translate-to' => 'Traducir ao', |
2322 | 2665 | 'centralnotice-translate' => 'Traducir', |
2323 | 2666 | 'centralnotice-english' => 'inglés', |
2324 | | - 'centralnotice-template-name' => 'Nome do modelo', |
| 2667 | + 'centralnotice-banner-name' => 'Nome do modelo', |
| 2668 | + 'centralnotice-banner' => 'Cartel', |
| 2669 | + 'centralnotice-banner-heading' => 'Cartel: $1', |
2325 | 2670 | 'centralnotice-templates' => 'Modelos', |
2326 | 2671 | 'centralnotice-weight' => 'Peso', |
2327 | 2672 | 'centralnotice-locked' => 'Bloqueado', |
| 2673 | + 'centralnotice-notice' => 'Aviso', |
| 2674 | + 'centralnotice-notice-heading' => 'Aviso: $1', |
2328 | 2675 | 'centralnotice-notices' => 'Avisos', |
2329 | 2676 | 'centralnotice-notice-exists' => 'O aviso xa existe. |
2330 | 2677 | Non se engade', |
| 2678 | + 'centralnotice-no-language' => 'Non se seleccionou ningunha lingua para o aviso. Non se engade.', |
2331 | 2679 | 'centralnotice-template-exists' => 'O modelo xa existe. |
2332 | 2680 | Non se engade', |
2333 | | - 'centralnotice-notice-doesnt-exist' => 'O aviso non existe. |
2334 | | -Non hai nada que eliminar', |
| 2681 | + 'centralnotice-notice-doesnt-exist' => 'O aviso non existe.', |
| 2682 | + 'centralnotice-remove-notice-doesnt-exist' => 'O aviso non existe. |
| 2683 | +Non hai nada que eliminar.', |
2335 | 2684 | 'centralnotice-template-still-bound' => 'O modelo aínda está ligado a un aviso. |
2336 | 2685 | Non se elimina.', |
2337 | 2686 | 'centralnotice-template-body' => 'Corpo do modelo:', |
— | — | @@ -2340,6 +2689,8 @@ |
2341 | 2690 | 'centralnotice-hours' => 'Hora', |
2342 | 2691 | 'centralnotice-min' => 'Minuto', |
2343 | 2692 | 'centralnotice-project-lang' => 'Lingua do proxecto', |
| 2693 | + 'centralnotice-select' => 'Seleccionar: $1', |
| 2694 | + 'centralnotice-top-ten-languages' => 'As 10 linguas máis empregadas', |
2344 | 2695 | 'centralnotice-project-name' => 'Nome do proxecto', |
2345 | 2696 | 'centralnotice-start-date' => 'Data de inicio', |
2346 | 2697 | 'centralnotice-start-time' => 'Hora de inicio (UTC)', |
— | — | @@ -2352,7 +2703,7 @@ |
2353 | 2704 | 'centralnotice-template-already-exists' => 'O modelo xa está atado á campaña. |
2354 | 2705 | Non se engade', |
2355 | 2706 | 'centralnotice-preview-template' => 'Vista previa do modelo', |
2356 | | - 'centralnotice-start-hour' => 'Hora de inicio', |
| 2707 | + 'centralnotice-start-hour' => 'Hora de inicio (GMT)', |
2357 | 2708 | 'centralnotice-change-lang' => 'Cambiar a lingua de tradución', |
2358 | 2709 | 'centralnotice-weights' => 'Pesos', |
2359 | 2710 | 'centralnotice-notice-is-locked' => 'O aviso está bloqueado. |
— | — | @@ -2369,12 +2720,29 @@ |
2370 | 2721 | Engada algún embaixo', |
2371 | 2722 | 'centralnotice-no-templates-translate' => 'Non hai modelos que traducir', |
2372 | 2723 | 'centralnotice-number-uses' => 'Usos', |
| 2724 | + 'centralnotice-settings' => 'Configuracións', |
2373 | 2725 | 'centralnotice-edit-template' => 'Editar o modelo', |
| 2726 | + 'centralnotice-edit-template-summary' => 'Para crear unha mensaxe que se poida traducir, coloque a cadea entre tres corchetes; por exemplo, {{{jimbo-quote}}}.', |
2374 | 2727 | 'centralnotice-message' => 'Mensaxe', |
2375 | 2728 | 'centralnotice-message-not-set' => 'Mensaxe sen fixar', |
2376 | 2729 | 'centralnotice-clone' => 'Clonar', |
2377 | 2730 | 'centralnotice-clone-notice' => 'Crear unha copia do modelo', |
| 2731 | + 'centralnotice-clone-name' => 'Nome:', |
2378 | 2732 | 'centralnotice-preview-all-template-translations' => 'Mostrar a vista previa de todas as traducións dispoñibles do modelo', |
| 2733 | + 'centralnotice-insert' => 'Inserir: $1', |
| 2734 | + 'centralnotice-hide-button' => 'Botón "{{int:centralnotice-shared-hide}}"', |
| 2735 | + 'centralnotice-collapse-button' => 'Botón "{{int:centralnotice-shared-collapse}}"', |
| 2736 | + 'centralnotice-expand-button' => 'Botón "{{int:centralnotice-shared-expand}}"', |
| 2737 | + 'centralnotice-translate-button' => 'Botón de axudar coas traducións', |
| 2738 | + 'centralnotice-donate-button' => 'Botón de doar', |
| 2739 | + 'centralnotice-expanded-banner' => 'Cartel expandido', |
| 2740 | + 'centralnotice-collapsed-banner' => 'Cartel de contraer', |
| 2741 | + 'centralnotice-banner-display' => 'Mostrar aos:', |
| 2742 | + 'centralnotice-banner-anonymous' => 'Usuarios anónimos', |
| 2743 | + 'centralnotice-banner-logged-in' => 'Usuarios rexistrados', |
| 2744 | + 'centralnotice-banner-type' => 'Tipo de cartel:', |
| 2745 | + 'centralnotice-banner-hidable' => 'Estático/Agochable', |
| 2746 | + 'centralnotice-banner-collapsible' => 'Contraíble', |
2379 | 2747 | 'right-centralnotice-admin' => 'Xestionar os avisos centrais', |
2380 | 2748 | 'right-centralnotice-translate' => 'Traducir os avisos centrais', |
2381 | 2749 | 'action-centralnotice-admin' => 'xestionar os avisos centrais', |
— | — | @@ -2421,30 +2789,40 @@ |
2422 | 2790 | 'centralnotice-end-date' => 'Änddatum', |
2423 | 2791 | 'centralnotice-enabled' => 'Aktiviert', |
2424 | 2792 | 'centralnotice-modify' => 'In Ornig', |
| 2793 | + 'centralnotice-save-banner' => 'Banner spychere', |
2425 | 2794 | 'centralnotice-preview' => 'Vorschau', |
2426 | 2795 | 'centralnotice-add-new' => 'Fieg e neiji zentrali Mäldig zue', |
2427 | 2796 | 'centralnotice-remove' => 'Useneh', |
2428 | 2797 | 'centralnotice-translate-heading' => 'Ibersetzig vu „$1“', |
2429 | 2798 | 'centralnotice-manage' => 'Zentrali Mäldige verwalte', |
| 2799 | + 'centralnotice-manage-templates' => 'Banner verwalte', |
2430 | 2800 | 'centralnotice-add' => 'Zuefiege', |
2431 | 2801 | 'centralnotice-add-notice' => 'Zuefiege vun ere Mäldig', |
| 2802 | + 'centralnotice-edit-notice' => 'Kampagne bearbeite', |
2432 | 2803 | 'centralnotice-add-template' => 'Zuefiege vun ere Vorlag', |
2433 | 2804 | 'centralnotice-show-notices' => 'Zeig Mäldige', |
2434 | 2805 | 'centralnotice-list-templates' => 'Vorlage uflischte', |
| 2806 | + 'centralnotice-multiple_languages' => 'mehreri ($1)', |
2435 | 2807 | 'centralnotice-translations' => 'Ibersetzige', |
2436 | 2808 | 'centralnotice-translate-to' => 'Ibersetze in', |
2437 | 2809 | 'centralnotice-translate' => 'Ibersetze', |
2438 | 2810 | 'centralnotice-english' => 'Änglisch', |
2439 | | - 'centralnotice-template-name' => 'Name vu dr Vorlag', |
| 2811 | + 'centralnotice-banner-name' => 'Name vu dr Vorlag', |
| 2812 | + 'centralnotice-banner' => 'Banner', |
| 2813 | + 'centralnotice-banner-heading' => 'Banner: $1', |
2440 | 2814 | 'centralnotice-templates' => 'Vorlage', |
2441 | 2815 | 'centralnotice-weight' => 'Gwicht', |
2442 | 2816 | 'centralnotice-locked' => 'Gsperrt', |
| 2817 | + 'centralnotice-notice' => 'Kampagne', |
| 2818 | + 'centralnotice-notice-heading' => 'Kampagne: $1', |
2443 | 2819 | 'centralnotice-notices' => 'Mäldige', |
2444 | 2820 | 'centralnotice-notice-exists' => 'Mäldig git s scho. |
2445 | 2821 | Nyt zuegfiegt.', |
| 2822 | + 'centralnotice-no-language' => 'Fir d Kampagne isch kei Sproch uusgwehlt wore. Si wird wäge däm nit zuegfiegt.', |
2446 | 2823 | 'centralnotice-template-exists' => 'Vorlag git s scho. |
2447 | 2824 | Nyt zuegfiegt.', |
2448 | | - 'centralnotice-notice-doesnt-exist' => 'Mäldig isch nit vorhande. |
| 2825 | + 'centralnotice-notice-doesnt-exist' => 'Kampagne isch nit vorhande.', |
| 2826 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampagne isch nit vorhande. |
2449 | 2827 | Useneh isch nit megli.', |
2450 | 2828 | 'centralnotice-template-still-bound' => 'Vorlag isch no an e Mäldig bunde. |
2451 | 2829 | Useneh nit megli.', |
— | — | @@ -2455,6 +2833,8 @@ |
2456 | 2834 | 'centralnotice-hours' => 'Stund', |
2457 | 2835 | 'centralnotice-min' => 'Minut', |
2458 | 2836 | 'centralnotice-project-lang' => 'Projäktsproch', |
| 2837 | + 'centralnotice-select' => 'Uuswehle: $1', |
| 2838 | + 'centralnotice-top-ten-languages' => 'Top-10-Sproche', |
2459 | 2839 | 'centralnotice-project-name' => 'Projäktname', |
2460 | 2840 | 'centralnotice-start-date' => 'Startdatum', |
2461 | 2841 | 'centralnotice-start-time' => 'Startzyt (UTC)', |
— | — | @@ -2466,7 +2846,7 @@ |
2467 | 2847 | 'centralnotice-template-already-exists' => 'Vorlage isch scho an d Kampagne bunde. |
2468 | 2848 | Nit zuegfiegt.', |
2469 | 2849 | 'centralnotice-preview-template' => 'Vorschau-Vorlag', |
2470 | | - 'centralnotice-start-hour' => 'Startzyt', |
| 2850 | + 'centralnotice-start-hour' => 'Startzyt (UTC)', |
2471 | 2851 | 'centralnotice-change-lang' => 'Ibersetzigssproch ändere', |
2472 | 2852 | 'centralnotice-weights' => 'Gwicht', |
2473 | 2853 | 'centralnotice-notice-is-locked' => 'Mäldig isch gsperrt. |
— | — | @@ -2483,12 +2863,29 @@ |
2484 | 2864 | Fieg eini zue.', |
2485 | 2865 | 'centralnotice-no-templates-translate' => 'S git kei Vorlage, wu Ibersetzige derfir z bearbeite wäre', |
2486 | 2866 | 'centralnotice-number-uses' => 'Nutzige', |
| 2867 | + 'centralnotice-settings' => 'Yystellige', |
2487 | 2868 | 'centralnotice-edit-template' => 'Vorlag bearbeite', |
| 2869 | + 'centralnotice-edit-template-summary' => 'Go ne lokalisierbari Nochricht aalege, lueg ass es e Bindestrich het in drej gschwerifte Chlammere, z. B. {{{jimbo-quote}}}.', |
2488 | 2870 | 'centralnotice-message' => 'Nochricht', |
2489 | 2871 | 'centralnotice-message-not-set' => 'Nochricht nit gsetzt', |
2490 | 2872 | 'centralnotice-clone' => 'Klon aalege', |
2491 | 2873 | 'centralnotice-clone-notice' => 'Leg e Kopii vu dr Vorlag aa', |
| 2874 | + 'centralnotice-clone-name' => 'Name:', |
2492 | 2875 | 'centralnotice-preview-all-template-translations' => 'Vorschau vu allene verfiegbare Ibersetzige vun ere Vorlag', |
| 2876 | + 'centralnotice-insert' => 'Yyfiege: $1', |
| 2877 | + 'centralnotice-hide-button' => 'Chnopf {{int:centralnotice-shared-hide}}', |
| 2878 | + 'centralnotice-collapse-button' => 'Chnopf "{{int:centralnotice-shared-collapse}}"', |
| 2879 | + 'centralnotice-expand-button' => 'Chnopf {{int:centralnotice-shared-collapse}}', |
| 2880 | + 'centralnotice-translate-button' => 'Ibersetzigshilfe-Chnopf', |
| 2881 | + 'centralnotice-donate-button' => 'Spändechnopf', |
| 2882 | + 'centralnotice-expanded-banner' => 'Uusklappt Banner', |
| 2883 | + 'centralnotice-collapsed-banner' => 'Yyklappt Banner', |
| 2884 | + 'centralnotice-banner-display' => 'Aazeige fir:', |
| 2885 | + 'centralnotice-banner-anonymous' => 'Nit aagmäldeti Benutzer', |
| 2886 | + 'centralnotice-banner-logged-in' => 'Aagmäldeti Benutzer', |
| 2887 | + 'centralnotice-banner-type' => 'Bannertyp:', |
| 2888 | + 'centralnotice-banner-hidable' => 'Statisch/Uusbländbar', |
| 2889 | + 'centralnotice-banner-collapsible' => 'Yyklappbar', |
2493 | 2890 | 'right-centralnotice-admin' => 'Zentrali Mäldige verwalte', |
2494 | 2891 | 'right-centralnotice-translate' => 'Zentrali Mäldige ibersetze', |
2495 | 2892 | 'action-centralnotice-admin' => 'Zentrali Sytenotize verwalte', |
— | — | @@ -2498,6 +2895,7 @@ |
2499 | 2896 | |
2500 | 2897 | /** Hebrew (עברית) |
2501 | 2898 | * @author Rotem Liss |
| 2899 | + * @author Rotemliss |
2502 | 2900 | */ |
2503 | 2901 | $messages['he'] = array( |
2504 | 2902 | 'centralnotice' => 'ניהול ההודעה המרכזית', |
— | — | @@ -2524,7 +2922,7 @@ |
2525 | 2923 | 'centralnotice-translate-to' => 'תרגום ל', |
2526 | 2924 | 'centralnotice-translate' => 'תרגום', |
2527 | 2925 | 'centralnotice-english' => 'אנגלית', |
2528 | | - 'centralnotice-template-name' => 'שם התבנית', |
| 2926 | + 'centralnotice-banner-name' => 'שם ההודעה', |
2529 | 2927 | 'centralnotice-templates' => 'תבניות', |
2530 | 2928 | 'centralnotice-weight' => 'משקל', |
2531 | 2929 | 'centralnotice-locked' => 'נעול', |
— | — | @@ -2622,7 +3020,7 @@ |
2623 | 3021 | 'centralnotice-translate-to' => 'Prevedi na', |
2624 | 3022 | 'centralnotice-translate' => 'Prevedi', |
2625 | 3023 | 'centralnotice-english' => 'Engleski', |
2626 | | - 'centralnotice-template-name' => 'Naziv predloška', |
| 3024 | + 'centralnotice-banner-name' => 'Naziv predloška', |
2627 | 3025 | 'centralnotice-templates' => 'Predlošci', |
2628 | 3026 | 'centralnotice-weight' => 'Težina', |
2629 | 3027 | 'centralnotice-locked' => 'Zaključano', |
— | — | @@ -2698,30 +3096,40 @@ |
2699 | 3097 | 'centralnotice-end-date' => 'Kónčny datum', |
2700 | 3098 | 'centralnotice-enabled' => 'Zmóžnjeny', |
2701 | 3099 | 'centralnotice-modify' => 'Wotpósłać', |
| 3100 | + 'centralnotice-save-banner' => 'Chorhoj składować', |
2702 | 3101 | 'centralnotice-preview' => 'Přehlad', |
2703 | 3102 | 'centralnotice-add-new' => 'Nowu centralnu zdźělenku přidać', |
2704 | 3103 | 'centralnotice-remove' => 'Wotstronić', |
2705 | 3104 | 'centralnotice-translate-heading' => 'Přełožk za $1', |
2706 | 3105 | 'centralnotice-manage' => 'Centralne powěsće zrjadować', |
| 3106 | + 'centralnotice-manage-templates' => 'Chorhoje zrjadować', |
2707 | 3107 | 'centralnotice-add' => 'Přidać', |
2708 | 3108 | 'centralnotice-add-notice' => 'Powěsć přidać', |
| 3109 | + 'centralnotice-edit-notice' => 'Kampanju wobdźěłać', |
2709 | 3110 | 'centralnotice-add-template' => 'Předłohu přidać', |
2710 | 3111 | 'centralnotice-show-notices' => 'Zdźělenki pokazać', |
2711 | 3112 | 'centralnotice-list-templates' => 'Předłohi nalistować', |
| 3113 | + 'centralnotice-multiple_languages' => 'wjacore ($1)', |
2712 | 3114 | 'centralnotice-translations' => 'Přełožki', |
2713 | 3115 | 'centralnotice-translate-to' => 'Přełožić do', |
2714 | 3116 | 'centralnotice-translate' => 'Přełožić', |
2715 | 3117 | 'centralnotice-english' => 'Jendźelšćina', |
2716 | | - 'centralnotice-template-name' => 'Mjeno předłohi', |
| 3118 | + 'centralnotice-banner-name' => 'Mjeno předłohi', |
| 3119 | + 'centralnotice-banner' => 'Chorhoj', |
| 3120 | + 'centralnotice-banner-heading' => 'Chorhoj: $1', |
2717 | 3121 | 'centralnotice-templates' => 'Předłohi', |
2718 | 3122 | 'centralnotice-weight' => 'Waha', |
2719 | 3123 | 'centralnotice-locked' => 'Zawrjeny', |
| 3124 | + 'centralnotice-notice' => 'Kampanja', |
| 3125 | + 'centralnotice-notice-heading' => 'Kampanja: $1', |
2720 | 3126 | 'centralnotice-notices' => 'Powěsće', |
2721 | 3127 | 'centralnotice-notice-exists' => 'Powěsć hižo eksistuje. |
2722 | 3128 | Njepřidawa so.', |
| 3129 | + 'centralnotice-no-language' => 'Za kampanju njeje so rěč wubrała. Přidawa so ničo.', |
2723 | 3130 | 'centralnotice-template-exists' => 'Předłoha hižo eksistuje. |
2724 | 3131 | Njepřidawa so.', |
2725 | | - 'centralnotice-notice-doesnt-exist' => 'Powěsć njeeksistuje. |
| 3132 | + 'centralnotice-notice-doesnt-exist' => 'Kampanja njeeksistuje.', |
| 3133 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampanja njeeksistuje. |
2726 | 3134 | Njewotstroni so ničo.', |
2727 | 3135 | 'centralnotice-template-still-bound' => 'Předłoha je hišće na powěsć zwjazana. |
2728 | 3136 | Njewotstronja so.', |
— | — | @@ -2732,6 +3140,8 @@ |
2733 | 3141 | 'centralnotice-hours' => 'Hodźina', |
2734 | 3142 | 'centralnotice-min' => 'Mjeńšina', |
2735 | 3143 | 'centralnotice-project-lang' => 'Projektowa rěč', |
| 3144 | + 'centralnotice-select' => 'Wubrać: $1', |
| 3145 | + 'centralnotice-top-ten-languages' => 'Najlěpšich 10 rěčow', |
2736 | 3146 | 'centralnotice-project-name' => 'Projektowe mjeno', |
2737 | 3147 | 'centralnotice-start-date' => 'Startowy datum', |
2738 | 3148 | 'centralnotice-start-time' => 'Startowy čas (UTC)', |
— | — | @@ -2744,7 +3154,7 @@ |
2745 | 3155 | 'centralnotice-template-already-exists' => 'Předłoha je hižo z kampanju zwjazana. |
2746 | 3156 | Njepřidawa so', |
2747 | 3157 | 'centralnotice-preview-template' => 'Přehlad předłohi', |
2748 | | - 'centralnotice-start-hour' => 'Startowy čas', |
| 3158 | + 'centralnotice-start-hour' => 'Startowy čas (GMT)', |
2749 | 3159 | 'centralnotice-change-lang' => 'Přełožowansku rěč změnić', |
2750 | 3160 | 'centralnotice-weights' => 'Wahi', |
2751 | 3161 | 'centralnotice-notice-is-locked' => 'Powěsć je zawrjena. |
— | — | @@ -2762,11 +3172,27 @@ |
2763 | 3173 | 'centralnotice-no-templates-translate' => 'Njejsu předłohi, za kotrež dyrbjeli so přełožki wobdźěłać', |
2764 | 3174 | 'centralnotice-number-uses' => 'Wužića', |
2765 | 3175 | 'centralnotice-edit-template' => 'Předłohu wobdźěłać', |
| 3176 | + 'centralnotice-edit-template-summary' => '↓ Zo by lokalizujomnu stronu wutowrił, wobdaj znamješkowy rjećazk z wjazawku z třomi zhibowanymi spinkami. na př. {{{citat-jimbo}}}.', |
2766 | 3177 | 'centralnotice-message' => 'Powěsć', |
2767 | 3178 | 'centralnotice-message-not-set' => 'Powěsć njepostajena', |
2768 | 3179 | 'centralnotice-clone' => 'Klonować', |
2769 | 3180 | 'centralnotice-clone-notice' => 'Kopiju předłohi wutworić', |
| 3181 | + 'centralnotice-clone-name' => 'Mjeno:', |
2770 | 3182 | 'centralnotice-preview-all-template-translations' => 'Přehlad wšěch k dispoziciji stejacych přełožkow předłohi', |
| 3183 | + 'centralnotice-insert' => 'Zasunyć: $1', |
| 3184 | + 'centralnotice-hide-button' => 'Tłóčatko {{int:centralnotice-shared-hide}}', |
| 3185 | + 'centralnotice-collapse-button' => 'Tłóčatko {{int:centralnotice-shared-collapse}}', |
| 3186 | + 'centralnotice-expand-button' => 'Tłóčatko {{int:centralnotice-shared-expand}}', |
| 3187 | + 'centralnotice-translate-button' => 'Tłóčatko přełožowanskeje pomocy', |
| 3188 | + 'centralnotice-donate-button' => 'Darjenske tłóčatko', |
| 3189 | + 'centralnotice-expanded-banner' => 'Rozfałdowana chorhoj', |
| 3190 | + 'centralnotice-collapsed-banner' => 'Fałdowana chorhoj', |
| 3191 | + 'centralnotice-banner-display' => 'Zwobraznić za:', |
| 3192 | + 'centralnotice-banner-anonymous' => 'Anonymni wužiwarjo', |
| 3193 | + 'centralnotice-banner-logged-in' => 'Přizjewjeni wužiwarjo', |
| 3194 | + 'centralnotice-banner-type' => 'Chorhojowy typ:', |
| 3195 | + 'centralnotice-banner-hidable' => 'Statiski/Chowajomny', |
| 3196 | + 'centralnotice-banner-collapsible' => 'Fałdujomny', |
2771 | 3197 | 'right-centralnotice-admin' => 'Centralne powěsće zrjadować', |
2772 | 3198 | 'right-centralnotice-translate' => 'Centralne powěsće přełožić', |
2773 | 3199 | 'action-centralnotice-admin' => 'Centralne powěsće zrjadować', |
— | — | @@ -2802,7 +3228,7 @@ |
2803 | 3229 | 'centralnotice-translate-to' => 'Lefordítás', |
2804 | 3230 | 'centralnotice-translate' => 'Lefordítás', |
2805 | 3231 | 'centralnotice-english' => 'angol', |
2806 | | - 'centralnotice-template-name' => 'Sablonnév', |
| 3232 | + 'centralnotice-banner-name' => 'Sablonnév', |
2807 | 3233 | 'centralnotice-templates' => 'Sablonok', |
2808 | 3234 | 'centralnotice-weight' => 'Súly', |
2809 | 3235 | 'centralnotice-locked' => 'Lezárva', |
— | — | @@ -2869,84 +3295,112 @@ |
2870 | 3296 | */ |
2871 | 3297 | $messages['ia'] = array( |
2872 | 3298 | 'centralnotice' => 'Administration de avisos central', |
2873 | | - 'noticetemplate' => 'Patrono de avisos central', |
| 3299 | + 'noticetemplate' => 'Bandiera pro avisos central', |
2874 | 3300 | 'centralnotice-desc' => 'Adde un aviso de sito central', |
2875 | 3301 | 'centralnotice-summary' => 'Iste modulo permitte modificar le avisos central actualmente configurate. |
2876 | 3302 | Illo pote tamben esser usate pro adder o remover avisos ancian.', |
2877 | | - 'centralnotice-query' => 'Modificar avisos actual', |
2878 | | - 'centralnotice-notice-name' => 'Nomine del aviso', |
| 3303 | + 'centralnotice-query' => 'Modificar campanias actual', |
| 3304 | + 'centralnotice-notice-name' => 'Nomine del campania', |
2879 | 3305 | 'centralnotice-end-date' => 'Data de fin', |
2880 | 3306 | 'centralnotice-enabled' => 'Active', |
2881 | 3307 | 'centralnotice-modify' => 'Submitter', |
| 3308 | + 'centralnotice-save-banner' => 'Salveguardar bandiera', |
2882 | 3309 | 'centralnotice-preview' => 'Previsualisar', |
2883 | | - 'centralnotice-add-new' => 'Adder un nove aviso central', |
| 3310 | + 'centralnotice-add-new' => 'Adder un nove campania', |
2884 | 3311 | 'centralnotice-remove' => 'Remover', |
2885 | 3312 | 'centralnotice-translate-heading' => 'Traduction de $1', |
2886 | | - 'centralnotice-manage' => 'Gerer aviso central', |
| 3313 | + 'centralnotice-manage' => 'Gerer campanias', |
| 3314 | + 'centralnotice-manage-templates' => 'Gerer bandieras', |
2887 | 3315 | 'centralnotice-add' => 'Adder', |
2888 | | - 'centralnotice-add-notice' => 'Adder un aviso', |
2889 | | - 'centralnotice-add-template' => 'Adder un patrono', |
2890 | | - 'centralnotice-show-notices' => 'Monstrar avisos', |
2891 | | - 'centralnotice-list-templates' => 'Listar patronos', |
| 3316 | + 'centralnotice-add-notice' => 'Adder un campania', |
| 3317 | + 'centralnotice-edit-notice' => 'Modificar campania', |
| 3318 | + 'centralnotice-add-template' => 'Adder un bandiera', |
| 3319 | + 'centralnotice-show-notices' => 'Monstrar campanias', |
| 3320 | + 'centralnotice-list-templates' => 'Listar bandieras', |
| 3321 | + 'centralnotice-multiple_languages' => 'multiple ($1)', |
2892 | 3322 | 'centralnotice-translations' => 'Traductiones', |
2893 | 3323 | 'centralnotice-translate-to' => 'Traducer in', |
2894 | 3324 | 'centralnotice-translate' => 'Traducer', |
2895 | 3325 | 'centralnotice-english' => 'Anglese', |
2896 | | - 'centralnotice-template-name' => 'Nomine del patrono', |
2897 | | - 'centralnotice-templates' => 'Patronos', |
| 3326 | + 'centralnotice-banner-name' => 'Nomine del bandiera', |
| 3327 | + 'centralnotice-banner' => 'Bandiera', |
| 3328 | + 'centralnotice-banner-heading' => 'Bandiera: $1', |
| 3329 | + 'centralnotice-templates' => 'Bandieras', |
2898 | 3330 | 'centralnotice-weight' => 'Peso', |
2899 | 3331 | 'centralnotice-locked' => 'Serrate', |
2900 | | - 'centralnotice-notices' => 'Avisos', |
2901 | | - 'centralnotice-notice-exists' => 'Aviso existe ja. |
2902 | | -Non es addite', |
2903 | | - 'centralnotice-template-exists' => 'Patrono existe ja. |
2904 | | -Non es addite', |
2905 | | - 'centralnotice-notice-doesnt-exist' => 'Aviso non existe. |
2906 | | -Nihil a remover', |
2907 | | - 'centralnotice-template-still-bound' => 'Patrono es ancora ligate a un aviso. |
| 3332 | + 'centralnotice-notice' => 'Campania', |
| 3333 | + 'centralnotice-notice-heading' => 'Campania: $1', |
| 3334 | + 'centralnotice-notices' => 'Campanias', |
| 3335 | + 'centralnotice-notice-exists' => 'Le campania ja existe. |
| 3336 | +Non es addite.', |
| 3337 | + 'centralnotice-no-language' => 'Nulle lingua esseva seligite pro le campania. Non es addite.', |
| 3338 | + 'centralnotice-template-exists' => 'Le bandiera ja existe. |
| 3339 | +Non es addite.', |
| 3340 | + 'centralnotice-notice-doesnt-exist' => 'Campania non existe.', |
| 3341 | + 'centralnotice-remove-notice-doesnt-exist' => 'Campania non existe. |
| 3342 | +Nihil a remover.', |
| 3343 | + 'centralnotice-template-still-bound' => 'Le bandiera es ancora ligate a un campania. |
2908 | 3344 | Non es removite.', |
2909 | | - 'centralnotice-template-body' => 'Corpore del patrono:', |
| 3345 | + 'centralnotice-template-body' => 'Texto del bandiera:', |
2910 | 3346 | 'centralnotice-day' => 'Die', |
2911 | 3347 | 'centralnotice-year' => 'Anno', |
2912 | 3348 | 'centralnotice-month' => 'Mense', |
2913 | 3349 | 'centralnotice-hours' => 'Hora', |
2914 | 3350 | 'centralnotice-min' => 'Minuta', |
2915 | 3351 | 'centralnotice-project-lang' => 'Lingua del projecto', |
| 3352 | + 'centralnotice-select' => 'Seliger: $1', |
| 3353 | + 'centralnotice-top-ten-languages' => 'Le prime 10 linguas', |
2916 | 3354 | 'centralnotice-project-name' => 'Nomine del projecto', |
2917 | 3355 | 'centralnotice-start-date' => 'Data de initio', |
2918 | | - 'centralnotice-start-time' => 'Tempore de initio (UTC)', |
2919 | | - 'centralnotice-assigned-templates' => 'Patronos assignate', |
2920 | | - 'centralnotice-no-templates' => 'Nulle patrono trovate. |
| 3356 | + 'centralnotice-start-time' => 'Hora de initio (UTC)', |
| 3357 | + 'centralnotice-assigned-templates' => 'Bandieras assignate', |
| 3358 | + 'centralnotice-no-templates' => 'Nulle bandiera trovate. |
2921 | 3359 | Adde alcunes!', |
2922 | | - 'centralnotice-no-templates-assigned' => 'Nulle patronos assignate al aviso. |
| 3360 | + 'centralnotice-no-templates-assigned' => 'Nulle bandiera assignate al campania. |
2923 | 3361 | Adde alcunes!', |
2924 | | - 'centralnotice-available-templates' => 'Patronos disponibile', |
2925 | | - 'centralnotice-template-already-exists' => 'Le patrono es ja ligate a un campania. |
2926 | | -Non es addite', |
2927 | | - 'centralnotice-preview-template' => 'Previsualisar patrono', |
2928 | | - 'centralnotice-start-hour' => 'Tempore de initio', |
| 3362 | + 'centralnotice-available-templates' => 'Bandieras disponibile', |
| 3363 | + 'centralnotice-template-already-exists' => 'Le bandiera es ja ligate a un campania. |
| 3364 | +Non es addite.', |
| 3365 | + 'centralnotice-preview-template' => 'Previsualisar bandiera', |
| 3366 | + 'centralnotice-start-hour' => 'Hora de initio (GMT)', |
2929 | 3367 | 'centralnotice-change-lang' => 'Cambiar lingua de traduction', |
2930 | 3368 | 'centralnotice-weights' => 'Pesos', |
2931 | | - 'centralnotice-notice-is-locked' => 'Aviso es serrate. |
2932 | | -Non es removite', |
2933 | | - 'centralnotice-overlap' => 'Aviso imbrica in le tempore de un altere aviso. |
2934 | | -Non es addite', |
| 3369 | + 'centralnotice-notice-is-locked' => 'Le campania es serrate. |
| 3370 | +Non es removite.', |
| 3371 | + 'centralnotice-overlap' => 'Le campania coincide con le tempore de un altere campania. |
| 3372 | +Non es addite.', |
2935 | 3373 | 'centralnotice-invalid-date-range' => 'Intervallo incorrecte de datas. |
2936 | 3374 | Non es actualisate', |
2937 | 3375 | 'centralnotice-null-string' => 'Non pote adder un catena de characteres vacue. |
2938 | 3376 | Non es addite', |
2939 | | - 'centralnotice-confirm-delete' => 'Es tu secur que tu vole deler iste articulo? |
| 3377 | + 'centralnotice-confirm-delete' => 'Es tu secur que tu vole deler iste elemento? |
2940 | 3378 | Iste action essera irrecuperabile.', |
2941 | | - 'centralnotice-no-notices-exist' => 'Nulle aviso existe. |
2942 | | -Adde un infra', |
2943 | | - 'centralnotice-no-templates-translate' => 'Non existe alcun patrono a traducer', |
| 3379 | + 'centralnotice-no-notices-exist' => 'Nulle campania existe. |
| 3380 | +Adde un hic infra.', |
| 3381 | + 'centralnotice-no-templates-translate' => 'Non existe bandieras pro le quales modificar traductiones.', |
2944 | 3382 | 'centralnotice-number-uses' => 'Usos', |
2945 | | - 'centralnotice-edit-template' => 'Modificar patrono', |
| 3383 | + 'centralnotice-edit-template' => 'Modificar bandiera', |
| 3384 | + 'centralnotice-edit-template-summary' => 'Pro crear un message localisabile, include un texto con tracto de union in tres accolladas, p.ex. {{{jimbo-quote}}}.', |
2946 | 3385 | 'centralnotice-message' => 'Message', |
2947 | 3386 | 'centralnotice-message-not-set' => 'Message non definite', |
2948 | 3387 | 'centralnotice-clone' => 'Clonar', |
2949 | | - 'centralnotice-clone-notice' => 'Crear un copia del patrono', |
2950 | | - 'centralnotice-preview-all-template-translations' => 'Previsualiar tote le traductiones disponibile del patrono', |
| 3388 | + 'centralnotice-clone-notice' => 'Crear un copia del bandiera', |
| 3389 | + 'centralnotice-clone-name' => 'Nomine:', |
| 3390 | + 'centralnotice-preview-all-template-translations' => 'Previsualiar tote le traductiones disponibile del bandiera', |
| 3391 | + 'centralnotice-insert' => 'Inserer: $1', |
| 3392 | + 'centralnotice-hide-button' => 'Button "{{int:centralnotice-shared-hide}}"', |
| 3393 | + 'centralnotice-collapse-button' => 'Button "{{int:centralnotice-shared-collapse}}"', |
| 3394 | + 'centralnotice-expand-button' => 'Button "{{int:centralnotice-shared-expand}}"', |
| 3395 | + 'centralnotice-translate-button' => 'Button "Adjuta de traduction"', |
| 3396 | + 'centralnotice-donate-button' => 'Button "Donar"', |
| 3397 | + 'centralnotice-expanded-banner' => 'Bandiera expandite', |
| 3398 | + 'centralnotice-collapsed-banner' => 'Bandiera plicate', |
| 3399 | + 'centralnotice-banner-display' => 'Presentar a:', |
| 3400 | + 'centralnotice-banner-anonymous' => 'Usatores anonyme', |
| 3401 | + 'centralnotice-banner-logged-in' => 'Usatores authenticate', |
| 3402 | + 'centralnotice-banner-type' => 'Typo de bandiera:', |
| 3403 | + 'centralnotice-banner-hidable' => 'Static/Celabile', |
| 3404 | + 'centralnotice-banner-collapsible' => 'Plicabile', |
2951 | 3405 | 'right-centralnotice-admin' => 'Gerer avisos central', |
2952 | 3406 | 'right-centralnotice-translate' => 'Traducer avisos central', |
2953 | 3407 | 'action-centralnotice-admin' => 'gerer avisos central', |
— | — | @@ -2956,6 +3410,8 @@ |
2957 | 3411 | |
2958 | 3412 | /** Indonesian (Bahasa Indonesia) |
2959 | 3413 | * @author Bennylin |
| 3414 | + * @author Farras |
| 3415 | + * @author Irwangatot |
2960 | 3416 | * @author IvanLanin |
2961 | 3417 | * @author Rex |
2962 | 3418 | */ |
— | — | @@ -2970,31 +3426,41 @@ |
2971 | 3427 | 'centralnotice-end-date' => 'Tanggal selesai', |
2972 | 3428 | 'centralnotice-enabled' => 'Diaktifkan', |
2973 | 3429 | 'centralnotice-modify' => 'Kirim', |
| 3430 | + 'centralnotice-save-banner' => 'Panji simpan', |
2974 | 3431 | 'centralnotice-preview' => 'Pratayang', |
2975 | 3432 | 'centralnotice-add-new' => 'Buat pengumuman sentral baru', |
2976 | 3433 | 'centralnotice-remove' => 'Hapus', |
2977 | 3434 | 'centralnotice-translate-heading' => 'Terjemahan untuk $1', |
2978 | 3435 | 'centralnotice-manage' => 'Pengaturan pengumuman sentral', |
| 3436 | + 'centralnotice-manage-templates' => 'Kelola spanduk', |
2979 | 3437 | 'centralnotice-add' => 'Tambahkan', |
2980 | 3438 | 'centralnotice-add-notice' => 'Tambah pengumuman', |
| 3439 | + 'centralnotice-edit-notice' => 'Sunting kampanye', |
2981 | 3440 | 'centralnotice-add-template' => 'Tambah templat', |
2982 | 3441 | 'centralnotice-show-notices' => 'Tampilkan pengumuman', |
2983 | 3442 | 'centralnotice-list-templates' => 'Daftar templat', |
| 3443 | + 'centralnotice-multiple_languages' => 'ganda ($1)', |
2984 | 3444 | 'centralnotice-translations' => 'Terjemahan', |
2985 | 3445 | 'centralnotice-translate-to' => 'Terjemahkan ke', |
2986 | 3446 | 'centralnotice-translate' => 'Terjemahkan', |
2987 | 3447 | 'centralnotice-english' => 'Bahasa Inggris', |
2988 | | - 'centralnotice-template-name' => 'Nama templat', |
| 3448 | + 'centralnotice-banner-name' => 'Nama templat', |
| 3449 | + 'centralnotice-banner' => 'Spanduk', |
| 3450 | + 'centralnotice-banner-heading' => 'Panji: $1', |
2989 | 3451 | 'centralnotice-templates' => 'Templat', |
2990 | 3452 | 'centralnotice-weight' => 'Bobot', |
2991 | 3453 | 'centralnotice-locked' => 'Terkunci', |
| 3454 | + 'centralnotice-notice' => 'Kampanye', |
| 3455 | + 'centralnotice-notice-heading' => 'Kampanye: $1', |
2992 | 3456 | 'centralnotice-notices' => 'Pengumuman', |
2993 | 3457 | 'centralnotice-notice-exists' => 'Pengumuman sudah ada. |
2994 | 3458 | Batal menambahkan', |
| 3459 | + 'centralnotice-no-language' => 'Tidak ada bahasa yang dipilih untuk kampanye. Tidak menambahkan.', |
2995 | 3460 | 'centralnotice-template-exists' => 'Templat sudah ada. |
2996 | 3461 | Batal menambahkan', |
2997 | | - 'centralnotice-notice-doesnt-exist' => 'Pengumuman tidak ditemukan. |
2998 | | -Batal menghapus', |
| 3462 | + 'centralnotice-notice-doesnt-exist' => 'Kampanye tidak ditemukan.', |
| 3463 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampanye tidak ditemukan. |
| 3464 | +Tidak ada yang perlu dihapus.', |
2999 | 3465 | 'centralnotice-template-still-bound' => 'Templat masih digunakan dalam suatu pengumuman. |
3000 | 3466 | Batal menghapus', |
3001 | 3467 | 'centralnotice-template-body' => 'Isi templat:', |
— | — | @@ -3004,6 +3470,8 @@ |
3005 | 3471 | 'centralnotice-hours' => 'Jam', |
3006 | 3472 | 'centralnotice-min' => 'Menit', |
3007 | 3473 | 'centralnotice-project-lang' => 'Bahasa proyek', |
| 3474 | + 'centralnotice-select' => 'Pilih: $1', |
| 3475 | + 'centralnotice-top-ten-languages' => '10 bahasa teratas', |
3008 | 3476 | 'centralnotice-project-name' => 'Nama proyek', |
3009 | 3477 | 'centralnotice-start-date' => 'Tanggal mulai', |
3010 | 3478 | 'centralnotice-start-time' => 'Waktu mulai (UTC)', |
— | — | @@ -3016,7 +3484,7 @@ |
3017 | 3485 | 'centralnotice-template-already-exists' => 'Templat sudah digunakan dalam kampanye. |
3018 | 3486 | Batal menambahkan', |
3019 | 3487 | 'centralnotice-preview-template' => 'Lihat pratayang templat', |
3020 | | - 'centralnotice-start-hour' => 'Waktu mulai', |
| 3488 | + 'centralnotice-start-hour' => 'Waktu mulai (GMT)', |
3021 | 3489 | 'centralnotice-change-lang' => 'Ubah bahasa terjemahan', |
3022 | 3490 | 'centralnotice-weights' => 'Bobot', |
3023 | 3491 | 'centralnotice-notice-is-locked' => 'Pengumuman terkunci. |
— | — | @@ -3034,11 +3502,27 @@ |
3035 | 3503 | 'centralnotice-no-templates-translate' => 'Tidak ada templat yang dapat diterjemahkan', |
3036 | 3504 | 'centralnotice-number-uses' => 'Menggunakan', |
3037 | 3505 | 'centralnotice-edit-template' => 'Sunting templat', |
| 3506 | + 'centralnotice-edit-template-summary' => 'Untuk membuat dilokalisasi pesan, sertakan string ditulis dengan tanda penghubung di tiga kurung, misalnya {{{jimbo-quote}}}.', |
3038 | 3507 | 'centralnotice-message' => 'Pesan', |
3039 | 3508 | 'centralnotice-message-not-set' => 'Pengaturan pesan tidak dilakukan', |
3040 | 3509 | 'centralnotice-clone' => 'Duplikat', |
3041 | 3510 | 'centralnotice-clone-notice' => 'Buat duplikat templat ini', |
| 3511 | + 'centralnotice-clone-name' => 'Nama:', |
3042 | 3512 | 'centralnotice-preview-all-template-translations' => 'Lihat pratayang semua terjemahan templat yang tersedia', |
| 3513 | + 'centralnotice-insert' => 'Sisipkan: $1', |
| 3514 | + 'centralnotice-hide-button' => 'Tombol {{int:centralnotice-shared-hide}}', |
| 3515 | + 'centralnotice-collapse-button' => 'Tombol {{int:centralnotice-shared-collapse}}', |
| 3516 | + 'centralnotice-expand-button' => 'Tombol {{int:centralnotice-shared-expand}}', |
| 3517 | + 'centralnotice-translate-button' => 'Tombol bantu terjemahkan', |
| 3518 | + 'centralnotice-donate-button' => 'Tombol sumbangan', |
| 3519 | + 'centralnotice-expanded-banner' => 'Panji perluas', |
| 3520 | + 'centralnotice-collapsed-banner' => 'Panji buka', |
| 3521 | + 'centralnotice-banner-display' => 'Tampilkan ke:', |
| 3522 | + 'centralnotice-banner-anonymous' => 'Pengguna anonim', |
| 3523 | + 'centralnotice-banner-logged-in' => 'Pengguna telah masuk log', |
| 3524 | + 'centralnotice-banner-type' => 'Jenis panji:', |
| 3525 | + 'centralnotice-banner-hidable' => 'Statis/Dapat disembunyikan', |
| 3526 | + 'centralnotice-banner-collapsible' => 'Dapat dibuka', |
3043 | 3527 | 'right-centralnotice-admin' => 'Mengatur pengumuman sentral', |
3044 | 3528 | 'right-centralnotice-translate' => 'Menerjemahkan pengumuman sentral', |
3045 | 3529 | 'action-centralnotice-admin' => 'mengatur pengumuman sentral', |
— | — | @@ -3046,9 +3530,29 @@ |
3047 | 3531 | 'centralnotice-preferred' => 'Preferensi', |
3048 | 3532 | ); |
3049 | 3533 | |
3050 | | -/** Igbo (Igbo) */ |
| 3534 | +/** Igbo (Igbo) |
| 3535 | + * @author Ukabia |
| 3536 | + */ |
3051 | 3537 | $messages['ig'] = array( |
| 3538 | + 'centralnotice-modify' => 'Dànyé', |
| 3539 | + 'centralnotice-preview' => 'Lètú', |
| 3540 | + 'centralnotice-remove' => 'Wéfù', |
| 3541 | + 'centralnotice-add' => 'Tinyé', |
| 3542 | + 'centralnotice-translations' => 'Nkuwaria na asụsụ ozor', |
| 3543 | + 'centralnotice-translate-to' => 'Kuwaria na', |
| 3544 | + 'centralnotice-translate' => 'Kuwaria na asụsụ ozor', |
| 3545 | + 'centralnotice-english' => 'Inglish', |
| 3546 | + 'centralnotice-weight' => 'Ọ zá', |
| 3547 | + 'centralnotice-locked' => 'Gbàchịrị', |
| 3548 | + 'centralnotice-day' => 'Úbọchi', |
| 3549 | + 'centralnotice-year' => 'Afọr', |
| 3550 | + 'centralnotice-month' => 'Önwa', |
| 3551 | + 'centralnotice-hours' => 'Àmànì', |
| 3552 | + 'centralnotice-project-lang' => 'Asụsụ orürü', |
| 3553 | + 'centralnotice-project-name' => 'Áhà orürü', |
| 3554 | + 'centralnotice-start-date' => 'Bìdó ubochi', |
3052 | 3555 | 'centralnotice-message' => 'Ozi', |
| 3556 | + 'centralnotice-clone-name' => 'Áhà', |
3053 | 3557 | ); |
3054 | 3558 | |
3055 | 3559 | /** Ido (Ido) |
— | — | @@ -3068,6 +3572,7 @@ |
3069 | 3573 | 'centralnotice-month' => 'Monato', |
3070 | 3574 | 'centralnotice-hours' => 'Horo', |
3071 | 3575 | 'centralnotice-min' => 'Minuto', |
| 3576 | + 'centralnotice-number-uses' => 'Uzadi', |
3072 | 3577 | ); |
3073 | 3578 | |
3074 | 3579 | /** Icelandic (Íslenska) |
— | — | @@ -3107,7 +3612,7 @@ |
3108 | 3613 | 'centralnotice-translate-to' => 'Traduci in', |
3109 | 3614 | 'centralnotice-translate' => 'Traduci', |
3110 | 3615 | 'centralnotice-english' => 'Inglese', |
3111 | | - 'centralnotice-template-name' => 'Nome template', |
| 3616 | + 'centralnotice-banner-name' => 'Nome template', |
3112 | 3617 | 'centralnotice-templates' => 'Template', |
3113 | 3618 | 'centralnotice-weight' => 'Dimensione', |
3114 | 3619 | 'centralnotice-locked' => 'Bloccato', |
— | — | @@ -3163,6 +3668,8 @@ |
3164 | 3669 | * @author Fryed-peach |
3165 | 3670 | * @author Hosiryuhosi |
3166 | 3671 | * @author JtFuruhata |
| 3672 | + * @author Klutzy |
| 3673 | + * @author 青子守歌 |
3167 | 3674 | */ |
3168 | 3675 | $messages['ja'] = array( |
3169 | 3676 | 'centralnotice' => '中央管理通知の管理', |
— | — | @@ -3174,28 +3681,39 @@ |
3175 | 3682 | 'centralnotice-end-date' => '終了日', |
3176 | 3683 | 'centralnotice-enabled' => '有効', |
3177 | 3684 | 'centralnotice-modify' => '投稿', |
| 3685 | + 'centralnotice-save-banner' => 'テンプレートを保存', |
3178 | 3686 | 'centralnotice-preview' => 'プレビュー', |
3179 | | - 'centralnotice-add-new' => '新しい中央管理通知を追加する', |
| 3687 | + 'centralnotice-add-new' => '新しい通知を追加する', |
3180 | 3688 | 'centralnotice-remove' => '除去', |
3181 | 3689 | 'centralnotice-translate-heading' => '$1の翻訳', |
3182 | | - 'centralnotice-manage' => '中央管理通知の管理', |
| 3690 | + 'centralnotice-manage' => '通知の管理', |
| 3691 | + 'centralnotice-manage-templates' => 'テンプレートを管理', |
3183 | 3692 | 'centralnotice-add' => '追加', |
3184 | 3693 | 'centralnotice-add-notice' => '通知を追加', |
| 3694 | + 'centralnotice-edit-notice' => '通知を編集', |
3185 | 3695 | 'centralnotice-add-template' => 'テンプレートを追加', |
3186 | 3696 | 'centralnotice-show-notices' => '通知を表示', |
3187 | 3697 | 'centralnotice-list-templates' => 'テンプレートを一覧表示', |
| 3698 | + 'centralnotice-multiple_languages' => '複数($1)', |
3188 | 3699 | 'centralnotice-translations' => '翻訳', |
3189 | 3700 | 'centralnotice-translate-to' => '翻訳先', |
3190 | 3701 | 'centralnotice-translate' => '翻訳', |
3191 | 3702 | 'centralnotice-english' => '英語', |
3192 | | - 'centralnotice-template-name' => 'テンプレート名', |
| 3703 | + 'centralnotice-banner-name' => 'テンプレート名', |
| 3704 | + 'centralnotice-banner' => 'テンプレート', |
| 3705 | + 'centralnotice-banner-heading' => 'テンプレート:$1', |
3193 | 3706 | 'centralnotice-templates' => 'テンプレート', |
3194 | 3707 | 'centralnotice-weight' => '重さ', |
3195 | 3708 | 'centralnotice-locked' => 'ロック中', |
| 3709 | + 'centralnotice-notice' => '通知', |
| 3710 | + 'centralnotice-notice-heading' => '通知:$1', |
3196 | 3711 | 'centralnotice-notices' => '通知一覧', |
3197 | 3712 | 'centralnotice-notice-exists' => '通知がすでに存在します。追加できませんでした。', |
| 3713 | + 'centralnotice-no-language' => '通知する言語が指定されませんでした。追加されません。', |
3198 | 3714 | 'centralnotice-template-exists' => 'テンプレートがすでに存在します。追加できませんでした。', |
3199 | | - 'centralnotice-notice-doesnt-exist' => '通知が存在しません。除去できませんでした。', |
| 3715 | + 'centralnotice-notice-doesnt-exist' => '通知が存在しません。', |
| 3716 | + 'centralnotice-remove-notice-doesnt-exist' => '通知は存在しません。 |
| 3717 | +除去できませんでした。', |
3200 | 3718 | 'centralnotice-template-still-bound' => 'そのテンプレートはまだ通知に使用されています。除去できませんでした。', |
3201 | 3719 | 'centralnotice-template-body' => '翻訳本文:', |
3202 | 3720 | 'centralnotice-day' => '日', |
— | — | @@ -3204,6 +3722,8 @@ |
3205 | 3723 | 'centralnotice-hours' => '時', |
3206 | 3724 | 'centralnotice-min' => '分', |
3207 | 3725 | 'centralnotice-project-lang' => 'プロジェクト言語', |
| 3726 | + 'centralnotice-select' => '選択:$1', |
| 3727 | + 'centralnotice-top-ten-languages' => '上位10言語', |
3208 | 3728 | 'centralnotice-project-name' => 'プロジェクト名', |
3209 | 3729 | 'centralnotice-start-date' => '開始日', |
3210 | 3730 | 'centralnotice-start-time' => '開始時間 (UTC)', |
— | — | @@ -3213,7 +3733,7 @@ |
3214 | 3734 | 'centralnotice-available-templates' => '利用可能なテンプレート', |
3215 | 3735 | 'centralnotice-template-already-exists' => 'テンプレートが特定の目的に使用されています。追加できません。', |
3216 | 3736 | 'centralnotice-preview-template' => 'テンプレートをプレビューする', |
3217 | | - 'centralnotice-start-hour' => '開始時刻', |
| 3737 | + 'centralnotice-start-hour' => '開始時刻(UTC)', |
3218 | 3738 | 'centralnotice-change-lang' => '翻訳言語を変更する', |
3219 | 3739 | 'centralnotice-weights' => '重要性', |
3220 | 3740 | 'centralnotice-notice-is-locked' => '通知がロックされています。除去できません。', |
— | — | @@ -3225,11 +3745,27 @@ |
3226 | 3746 | 'centralnotice-no-templates-translate' => '翻訳すべきテンプレートはありません。', |
3227 | 3747 | 'centralnotice-number-uses' => '使用目的', |
3228 | 3748 | 'centralnotice-edit-template' => 'テンプレートを編集する', |
| 3749 | + 'centralnotice-edit-template-summary' => 'ローカライズ可能なメッセージを作成するには、ハイフンで結合した文字列を3つの波括弧で囲います。例: {{{jimbo-quote}}}。', |
3229 | 3750 | 'centralnotice-message' => 'メッセージ', |
3230 | 3751 | 'centralnotice-message-not-set' => 'メッセージ未指定', |
3231 | 3752 | 'centralnotice-clone' => '複製', |
3232 | 3753 | 'centralnotice-clone-notice' => 'テンプレートの複製を作成する', |
| 3754 | + 'centralnotice-clone-name' => '名前:', |
3233 | 3755 | 'centralnotice-preview-all-template-translations' => 'テンプレートのすべての利用可能な翻訳をプレビューする', |
| 3756 | + 'centralnotice-insert' => '挿入:$1', |
| 3757 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}}ボタン', |
| 3758 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}}ボタン', |
| 3759 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}}ボタン', |
| 3760 | + 'centralnotice-translate-button' => '翻訳協力ボタン', |
| 3761 | + 'centralnotice-donate-button' => '寄付ボタン', |
| 3762 | + 'centralnotice-expanded-banner' => '展開されたテンプレート', |
| 3763 | + 'centralnotice-collapsed-banner' => '折りたたまれたテンプレート', |
| 3764 | + 'centralnotice-banner-display' => '表示:', |
| 3765 | + 'centralnotice-banner-anonymous' => '匿名利用者', |
| 3766 | + 'centralnotice-banner-logged-in' => 'ログイン利用者', |
| 3767 | + 'centralnotice-banner-type' => 'テンプレートの種類:', |
| 3768 | + 'centralnotice-banner-hidable' => '固定/非表示可', |
| 3769 | + 'centralnotice-banner-collapsible' => '折りたたみ', |
3234 | 3770 | 'right-centralnotice-admin' => '中央管理通知の管理', |
3235 | 3771 | 'right-centralnotice-translate' => '中央管理通知の翻訳', |
3236 | 3772 | 'action-centralnotice-admin' => '中央管理通知の管理', |
— | — | @@ -3273,7 +3809,7 @@ |
3274 | 3810 | 'centralnotice-translate-to' => 'Terjemahaké menyang', |
3275 | 3811 | 'centralnotice-translate' => 'Terjemah', |
3276 | 3812 | 'centralnotice-english' => 'Basa Inggris', |
3277 | | - 'centralnotice-template-name' => 'Jeneng cithakan', |
| 3813 | + 'centralnotice-banner-name' => 'Jeneng cithakan', |
3278 | 3814 | 'centralnotice-templates' => 'Cithakan', |
3279 | 3815 | 'centralnotice-weight' => 'Bobot', |
3280 | 3816 | 'centralnotice-locked' => 'Kakunci', |
— | — | @@ -3356,7 +3892,7 @@ |
3357 | 3893 | 'centralnotice-translate-to' => 'გადათარგმნა', |
3358 | 3894 | 'centralnotice-translate' => 'თარგმნა', |
3359 | 3895 | 'centralnotice-english' => 'ინგლისური', |
3360 | | - 'centralnotice-template-name' => 'თარგების სახელი', |
| 3896 | + 'centralnotice-banner-name' => 'თარგების სახელი', |
3361 | 3897 | 'centralnotice-templates' => 'თარგები', |
3362 | 3898 | 'centralnotice-weight' => 'სიგანე', |
3363 | 3899 | 'centralnotice-locked' => 'დაბლოკილი', |
— | — | @@ -3387,6 +3923,7 @@ |
3388 | 3924 | 'centralnotice-message-not-set' => 'შეტყობინება არ არის', |
3389 | 3925 | 'centralnotice-clone' => 'კლონირება', |
3390 | 3926 | 'centralnotice-clone-notice' => 'თარგის ასლის შექმნა', |
| 3927 | + 'right-centralnotice-translate' => 'ცენტრალური შეტყობინებების თარგმანი', |
3391 | 3928 | ); |
3392 | 3929 | |
3393 | 3930 | /** Khmer (ភាសាខ្មែរ) |
— | — | @@ -3406,7 +3943,7 @@ |
3407 | 3944 | 'centralnotice-translate-to' => 'បកប្រែទៅ', |
3408 | 3945 | 'centralnotice-translate' => 'បកប្រែ', |
3409 | 3946 | 'centralnotice-english' => 'ភាសាអង់គ្លេស', |
3410 | | - 'centralnotice-template-name' => 'ឈ្មោះទំព័រគំរូ', |
| 3947 | + 'centralnotice-banner-name' => 'ឈ្មោះទំព័រគំរូ', |
3411 | 3948 | 'centralnotice-templates' => 'ទំព័រគំរូ', |
3412 | 3949 | 'centralnotice-weight' => 'ទម្ងន់', |
3413 | 3950 | 'centralnotice-locked' => 'បានចាក់សោ', |
— | — | @@ -3442,6 +3979,7 @@ |
3443 | 3980 | ); |
3444 | 3981 | |
3445 | 3982 | /** Korean (한국어) |
| 3983 | + * @author Gapo |
3446 | 3984 | * @author Klutzy |
3447 | 3985 | * @author Kwj2772 |
3448 | 3986 | * @author Yknok29 |
— | — | @@ -3461,8 +3999,10 @@ |
3462 | 4000 | 'centralnotice-remove' => '제거', |
3463 | 4001 | 'centralnotice-translate-heading' => '$1에 대한 번역', |
3464 | 4002 | 'centralnotice-manage' => '중앙 공지 관리', |
| 4003 | + 'centralnotice-manage-templates' => '배너 관리하기', |
3465 | 4004 | 'centralnotice-add' => '추가', |
3466 | 4005 | 'centralnotice-add-notice' => '알림을 추가하기', |
| 4006 | + 'centralnotice-edit-notice' => '전체공지 편집', |
3467 | 4007 | 'centralnotice-add-template' => '틀을 추가하기', |
3468 | 4008 | 'centralnotice-show-notices' => '공지 표시하기', |
3469 | 4009 | 'centralnotice-list-templates' => '템플릿 목록 표시하기', |
— | — | @@ -3470,15 +4010,17 @@ |
3471 | 4011 | 'centralnotice-translate-to' => '번역할 언어', |
3472 | 4012 | 'centralnotice-translate' => '번역하기', |
3473 | 4013 | 'centralnotice-english' => '영어', |
3474 | | - 'centralnotice-template-name' => '틀 이름', |
| 4014 | + 'centralnotice-banner-name' => '틀 이름', |
3475 | 4015 | 'centralnotice-templates' => '틀', |
3476 | 4016 | 'centralnotice-weight' => '중요도', |
3477 | 4017 | 'centralnotice-locked' => '잠김', |
| 4018 | + 'centralnotice-notice' => '전체공지', |
3478 | 4019 | 'centralnotice-notices' => '공지', |
3479 | 4020 | 'centralnotice-notice-exists' => '이미 공지가 존재합니다. 공지를 추가할 수 없습니다.', |
3480 | 4021 | 'centralnotice-template-exists' => '틀이 이미 존재합니다. |
3481 | 4022 | 추가하지 않았습니다.', |
3482 | | - 'centralnotice-notice-doesnt-exist' => '공지가 없습니다. 삭제할 수 없습니다.', |
| 4023 | + 'centralnotice-notice-doesnt-exist' => '전체공지가 존재하지 않습니다.', |
| 4024 | + 'centralnotice-remove-notice-doesnt-exist' => '전체공지가 존재하지 않습니다. 삭제할 수 없습니다.', |
3483 | 4025 | 'centralnotice-template-still-bound' => '템플릿이 공지에 사용되고 있습니다. 삭제할 수 없습니다.', |
3484 | 4026 | 'centralnotice-template-body' => '템플릿 내용:', |
3485 | 4027 | 'centralnotice-day' => '일', |
— | — | @@ -3496,7 +4038,7 @@ |
3497 | 4039 | 'centralnotice-available-templates' => '사용 가능한 템플릿 목록', |
3498 | 4040 | 'centralnotice-template-already-exists' => '템플릿이 이미 설정되어 있습니다. 추가할 수 없습니다.', |
3499 | 4041 | 'centralnotice-preview-template' => '틀 미리 보기', |
3500 | | - 'centralnotice-start-hour' => '시작 시간', |
| 4042 | + 'centralnotice-start-hour' => '시작 시간 (GMT)', |
3501 | 4043 | 'centralnotice-change-lang' => '번역할 언어 변경', |
3502 | 4044 | 'centralnotice-weights' => '중요도', |
3503 | 4045 | 'centralnotice-notice-is-locked' => '공지가 잠겼습니다. |
— | — | @@ -3510,10 +4052,12 @@ |
3511 | 4053 | 'centralnotice-no-templates-translate' => '번역해야 할 템플릿이 없습니다.', |
3512 | 4054 | 'centralnotice-number-uses' => '사용 횟수', |
3513 | 4055 | 'centralnotice-edit-template' => '틀 편집하기', |
| 4056 | + 'centralnotice-edit-template-summary' => '번역이 가능한 메세지를 만드려면, {{{jimbo-quote}}}와 같이 중괄호로 세 번 감싸주면 됩니다.', |
3514 | 4057 | 'centralnotice-message' => '메시지', |
3515 | 4058 | 'centralnotice-message-not-set' => '메시지가 정의되지 않았습니다.', |
3516 | 4059 | 'centralnotice-clone' => '사본', |
3517 | 4060 | 'centralnotice-clone-notice' => '이 틀의 사본을 만들기', |
| 4061 | + 'centralnotice-clone-name' => '이름:', |
3518 | 4062 | 'centralnotice-preview-all-template-translations' => '템플렛의 모든 번역 미리 보기', |
3519 | 4063 | 'right-centralnotice-admin' => '중앙 공지 관리', |
3520 | 4064 | 'right-centralnotice-translate' => '중앙 공지 번역', |
— | — | @@ -3550,7 +4094,7 @@ |
3551 | 4095 | 'centralnotice-translate-to' => 'Övversäze noh', |
3552 | 4096 | 'centralnotice-translate' => 'Övversäze', |
3553 | 4097 | 'centralnotice-english' => 'Englesch', |
3554 | | - 'centralnotice-template-name' => 'Dä Schablon iere Name', |
| 4098 | + 'centralnotice-banner-name' => 'Dä Schablon iere Name', |
3555 | 4099 | 'centralnotice-templates' => 'Schablone', |
3556 | 4100 | 'centralnotice-weight' => 'Jeweesch', |
3557 | 4101 | 'centralnotice-locked' => 'jespert', |
— | — | @@ -3618,10 +4162,10 @@ |
3619 | 4163 | */ |
3620 | 4164 | $messages['kw'] = array( |
3621 | 4165 | 'centralnotice-english' => 'Sowsnek', |
3622 | | - 'centralnotice-day' => 'Dydh', |
| 4166 | + 'centralnotice-day' => 'Dedh', |
3623 | 4167 | 'centralnotice-year' => 'Bledhen', |
3624 | 4168 | 'centralnotice-month' => 'Mis', |
3625 | | - 'centralnotice-edit-template' => 'Chanjya skantlyn', |
| 4169 | + 'centralnotice-edit-template' => 'Chanjya an baner', |
3626 | 4170 | ); |
3627 | 4171 | |
3628 | 4172 | /** Luxembourgish (Lëtzebuergesch) |
— | — | @@ -3638,33 +4182,43 @@ |
3639 | 4183 | 'centralnotice-end-date' => 'Schlussdatum', |
3640 | 4184 | 'centralnotice-enabled' => 'Aktivéiert', |
3641 | 4185 | 'centralnotice-modify' => 'Späicheren', |
| 4186 | + 'centralnotice-save-banner' => 'Banner späicheren', |
3642 | 4187 | 'centralnotice-preview' => 'Weisen ouni ze späicheren', |
3643 | 4188 | 'centralnotice-add-new' => 'Eng nei zentral Matdeelung derbäisetzen', |
3644 | 4189 | 'centralnotice-remove' => 'Ewechhuelen', |
3645 | 4190 | 'centralnotice-translate-heading' => 'Iwwersetzung vu(n) $1', |
3646 | 4191 | 'centralnotice-manage' => 'Zentralmatdeelunge geréieren', |
| 4192 | + 'centralnotice-manage-templates' => 'Bannere geréieren', |
3647 | 4193 | 'centralnotice-add' => 'Derbäisetzen', |
3648 | 4194 | 'centralnotice-add-notice' => 'Eng Matdeelung derbäisetzen', |
3649 | | - 'centralnotice-add-template' => 'Eng Schabloun derbäisetzen', |
| 4195 | + 'centralnotice-edit-notice' => 'Campagne änneren', |
| 4196 | + 'centralnotice-add-template' => 'E Banner derbäisetzen', |
3650 | 4197 | 'centralnotice-show-notices' => 'Matdeelunge weisen', |
3651 | | - 'centralnotice-list-templates' => 'Lëscht vun de Schablounen', |
| 4198 | + 'centralnotice-list-templates' => 'Lëscht vun de Banneren', |
| 4199 | + 'centralnotice-multiple_languages' => 'méi ($1)', |
3652 | 4200 | 'centralnotice-translations' => 'Iwwersetzungen', |
3653 | 4201 | 'centralnotice-translate-to' => 'Iwwersetzen op', |
3654 | 4202 | 'centralnotice-translate' => 'Iwwersetzen', |
3655 | 4203 | 'centralnotice-english' => 'Englesch', |
3656 | | - 'centralnotice-template-name' => 'Numm vun der Schabloun', |
3657 | | - 'centralnotice-templates' => 'Schablounen', |
| 4204 | + 'centralnotice-banner-name' => 'Numm vum Banner', |
| 4205 | + 'centralnotice-banner' => 'Banner', |
| 4206 | + 'centralnotice-banner-heading' => 'Banner: $1', |
| 4207 | + 'centralnotice-templates' => 'Banneren', |
3658 | 4208 | 'centralnotice-weight' => 'Gewiicht', |
3659 | 4209 | 'centralnotice-locked' => 'Gespaart', |
| 4210 | + 'centralnotice-notice' => 'Campagne', |
| 4211 | + 'centralnotice-notice-heading' => 'Campagne: $1', |
3660 | 4212 | 'centralnotice-notices' => 'Matdeelungen', |
3661 | 4213 | 'centralnotice-notice-exists' => "D'Matdeelung gëtt et schonn. |
3662 | 4214 | Si konnt net derbäigesat ginn.", |
3663 | | - 'centralnotice-template-exists' => "D'Schabloun gëtt et schonn. |
3664 | | -Et gouf näischt derbäigsat.", |
3665 | | - 'centralnotice-notice-doesnt-exist' => "D'Matdeelung gëtt et net. |
| 4215 | + 'centralnotice-no-language' => "Fir d'Campagne gouf keng Sprooch erausgesicht. Se gëtt net derbäigesat.", |
| 4216 | + 'centralnotice-template-exists' => 'De Banner gëtt et schonn. |
| 4217 | +Net derbäisetzen.', |
| 4218 | + 'centralnotice-notice-doesnt-exist' => "D'Campagne gëtt et net.", |
| 4219 | + 'centralnotice-remove-notice-doesnt-exist' => "D'Campagne gëtt et net. |
3666 | 4220 | Et gëtt näischt fir ewechzehuelen.", |
3667 | | - 'centralnotice-template-still-bound' => "D'Schabloun ass nach ëmmer mat enger Notiz verbonn. |
3668 | | -Si kann net ewechegeholl ginn", |
| 4221 | + 'centralnotice-template-still-bound' => 'De Banner ass nach ëmmer mat enger Campagne verbonn. |
| 4222 | +Net ewechhuelen.', |
3669 | 4223 | 'centralnotice-template-body' => 'Text vun der Schabloun:', |
3670 | 4224 | 'centralnotice-day' => 'Dag', |
3671 | 4225 | 'centralnotice-year' => 'Joer', |
— | — | @@ -3672,18 +4226,21 @@ |
3673 | 4227 | 'centralnotice-hours' => 'Stonn', |
3674 | 4228 | 'centralnotice-min' => 'Minutt', |
3675 | 4229 | 'centralnotice-project-lang' => 'Sprooch vum Projet', |
| 4230 | + 'centralnotice-select' => 'Eraussichen: $1', |
| 4231 | + 'centralnotice-top-ten-languages' => 'Top 10 Sproochen', |
3676 | 4232 | 'centralnotice-project-name' => 'Numm vum Projet', |
3677 | 4233 | 'centralnotice-start-date' => 'Ufanksdatum', |
3678 | 4234 | 'centralnotice-start-time' => 'Ufankszäit (UTC)', |
3679 | | - 'centralnotice-assigned-templates' => 'Zougewise Schablounen', |
3680 | | - 'centralnotice-no-templates' => 'Et gëtt keng Schablounen am System', |
3681 | | - 'centralnotice-no-templates-assigned' => 'Keng Schabloune matt der Meldung verbonn. |
| 4235 | + 'centralnotice-assigned-templates' => 'Zougewise Banneren', |
| 4236 | + 'centralnotice-no-templates' => 'Keng Bannere fonnt. |
3682 | 4237 | Setzt der derbäi!', |
3683 | | - 'centralnotice-available-templates' => 'Disponibel Schablounen', |
3684 | | - 'centralnotice-template-already-exists' => "D'Schabloun ass schonn enger Campagne zougedeelt. |
3685 | | -Net derbäisetzen", |
| 4238 | + 'centralnotice-no-templates-assigned' => 'Keng Bannere mat der Campagne verbonn. |
| 4239 | +Setzt der derbäi!', |
| 4240 | + 'centralnotice-available-templates' => 'Disponibel Banneren', |
| 4241 | + 'centralnotice-template-already-exists' => 'De Banner ass schonn enger Campagne zougedeelt. |
| 4242 | +Net derbäisetzen', |
3686 | 4243 | 'centralnotice-preview-template' => 'Schabloun weisen ouni ze späicheren', |
3687 | | - 'centralnotice-start-hour' => 'Ufankszäit', |
| 4244 | + 'centralnotice-start-hour' => 'Ufankszäit (GMT)', |
3688 | 4245 | 'centralnotice-change-lang' => 'Sprooch vun der Iwwersetzung änneren', |
3689 | 4246 | 'centralnotice-weights' => 'Gewiicht', |
3690 | 4247 | 'centralnotice-notice-is-locked' => "D'Matdeelung ass gespaart. |
— | — | @@ -3698,14 +4255,31 @@ |
3699 | 4256 | Dës Aktioun kann net réckgängeg gemaach ginn.', |
3700 | 4257 | 'centralnotice-no-notices-exist' => 'Et gëtt keng Matdeelung. |
3701 | 4258 | Setzt eng hei ënnendrënner bäi.', |
3702 | | - 'centralnotice-no-templates-translate' => "Et gëtt keng Schablounen fir déi Iwwersetzungen z'ännere sinn", |
| 4259 | + 'centralnotice-no-templates-translate' => "Et gëtt keng Bannere fir déi Iwwersetzungen z'ännere sinn", |
3703 | 4260 | 'centralnotice-number-uses' => 'gëtt benotzt', |
| 4261 | + 'centralnotice-settings' => 'Astellungen', |
3704 | 4262 | 'centralnotice-edit-template' => 'Schabloun änneren', |
| 4263 | + 'centralnotice-edit-template-summary' => 'Fir e lokaliséierbare Message unzeleeën, setzt eng Zeecheketten tëschent dräi geschweefte Klameren dran, z. Bsp. {{{jimbo-quote}}}.', |
3705 | 4264 | 'centralnotice-message' => 'Message', |
3706 | 4265 | 'centralnotice-message-not-set' => 'Message net gepäichert', |
3707 | 4266 | 'centralnotice-clone' => 'Eng Kopie maachen', |
3708 | | - 'centralnotice-clone-notice' => 'Eng Kopie vun der Schabloun maachen', |
3709 | | - 'centralnotice-preview-all-template-translations' => 'All disponibel Iwwersetzunge vun der Schabloun weisen ouni ofzespäicheren', |
| 4267 | + 'centralnotice-clone-notice' => 'Eng Kopie vum Banner maachen', |
| 4268 | + 'centralnotice-clone-name' => 'Numm:', |
| 4269 | + 'centralnotice-preview-all-template-translations' => 'All disponibel Iwwersetzunge vum Banner weisen ouni ofzespäicheren', |
| 4270 | + 'centralnotice-insert' => 'Drasetzen: $1', |
| 4271 | + 'centralnotice-hide-button' => 'Knäppche {{int:centralnotice-shared-hide}}', |
| 4272 | + 'centralnotice-collapse-button' => 'Knäppchen {{int:centralnotice-shared-collapse}}', |
| 4273 | + 'centralnotice-expand-button' => 'Knäppchen {{int:centralnotice-shared-expand}}', |
| 4274 | + 'centralnotice-translate-button' => "Knäppchen 'Hëllef iwwersetzen'", |
| 4275 | + 'centralnotice-donate-button' => "Knäppchen 'Spenden'", |
| 4276 | + 'centralnotice-expanded-banner' => 'Erweiderte Banner', |
| 4277 | + 'centralnotice-collapsed-banner' => 'Zesummegeklappte Banner', |
| 4278 | + 'centralnotice-banner-display' => 'Weise fir:', |
| 4279 | + 'centralnotice-banner-anonymous' => 'Anonym Benotzer', |
| 4280 | + 'centralnotice-banner-logged-in' => 'Ageloggte Benotzer', |
| 4281 | + 'centralnotice-banner-type' => 'Bannertyp:', |
| 4282 | + 'centralnotice-banner-hidable' => 'Statesch/Ka verstoppt ginn', |
| 4283 | + 'centralnotice-banner-collapsible' => 'Aklappbar', |
3710 | 4284 | 'right-centralnotice-admin' => 'Zentralmatdeelunge geréieren', |
3711 | 4285 | 'right-centralnotice-translate' => 'Zentralmatdeelungen iwwersetzen', |
3712 | 4286 | 'action-centralnotice-admin' => 'Zentralmatdeelungen ze geréieren', |
— | — | @@ -3748,14 +4322,19 @@ |
3749 | 4323 | 'centralnotice-add-template' => 'Sjabloon biedoon', |
3750 | 4324 | 'centralnotice-show-notices' => 'Sitemitdeilinge waergaeve', |
3751 | 4325 | 'centralnotice-list-templates' => 'Sjablone waergaeve', |
| 4326 | + 'centralnotice-multiple_languages' => 'meerdere ($1)', |
3752 | 4327 | 'centralnotice-translations' => 'Euverzèttinge', |
3753 | 4328 | 'centralnotice-translate-to' => 'Euverzètte nao', |
3754 | 4329 | 'centralnotice-translate' => 'Euverzètte', |
3755 | 4330 | 'centralnotice-english' => 'Ingels', |
3756 | | - 'centralnotice-template-name' => 'Sjabloonnaam', |
| 4331 | + 'centralnotice-banner-name' => 'Sjabloonnaam', |
| 4332 | + 'centralnotice-banner' => 'Vaan', |
| 4333 | + 'centralnotice-banner-heading' => 'Vaan: $1', |
3757 | 4334 | 'centralnotice-templates' => 'Sjablone', |
3758 | 4335 | 'centralnotice-weight' => 'Gewich', |
3759 | 4336 | 'centralnotice-locked' => 'Aafgesjlaote', |
| 4337 | + 'centralnotice-notice' => 'Kampanj', |
| 4338 | + 'centralnotice-notice-heading' => 'Kampanj: $1', |
3760 | 4339 | 'centralnotice-notices' => 'Sitemitdeilinge', |
3761 | 4340 | 'centralnotice-notice-exists' => 'De sitemitdeiling besjteit al. |
3762 | 4341 | Deze weurt neet biegedoon.', |
— | — | @@ -3784,7 +4363,7 @@ |
3785 | 4364 | 'centralnotice-template-already-exists' => "'t Sjabloon is al gekoppeld aan 'n campagne. |
3786 | 4365 | 't Weurt neet biegedoon.", |
3787 | 4366 | 'centralnotice-preview-template' => 'Veursjouw sjabloon', |
3788 | | - 'centralnotice-start-hour' => 'Sjtarttied', |
| 4367 | + 'centralnotice-start-hour' => 'Sjtarttied (GMT)', |
3789 | 4368 | 'centralnotice-change-lang' => 'Euver te zètte taal verangere', |
3790 | 4369 | 'centralnotice-weights' => 'Gewichte', |
3791 | 4370 | 'centralnotice-notice-is-locked' => 'De sitenotice is toe. |
— | — | @@ -3806,7 +4385,22 @@ |
3807 | 4386 | 'centralnotice-message-not-set' => "'t Berich is neet ingesjtèld", |
3808 | 4387 | 'centralnotice-clone' => 'Kopiëre', |
3809 | 4388 | 'centralnotice-clone-notice' => "'n Kopie van 't sjabloon make", |
| 4389 | + 'centralnotice-clone-name' => 'Naam:', |
3810 | 4390 | 'centralnotice-preview-all-template-translations' => "Alle besjikbare euverzèttinge van 't sjabloon betrachte", |
| 4391 | + 'centralnotice-insert' => 'Voog in: $1', |
| 4392 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}}knoep', |
| 4393 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}}knoep', |
| 4394 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}}knoep', |
| 4395 | + 'centralnotice-translate-button' => 'Euverzèttingshölpknoep', |
| 4396 | + 'centralnotice-donate-button' => 'Gaefknoep', |
| 4397 | + 'centralnotice-expanded-banner' => 'Oetgeklap vaan', |
| 4398 | + 'centralnotice-collapsed-banner' => 'Ingeklap vaan', |
| 4399 | + 'centralnotice-banner-display' => 'Tuun veur:', |
| 4400 | + 'centralnotice-banner-anonymous' => 'Anoniem gebroekers', |
| 4401 | + 'centralnotice-banner-logged-in' => 'Aangemeldje gebroekers', |
| 4402 | + 'centralnotice-banner-type' => 'Vaantiep:', |
| 4403 | + 'centralnotice-banner-hidable' => 'Statisch/verbergbaar', |
| 4404 | + 'centralnotice-banner-collapsible' => 'inklapbaar', |
3811 | 4405 | 'right-centralnotice-admin' => 'Centrale sitemitdeilinge behere', |
3812 | 4406 | 'right-centralnotice-translate' => 'Centrale sitenotices vertale', |
3813 | 4407 | 'action-centralnotice-admin' => 'beheer centrale sitemitdeilinge', |
— | — | @@ -3864,7 +4458,7 @@ |
3865 | 4459 | 'centralnotice-translate-to' => "Dikao amin'ny", |
3866 | 4460 | 'centralnotice-translate' => 'Dikao', |
3867 | 4461 | 'centralnotice-english' => 'Anglisy', |
3868 | | - 'centralnotice-template-name' => "Anaran'ilay endrika", |
| 4462 | + 'centralnotice-banner-name' => "Anaran'ilay endrika", |
3869 | 4463 | 'centralnotice-templates' => 'Endrika', |
3870 | 4464 | 'centralnotice-weight' => 'Lanja', |
3871 | 4465 | 'centralnotice-locked' => 'Voaaro/voasakana', |
— | — | @@ -3918,31 +4512,41 @@ |
3919 | 4513 | 'centralnotice-end-date' => 'Истекува', |
3920 | 4514 | 'centralnotice-enabled' => 'Овозможено', |
3921 | 4515 | 'centralnotice-modify' => 'Испрати', |
| 4516 | + 'centralnotice-save-banner' => 'Зачувај плакат', |
3922 | 4517 | 'centralnotice-preview' => 'Преглед', |
3923 | 4518 | 'centralnotice-add-new' => 'Додај ново централно известување', |
3924 | 4519 | 'centralnotice-remove' => 'Тргни', |
3925 | 4520 | 'centralnotice-translate-heading' => 'Превод на $1', |
3926 | 4521 | 'centralnotice-manage' => 'Раководење со централното известување', |
| 4522 | + 'centralnotice-manage-templates' => 'Раководење со плакати', |
3927 | 4523 | 'centralnotice-add' => 'Додај', |
3928 | 4524 | 'centralnotice-add-notice' => 'Додај известување', |
| 4525 | + 'centralnotice-edit-notice' => 'Уреди кампања', |
3929 | 4526 | 'centralnotice-add-template' => 'Додај шаблон', |
3930 | 4527 | 'centralnotice-show-notices' => 'Прикажи известувања', |
3931 | 4528 | 'centralnotice-list-templates' => 'Наведи шаблони', |
| 4529 | + 'centralnotice-multiple_languages' => 'повеќе ($1)', |
3932 | 4530 | 'centralnotice-translations' => 'Преводи', |
3933 | 4531 | 'centralnotice-translate-to' => 'Преведи на', |
3934 | 4532 | 'centralnotice-translate' => 'Преведи', |
3935 | 4533 | 'centralnotice-english' => 'англиски', |
3936 | | - 'centralnotice-template-name' => 'Назив на шаблонот', |
| 4534 | + 'centralnotice-banner-name' => 'Назив на шаблонот', |
| 4535 | + 'centralnotice-banner' => 'Плакат', |
| 4536 | + 'centralnotice-banner-heading' => 'Плакат: $1', |
3937 | 4537 | 'centralnotice-templates' => 'Шаблони', |
3938 | 4538 | 'centralnotice-weight' => 'Тежина', |
3939 | 4539 | 'centralnotice-locked' => 'Заклучено', |
| 4540 | + 'centralnotice-notice' => 'Кампања', |
| 4541 | + 'centralnotice-notice-heading' => 'Кампања: $1', |
3940 | 4542 | 'centralnotice-notices' => 'Известувања', |
3941 | 4543 | 'centralnotice-notice-exists' => 'Известувањето веќе постои. |
3942 | 4544 | Не е додадено', |
| 4545 | + 'centralnotice-no-language' => 'Не е избран јазик за кампањата. Не е додадено.', |
3943 | 4546 | 'centralnotice-template-exists' => 'Шаблонот веќе постои. |
3944 | 4547 | Не е додаден', |
3945 | | - 'centralnotice-notice-doesnt-exist' => 'Известувањето не постои. |
3946 | | -Нема ништо за бришење', |
| 4548 | + 'centralnotice-notice-doesnt-exist' => 'Кампањата не постои.', |
| 4549 | + 'centralnotice-remove-notice-doesnt-exist' => 'Кампањата не постои. |
| 4550 | +Нема што да се отстранува.', |
3947 | 4551 | 'centralnotice-template-still-bound' => 'Шаблонот сè уште е врзан за известување. |
3948 | 4552 | Нема да биде отстранет.', |
3949 | 4553 | 'centralnotice-template-body' => 'Тело на шаблонот:', |
— | — | @@ -3952,6 +4556,8 @@ |
3953 | 4557 | 'centralnotice-hours' => 'Час', |
3954 | 4558 | 'centralnotice-min' => 'Минута', |
3955 | 4559 | 'centralnotice-project-lang' => 'Јазик на проект', |
| 4560 | + 'centralnotice-select' => 'Одбери: $1', |
| 4561 | + 'centralnotice-top-ten-languages' => '10 најприсутни јазици', |
3956 | 4562 | 'centralnotice-project-name' => 'Име на проект', |
3957 | 4563 | 'centralnotice-start-date' => 'Почетен датум', |
3958 | 4564 | 'centralnotice-start-time' => 'Почетен датум (UTC)', |
— | — | @@ -3964,7 +4570,7 @@ |
3965 | 4571 | 'centralnotice-template-already-exists' => 'Шаблонот е веќе врзан за кампањата. |
3966 | 4572 | Нема да биде додаден', |
3967 | 4573 | 'centralnotice-preview-template' => 'Преглед на шаблонот', |
3968 | | - 'centralnotice-start-hour' => 'Започнува', |
| 4574 | + 'centralnotice-start-hour' => 'Започнува (GMT):', |
3969 | 4575 | 'centralnotice-change-lang' => 'Смени јазик на превод', |
3970 | 4576 | 'centralnotice-weights' => 'Тегови', |
3971 | 4577 | 'centralnotice-notice-is-locked' => 'Известувањето е заклучено. |
— | — | @@ -3981,12 +4587,29 @@ |
3982 | 4588 | Додајте известување подолу.', |
3983 | 4589 | 'centralnotice-no-templates-translate' => 'Нема шаблони за кои можете да уредите преведувања', |
3984 | 4590 | 'centralnotice-number-uses' => 'Користи', |
| 4591 | + 'centralnotice-settings' => 'Нагодувања', |
3985 | 4592 | 'centralnotice-edit-template' => 'Уреди шаблон', |
| 4593 | + 'centralnotice-edit-template-summary' => 'За да создадете порака што ќе може да се локализира, напишете низа со цртичка и ставете ја во три кадрави загради, на пр. {{{цитат-џимбо}}}.', |
3986 | 4594 | 'centralnotice-message' => 'Порака', |
3987 | 4595 | 'centralnotice-message-not-set' => 'Порката не е поставена', |
3988 | 4596 | 'centralnotice-clone' => 'Клонирај', |
3989 | 4597 | 'centralnotice-clone-notice' => 'Создај копија на шаблонот', |
| 4598 | + 'centralnotice-clone-name' => 'Име:', |
3990 | 4599 | 'centralnotice-preview-all-template-translations' => 'Преглед на сите расположиви преводи на шаблонот', |
| 4600 | + 'centralnotice-insert' => 'Вметни: $1', |
| 4601 | + 'centralnotice-hide-button' => 'копче „{{int:centralnotice-shared-hide}}“', |
| 4602 | + 'centralnotice-collapse-button' => 'копче „{{int:centralnotice-shared-collapse}}“', |
| 4603 | + 'centralnotice-expand-button' => 'копче „{{int:centralnotice-shared-expand}}“', |
| 4604 | + 'centralnotice-translate-button' => 'Копче за помош со преводите', |
| 4605 | + 'centralnotice-donate-button' => 'Копче за донации', |
| 4606 | + 'centralnotice-expanded-banner' => 'Расклопен плакат', |
| 4607 | + 'centralnotice-collapsed-banner' => 'Склопен плакат', |
| 4608 | + 'centralnotice-banner-display' => 'Прикажи во:', |
| 4609 | + 'centralnotice-banner-anonymous' => 'Анонимни корисници', |
| 4610 | + 'centralnotice-banner-logged-in' => 'Најавени корисници', |
| 4611 | + 'centralnotice-banner-type' => 'Тип на плакат:', |
| 4612 | + 'centralnotice-banner-hidable' => 'Статичен/Склоплив', |
| 4613 | + 'centralnotice-banner-collapsible' => 'Расклоплив', |
3991 | 4614 | 'right-centralnotice-admin' => 'Раководење со централни известувања', |
3992 | 4615 | 'right-centralnotice-translate' => 'Преведување на централни известувања', |
3993 | 4616 | 'action-centralnotice-admin' => 'раководење со централни известувања', |
— | — | @@ -4014,26 +4637,32 @@ |
4015 | 4638 | 'centralnotice-remove' => 'നീക്കംചെയ്യുക', |
4016 | 4639 | 'centralnotice-translate-heading' => '$1 എന്നതിനുള്ള തർജ്ജമ', |
4017 | 4640 | 'centralnotice-manage' => 'കേന്ദ്രീകൃത അറിയിപ്പ് കൈകാര്യം ചെയ്യുക', |
| 4641 | + 'centralnotice-manage-templates' => 'ബാനറുകൾ കൈകാര്യം ചെയ്യുക', |
4018 | 4642 | 'centralnotice-add' => 'കൂട്ടിച്ചേർക്കുക', |
4019 | 4643 | 'centralnotice-add-notice' => 'ഒരു അറിയിപ്പ് കൂട്ടിച്ചേർക്കുക', |
| 4644 | + 'centralnotice-edit-notice' => 'പ്രചരണപ്രവർത്തനം തിരുത്തുക', |
4020 | 4645 | 'centralnotice-add-template' => 'ഫലകം കൂട്ടിച്ചേർക്കുക', |
4021 | 4646 | 'centralnotice-show-notices' => 'അറിയിപ്പുകൾ പ്രദർശിപ്പിക്കുക', |
4022 | 4647 | 'centralnotice-list-templates' => 'ഫലകങ്ങൾ പട്ടികവത്കരിക്കുക', |
| 4648 | + 'centralnotice-multiple_languages' => 'നിരവധി ($1)', |
4023 | 4649 | 'centralnotice-translations' => 'തർജ്ജമകൾ', |
4024 | 4650 | 'centralnotice-translate-to' => 'ഇതിലേയ്ക്ക് തർജ്ജമ ചെയ്യുക', |
4025 | 4651 | 'centralnotice-translate' => 'തർജ്ജമ ചെയ്യുക', |
4026 | 4652 | 'centralnotice-english' => 'ഇംഗ്ലീഷ്', |
4027 | | - 'centralnotice-template-name' => 'ഫലകത്തിന്റെ പേര്', |
| 4653 | + 'centralnotice-banner-name' => 'ഫലകത്തിന്റെ പേര്', |
| 4654 | + 'centralnotice-banner' => 'ബാനർ', |
4028 | 4655 | 'centralnotice-templates' => 'ഫലകങ്ങൾ', |
4029 | 4656 | 'centralnotice-weight' => 'ഘനം', |
4030 | 4657 | 'centralnotice-locked' => 'പൂട്ടിയിരിക്കുന്നു', |
| 4658 | + 'centralnotice-notice' => 'പ്രചാരണപ്രവർത്തനം', |
4031 | 4659 | 'centralnotice-notices' => 'അറിയിപ്പുകൾ', |
4032 | 4660 | 'centralnotice-notice-exists' => 'അറിയിപ്പ് ഇപ്പോൾ തന്നെ ഉണ്ട്. |
4033 | 4661 | കൂട്ടിച്ചേർക്കുന്നില്ല', |
4034 | 4662 | 'centralnotice-template-exists' => 'ഫലകം നിലവിലുണ്ട്. |
4035 | 4663 | കൂട്ടിച്ചേർക്കുന്നില്ല', |
4036 | | - 'centralnotice-notice-doesnt-exist' => 'അറിയിപ്പ് നിലനിൽപ്പില്ല. |
4037 | | -നീക്കംചെയ്യാനൊന്നുമില്ല', |
| 4664 | + 'centralnotice-notice-doesnt-exist' => 'പ്രചാരണപ്രവർത്തനം നിലനിൽക്കുന്നില്ല', |
| 4665 | + 'centralnotice-remove-notice-doesnt-exist' => 'പ്രചാരണപ്രവർത്തനം നിലനിൽക്കുന്നില്ല. |
| 4666 | +നീക്കംചെയ്യാൻ ഒന്നുമില്ല.', |
4038 | 4667 | 'centralnotice-template-still-bound' => 'ഫലകം ഇപ്പോഴും ഒരു അറിയിപ്പുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു. |
4039 | 4668 | നീക്കം ചെയ്യുന്നില്ല.', |
4040 | 4669 | 'centralnotice-template-body' => 'ഫലകത്തിന്റെ ഉള്ളടക്കം:', |
— | — | @@ -4043,6 +4672,8 @@ |
4044 | 4673 | 'centralnotice-hours' => 'മണിക്കൂർ', |
4045 | 4674 | 'centralnotice-min' => 'മിനിട്ട്', |
4046 | 4675 | 'centralnotice-project-lang' => 'പദ്ധതിയുടെ ഭാഷ', |
| 4676 | + 'centralnotice-select' => 'തിരഞ്ഞെടുക്കുക: $1', |
| 4677 | + 'centralnotice-top-ten-languages' => 'ആദ്യ 10 ഭാഷകൾ', |
4047 | 4678 | 'centralnotice-project-name' => 'പദ്ധതിയുടെ പേര്', |
4048 | 4679 | 'centralnotice-start-date' => 'ആരംഭിക്കുന്ന തീയതി', |
4049 | 4680 | 'centralnotice-start-time' => 'ആരംഭിക്കുന്ന സമയം (UTC)', |
— | — | @@ -4055,7 +4686,7 @@ |
4056 | 4687 | 'centralnotice-template-already-exists' => 'ഫലകം പ്രചരണപ്രവർത്തനവുമായി ബന്ധിച്ചിരിക്കുന്നു. |
4057 | 4688 | കൂട്ടിച്ചേർക്കുന്നില്ല', |
4058 | 4689 | 'centralnotice-preview-template' => 'ഫലകത്തിന്റെ പ്രിവ്യൂ കാണുക', |
4059 | | - 'centralnotice-start-hour' => 'ആരംഭിക്കുന്ന സമയം', |
| 4690 | + 'centralnotice-start-hour' => 'തുടങ്ങേണ്ട സമയം (ജി.എം.റ്റി.)', |
4060 | 4691 | 'centralnotice-change-lang' => 'തർജ്ജമയുടെ ഭാഷ മാറ്റുക', |
4061 | 4692 | 'centralnotice-weights' => 'ഘനങ്ങൾ', |
4062 | 4693 | 'centralnotice-notice-is-locked' => 'അറിയിപ്പ് പൂട്ടപ്പെട്ടിരിക്കുന്നു. |
— | — | @@ -4073,11 +4704,24 @@ |
4074 | 4705 | 'centralnotice-no-templates-translate' => 'ഇതിന്റെ തർജ്ജമകൾ തിരുത്താനായി ഒരു ഫലകവും ഇപ്പോഴില്ല', |
4075 | 4706 | 'centralnotice-number-uses' => 'ഉപയോഗങ്ങൾ', |
4076 | 4707 | 'centralnotice-edit-template' => 'ഫലകം തിരുത്തുക', |
| 4708 | + 'centralnotice-edit-template-summary' => 'പ്രാദേശീകരിക്കാവുന്ന സന്ദേശം സൃഷ്ടിക്കാൻ, മൂന്ന് വളയൻ കോഷ്ഠകങ്ങൾക്കുള്ളിൽ ഹൈഫൻ ഉപയോഗിച്ച് ചേർത്ത പദങ്ങൾ നൽകുക, ഉദാ: {{{jimbo-quote}}}.', |
4077 | 4709 | 'centralnotice-message' => 'സന്ദേശം', |
4078 | 4710 | 'centralnotice-message-not-set' => 'സന്ദേശം നിശ്ചിതപ്പെടുത്തിയില്ല.', |
4079 | 4711 | 'centralnotice-clone' => 'സമപ്പകർപ്പ്', |
4080 | 4712 | 'centralnotice-clone-notice' => 'ഫലകത്തിന്റെ പകർപ്പ് സൃഷ്ടിക്കുക', |
| 4713 | + 'centralnotice-clone-name' => 'പേര്:', |
4081 | 4714 | 'centralnotice-preview-all-template-translations' => 'ഫലകത്തിന്റെ ലഭ്യമായ എല്ലാ തർജ്ജമകളുടേയും പ്രിവ്യൂ കാണുക', |
| 4715 | + 'centralnotice-insert' => 'ഉൾപ്പെടുത്തുക: $1', |
| 4716 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} ബട്ടൺ', |
| 4717 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} ബട്ടൺ', |
| 4718 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} ബട്ടൺ', |
| 4719 | + 'centralnotice-translate-button' => 'പരിഭാഷാസഹായി ബട്ടൺ', |
| 4720 | + 'centralnotice-donate-button' => 'സംഭാവനാ ബട്ടൺ', |
| 4721 | + 'centralnotice-banner-display' => 'പ്രദർശിപ്പിക്കേണ്ടത്:', |
| 4722 | + 'centralnotice-banner-anonymous' => 'അജ്ഞാത ഉപയോക്താക്കൾ', |
| 4723 | + 'centralnotice-banner-logged-in' => 'പ്രവേശിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ', |
| 4724 | + 'centralnotice-banner-hidable' => 'സ്ഥിരസ്ഥിതി/മറയ്ക്കാവുന്നത്', |
| 4725 | + 'centralnotice-banner-collapsible' => 'ചുരുക്കാവുന്നത്', |
4082 | 4726 | 'right-centralnotice-admin' => 'കേന്ദ്രീകൃത അറിയിപ്പുകൾ കൈകാര്യം ചെയ്യുക', |
4083 | 4727 | 'right-centralnotice-translate' => 'കേന്ദ്രീകൃത അറിയിപ്പുകൾ തർജ്ജമ ചെയ്യുക', |
4084 | 4728 | 'action-centralnotice-admin' => 'കേന്ദ്രീകൃത അറിയിപ്പുകൾ കൈകാര്യം ചെയ്യുക', |
— | — | @@ -4087,9 +4731,49 @@ |
4088 | 4732 | |
4089 | 4733 | /** Marathi (मराठी) |
4090 | 4734 | * @author Mahitgar |
| 4735 | + * @author V.narsikar |
4091 | 4736 | */ |
4092 | 4737 | $messages['mr'] = array( |
4093 | 4738 | 'centralnotice-desc' => 'संकेतस्थळाचा मध्यवर्ती सूचना फलक', |
| 4739 | + 'centralnotice-end-date' => 'अंतिम तारीख', |
| 4740 | + 'centralnotice-add-new' => 'नव्या मोहीमेची सुरूवात करा', |
| 4741 | + 'centralnotice-translate-heading' => '$1 चे भाषांतर', |
| 4742 | + 'centralnotice-manage' => 'मोहीम हाताळा', |
| 4743 | + 'centralnotice-add-notice' => 'नव्या मोहीमेची भर घाला', |
| 4744 | + 'centralnotice-add-template' => 'नविन मथळा लावा', |
| 4745 | + 'centralnotice-translations' => 'भाषांतरे', |
| 4746 | + 'centralnotice-translate-to' => '(Language name) या भाषेत भाषांतर करा', |
| 4747 | + 'centralnotice-banner-name' => 'मथळ्याचे नाव', |
| 4748 | + 'centralnotice-day' => 'दिनांक', |
| 4749 | + 'centralnotice-hours' => 'तास', |
| 4750 | + 'centralnotice-project-lang' => 'प्रकल्प भाषा', |
| 4751 | + 'centralnotice-project-name' => 'प्रकल्पाचे नाव', |
| 4752 | + 'centralnotice-start-date' => 'सुरू केल्याचा दिनांक', |
| 4753 | + 'centralnotice-start-time' => 'सुरू केल्याची वेळ (युटीसी)', |
| 4754 | + 'centralnotice-no-templates' => 'मथळे सापडले नाहीत.काहींची भर घाला', |
| 4755 | + 'centralnotice-available-templates' => 'उपलब्ध मथळे', |
| 4756 | + 'centralnotice-template-already-exists' => 'मोहीमेस मथळा पूर्वीच दिलेला आहे. आता जोडू नका.', |
| 4757 | + 'centralnotice-preview-template' => 'मथळ्याची झलक पाहा.', |
| 4758 | + 'centralnotice-change-lang' => 'भाषांतरासाठी भाषेत बदल करा', |
| 4759 | + 'centralnotice-notice-is-locked' => 'मथळ्यास ताळा लावला आहे. काढु नका.', |
| 4760 | + 'centralnotice-confirm-delete' => 'आपणास हा मजकुर नक्की गाळावयाचा आहे काय? |
| 4761 | +ही कृती परतविता येणार नाही.', |
| 4762 | + 'centralnotice-no-notices-exist' => 'मथळा अस्तित्वात नाही. |
| 4763 | +एक मथळा खाली जोडा.', |
| 4764 | + 'centralnotice-no-templates-translate' => '↓ भाषांतरे संपादीत करण्याकरिता कोणतेही मुखशीर्षक (बॅनर) उपलब्ध नाही', |
| 4765 | + 'centralnotice-number-uses' => '↓ उपयोग', |
| 4766 | + 'centralnotice-edit-template' => '↓ मुखशीर्षक (बॅनर) संपादीत करा', |
| 4767 | + 'centralnotice-edit-template-summary' => '↓ स्थानिकीकरण संदेश तयार करण्याकरिता, तीहेरी महिरपीकंस संयोगचिन्ह(-) असलेले सूत्राने (स्ट्रींग)भरा, उदाहरणार्थ. {{{jimbo-quote}}}.', |
| 4768 | + 'centralnotice-message' => 'संदेश', |
| 4769 | + 'centralnotice-message-not-set' => '↓ संदेश स्थापित केलेला नाही', |
| 4770 | + 'centralnotice-clone' => '↓ कृत्तक (क्लोन)', |
| 4771 | + 'centralnotice-clone-notice' => '↓ मुखशीर्षकाची(बॅनरची प्रत बनवा)', |
| 4772 | + 'centralnotice-preview-all-template-translations' => '↓ मुखशीर्षकांच्या सर्व उपलब्ध भाषांतराची झलक पहा', |
| 4773 | + 'right-centralnotice-admin' => '↓ मध्यवर्ती सूचनांचे प्रबंधन करा', |
| 4774 | + 'right-centralnotice-translate' => '↓ मध्यवर्ती सूचनांचे भाषांतरकरा', |
| 4775 | + 'action-centralnotice-admin' => 'मध्यवर्ती सूचनांचे प्रबंधन करा', |
| 4776 | + 'action-centralnotice-translate' => 'मध्यवर्ती सूचनांचे भाषांतरकरा', |
| 4777 | + 'centralnotice-preferred' => 'प्राधान्य', |
4094 | 4778 | ); |
4095 | 4779 | |
4096 | 4780 | /** Malay (Bahasa Melayu) |
— | — | @@ -4120,7 +4804,7 @@ |
4121 | 4805 | 'centralnotice-translate-to' => 'Terjemah', |
4122 | 4806 | 'centralnotice-translate' => 'Terjemah', |
4123 | 4807 | 'centralnotice-english' => 'Bahasa Inggeris', |
4124 | | - 'centralnotice-template-name' => 'Nama templat', |
| 4808 | + 'centralnotice-banner-name' => 'Nama templat', |
4125 | 4809 | 'centralnotice-templates' => 'Templat', |
4126 | 4810 | 'centralnotice-weight' => 'Berat', |
4127 | 4811 | 'centralnotice-locked' => 'Dikunci', |
— | — | @@ -4174,7 +4858,7 @@ |
4175 | 4859 | */ |
4176 | 4860 | $messages['mt'] = array( |
4177 | 4861 | 'centralnotice-add-template' => 'Żid mudell', |
4178 | | - 'centralnotice-template-name' => 'Isem tal-mudell', |
| 4862 | + 'centralnotice-banner-name' => 'Isem tal-mudell', |
4179 | 4863 | 'centralnotice-number-uses' => 'Użi', |
4180 | 4864 | 'centralnotice-message' => 'Messaġġ', |
4181 | 4865 | ); |
— | — | @@ -4185,7 +4869,7 @@ |
4186 | 4870 | $messages['myv'] = array( |
4187 | 4871 | 'centralnotice-add' => 'Поладомс', |
4188 | 4872 | 'centralnotice-add-template' => 'Поладомс лопа парцун', |
4189 | | - 'centralnotice-template-name' => 'Лопа парцунонь лем', |
| 4873 | + 'centralnotice-banner-name' => 'Лопа парцунонь лем', |
4190 | 4874 | 'centralnotice-templates' => 'Лопа парцунт', |
4191 | 4875 | 'centralnotice-weight' => 'Сталмо', |
4192 | 4876 | 'centralnotice-template-body' => 'Лопа парцунонть рунгозо:', |
— | — | @@ -4227,7 +4911,7 @@ |
4228 | 4912 | 'centralnotice-translate-to' => 'Översetten na', |
4229 | 4913 | 'centralnotice-translate' => 'Översetten', |
4230 | 4914 | 'centralnotice-english' => 'Engelsch', |
4231 | | - 'centralnotice-template-name' => 'Vörlagennaam', |
| 4915 | + 'centralnotice-banner-name' => 'Vörlagennaam', |
4232 | 4916 | 'centralnotice-templates' => 'Vörlagen', |
4233 | 4917 | 'centralnotice-weight' => 'Gewicht', |
4234 | 4918 | 'centralnotice-locked' => 'Afslaten', |
— | — | @@ -4303,6 +4987,7 @@ |
4304 | 4988 | |
4305 | 4989 | /** Dutch (Nederlands) |
4306 | 4990 | * @author Siebrand |
| 4991 | + * @author Tvdm |
4307 | 4992 | */ |
4308 | 4993 | $messages['nl'] = array( |
4309 | 4994 | 'centralnotice' => 'Beheer centrale sitenotice', |
— | — | @@ -4315,30 +5000,41 @@ |
4316 | 5001 | 'centralnotice-end-date' => 'Einddatum', |
4317 | 5002 | 'centralnotice-enabled' => 'Actief', |
4318 | 5003 | 'centralnotice-modify' => 'Opslaan', |
4319 | | - 'centralnotice-preview' => 'Bekijken', |
| 5004 | + 'centralnotice-save-banner' => 'Banner opslaan', |
| 5005 | + 'centralnotice-preview' => 'Voorvertoning', |
4320 | 5006 | 'centralnotice-add-new' => 'Nieuwe centrale sitenotice toevoegen', |
4321 | 5007 | 'centralnotice-remove' => 'Verwijderen', |
4322 | 5008 | 'centralnotice-translate-heading' => 'Vertaling voor $1', |
4323 | 5009 | 'centralnotice-manage' => 'Centrale sitenotice beheren', |
| 5010 | + 'centralnotice-manage-templates' => 'Banners beheren', |
4324 | 5011 | 'centralnotice-add' => 'Toevoegen', |
4325 | 5012 | 'centralnotice-add-notice' => 'Sitenotice toevoegen', |
| 5013 | + 'centralnotice-edit-notice' => 'Campagne bewerken', |
4326 | 5014 | 'centralnotice-add-template' => 'Sjabloon toevoegen', |
4327 | 5015 | 'centralnotice-show-notices' => 'Sitenotices weergeven', |
4328 | 5016 | 'centralnotice-list-templates' => 'Sjablonen weergeven', |
| 5017 | + 'centralnotice-multiple_languages' => 'meerdere ($1)', |
4329 | 5018 | 'centralnotice-translations' => 'Vertalingen', |
4330 | 5019 | 'centralnotice-translate-to' => 'Vertalen naar', |
4331 | 5020 | 'centralnotice-translate' => 'Vertalen', |
4332 | 5021 | 'centralnotice-english' => 'Engels', |
4333 | | - 'centralnotice-template-name' => 'Sjabloonnaam', |
| 5022 | + 'centralnotice-banner-name' => 'Sjabloonnaam', |
| 5023 | + 'centralnotice-banner' => 'Banner', |
| 5024 | + 'centralnotice-banner-heading' => 'Banner: $1', |
4334 | 5025 | 'centralnotice-templates' => 'Sjablonen', |
4335 | 5026 | 'centralnotice-weight' => 'Gewicht', |
4336 | 5027 | 'centralnotice-locked' => 'Afgesloten', |
| 5028 | + 'centralnotice-notice' => 'Campagne', |
| 5029 | + 'centralnotice-notice-heading' => 'Campagne: $1', |
4337 | 5030 | 'centralnotice-notices' => 'Sitenotices', |
4338 | 5031 | 'centralnotice-notice-exists' => 'De sitenotice bestaat al. |
4339 | 5032 | Deze wordt niet toegevoegd.', |
| 5033 | + 'centralnotice-no-language' => 'Er is geen taal geselecteerd voor de campagne. |
| 5034 | +Er wordt niets toegevoegd.', |
4340 | 5035 | 'centralnotice-template-exists' => 'Het sjabloon bestaat al. |
4341 | 5036 | Dit wordt niet toegevoegd.', |
4342 | | - 'centralnotice-notice-doesnt-exist' => 'De sitenotice bestaat niet. |
| 5037 | + 'centralnotice-notice-doesnt-exist' => 'De campagne bestaat niet.', |
| 5038 | + 'centralnotice-remove-notice-doesnt-exist' => 'De campagne bestaat niet. |
4343 | 5039 | Er is niets te verwijderen', |
4344 | 5040 | 'centralnotice-template-still-bound' => 'Het sjabloon is nog gekoppeld aan een sitenotice. |
4345 | 5041 | Het wordt niet verwijderd.', |
— | — | @@ -4349,8 +5045,10 @@ |
4350 | 5046 | 'centralnotice-hours' => 'Uur', |
4351 | 5047 | 'centralnotice-min' => 'Minuut', |
4352 | 5048 | 'centralnotice-project-lang' => 'Projecttaal', |
| 5049 | + 'centralnotice-select' => 'Selecteer: $1', |
| 5050 | + 'centralnotice-top-ten-languages' => 'Top-10 talen', |
4353 | 5051 | 'centralnotice-project-name' => 'Projectnaam', |
4354 | | - 'centralnotice-start-date' => 'Startdatum', |
| 5052 | + 'centralnotice-start-date' => 'Begindatum', |
4355 | 5053 | 'centralnotice-start-time' => 'Starttijd (UTC)', |
4356 | 5054 | 'centralnotice-assigned-templates' => 'Toegewezen sjablonen', |
4357 | 5055 | 'centralnotice-no-templates' => 'Er zijn geen sjablonen beschikbaar in het systeem', |
— | — | @@ -4358,31 +5056,48 @@ |
4359 | 5057 | Die moet u toevoegen.', |
4360 | 5058 | 'centralnotice-available-templates' => 'Beschikbare sjablonen', |
4361 | 5059 | 'centralnotice-template-already-exists' => 'Het sjabloon is al gekoppeld aan een campagne. |
4362 | | -Het wordt niet toegevoegd', |
| 5060 | +Het wordt niet toegevoegd.', |
4363 | 5061 | 'centralnotice-preview-template' => 'Voorvertoning sjabloon', |
4364 | | - 'centralnotice-start-hour' => 'Starttijd', |
| 5062 | + 'centralnotice-start-hour' => 'Starttijd (in GMT)', |
4365 | 5063 | 'centralnotice-change-lang' => 'Te vertalen taal wijzigen', |
4366 | 5064 | 'centralnotice-weights' => 'Gewichten', |
4367 | 5065 | 'centralnotice-notice-is-locked' => 'De sitenotice is afgesloten. |
4368 | | -Deze wordt niet verwijderd', |
| 5066 | +Deze wordt niet verwijderd.', |
4369 | 5067 | 'centralnotice-overlap' => 'De sitenotice overlapt met een andere sitenotice. |
4370 | | -Deze wordt niet toegevoegd', |
| 5068 | +Deze wordt niet toegevoegd.', |
4371 | 5069 | 'centralnotice-invalid-date-range' => 'Ongeldige datumreeks. |
4372 | | -Er wordt niet bijgewerkt', |
| 5070 | +Er wordt niet bijgewerkt.', |
4373 | 5071 | 'centralnotice-null-string' => 'U kunt geen leeg tekstveld toevoegen. |
4374 | 5072 | Er wordt niet toegevoegd.', |
4375 | 5073 | 'centralnotice-confirm-delete' => 'Weet u zeker dat u dit item wilt verwijderen? |
4376 | 5074 | Deze handeling is niet terug te draaien.', |
4377 | 5075 | 'centralnotice-no-notices-exist' => 'Er zijn geen sitenotices. |
4378 | | -U kunt er hieronder een toevoegen', |
| 5076 | +U kunt er hieronder een toevoegen.', |
4379 | 5077 | 'centralnotice-no-templates-translate' => 'Er zijn geen sjablonen waarvoor vertalingen gemaakt kunnen worden', |
4380 | 5078 | 'centralnotice-number-uses' => 'Keren gebruikt', |
| 5079 | + 'centralnotice-settings' => 'Instellingen', |
4381 | 5080 | 'centralnotice-edit-template' => 'Sjabloon bewerken', |
| 5081 | + 'centralnotice-edit-template-summary' => 'Sluit een stuk tekst in met drie accolades, bijvoorbeeld {{{jimo-quote}}}, om de tekst vertaalbaar te maken.', |
4382 | 5082 | 'centralnotice-message' => 'Bericht', |
4383 | 5083 | 'centralnotice-message-not-set' => 'Het bericht is niet ingesteld', |
4384 | 5084 | 'centralnotice-clone' => 'Kopiëren', |
4385 | 5085 | 'centralnotice-clone-notice' => 'Een kopie van het sjabloon maken', |
| 5086 | + 'centralnotice-clone-name' => 'Naam:', |
4386 | 5087 | 'centralnotice-preview-all-template-translations' => 'Alle beschikbare vertalingen van het sjabloon bekijken', |
| 5088 | + 'centralnotice-insert' => 'Invoegen: $1', |
| 5089 | + 'centralnotice-hide-button' => 'Knop "{{int:centralnotice-shared-hide}}"', |
| 5090 | + 'centralnotice-collapse-button' => 'Knop "{{int:centralnotice-shared-collapse}}"', |
| 5091 | + 'centralnotice-expand-button' => 'Knop "{{int:centralnotice-shared-expand}}"', |
| 5092 | + 'centralnotice-translate-button' => 'Knop "help met vertalen"', |
| 5093 | + 'centralnotice-donate-button' => 'Knop "doneren"', |
| 5094 | + 'centralnotice-expanded-banner' => 'Uitgeklapte banner', |
| 5095 | + 'centralnotice-collapsed-banner' => 'Ingeklapte banner', |
| 5096 | + 'centralnotice-banner-display' => 'Weergeven voor:', |
| 5097 | + 'centralnotice-banner-anonymous' => 'Anonieme gebruikers', |
| 5098 | + 'centralnotice-banner-logged-in' => 'Aangemelde gebruikers', |
| 5099 | + 'centralnotice-banner-type' => 'Bannertype:', |
| 5100 | + 'centralnotice-banner-hidable' => 'Statisch/te verbergen', |
| 5101 | + 'centralnotice-banner-collapsible' => 'In te klappen', |
4387 | 5102 | 'right-centralnotice-admin' => 'Centrale sitenotices beheren', |
4388 | 5103 | 'right-centralnotice-translate' => 'Centrale sitenotices vertalen', |
4389 | 5104 | 'action-centralnotice-admin' => 'centrale sitenotices beheren', |
— | — | @@ -4418,7 +5133,7 @@ |
4419 | 5134 | 'centralnotice-translate-to' => 'Omset til', |
4420 | 5135 | 'centralnotice-translate' => 'Omset', |
4421 | 5136 | 'centralnotice-english' => 'Engelsk', |
4422 | | - 'centralnotice-template-name' => 'Malnamn', |
| 5137 | + 'centralnotice-banner-name' => 'Malnamn', |
4423 | 5138 | 'centralnotice-templates' => 'Malar', |
4424 | 5139 | 'centralnotice-weight' => 'Vekt', |
4425 | 5140 | 'centralnotice-locked' => 'Låst', |
— | — | @@ -4462,6 +5177,7 @@ |
4463 | 5178 | 'centralnotice-message-not-set' => 'Melding ikkje gjeve', |
4464 | 5179 | 'centralnotice-clone' => 'Kopi', |
4465 | 5180 | 'centralnotice-clone-notice' => 'Opprett ein kopi av malen', |
| 5181 | + 'centralnotice-clone-name' => 'Namn:', |
4466 | 5182 | 'centralnotice-preview-all-template-translations' => 'Førehandsvis alle tilgjengelege omsetjingar av malen', |
4467 | 5183 | 'right-centralnotice-admin' => 'Handtera sentrale merknader', |
4468 | 5184 | 'right-centralnotice-translate' => 'Omsetja sentrale merknader', |
— | — | @@ -4487,31 +5203,41 @@ |
4488 | 5204 | 'centralnotice-end-date' => 'Sluttdato', |
4489 | 5205 | 'centralnotice-enabled' => 'Aktivert', |
4490 | 5206 | 'centralnotice-modify' => 'Lagre', |
| 5207 | + 'centralnotice-save-banner' => 'Lagre banner', |
4491 | 5208 | 'centralnotice-preview' => 'Forhåndsvisning', |
4492 | 5209 | 'centralnotice-add-new' => 'Legg til en ny sentralmelding', |
4493 | 5210 | 'centralnotice-remove' => 'Fjern', |
4494 | 5211 | 'centralnotice-translate-heading' => 'Oversettelse for $1', |
4495 | 5212 | 'centralnotice-manage' => 'Håndter sentralemeldinger', |
| 5213 | + 'centralnotice-manage-templates' => 'Behandle bannere', |
4496 | 5214 | 'centralnotice-add' => 'Legg til', |
4497 | 5215 | 'centralnotice-add-notice' => 'Legg til en melding', |
| 5216 | + 'centralnotice-edit-notice' => 'Rediger kampanje', |
4498 | 5217 | 'centralnotice-add-template' => 'Legg til en mal', |
4499 | 5218 | 'centralnotice-show-notices' => 'Vis meldinger', |
4500 | 5219 | 'centralnotice-list-templates' => 'Vis maler', |
| 5220 | + 'centralnotice-multiple_languages' => 'flere ($1)', |
4501 | 5221 | 'centralnotice-translations' => 'Oversettelser', |
4502 | 5222 | 'centralnotice-translate-to' => 'Oversett til', |
4503 | 5223 | 'centralnotice-translate' => 'Oversett', |
4504 | 5224 | 'centralnotice-english' => 'Engelsk', |
4505 | | - 'centralnotice-template-name' => 'Malnavn', |
| 5225 | + 'centralnotice-banner-name' => 'Malnavn', |
| 5226 | + 'centralnotice-banner' => 'Banner', |
| 5227 | + 'centralnotice-banner-heading' => 'Banner: $1', |
4506 | 5228 | 'centralnotice-templates' => 'Maler', |
4507 | 5229 | 'centralnotice-weight' => 'Vekt', |
4508 | 5230 | 'centralnotice-locked' => 'Låst', |
| 5231 | + 'centralnotice-notice' => 'Kampanje', |
| 5232 | + 'centralnotice-notice-heading' => 'Kampanje: $1', |
4509 | 5233 | 'centralnotice-notices' => 'Meldinger', |
4510 | 5234 | 'centralnotice-notice-exists' => 'Melding eksisterer allerede. |
4511 | 5235 | Ikke lagt inn.', |
| 5236 | + 'centralnotice-no-language' => 'Ingen språk ble valgt for kampanjen. Ikke lagt til.', |
4512 | 5237 | 'centralnotice-template-exists' => 'Mal finnes allerede. |
4513 | 5238 | Ikke lagt inn', |
4514 | | - 'centralnotice-notice-doesnt-exist' => 'Melding finnes ikke. |
4515 | | -Ingenting å slette', |
| 5239 | + 'centralnotice-notice-doesnt-exist' => 'Kampanje finnes ikke.', |
| 5240 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampanje eksisterer ikke. |
| 5241 | +Ingenting å fjerne.', |
4516 | 5242 | 'centralnotice-template-still-bound' => 'Mal er fortsatt koblet til en melding. |
4517 | 5243 | Ikke fjernet', |
4518 | 5244 | 'centralnotice-template-body' => 'Malinnhold:', |
— | — | @@ -4521,6 +5247,8 @@ |
4522 | 5248 | 'centralnotice-hours' => 'Timer', |
4523 | 5249 | 'centralnotice-min' => 'Minutt', |
4524 | 5250 | 'centralnotice-project-lang' => 'Prosjektspråk', |
| 5251 | + 'centralnotice-select' => 'Velg: $1', |
| 5252 | + 'centralnotice-top-ten-languages' => 'Topp 10 språk', |
4525 | 5253 | 'centralnotice-project-name' => 'Prosjektnavn', |
4526 | 5254 | 'centralnotice-start-date' => 'Startdato', |
4527 | 5255 | 'centralnotice-start-time' => 'Starttid (UTC)', |
— | — | @@ -4533,7 +5261,7 @@ |
4534 | 5262 | 'centralnotice-template-already-exists' => 'Mal er allerede knyttet til kampanje. |
4535 | 5263 | Ikke lagt inn', |
4536 | 5264 | 'centralnotice-preview-template' => 'Forhåndsvis mal', |
4537 | | - 'centralnotice-start-hour' => 'Starttid', |
| 5265 | + 'centralnotice-start-hour' => 'Starttid (GMT)', |
4538 | 5266 | 'centralnotice-change-lang' => 'Endre oversettelsesspråk', |
4539 | 5267 | 'centralnotice-weights' => 'Tyngder', |
4540 | 5268 | 'centralnotice-notice-is-locked' => 'Melding er låst. |
— | — | @@ -4551,11 +5279,26 @@ |
4552 | 5280 | 'centralnotice-no-templates-translate' => 'Det finnes ingen maler å redigere oversettelser for', |
4553 | 5281 | 'centralnotice-number-uses' => 'Anvendelser', |
4554 | 5282 | 'centralnotice-edit-template' => 'Rediger mal', |
| 5283 | + 'centralnotice-edit-template-summary' => 'For å opprette en lokaliserbar melding, legg ved en bindestreks-streng inni tre krøllparanteser, for eksempel {{{jimbo-quote}}}.', |
4555 | 5284 | 'centralnotice-message' => 'Melding', |
4556 | 5285 | 'centralnotice-message-not-set' => 'Melding ikke satt', |
4557 | 5286 | 'centralnotice-clone' => 'Klon', |
4558 | 5287 | 'centralnotice-clone-notice' => 'Lag en kopi av malen', |
| 5288 | + 'centralnotice-clone-name' => 'Navn:', |
4559 | 5289 | 'centralnotice-preview-all-template-translations' => 'Forhåndsvis alle tilgjengelige oversettelser av malen', |
| 5290 | + 'centralnotice-insert' => 'Sett inn: $1', |
| 5291 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} knapp', |
| 5292 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collape}} knapp', |
| 5293 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} knapp', |
| 5294 | + 'centralnotice-translate-button' => 'Hjelp med oversettelse-knapp', |
| 5295 | + 'centralnotice-donate-button' => 'Doner-knapp', |
| 5296 | + 'centralnotice-expanded-banner' => 'Utvidet banner', |
| 5297 | + 'centralnotice-collapsed-banner' => 'Kollapset banner', |
| 5298 | + 'centralnotice-banner-display' => 'Vis til:', |
| 5299 | + 'centralnotice-banner-anonymous' => 'Anonyme brukere', |
| 5300 | + 'centralnotice-banner-logged-in' => 'Innloggede brukere', |
| 5301 | + 'centralnotice-banner-type' => 'Banner type:', |
| 5302 | + 'centralnotice-banner-hidable' => 'Statisk/skjulbar', |
4560 | 5303 | 'right-centralnotice-admin' => 'Håndtere sentrale meldinger', |
4561 | 5304 | 'right-centralnotice-translate' => 'Oversett sentrale meldinger', |
4562 | 5305 | 'action-centralnotice-admin' => 'administrere sentrale meldinger', |
— | — | @@ -4590,7 +5333,7 @@ |
4591 | 5334 | 'centralnotice-translate-to' => 'Traduire en', |
4592 | 5335 | 'centralnotice-translate' => 'Traduire', |
4593 | 5336 | 'centralnotice-english' => 'Anglés', |
4594 | | - 'centralnotice-template-name' => 'Nom del modèl', |
| 5337 | + 'centralnotice-banner-name' => 'Nom del modèl', |
4595 | 5338 | 'centralnotice-templates' => 'Modèls', |
4596 | 5339 | 'centralnotice-weight' => 'Pes', |
4597 | 5340 | 'centralnotice-locked' => 'Varrolhat', |
— | — | @@ -4667,6 +5410,7 @@ |
4668 | 5411 | * @author Xqt |
4669 | 5412 | */ |
4670 | 5413 | $messages['pdc'] = array( |
| 5414 | + 'centralnotice-preview' => 'Aagucke', |
4671 | 5415 | 'centralnotice-add' => 'Dezu duh', |
4672 | 5416 | 'centralnotice-list-templates' => 'Lischt vun Moddle', |
4673 | 5417 | 'centralnotice-translations' => 'Iwwersetzinge', |
— | — | @@ -4698,28 +5442,39 @@ |
4699 | 5443 | 'centralnotice-end-date' => 'Data zakończenia', |
4700 | 5444 | 'centralnotice-enabled' => 'Włączony', |
4701 | 5445 | 'centralnotice-modify' => 'Zapisz', |
| 5446 | + 'centralnotice-save-banner' => 'Zapisz baner', |
4702 | 5447 | 'centralnotice-preview' => 'Podgląd', |
4703 | 5448 | 'centralnotice-add-new' => 'Dodaj nowy wspólny komunikat', |
4704 | 5449 | 'centralnotice-remove' => 'Usuń', |
4705 | 5450 | 'centralnotice-translate-heading' => 'Tłumaczenie dla $1', |
4706 | 5451 | 'centralnotice-manage' => 'Zarządzaj wspólnymi komunikatami', |
| 5452 | + 'centralnotice-manage-templates' => 'Zarządzanie banerami', |
4707 | 5453 | 'centralnotice-add' => 'Dodaj', |
4708 | 5454 | 'centralnotice-add-notice' => 'Dodaj komunikat', |
| 5455 | + 'centralnotice-edit-notice' => 'Edycja kampanii', |
4709 | 5456 | 'centralnotice-add-template' => 'Dodaj szablon', |
4710 | 5457 | 'centralnotice-show-notices' => 'Pokaż komunikaty', |
4711 | 5458 | 'centralnotice-list-templates' => 'Lista szablonów', |
| 5459 | + 'centralnotice-multiple_languages' => 'wiele ($1)', |
4712 | 5460 | 'centralnotice-translations' => 'Tłumaczenia', |
4713 | 5461 | 'centralnotice-translate-to' => 'Przetłumacz na', |
4714 | 5462 | 'centralnotice-translate' => 'Przetłumacz', |
4715 | 5463 | 'centralnotice-english' => 'Angielski', |
4716 | | - 'centralnotice-template-name' => 'Nazwa szablonu', |
4717 | | - 'centralnotice-templates' => 'Szablony', |
| 5464 | + 'centralnotice-banner-name' => 'Nazwa szablonu', |
| 5465 | + 'centralnotice-banner' => 'Baner', |
| 5466 | + 'centralnotice-banner-heading' => 'Baner – $1', |
| 5467 | + 'centralnotice-templates' => 'Banery', |
4718 | 5468 | 'centralnotice-weight' => 'Waga', |
4719 | 5469 | 'centralnotice-locked' => 'Zablokowany', |
| 5470 | + 'centralnotice-notice' => 'Kampania', |
| 5471 | + 'centralnotice-notice-heading' => 'Kampania – $1', |
4720 | 5472 | 'centralnotice-notices' => 'Komunikaty', |
4721 | 5473 | 'centralnotice-notice-exists' => 'Komunikat o podanej nazwie już istnieje. Nowy komunikat nie został dodany.', |
| 5474 | + 'centralnotice-no-language' => 'Ponieważ nie wybrano języka kampanii, nie została ona dodana.', |
4722 | 5475 | 'centralnotice-template-exists' => 'Szablon o podanej nazwie już istnieje. Nowy szablon nie został dodany.', |
4723 | | - 'centralnotice-notice-doesnt-exist' => 'Komunikat nie istnieje. Nie ma czego usunąć.', |
| 5476 | + 'centralnotice-notice-doesnt-exist' => 'Kampania nie istnieje.', |
| 5477 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampania nie istnieje. |
| 5478 | +Usunięcie jest niemożliwe.', |
4724 | 5479 | 'centralnotice-template-still-bound' => 'Szablon nie może zostać usunięty. Jest ciągle używany przez komunikat.', |
4725 | 5480 | 'centralnotice-template-body' => 'Treść szablonu:', |
4726 | 5481 | 'centralnotice-day' => 'Dzień', |
— | — | @@ -4728,6 +5483,8 @@ |
4729 | 5484 | 'centralnotice-hours' => 'Godzina', |
4730 | 5485 | 'centralnotice-min' => 'Minuta', |
4731 | 5486 | 'centralnotice-project-lang' => 'Język projektu', |
| 5487 | + 'centralnotice-select' => 'Wybierz: $1', |
| 5488 | + 'centralnotice-top-ten-languages' => '10 najważniejszych języków', |
4732 | 5489 | 'centralnotice-project-name' => 'Nazwa projektu', |
4733 | 5490 | 'centralnotice-start-date' => 'Data rozpoczęcia', |
4734 | 5491 | 'centralnotice-start-time' => 'Czas rozpoczęcia (UTC)', |
— | — | @@ -4739,7 +5496,7 @@ |
4740 | 5497 | 'centralnotice-template-already-exists' => 'Szablon nie został dodany. |
4741 | 5498 | Jest już wykorzystany w kampani.', |
4742 | 5499 | 'centralnotice-preview-template' => 'Podgląd szablonu', |
4743 | | - 'centralnotice-start-hour' => 'Czas rozpoczęcia', |
| 5500 | + 'centralnotice-start-hour' => 'Czas rozpoczęcia (UTC)', |
4744 | 5501 | 'centralnotice-change-lang' => 'Zmień język tłumaczenia', |
4745 | 5502 | 'centralnotice-weights' => 'Wagi', |
4746 | 5503 | 'centralnotice-notice-is-locked' => 'Komunikat nie może zostać usunięty, ponieważ jest zablokowany.', |
— | — | @@ -4753,12 +5510,29 @@ |
4754 | 5511 | Dodaj nowy poniżej.', |
4755 | 5512 | 'centralnotice-no-templates-translate' => 'Nie ma żadnych szablonów do zmiany tłumaczeń dla', |
4756 | 5513 | 'centralnotice-number-uses' => 'Zastosowania', |
| 5514 | + 'centralnotice-settings' => 'Ustawienia', |
4757 | 5515 | 'centralnotice-edit-template' => 'Edycja szablonu', |
| 5516 | + 'centralnotice-edit-template-summary' => 'Lokalizowalny komunikat należy tworzyć poprzez zapisanie ciągu znaków rozdzielanych znakiem odejmowania w trzech nawiasach klamrowych, np {{{cytat-jimbo}}}.', |
4758 | 5517 | 'centralnotice-message' => 'Wiadomość', |
4759 | 5518 | 'centralnotice-message-not-set' => 'Wiadomość nie jest ustawiona', |
4760 | 5519 | 'centralnotice-clone' => 'Kopia', |
4761 | 5520 | 'centralnotice-clone-notice' => 'Utwórz kopię szablonu', |
| 5521 | + 'centralnotice-clone-name' => 'Nazwa', |
4762 | 5522 | 'centralnotice-preview-all-template-translations' => 'Zobacz wszystkie dostępne tłumaczenia szablonu', |
| 5523 | + 'centralnotice-insert' => 'Wstaw: $1', |
| 5524 | + 'centralnotice-hide-button' => 'Przycisk „{{int:centralnotice-shared-hide}}”', |
| 5525 | + 'centralnotice-collapse-button' => 'Przycisk „{{int:centralnotice-shared-collapse}}”', |
| 5526 | + 'centralnotice-expand-button' => 'Przycisk „{{int:centralnotice-shared-expand}}”', |
| 5527 | + 'centralnotice-translate-button' => 'Przycisk „Pomóż w tłumaczeniu”', |
| 5528 | + 'centralnotice-donate-button' => 'Przycisk „Wspomóż”', |
| 5529 | + 'centralnotice-expanded-banner' => 'Rozwinięty baner', |
| 5530 | + 'centralnotice-collapsed-banner' => 'Zwinięty baner', |
| 5531 | + 'centralnotice-banner-display' => 'Wyświetlaj', |
| 5532 | + 'centralnotice-banner-anonymous' => 'użytkownikom anonimowym', |
| 5533 | + 'centralnotice-banner-logged-in' => 'użytkownikom zalogowanym', |
| 5534 | + 'centralnotice-banner-type' => 'Typ banera:', |
| 5535 | + 'centralnotice-banner-hidable' => 'Statyczny czy ukrywalny', |
| 5536 | + 'centralnotice-banner-collapsible' => 'Zwijalny', |
4763 | 5537 | 'right-centralnotice-admin' => 'Zarządzanie wspólnymi komunikatami', |
4764 | 5538 | 'right-centralnotice-translate' => 'Tłumaczenie wspólnych dla projektów ogłoszeń', |
4765 | 5539 | 'action-centralnotice-admin' => 'zarządzaj centralnymi komunikatami', |
— | — | @@ -4781,31 +5555,41 @@ |
4782 | 5556 | 'centralnotice-end-date' => 'Data fin', |
4783 | 5557 | 'centralnotice-enabled' => 'Abilità', |
4784 | 5558 | 'centralnotice-modify' => 'Spediss', |
| 5559 | + 'centralnotice-save-banner' => 'Salvé ël tilèt', |
4785 | 5560 | 'centralnotice-preview' => 'Previsualisassion', |
4786 | 5561 | 'centralnotice-add-new' => 'Gionta na Neuva Sentral neuva', |
4787 | 5562 | 'centralnotice-remove' => 'Gava', |
4788 | 5563 | 'centralnotice-translate-heading' => 'Tradussion për $1', |
4789 | 5564 | 'centralnotice-manage' => 'Gestiss neuva sentral', |
| 5565 | + 'centralnotice-manage-templates' => 'Gestì ij tilet', |
4790 | 5566 | 'centralnotice-add' => 'Gionta', |
4791 | 5567 | 'centralnotice-add-notice' => 'Gionta na neuva', |
| 5568 | + 'centralnotice-edit-notice' => 'Modifiché la campagna', |
4792 | 5569 | 'centralnotice-add-template' => 'Gionta në stamp', |
4793 | 5570 | 'centralnotice-show-notices' => 'Mostra neuva', |
4794 | 5571 | 'centralnotice-list-templates' => 'Lista stamp', |
| 5572 | + 'centralnotice-multiple_languages' => 'mùltipl ($1)', |
4795 | 5573 | 'centralnotice-translations' => 'Tradussion', |
4796 | 5574 | 'centralnotice-translate-to' => 'Volté an', |
4797 | 5575 | 'centralnotice-translate' => 'Volté', |
4798 | 5576 | 'centralnotice-english' => 'Anglèis', |
4799 | | - 'centralnotice-template-name' => 'Nòm ëd lë stamp', |
| 5577 | + 'centralnotice-banner-name' => 'Nòm ëd lë stamp', |
| 5578 | + 'centralnotice-banner' => 'Tilèt', |
| 5579 | + 'centralnotice-banner-heading' => 'Tilèt: $1', |
4800 | 5580 | 'centralnotice-templates' => 'Stamp', |
4801 | 5581 | 'centralnotice-weight' => 'Pèis', |
4802 | 5582 | 'centralnotice-locked' => 'Blocà', |
| 5583 | + 'centralnotice-notice' => 'Campagna', |
| 5584 | + 'centralnotice-notice-heading' => 'Campagna: $1', |
4803 | 5585 | 'centralnotice-notices' => 'Neuve', |
4804 | 5586 | 'centralnotice-notice-exists' => 'La neuva a esist già. |
4805 | 5587 | Pa giontà', |
| 5588 | + 'centralnotice-no-language' => "Gnun-a lenga a l'é stàita selessionà për la campagna. Pa giontà.", |
4806 | 5589 | 'centralnotice-template-exists' => 'Lë stamp a esist già. |
4807 | 5590 | Pa giontà', |
4808 | | - 'centralnotice-notice-doesnt-exist' => 'La neuva a esist pa. |
4809 | | -A-i é gnente da gavé', |
| 5591 | + 'centralnotice-notice-doesnt-exist' => 'La campagna a esist pa.', |
| 5592 | + 'centralnotice-remove-notice-doesnt-exist' => 'La campagna a esist pa. |
| 5593 | +Pa gnente da gavé.', |
4810 | 5594 | 'centralnotice-template-still-bound' => "Lë stamp a l'é ancó gropà a na neuva. |
4811 | 5595 | Pa gavà.", |
4812 | 5596 | 'centralnotice-template-body' => 'Còrp ëd lë stamp:', |
— | — | @@ -4815,6 +5599,8 @@ |
4816 | 5600 | 'centralnotice-hours' => 'Ora', |
4817 | 5601 | 'centralnotice-min' => 'Minuta', |
4818 | 5602 | 'centralnotice-project-lang' => 'Lenga dël proget', |
| 5603 | + 'centralnotice-select' => 'Selessioné: $1', |
| 5604 | + 'centralnotice-top-ten-languages' => 'Prime 10 lenghe', |
4819 | 5605 | 'centralnotice-project-name' => 'Nòm dël proget', |
4820 | 5606 | 'centralnotice-start-date' => "Data d'inissi", |
4821 | 5607 | 'centralnotice-start-time' => "Ora d'inissi (UTC)", |
— | — | @@ -4827,7 +5613,7 @@ |
4828 | 5614 | 'centralnotice-template-already-exists' => "Lë stamp a l'é già gropà a na campagna. |
4829 | 5615 | Pa giontà", |
4830 | 5616 | 'centralnotice-preview-template' => 'Previsualisassion stamp', |
4831 | | - 'centralnotice-start-hour' => "Ora d'inissi", |
| 5617 | + 'centralnotice-start-hour' => "Ora d'inissi (GMT)", |
4832 | 5618 | 'centralnotice-change-lang' => 'Cangé lenga ëd tradussion', |
4833 | 5619 | 'centralnotice-weights' => 'Pèis', |
4834 | 5620 | 'centralnotice-notice-is-locked' => 'Neuva blocà. |
— | — | @@ -4844,12 +5630,29 @@ |
4845 | 5631 | Ch'a na gionta un-a sì-sota.", |
4846 | 5632 | 'centralnotice-no-templates-translate' => 'A-i é gnun ëstamp dont modifiché la tradussion', |
4847 | 5633 | 'centralnotice-number-uses' => 'Usagi', |
| 5634 | + 'centralnotice-settings' => 'Regolassion', |
4848 | 5635 | 'centralnotice-edit-template' => 'Modìfica stamp', |
| 5636 | + 'centralnotice-edit-template-summary' => 'Për creé un mëssagi localisàbil, sara na stringa con tratin ant tre paréntesi grafe, p.e. {{{jimbo-quote}}}.', |
4849 | 5637 | 'centralnotice-message' => 'Mëssagi', |
4850 | 5638 | 'centralnotice-message-not-set' => 'Mëssagi pa ampostà', |
4851 | 5639 | 'centralnotice-clone' => 'Clon-a', |
4852 | 5640 | 'centralnotice-clone-notice' => 'Crea na còpia ëd lë stamp', |
| 5641 | + 'centralnotice-clone-name' => 'Nòm:', |
4853 | 5642 | 'centralnotice-preview-all-template-translations' => 'Previsualisa tute le tradussion disponìbij ëd lë stamp', |
| 5643 | + 'centralnotice-insert' => 'Anserì: $1', |
| 5644 | + 'centralnotice-hide-button' => 'Boton {{int:centralnotice-shared-hide}}', |
| 5645 | + 'centralnotice-collapse-button' => 'Boton {{int:centralnotice-shared-collapse}}', |
| 5646 | + 'centralnotice-expand-button' => 'Boton {{int:centralnotice-shared-expand}}', |
| 5647 | + 'centralnotice-translate-button' => 'Boton për giuté a volté', |
| 5648 | + 'centralnotice-donate-button' => "Boton për fé dj'oferte", |
| 5649 | + 'centralnotice-expanded-banner' => 'Tilèt ëslargà', |
| 5650 | + 'centralnotice-collapsed-banner' => 'Tilèt ëstrenzù', |
| 5651 | + 'centralnotice-banner-display' => 'Smon-e a :', |
| 5652 | + 'centralnotice-banner-anonymous' => 'Utent anònim', |
| 5653 | + 'centralnotice-banner-logged-in' => 'Utent intrà ant ël sistema', |
| 5654 | + 'centralnotice-banner-type' => 'Sòrt ëd tilèt:', |
| 5655 | + 'centralnotice-banner-hidable' => 'Stàtich/Stërmàbil', |
| 5656 | + 'centralnotice-banner-collapsible' => 'Strenzìbil', |
4854 | 5657 | 'right-centralnotice-admin' => 'Gestì le neuve sentraj', |
4855 | 5658 | 'right-centralnotice-translate' => 'Volté le neuve sentraj', |
4856 | 5659 | 'action-centralnotice-admin' => 'gestì le neuve sentraj', |
— | — | @@ -4878,7 +5681,7 @@ |
4879 | 5682 | 'centralnotice-translations' => 'ژباړې', |
4880 | 5683 | 'centralnotice-translate' => 'ژباړل', |
4881 | 5684 | 'centralnotice-english' => 'انګرېزي', |
4882 | | - 'centralnotice-template-name' => 'د کينډۍ نوم', |
| 5685 | + 'centralnotice-banner-name' => 'د کينډۍ نوم', |
4883 | 5686 | 'centralnotice-templates' => 'کينډۍ', |
4884 | 5687 | 'centralnotice-day' => 'ورځ', |
4885 | 5688 | 'centralnotice-year' => 'کال', |
— | — | @@ -4892,10 +5695,13 @@ |
4893 | 5696 | 'centralnotice-available-templates' => 'شته کينډۍ', |
4894 | 5697 | 'centralnotice-start-hour' => 'د پيل وخت', |
4895 | 5698 | 'centralnotice-change-lang' => 'د ژباړې ژبه بدلول', |
| 5699 | + 'centralnotice-number-uses' => 'کاروي', |
4896 | 5700 | 'centralnotice-message' => 'پيغام', |
| 5701 | + 'centralnotice-clone-name' => 'نوم', |
4897 | 5702 | ); |
4898 | 5703 | |
4899 | 5704 | /** Portuguese (Português) |
| 5705 | + * @author Crazymadlover |
4900 | 5706 | * @author Hamilton Abreu |
4901 | 5707 | * @author Malafaya |
4902 | 5708 | */ |
— | — | @@ -4910,31 +5716,41 @@ |
4911 | 5717 | 'centralnotice-end-date' => 'Data fim', |
4912 | 5718 | 'centralnotice-enabled' => 'Activo', |
4913 | 5719 | 'centralnotice-modify' => 'Submeter', |
| 5720 | + 'centralnotice-save-banner' => 'Gravar modelo', |
4914 | 5721 | 'centralnotice-preview' => 'Antevisão', |
4915 | 5722 | 'centralnotice-add-new' => 'Adicionar um novo aviso centralizado', |
4916 | 5723 | 'centralnotice-remove' => 'Remover', |
4917 | 5724 | 'centralnotice-translate-heading' => 'Tradução para $1', |
4918 | 5725 | 'centralnotice-manage' => 'Gerir aviso centralizado', |
| 5726 | + 'centralnotice-manage-templates' => 'Administrar modelos', |
4919 | 5727 | 'centralnotice-add' => 'Adicionar', |
4920 | 5728 | 'centralnotice-add-notice' => 'Adicionar um aviso', |
| 5729 | + 'centralnotice-edit-notice' => 'Editar aviso', |
4921 | 5730 | 'centralnotice-add-template' => 'Adicionar um modelo', |
4922 | 5731 | 'centralnotice-show-notices' => 'Mostrar avisos', |
4923 | 5732 | 'centralnotice-list-templates' => 'Listar modelos', |
| 5733 | + 'centralnotice-multiple_languages' => 'múltiplas ($1)', |
4924 | 5734 | 'centralnotice-translations' => 'Traduções', |
4925 | 5735 | 'centralnotice-translate-to' => 'Traduzir para', |
4926 | 5736 | 'centralnotice-translate' => 'Traduzir', |
4927 | 5737 | 'centralnotice-english' => 'Inglês', |
4928 | | - 'centralnotice-template-name' => 'Nome do modelo', |
| 5738 | + 'centralnotice-banner-name' => 'Nome do modelo', |
| 5739 | + 'centralnotice-banner' => 'Modelo', |
| 5740 | + 'centralnotice-banner-heading' => 'Modelo: $1', |
4929 | 5741 | 'centralnotice-templates' => 'Modelos', |
4930 | 5742 | 'centralnotice-weight' => 'Peso', |
4931 | 5743 | 'centralnotice-locked' => 'Bloqueado', |
| 5744 | + 'centralnotice-notice' => 'Aviso', |
| 5745 | + 'centralnotice-notice-heading' => 'Aviso centralizado: $1', |
4932 | 5746 | 'centralnotice-notices' => 'Avisos', |
4933 | 5747 | 'centralnotice-notice-exists' => 'O aviso já existe. |
4934 | 5748 | Não adicionado', |
| 5749 | + 'centralnotice-no-language' => 'Não foi seleccionada uma língua para o aviso centralizado. O aviso não será adicionado.', |
4935 | 5750 | 'centralnotice-template-exists' => 'O modelo já existe. |
4936 | 5751 | Não adicionado', |
4937 | | - 'centralnotice-notice-doesnt-exist' => 'O aviso não existe. |
4938 | | -Nada a remover', |
| 5752 | + 'centralnotice-notice-doesnt-exist' => 'O aviso não existe.', |
| 5753 | + 'centralnotice-remove-notice-doesnt-exist' => 'O aviso não existe. |
| 5754 | +Não há nada para remover.', |
4939 | 5755 | 'centralnotice-template-still-bound' => 'O modelo ainda está ligado a um aviso. |
4940 | 5756 | Não removido.', |
4941 | 5757 | 'centralnotice-template-body' => 'Conteúdo do modelo:', |
— | — | @@ -4944,6 +5760,8 @@ |
4945 | 5761 | 'centralnotice-hours' => 'Hora', |
4946 | 5762 | 'centralnotice-min' => 'Minuto', |
4947 | 5763 | 'centralnotice-project-lang' => 'Língua do projecto', |
| 5764 | + 'centralnotice-select' => 'Seleccionar: $1', |
| 5765 | + 'centralnotice-top-ten-languages' => 'As 10 línguas de topo', |
4948 | 5766 | 'centralnotice-project-name' => 'Nome do projecto', |
4949 | 5767 | 'centralnotice-start-date' => 'Data início', |
4950 | 5768 | 'centralnotice-start-time' => 'Hora início (UTC)', |
— | — | @@ -4953,10 +5771,10 @@ |
4954 | 5772 | 'centralnotice-no-templates-assigned' => 'Nenhum modelo atribuído a avisos. |
4955 | 5773 | Adicione alguns!', |
4956 | 5774 | 'centralnotice-available-templates' => 'Modelos disponíveis', |
4957 | | - 'centralnotice-template-already-exists' => 'O modelo já está ligado a uma campanha. |
4958 | | -Não adicionado', |
| 5775 | + 'centralnotice-template-already-exists' => 'O modelo já está ligado a um aviso. |
| 5776 | +Não adicionado.', |
4959 | 5777 | 'centralnotice-preview-template' => 'Antever modelo', |
4960 | | - 'centralnotice-start-hour' => 'Hora início', |
| 5778 | + 'centralnotice-start-hour' => 'Hora de início (GMT)', |
4961 | 5779 | 'centralnotice-change-lang' => 'Alterar língua de tradução', |
4962 | 5780 | 'centralnotice-weights' => 'Pesos', |
4963 | 5781 | 'centralnotice-notice-is-locked' => 'O aviso está bloqueado. |
— | — | @@ -4973,12 +5791,29 @@ |
4974 | 5792 | Adicione um abaixo', |
4975 | 5793 | 'centralnotice-no-templates-translate' => 'Não há quaisquer modelos para os quais seja possível editar traduções', |
4976 | 5794 | 'centralnotice-number-uses' => 'Utilizações', |
| 5795 | + 'centralnotice-settings' => 'Configurações', |
4977 | 5796 | 'centralnotice-edit-template' => 'Editar modelo', |
| 5797 | + 'centralnotice-edit-template-summary' => 'Para criar uma mensagem localizável, coloque entre três chavetas um texto que contenha um hífen; por exemplo, {{{citar-jimbo}}}.', |
4978 | 5798 | 'centralnotice-message' => 'Mensagem', |
4979 | 5799 | 'centralnotice-message-not-set' => 'Mensagem não estabelecida', |
4980 | 5800 | 'centralnotice-clone' => 'Clonar', |
4981 | 5801 | 'centralnotice-clone-notice' => 'Criar uma cópia do modelo', |
| 5802 | + 'centralnotice-clone-name' => 'Nome:', |
4982 | 5803 | 'centralnotice-preview-all-template-translations' => 'Antever todas as traduções disponíveis do modelo', |
| 5804 | + 'centralnotice-insert' => 'Inserir: $1', |
| 5805 | + 'centralnotice-hide-button' => 'Botão {{int:centralnotice-shared-hide}}', |
| 5806 | + 'centralnotice-collapse-button' => 'Botão {{int:centralnotice-shared-collapse}}', |
| 5807 | + 'centralnotice-expand-button' => 'Botão {{int:centralnotice-shared-expand}}', |
| 5808 | + 'centralnotice-translate-button' => 'Botão Ajudar a traduzir', |
| 5809 | + 'centralnotice-donate-button' => 'Botão Donativo', |
| 5810 | + 'centralnotice-expanded-banner' => 'Modelo expandido', |
| 5811 | + 'centralnotice-collapsed-banner' => 'Modelo colapsado', |
| 5812 | + 'centralnotice-banner-display' => 'Apresentar a:', |
| 5813 | + 'centralnotice-banner-anonymous' => 'Utilizadores anónimos', |
| 5814 | + 'centralnotice-banner-logged-in' => 'Utilizadores autenticados', |
| 5815 | + 'centralnotice-banner-type' => 'Tipo de modelo:', |
| 5816 | + 'centralnotice-banner-hidable' => 'Estático/Ocultável', |
| 5817 | + 'centralnotice-banner-collapsible' => 'Colapsável', |
4983 | 5818 | 'right-centralnotice-admin' => 'Gerir avisos centralizados', |
4984 | 5819 | 'right-centralnotice-translate' => 'Traduzir avisos centralizados', |
4985 | 5820 | 'action-centralnotice-admin' => 'gerir avisos centralizados', |
— | — | @@ -4988,6 +5823,7 @@ |
4989 | 5824 | |
4990 | 5825 | /** Brazilian Portuguese (Português do Brasil) |
4991 | 5826 | * @author Eduardo.mps |
| 5827 | + * @author Giro720 |
4992 | 5828 | * @author Heldergeovane |
4993 | 5829 | */ |
4994 | 5830 | $messages['pt-br'] = array( |
— | — | @@ -5001,31 +5837,41 @@ |
5002 | 5838 | 'centralnotice-end-date' => 'Data de fim', |
5003 | 5839 | 'centralnotice-enabled' => 'Ativo', |
5004 | 5840 | 'centralnotice-modify' => 'Enviar', |
| 5841 | + 'centralnotice-save-banner' => 'Salvar modelo', |
5005 | 5842 | 'centralnotice-preview' => 'Previsão', |
5006 | 5843 | 'centralnotice-add-new' => 'Adicionar um novo aviso centralizado', |
5007 | 5844 | 'centralnotice-remove' => 'Remover', |
5008 | 5845 | 'centralnotice-translate-heading' => 'Tradução de $1', |
5009 | 5846 | 'centralnotice-manage' => 'Gerenciar aviso centralizado', |
| 5847 | + 'centralnotice-manage-templates' => 'Administrar modelos', |
5010 | 5848 | 'centralnotice-add' => 'Adicionar', |
5011 | 5849 | 'centralnotice-add-notice' => 'Adicionar um aviso', |
| 5850 | + 'centralnotice-edit-notice' => 'Editar aviso', |
5012 | 5851 | 'centralnotice-add-template' => 'Adicionar um modelo', |
5013 | 5852 | 'centralnotice-show-notices' => 'Mostrar avisos', |
5014 | 5853 | 'centralnotice-list-templates' => 'Listar modelos', |
| 5854 | + 'centralnotice-multiple_languages' => 'múltiplas ($1)', |
5015 | 5855 | 'centralnotice-translations' => 'Traduções', |
5016 | 5856 | 'centralnotice-translate-to' => 'Traduzir para', |
5017 | 5857 | 'centralnotice-translate' => 'Traduzir', |
5018 | 5858 | 'centralnotice-english' => 'Inglês', |
5019 | | - 'centralnotice-template-name' => 'Nome do modelo', |
| 5859 | + 'centralnotice-banner-name' => 'Nome do modelo', |
| 5860 | + 'centralnotice-banner' => 'Banner', |
| 5861 | + 'centralnotice-banner-heading' => 'Banner: $1', |
5020 | 5862 | 'centralnotice-templates' => 'Modelos', |
5021 | 5863 | 'centralnotice-weight' => 'Peso', |
5022 | 5864 | 'centralnotice-locked' => 'Bloqueado', |
| 5865 | + 'centralnotice-notice' => 'Campanha', |
| 5866 | + 'centralnotice-notice-heading' => 'Campanha: $1', |
5023 | 5867 | 'centralnotice-notices' => 'Avisos', |
5024 | 5868 | 'centralnotice-notice-exists' => 'O aviso já existe. |
5025 | 5869 | Não adicionado', |
| 5870 | + 'centralnotice-no-language' => 'Não foi selecionada uma língua para o aviso centralizado. O aviso não será adicionado.', |
5026 | 5871 | 'centralnotice-template-exists' => 'O modelo já existe. |
5027 | 5872 | Não adicionado', |
5028 | | - 'centralnotice-notice-doesnt-exist' => 'O aviso não existe. |
5029 | | -Nada a remover', |
| 5873 | + 'centralnotice-notice-doesnt-exist' => 'O aviso não existe.', |
| 5874 | + 'centralnotice-remove-notice-doesnt-exist' => 'O aviso não existe. |
| 5875 | +Não há nada para remover.', |
5030 | 5876 | 'centralnotice-template-still-bound' => 'O modelo ainda está ligado a um aviso. |
5031 | 5877 | Não removido.', |
5032 | 5878 | 'centralnotice-template-body' => 'Conteúdo do modelo:', |
— | — | @@ -5035,6 +5881,8 @@ |
5036 | 5882 | 'centralnotice-hours' => 'Hora', |
5037 | 5883 | 'centralnotice-min' => 'Minuto', |
5038 | 5884 | 'centralnotice-project-lang' => 'Língua do projeto', |
| 5885 | + 'centralnotice-select' => 'Seleccionar: $1', |
| 5886 | + 'centralnotice-top-ten-languages' => 'As 10 línguas mais usadas', |
5039 | 5887 | 'centralnotice-project-name' => 'Nome do projeto', |
5040 | 5888 | 'centralnotice-start-date' => 'Data início', |
5041 | 5889 | 'centralnotice-start-time' => 'Hora início (UTC)', |
— | — | @@ -5047,7 +5895,7 @@ |
5048 | 5896 | 'centralnotice-template-already-exists' => 'O modelo já está ligado a campanha. |
5049 | 5897 | Não adicionado', |
5050 | 5898 | 'centralnotice-preview-template' => 'Prever modelo', |
5051 | | - 'centralnotice-start-hour' => 'Hora início', |
| 5899 | + 'centralnotice-start-hour' => 'Hora de início (GMT)', |
5052 | 5900 | 'centralnotice-change-lang' => 'Alterar língua de tradução', |
5053 | 5901 | 'centralnotice-weights' => 'Pesos', |
5054 | 5902 | 'centralnotice-notice-is-locked' => 'O aviso está bloqueado. |
— | — | @@ -5065,11 +5913,27 @@ |
5066 | 5914 | 'centralnotice-no-templates-translate' => 'Não há quaisquer modelos para os quais seja possível editar traduções', |
5067 | 5915 | 'centralnotice-number-uses' => 'Utilizações', |
5068 | 5916 | 'centralnotice-edit-template' => 'Editar modelo', |
| 5917 | + 'centralnotice-edit-template-summary' => 'Para criar uma mensagem localizável, coloque entre três chaves um texto que contenha um hífen; por exemplo, {{{texto-citado}}}.', |
5069 | 5918 | 'centralnotice-message' => 'Mensagem', |
5070 | 5919 | 'centralnotice-message-not-set' => 'Mensagem não estabelecida', |
5071 | 5920 | 'centralnotice-clone' => 'Clonar', |
5072 | 5921 | 'centralnotice-clone-notice' => 'Criar uma cópia do modelo', |
| 5922 | + 'centralnotice-clone-name' => 'Nome:', |
5073 | 5923 | 'centralnotice-preview-all-template-translations' => 'Prever todas as traduções disponíveis do modelo', |
| 5924 | + 'centralnotice-insert' => 'Inserir: $1', |
| 5925 | + 'centralnotice-hide-button' => 'Botão {{int:centralnotice-shared-hide}}', |
| 5926 | + 'centralnotice-collapse-button' => 'Botão {{int:centralnotice-shared-collapse}}', |
| 5927 | + 'centralnotice-expand-button' => 'Botão {{int:centralnotice-shared-expand}}', |
| 5928 | + 'centralnotice-translate-button' => 'Botão Ajudar a traduzir', |
| 5929 | + 'centralnotice-donate-button' => 'Botão Donativo', |
| 5930 | + 'centralnotice-expanded-banner' => 'Modelo expandido', |
| 5931 | + 'centralnotice-collapsed-banner' => 'Modelo colapsado', |
| 5932 | + 'centralnotice-banner-display' => 'Apresentar a:', |
| 5933 | + 'centralnotice-banner-anonymous' => 'Usuários anônimos', |
| 5934 | + 'centralnotice-banner-logged-in' => 'Usuários autenticados', |
| 5935 | + 'centralnotice-banner-type' => 'Tipo de banner:', |
| 5936 | + 'centralnotice-banner-hidable' => 'Estático/Ocultável', |
| 5937 | + 'centralnotice-banner-collapsible' => 'Colapsável', |
5074 | 5938 | 'right-centralnotice-admin' => 'Gerenciar avisos centralizados', |
5075 | 5939 | 'right-centralnotice-translate' => 'Traduzir avisos centralizados', |
5076 | 5940 | 'action-centralnotice-admin' => 'gerenciar avisos centralizados', |
— | — | @@ -5091,13 +5955,16 @@ |
5092 | 5956 | 'centralnotice-end-date' => "Tukuna p'unchaw", |
5093 | 5957 | 'centralnotice-enabled' => 'Saqillasqa', |
5094 | 5958 | 'centralnotice-modify' => 'Kachay', |
| 5959 | + 'centralnotice-save-banner' => 'Unanchata waqaychay', |
5095 | 5960 | 'centralnotice-preview' => 'Ñawpaqta qhawallay', |
5096 | 5961 | 'centralnotice-add-new' => 'Musuq chawpi willayta yapay', |
5097 | 5962 | 'centralnotice-remove' => 'Qichuy', |
5098 | 5963 | 'centralnotice-translate-heading' => "$1-paq t'ikrasqa", |
5099 | 5964 | 'centralnotice-manage' => 'Chawpi willayta kamachiy', |
| 5965 | + 'centralnotice-manage-templates' => 'Unanchakunata kamachiy', |
5100 | 5966 | 'centralnotice-add' => 'Yapay', |
5101 | 5967 | 'centralnotice-add-notice' => 'Willayta yapay', |
| 5968 | + 'centralnotice-edit-notice' => "Kampañata llamk'apuy", |
5102 | 5969 | 'centralnotice-add-template' => 'Plantillata yapay', |
5103 | 5970 | 'centralnotice-show-notices' => 'Willaykunata rikuchiy', |
5104 | 5971 | 'centralnotice-list-templates' => 'Plantillakunata sutisuyupi rikuchiy', |
— | — | @@ -5105,17 +5972,22 @@ |
5106 | 5973 | 'centralnotice-translate-to' => "Kayman t'ikray:", |
5107 | 5974 | 'centralnotice-translate' => "T'ikray", |
5108 | 5975 | 'centralnotice-english' => 'Inlish simipi', |
5109 | | - 'centralnotice-template-name' => 'Plantilla suti', |
| 5976 | + 'centralnotice-banner-name' => 'Plantilla suti', |
| 5977 | + 'centralnotice-banner' => 'Unancha', |
| 5978 | + 'centralnotice-banner-heading' => 'Unancha: $1', |
5110 | 5979 | 'centralnotice-templates' => 'Plantillakuna', |
5111 | 5980 | 'centralnotice-weight' => 'Llasay', |
5112 | 5981 | 'centralnotice-locked' => "Llawiwan wichq'asqa", |
| 5982 | + 'centralnotice-notice' => 'Kampaña', |
| 5983 | + 'centralnotice-notice-heading' => 'Kampaña: $1', |
5113 | 5984 | 'centralnotice-notices' => 'Willaykuna', |
5114 | 5985 | 'centralnotice-notice-exists' => 'Willayqa kachkañam. |
5115 | 5986 | Manam yapasqachu', |
5116 | 5987 | 'centralnotice-template-exists' => 'Plantillaqa kachkañam. |
5117 | 5988 | Manam yapasqachu', |
5118 | | - 'centralnotice-notice-doesnt-exist' => 'Willayqa manam kanchu. |
5119 | | -Manam qichunallachu', |
| 5989 | + 'centralnotice-notice-doesnt-exist' => 'Kampañaqa manam kanchu.', |
| 5990 | + 'centralnotice-remove-notice-doesnt-exist' => 'Kampañaqa manam kanchu. |
| 5991 | +Manam qichunallachu.', |
5120 | 5992 | 'centralnotice-template-still-bound' => 'Plantillaqa willaymanraqmi watasqa. |
5121 | 5993 | Manam qichusqa kanqachu.', |
5122 | 5994 | 'centralnotice-template-body' => 'Plantilla kurku:', |
— | — | @@ -5125,6 +5997,8 @@ |
5126 | 5998 | 'centralnotice-hours' => 'Ura', |
5127 | 5999 | 'centralnotice-min' => 'Minutu', |
5128 | 6000 | 'centralnotice-project-lang' => 'Ruraykamaypa rimaynin', |
| 6001 | + 'centralnotice-select' => 'Akllay: $1', |
| 6002 | + 'centralnotice-top-ten-languages' => 'Ñawpaq 10 rimaykuna', |
5129 | 6003 | 'centralnotice-project-name' => 'Ruraykamaypa sutin', |
5130 | 6004 | 'centralnotice-start-date' => "Qallarisqanpa p'unchawnin", |
5131 | 6005 | 'centralnotice-start-time' => 'Qallarisqanpa pachan (UTC)', |
— | — | @@ -5134,6 +6008,8 @@ |
5135 | 6009 | 'centralnotice-no-templates-assigned' => 'Manam kanchu willayman haypusqa plantillakuna. |
5136 | 6010 | Yapay!', |
5137 | 6011 | 'centralnotice-available-templates' => 'Aypanalla plantillakuna', |
| 6012 | + 'centralnotice-template-already-exists' => 'Unanchaqa huk kampañamanmi watasqaña. |
| 6013 | +Mana yapaspa', |
5138 | 6014 | 'centralnotice-preview-template' => 'Plantillata ñawpaqta qhawallay', |
5139 | 6015 | 'centralnotice-start-hour' => 'Qallarisqanpa pachan', |
5140 | 6016 | 'centralnotice-change-lang' => "T'ikrana rimayta hukchay", |
— | — | @@ -5153,11 +6029,24 @@ |
5154 | 6030 | 'centralnotice-no-templates-translate' => "Manam kanchu plantillakuna, imapaqchus t'ikrasqa llamk'apunalla kanman", |
5155 | 6031 | 'centralnotice-number-uses' => "Llamk'achin", |
5156 | 6032 | 'centralnotice-edit-template' => "Plantillata llamk'apuy", |
| 6033 | + 'centralnotice-edit-template-summary' => "Maypichanalla willayta kamarinaykipaqqa, aspiyuq qillqallata kimsa chhurku wichq'achiqpi wichq'ay, ahinataq {{{jimbo-quote}}}.", |
5157 | 6034 | 'centralnotice-message' => 'Willay', |
5158 | 6035 | 'centralnotice-message-not-set' => 'Manam kanchu churasqa willay', |
5159 | 6036 | 'centralnotice-clone' => 'Iskayllachay', |
5160 | 6037 | 'centralnotice-clone-notice' => 'Plantillamanta iskaychasqanta kamariy', |
| 6038 | + 'centralnotice-clone-name' => 'Suti:', |
5161 | 6039 | 'centralnotice-preview-all-template-translations' => "Tukuy aypanalla plantillamanta t'ikrasqakunata ñawpaqta qhawallay", |
| 6040 | + 'centralnotice-insert' => "Sat'iy: $1", |
| 6041 | + 'centralnotice-hide-button' => 'Pakay butun', |
| 6042 | + 'centralnotice-collapse-button' => 'Thuñichiy butun', |
| 6043 | + 'centralnotice-expand-button' => "Mast'ariy butun", |
| 6044 | + 'centralnotice-translate-button' => "T'ikraysiy butun", |
| 6045 | + 'centralnotice-donate-button' => 'Qaray butun', |
| 6046 | + 'centralnotice-expanded-banner' => "Mast'arisqa unancha", |
| 6047 | + 'centralnotice-collapsed-banner' => 'Thuñichisqa unancha', |
| 6048 | + 'centralnotice-banner-type' => 'Unancha laya:', |
| 6049 | + 'centralnotice-banner-hidable' => 'Ranuy/Pakana', |
| 6050 | + 'centralnotice-banner-collapsible' => 'Thuñichina', |
5162 | 6051 | 'right-centralnotice-admin' => 'Chawpi willaykunata kamachiy', |
5163 | 6052 | 'right-centralnotice-translate' => "Chawpi willaykunata t'ikray", |
5164 | 6053 | 'action-centralnotice-admin' => 'chawpi willaykunata kamachiy', |
— | — | @@ -5166,9 +6055,11 @@ |
5167 | 6056 | ); |
5168 | 6057 | |
5169 | 6058 | /** Romanian (Română) |
| 6059 | + * @author Cin |
5170 | 6060 | * @author Firilacroco |
5171 | 6061 | * @author KlaudiuMihaila |
5172 | 6062 | * @author Mihai |
| 6063 | + * @author Minisarm |
5173 | 6064 | * @author Stelistcristi |
5174 | 6065 | */ |
5175 | 6066 | $messages['ro'] = array( |
— | — | @@ -5192,7 +6083,7 @@ |
5193 | 6084 | 'centralnotice-translate-to' => 'Tradu în', |
5194 | 6085 | 'centralnotice-translate' => 'Tradu', |
5195 | 6086 | 'centralnotice-english' => 'engleză', |
5196 | | - 'centralnotice-template-name' => 'Numele formatului', |
| 6087 | + 'centralnotice-banner-name' => 'Numele formatului', |
5197 | 6088 | 'centralnotice-templates' => 'Formate', |
5198 | 6089 | 'centralnotice-weight' => 'Greutate', |
5199 | 6090 | 'centralnotice-locked' => 'Blocat', |
— | — | @@ -5207,14 +6098,14 @@ |
5208 | 6099 | 'centralnotice-start-date' => 'Data de începere', |
5209 | 6100 | 'centralnotice-start-time' => 'Data de începere (UTC)', |
5210 | 6101 | 'centralnotice-available-templates' => 'Formate disponibile', |
5211 | | - 'centralnotice-preview-template' => 'Previzualizare formate', |
| 6102 | + 'centralnotice-preview-template' => 'Previzualizare format', |
5212 | 6103 | 'centralnotice-start-hour' => 'Ora de început', |
5213 | 6104 | 'centralnotice-change-lang' => 'Schimbă limba de traducere', |
5214 | 6105 | 'centralnotice-weights' => 'Greutăți', |
5215 | 6106 | 'centralnotice-edit-template' => 'Modifică format', |
5216 | 6107 | 'centralnotice-message' => 'Mesaj', |
5217 | | - 'centralnotice-clone' => 'Clonați', |
5218 | | - 'centralnotice-clone-notice' => 'Creează o copie a formatului', |
| 6108 | + 'centralnotice-clone' => 'Clonează', |
| 6109 | + 'centralnotice-clone-notice' => 'Creează o copie a bannerului', |
5219 | 6110 | 'right-centralnotice-translate' => 'Traduce anunțurile centrale', |
5220 | 6111 | 'action-centralnotice-admin' => 'administrați anunțurile centrale', |
5221 | 6112 | 'action-centralnotice-translate' => 'traduceți anunțurile centrale', |
— | — | @@ -5232,7 +6123,10 @@ |
5233 | 6124 | |
5234 | 6125 | /** Russian (Русский) |
5235 | 6126 | * @author Aleksandrit |
| 6127 | + * @author Eleferen |
5236 | 6128 | * @author Ferrer |
| 6129 | + * @author G0rn |
| 6130 | + * @author Rubin |
5237 | 6131 | * @author Александр Сигачёв |
5238 | 6132 | */ |
5239 | 6133 | $messages['ru'] = array( |
— | — | @@ -5246,31 +6140,41 @@ |
5247 | 6141 | 'centralnotice-end-date' => 'Дата окончания', |
5248 | 6142 | 'centralnotice-enabled' => 'Включено', |
5249 | 6143 | 'centralnotice-modify' => 'Отправить', |
| 6144 | + 'centralnotice-save-banner' => 'Сохранить баннер', |
5250 | 6145 | 'centralnotice-preview' => 'Предпросмотр', |
5251 | 6146 | 'centralnotice-add-new' => 'Добавить новое централизованное уведомление', |
5252 | 6147 | 'centralnotice-remove' => 'Удалить', |
5253 | 6148 | 'centralnotice-translate-heading' => 'Перевод для $1', |
5254 | 6149 | 'centralnotice-manage' => 'Управление централизованными уведомлениями', |
| 6150 | + 'centralnotice-manage-templates' => 'Управление баннерами', |
5255 | 6151 | 'centralnotice-add' => 'Добавить', |
5256 | 6152 | 'centralnotice-add-notice' => 'Добавить уведомление', |
| 6153 | + 'centralnotice-edit-notice' => 'Изменить кампанию', |
5257 | 6154 | 'centralnotice-add-template' => 'Добавить шаблон', |
5258 | 6155 | 'centralnotice-show-notices' => 'Показать уведомления', |
5259 | 6156 | 'centralnotice-list-templates' => 'Вывести список шаблонов', |
| 6157 | + 'centralnotice-multiple_languages' => 'несколько ($1)', |
5260 | 6158 | 'centralnotice-translations' => 'Переводы', |
5261 | 6159 | 'centralnotice-translate-to' => 'Перевод на', |
5262 | 6160 | 'centralnotice-translate' => 'Перевод', |
5263 | 6161 | 'centralnotice-english' => 'английский', |
5264 | | - 'centralnotice-template-name' => 'Название шаблона', |
| 6162 | + 'centralnotice-banner-name' => 'Название баннера', |
| 6163 | + 'centralnotice-banner' => 'Баннер', |
| 6164 | + 'centralnotice-banner-heading' => 'Баннер: $1', |
5265 | 6165 | 'centralnotice-templates' => 'Шаблоны', |
5266 | 6166 | 'centralnotice-weight' => 'Ширина', |
5267 | 6167 | 'centralnotice-locked' => 'Заблокированный', |
| 6168 | + 'centralnotice-notice' => 'Кампания', |
| 6169 | + 'centralnotice-notice-heading' => 'Кампания: $1', |
5268 | 6170 | 'centralnotice-notices' => 'уведомления', |
5269 | 6171 | 'centralnotice-notice-exists' => 'Уведомление уже существует. |
5270 | 6172 | Не добавляется', |
| 6173 | + 'centralnotice-no-language' => 'Не выбран язык для этой кампании. Не добавлено.', |
5271 | 6174 | 'centralnotice-template-exists' => 'Шаблон уже существует. |
5272 | 6175 | Не добавляется', |
5273 | | - 'centralnotice-notice-doesnt-exist' => 'Уведомления не существует. |
5274 | | -Нечего удалять', |
| 6176 | + 'centralnotice-notice-doesnt-exist' => 'Кампания не существует.', |
| 6177 | + 'centralnotice-remove-notice-doesnt-exist' => 'Кампания не существует. |
| 6178 | +Нечего удалять.', |
5275 | 6179 | 'centralnotice-template-still-bound' => 'Шаблон по-прежнему связан с уведомлением. |
5276 | 6180 | Не удаляется.', |
5277 | 6181 | 'centralnotice-template-body' => 'Тело шаблона:', |
— | — | @@ -5280,6 +6184,8 @@ |
5281 | 6185 | 'centralnotice-hours' => 'Час', |
5282 | 6186 | 'centralnotice-min' => 'Минута', |
5283 | 6187 | 'centralnotice-project-lang' => 'Язык проекта', |
| 6188 | + 'centralnotice-select' => 'Выборка: $1', |
| 6189 | + 'centralnotice-top-ten-languages' => '10 языков', |
5284 | 6190 | 'centralnotice-project-name' => 'Название проекта', |
5285 | 6191 | 'centralnotice-start-date' => 'Дата начала', |
5286 | 6192 | 'centralnotice-start-time' => 'Время начала (UTC)', |
— | — | @@ -5292,7 +6198,7 @@ |
5293 | 6199 | 'centralnotice-template-already-exists' => 'Шаблон уже привязан. |
5294 | 6200 | Не добавлен', |
5295 | 6201 | 'centralnotice-preview-template' => 'Предпросмотр шаблона', |
5296 | | - 'centralnotice-start-hour' => 'Время начала', |
| 6202 | + 'centralnotice-start-hour' => 'Время начала (GMT)', |
5297 | 6203 | 'centralnotice-change-lang' => 'Изменить язык перевода', |
5298 | 6204 | 'centralnotice-weights' => 'Веса', |
5299 | 6205 | 'centralnotice-notice-is-locked' => 'Уведомление заблокировано. |
— | — | @@ -5309,12 +6215,29 @@ |
5310 | 6216 | Можно добавить', |
5311 | 6217 | 'centralnotice-no-templates-translate' => 'Нет ни одного шаблона для правки перевода', |
5312 | 6218 | 'centralnotice-number-uses' => 'Используются', |
| 6219 | + 'centralnotice-settings' => 'Настройки', |
5313 | 6220 | 'centralnotice-edit-template' => 'Править шаблон', |
| 6221 | + 'centralnotice-edit-template-summary' => 'Чтобы создать локализуемое сообщение, заключите дефисную строку в три фигурные скобки, например {{{цитата-джимбо}}}.', |
5314 | 6222 | 'centralnotice-message' => 'Сообщение', |
5315 | 6223 | 'centralnotice-message-not-set' => 'Сообщение не установлено', |
5316 | 6224 | 'centralnotice-clone' => 'Клонирование', |
5317 | 6225 | 'centralnotice-clone-notice' => 'Создать копию шаблона', |
| 6226 | + 'centralnotice-clone-name' => 'Имя:', |
5318 | 6227 | 'centralnotice-preview-all-template-translations' => 'Просмотреть все доступные переводы шаблона', |
| 6228 | + 'centralnotice-insert' => 'Вставка: $1', |
| 6229 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} кнопку', |
| 6230 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} кнопку', |
| 6231 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} кнопку', |
| 6232 | + 'centralnotice-translate-button' => 'Кнопка помощи в переводе', |
| 6233 | + 'centralnotice-donate-button' => 'Кнопка пожертвований', |
| 6234 | + 'centralnotice-expanded-banner' => 'Расширенный баннер', |
| 6235 | + 'centralnotice-collapsed-banner' => 'Сложенный баннер', |
| 6236 | + 'centralnotice-banner-display' => 'Показывать в:', |
| 6237 | + 'centralnotice-banner-anonymous' => 'Анонимные участники', |
| 6238 | + 'centralnotice-banner-logged-in' => 'Пользователи:', |
| 6239 | + 'centralnotice-banner-type' => 'Тип баннера:', |
| 6240 | + 'centralnotice-banner-hidable' => 'Статический / Скрываемый', |
| 6241 | + 'centralnotice-banner-collapsible' => 'Сворачиваемый', |
5319 | 6242 | 'right-centralnotice-admin' => 'управление централизованными уведомлениями', |
5320 | 6243 | 'right-centralnotice-translate' => 'перевод централизованных уведомлений', |
5321 | 6244 | 'action-centralnotice-admin' => 'управление централизованными уведомлениями', |
— | — | @@ -5322,6 +6245,35 @@ |
5323 | 6246 | 'centralnotice-preferred' => 'Желательно', |
5324 | 6247 | ); |
5325 | 6248 | |
| 6249 | +/** Rusyn (русиньскый язык) |
| 6250 | + * @author Gazeb |
| 6251 | + */ |
| 6252 | +$messages['rue'] = array( |
| 6253 | + 'centralnotice-translations' => 'Переклады', |
| 6254 | + 'centralnotice-translate-to' => 'Переклад до', |
| 6255 | + 'centralnotice-translate' => 'Переложыти', |
| 6256 | + 'centralnotice-english' => 'анґліцькы', |
| 6257 | + 'centralnotice-banner-name' => 'Назва шаблоны', |
| 6258 | + 'centralnotice-templates' => 'Шаблоны', |
| 6259 | + 'centralnotice-weight' => 'Вага', |
| 6260 | + 'centralnotice-locked' => 'Замкнуто', |
| 6261 | + 'centralnotice-day' => 'День', |
| 6262 | + 'centralnotice-year' => 'Рік', |
| 6263 | + 'centralnotice-month' => 'Місяць', |
| 6264 | + 'centralnotice-hours' => 'Годины', |
| 6265 | + 'centralnotice-min' => 'Мінуты', |
| 6266 | + 'centralnotice-project-lang' => 'Язык проєкту', |
| 6267 | + 'centralnotice-project-name' => 'Назва проєкту', |
| 6268 | + 'centralnotice-start-date' => 'Датум початку', |
| 6269 | + 'centralnotice-start-time' => 'Час початку (UTC)', |
| 6270 | + 'centralnotice-available-templates' => 'Доступны шаблоны', |
| 6271 | + 'centralnotice-start-hour' => 'Час початку', |
| 6272 | + 'centralnotice-change-lang' => 'Змінити язык перекладу', |
| 6273 | + 'centralnotice-weights' => 'Вагы', |
| 6274 | + 'centralnotice-number-uses' => 'Хоснує', |
| 6275 | + 'centralnotice-message' => 'Ознам', |
| 6276 | +); |
| 6277 | + |
5326 | 6278 | /** Yakut (Саха тыла) |
5327 | 6279 | * @author HalanTul |
5328 | 6280 | */ |
— | — | @@ -5350,7 +6302,7 @@ |
5351 | 6303 | 'centralnotice-translate-to' => 'Манна тылбаас', |
5352 | 6304 | 'centralnotice-translate' => 'Тылбаас', |
5353 | 6305 | 'centralnotice-english' => 'Аҥылычаан', |
5354 | | - 'centralnotice-template-name' => 'Халыып аата', |
| 6306 | + 'centralnotice-banner-name' => 'Халыып аата', |
5355 | 6307 | 'centralnotice-templates' => 'Халыыптар', |
5356 | 6308 | 'centralnotice-weight' => 'Кэтитэ', |
5357 | 6309 | 'centralnotice-locked' => 'Хааччахтаммыт/бобуллубут', |
— | — | @@ -5440,7 +6392,7 @@ |
5441 | 6393 | 'centralnotice-translate-to' => 'Tradùci n', |
5442 | 6394 | 'centralnotice-translate' => 'Traduci', |
5443 | 6395 | 'centralnotice-english' => 'Ngrisi', |
5444 | | - 'centralnotice-template-name' => 'Nomu dû template', |
| 6396 | + 'centralnotice-banner-name' => 'Nomu dû template', |
5445 | 6397 | 'centralnotice-templates' => 'Template', |
5446 | 6398 | 'centralnotice-weight' => 'Pisu', |
5447 | 6399 | 'centralnotice-locked' => 'Bluccatu', |
— | — | @@ -5531,7 +6483,7 @@ |
5532 | 6484 | 'centralnotice-translate-to' => 'Preložiť do jazyka', |
5533 | 6485 | 'centralnotice-translate' => 'Preložiť', |
5534 | 6486 | 'centralnotice-english' => 'angličtina', |
5535 | | - 'centralnotice-template-name' => 'Názov šablóny', |
| 6487 | + 'centralnotice-banner-name' => 'Názov šablóny', |
5536 | 6488 | 'centralnotice-templates' => 'Šablóny', |
5537 | 6489 | 'centralnotice-weight' => 'Váha', |
5538 | 6490 | 'centralnotice-locked' => 'Zamknutý', |
— | — | @@ -5581,6 +6533,16 @@ |
5582 | 6534 | 'centralnotice-preferred' => 'Uprednostňované', |
5583 | 6535 | ); |
5584 | 6536 | |
| 6537 | +/** Slovenian (Slovenščina) |
| 6538 | + * @author Dbc334 |
| 6539 | + */ |
| 6540 | +$messages['sl'] = array( |
| 6541 | + 'centralnotice-message' => 'Sporočilo', |
| 6542 | + 'centralnotice-message-not-set' => 'Sporočilo ni določeno', |
| 6543 | + 'centralnotice-clone' => 'Kloniraj', |
| 6544 | + 'centralnotice-clone-notice' => 'Ustvarite kopijo pasice', |
| 6545 | +); |
| 6546 | + |
5585 | 6547 | /** Serbian Cyrillic ekavian (Српски (ћирилица)) |
5586 | 6548 | * @author Millosh |
5587 | 6549 | * @author Јованвб |
— | — | @@ -5607,7 +6569,7 @@ |
5608 | 6570 | 'centralnotice-translate-to' => 'Преведи на', |
5609 | 6571 | 'centralnotice-translate' => 'Преведи', |
5610 | 6572 | 'centralnotice-english' => 'Енглески', |
5611 | | - 'centralnotice-template-name' => 'Име шаблона', |
| 6573 | + 'centralnotice-banner-name' => 'Име шаблона', |
5612 | 6574 | 'centralnotice-templates' => 'Шаблони', |
5613 | 6575 | 'centralnotice-weight' => 'Тежина', |
5614 | 6576 | 'centralnotice-locked' => 'Закључано', |
— | — | @@ -5678,7 +6640,7 @@ |
5679 | 6641 | 'centralnotice-translate-to' => 'Prevedi na', |
5680 | 6642 | 'centralnotice-translate' => 'Prevedi', |
5681 | 6643 | 'centralnotice-english' => 'Engleski', |
5682 | | - 'centralnotice-template-name' => 'Ime šablona', |
| 6644 | + 'centralnotice-banner-name' => 'Ime šablona', |
5683 | 6645 | 'centralnotice-templates' => 'Šabloni', |
5684 | 6646 | 'centralnotice-weight' => 'Težina', |
5685 | 6647 | 'centralnotice-locked' => 'Zaključano', |
— | — | @@ -5753,7 +6715,7 @@ |
5754 | 6716 | 'centralnotice-translate-to' => 'Uursätte in', |
5755 | 6717 | 'centralnotice-translate' => 'Uursätte', |
5756 | 6718 | 'centralnotice-english' => 'Ängelsk', |
5757 | | - 'centralnotice-template-name' => 'Noome fon ju Foarloage', |
| 6719 | + 'centralnotice-banner-name' => 'Noome fon ju Foarloage', |
5758 | 6720 | 'centralnotice-templates' => 'Foarloagen', |
5759 | 6721 | 'centralnotice-weight' => 'Gewicht', |
5760 | 6722 | 'centralnotice-locked' => 'Speerd', |
— | — | @@ -5852,7 +6814,7 @@ |
5853 | 6815 | 'centralnotice-translate-to' => 'Översätt till', |
5854 | 6816 | 'centralnotice-translate' => 'Översätt', |
5855 | 6817 | 'centralnotice-english' => 'Engelska', |
5856 | | - 'centralnotice-template-name' => 'Mallnamn', |
| 6818 | + 'centralnotice-banner-name' => 'Mallnamn', |
5857 | 6819 | 'centralnotice-templates' => 'Mallar', |
5858 | 6820 | 'centralnotice-weight' => 'Tyngd', |
5859 | 6821 | 'centralnotice-locked' => 'Låst', |
— | — | @@ -5902,6 +6864,7 @@ |
5903 | 6865 | 'centralnotice-no-templates-translate' => 'Det finns inga mallar att redigera översättningar för', |
5904 | 6866 | 'centralnotice-number-uses' => 'Användningar', |
5905 | 6867 | 'centralnotice-edit-template' => 'Redigera mall', |
| 6868 | + 'centralnotice-edit-template-summary' => 'För att skapa ett meddelande som kan lokalanpassas, inkludera en bindestrecks-sträng inom tre klammerparenteser, t.ex. {{{jimbo-quote}}}.', |
5906 | 6869 | 'centralnotice-message' => 'Budskap', |
5907 | 6870 | 'centralnotice-message-not-set' => 'Budskap inte satt', |
5908 | 6871 | 'centralnotice-clone' => 'Klon', |
— | — | @@ -5936,7 +6899,7 @@ |
5937 | 6900 | 'centralnotice-translations' => 'అనువాదాలు', |
5938 | 6901 | 'centralnotice-translate' => 'అనువదించండి', |
5939 | 6902 | 'centralnotice-english' => 'ఇంగ్లీష్', |
5940 | | - 'centralnotice-template-name' => 'మూస పేరు', |
| 6903 | + 'centralnotice-banner-name' => 'మూస పేరు', |
5941 | 6904 | 'centralnotice-templates' => 'మూసలు', |
5942 | 6905 | 'centralnotice-weight' => 'భారం', |
5943 | 6906 | 'centralnotice-notices' => 'గమనికలు', |
— | — | @@ -6018,7 +6981,7 @@ |
6019 | 6982 | 'centralnotice-translate-to' => 'Тарҷума ба', |
6020 | 6983 | 'centralnotice-translate' => 'Тарҷума', |
6021 | 6984 | 'centralnotice-english' => 'Англисӣ', |
6022 | | - 'centralnotice-template-name' => 'Унвони шаблон', |
| 6985 | + 'centralnotice-banner-name' => 'Унвони шаблон', |
6023 | 6986 | 'centralnotice-templates' => 'Шаблонҳо', |
6024 | 6987 | 'centralnotice-weight' => 'Вазн', |
6025 | 6988 | 'centralnotice-locked' => 'Басташуда', |
— | — | @@ -6108,7 +7071,7 @@ |
6109 | 7072 | 'centralnotice-translate-to' => 'Tarçuma ba', |
6110 | 7073 | 'centralnotice-translate' => 'Tarçuma', |
6111 | 7074 | 'centralnotice-english' => 'Anglisī', |
6112 | | - 'centralnotice-template-name' => 'Unvoni şablon', |
| 7075 | + 'centralnotice-banner-name' => 'Unvoni şablon', |
6113 | 7076 | 'centralnotice-templates' => 'Şablonho', |
6114 | 7077 | 'centralnotice-weight' => 'Vazn', |
6115 | 7078 | 'centralnotice-locked' => 'Bastaşuda', |
— | — | @@ -6201,7 +7164,7 @@ |
6202 | 7165 | 'centralnotice-translate-to' => 'แปลเป็นภาษา', |
6203 | 7166 | 'centralnotice-translate' => 'แปล', |
6204 | 7167 | 'centralnotice-english' => 'อังกฤษ', |
6205 | | - 'centralnotice-template-name' => 'ชื่อแม่แบบ', |
| 7168 | + 'centralnotice-banner-name' => 'ชื่อแม่แบบ', |
6206 | 7169 | 'centralnotice-templates' => 'แม่แบบ', |
6207 | 7170 | 'centralnotice-weight' => 'น้ำหนัก', |
6208 | 7171 | 'centralnotice-locked' => 'ถูกล็อก', |
— | — | @@ -6291,7 +7254,7 @@ |
6292 | 7255 | 'centralnotice-translate-to' => 'Şu dile terjime et:', |
6293 | 7256 | 'centralnotice-translate' => 'Terjime et', |
6294 | 7257 | 'centralnotice-english' => 'iňlisçe', |
6295 | | - 'centralnotice-template-name' => 'Şablon ady', |
| 7258 | + 'centralnotice-banner-name' => 'Şablon ady', |
6296 | 7259 | 'centralnotice-templates' => 'Şablonlar', |
6297 | 7260 | 'centralnotice-weight' => 'Agram', |
6298 | 7261 | 'centralnotice-locked' => 'Gulply', |
— | — | @@ -6380,7 +7343,7 @@ |
6381 | 7344 | 'centralnotice-translate-to' => 'Isalinwika patungong', |
6382 | 7345 | 'centralnotice-translate' => 'Isalinwika', |
6383 | 7346 | 'centralnotice-english' => 'Ingles', |
6384 | | - 'centralnotice-template-name' => 'Pangalan ng suleras', |
| 7347 | + 'centralnotice-banner-name' => 'Pangalan ng suleras', |
6385 | 7348 | 'centralnotice-templates' => 'Mga suleras', |
6386 | 7349 | 'centralnotice-weight' => 'Timbang', |
6387 | 7350 | 'centralnotice-locked' => 'Nakakandado', |
— | — | @@ -6430,6 +7393,7 @@ |
6431 | 7394 | 'centralnotice-no-templates-translate' => 'Walang mga suleras na mapagsasagawaan ng mga pagbabagong pangsalinwika', |
6432 | 7395 | 'centralnotice-number-uses' => 'Mga mapaggagamitan', |
6433 | 7396 | 'centralnotice-edit-template' => 'Baguhin ang suleras', |
| 7397 | + 'centralnotice-edit-template-summary' => 'Upang makalikha ng isang maisakakatubong mensahe, maglakip ng isang ginitlingang bagting sa loob ng tatlong kulot na mga braket, halimbawa na ang {{{jimbo-sipi}}}.', |
6434 | 7398 | 'centralnotice-message' => 'Mensahe', |
6435 | 7399 | 'centralnotice-message-not-set' => 'Hindi nakatakda ang mensahe', |
6436 | 7400 | 'centralnotice-clone' => 'Kopyang kahawig na kahawig ng pinaggayahan', |
— | — | @@ -6445,6 +7409,7 @@ |
6446 | 7410 | /** Turkish (Türkçe) |
6447 | 7411 | * @author Joseph |
6448 | 7412 | * @author Karduelis |
| 7413 | + * @author Srhat |
6449 | 7414 | */ |
6450 | 7415 | $messages['tr'] = array( |
6451 | 7416 | 'centralnotice' => 'Merkezi uyarı yöneticisi', |
— | — | @@ -6471,7 +7436,7 @@ |
6472 | 7437 | 'centralnotice-translate-to' => 'Şu dile çevir', |
6473 | 7438 | 'centralnotice-translate' => 'Çevir', |
6474 | 7439 | 'centralnotice-english' => 'İngilizce', |
6475 | | - 'centralnotice-template-name' => 'Şablon adı', |
| 7440 | + 'centralnotice-banner-name' => 'Şablon adı', |
6476 | 7441 | 'centralnotice-templates' => 'Şablonlar', |
6477 | 7442 | 'centralnotice-weight' => 'Önem', |
6478 | 7443 | 'centralnotice-locked' => 'Kilitli', |
— | — | @@ -6521,6 +7486,7 @@ |
6522 | 7487 | 'centralnotice-no-templates-translate' => 'Çevirileri değiştirmek için hiç şablon yok', |
6523 | 7488 | 'centralnotice-number-uses' => 'Kullanımlar', |
6524 | 7489 | 'centralnotice-edit-template' => 'Şablonu değiştir', |
| 7490 | + 'centralnotice-edit-template-summary' => 'Yerelleştirilebilir bir mesaj oluşturmak için, tireli bir metni üç köşeli parantez arasına yazın, örnek {{{jimbo-quote}}}', |
6525 | 7491 | 'centralnotice-message' => 'Mesaj', |
6526 | 7492 | 'centralnotice-message-not-set' => 'Mesaj ayarlanmadı', |
6527 | 7493 | 'centralnotice-clone' => 'Klonla', |
— | — | @@ -6533,6 +7499,90 @@ |
6534 | 7500 | 'centralnotice-preferred' => 'Tercih edilen', |
6535 | 7501 | ); |
6536 | 7502 | |
| 7503 | +/** Tatar (Cyrillic) (Татарча/Tatarça (Cyrillic)) |
| 7504 | + * @author Ильнар |
| 7505 | + */ |
| 7506 | +$messages['tt-cyrl'] = array( |
| 7507 | + 'centralnotice' => 'Хәбәрләр белән идарә итү үзәге', |
| 7508 | + 'noticetemplate' => 'Үзәк хәбәрләр үрнәге', |
| 7509 | + 'centralnotice-desc' => 'Сәхифәнең гомуми хатларын йөкли', |
| 7510 | + 'centralnotice-summary' => 'Бу модуль Сезгә хәбәрләрегезне үзгәртергә ярдәм итә. Ул тагын яңа хәбәрләр өстәргә яки искеләрен юкка чыгарырга ярдәм итәчәк.', |
| 7511 | + 'centralnotice-query' => 'Әлеге хәбәрне үзгәртү', |
| 7512 | + 'centralnotice-notice-name' => 'Хәбәрнең исеме', |
| 7513 | + 'centralnotice-end-date' => 'Бетү вакыты', |
| 7514 | + 'centralnotice-enabled' => 'Ачылган', |
| 7515 | + 'centralnotice-modify' => 'Җибәрү', |
| 7516 | + 'centralnotice-preview' => 'Алдан карау', |
| 7517 | + 'centralnotice-add-new' => 'Яңа хәбәр өстәү', |
| 7518 | + 'centralnotice-remove' => 'Бетерү', |
| 7519 | + 'centralnotice-translate-heading' => '$1 өчен тәрҗемә', |
| 7520 | + 'centralnotice-manage' => 'Хәбәрләр белән идарә итү', |
| 7521 | + 'centralnotice-add' => 'Өстәргә', |
| 7522 | + 'centralnotice-add-notice' => 'Яңа хәбәр өстәү', |
| 7523 | + 'centralnotice-edit-notice' => 'Хәбәрне үзгәртү', |
| 7524 | + 'centralnotice-add-template' => 'Үрнәк өстәү', |
| 7525 | + 'centralnotice-show-notices' => 'Хәбәрне ачарга', |
| 7526 | + 'centralnotice-list-templates' => 'Үрнәкләр исемлеге', |
| 7527 | + 'centralnotice-translations' => 'Тәрҗемәләр', |
| 7528 | + 'centralnotice-translate-to' => 'Тәрҗемә', |
| 7529 | + 'centralnotice-translate' => 'Тәрҗемә', |
| 7530 | + 'centralnotice-english' => 'инглиз', |
| 7531 | + 'centralnotice-banner-name' => 'Үрнәкнең исеме', |
| 7532 | + 'centralnotice-templates' => 'Үрнәкләр', |
| 7533 | + 'centralnotice-weight' => 'Киңлек', |
| 7534 | + 'centralnotice-locked' => 'Чикләнгән', |
| 7535 | + 'centralnotice-notices' => 'хәбәрләр', |
| 7536 | + 'centralnotice-notice-exists' => 'Мондый хәбәр бар инде', |
| 7537 | + 'centralnotice-template-exists' => 'Мондый үрнәк бар инде', |
| 7538 | + 'centralnotice-notice-doesnt-exist' => 'Мондый хәбәр юк', |
| 7539 | + 'centralnotice-remove-notice-doesnt-exist' => 'Мондый хәбәрне юкка чыгару мөмкин түгел, чөнки ул юк', |
| 7540 | + 'centralnotice-template-still-bound' => 'Үрнәк һаман хәбәргә бәйләнгән, юкка чыгарырга мөмкин түгел.', |
| 7541 | + 'centralnotice-template-body' => 'Үрнәкнең эчтәлеге:', |
| 7542 | + 'centralnotice-day' => 'Көн', |
| 7543 | + 'centralnotice-year' => 'Ел', |
| 7544 | + 'centralnotice-month' => 'Ай', |
| 7545 | + 'centralnotice-hours' => 'Сәгать', |
| 7546 | + 'centralnotice-min' => 'Минут', |
| 7547 | + 'centralnotice-project-lang' => 'Проектның теле', |
| 7548 | + 'centralnotice-project-name' => 'Проектның исеме', |
| 7549 | + 'centralnotice-start-date' => 'Башлау вакыты', |
| 7550 | + 'centralnotice-start-time' => 'Башлау сәгате (UTC)', |
| 7551 | + 'centralnotice-assigned-templates' => 'Куелган үрнәкләр', |
| 7552 | + 'centralnotice-no-templates' => 'Үрнәкләр табылмады', |
| 7553 | + 'centralnotice-no-templates-assigned' => 'Үрнәккә бәйләнгән хәбәрләр юк', |
| 7554 | + 'centralnotice-available-templates' => 'Үрнәкләр', |
| 7555 | + 'centralnotice-template-already-exists' => 'Үрнәк өстәлмәде', |
| 7556 | + 'centralnotice-preview-template' => 'Алдан карау', |
| 7557 | + 'centralnotice-start-hour' => 'Башлау сәгате (GMT)', |
| 7558 | + 'centralnotice-change-lang' => 'Тәрҗемә телен үзгәртү', |
| 7559 | + 'centralnotice-weights' => 'Үлчәү', |
| 7560 | + 'centralnotice-notice-is-locked' => 'Хәбәр чикләнде', |
| 7561 | + 'centralnotice-overlap' => 'Хәбәр башка хәбәр белән чикләнә', |
| 7562 | + 'centralnotice-invalid-date-range' => 'Вакыт дөрес түгел', |
| 7563 | + 'centralnotice-null-string' => 'Буш юлны өстәү мөмкин түгел', |
| 7564 | + 'centralnotice-confirm-delete' => 'Сез моны бетерергә ризамы?', |
| 7565 | + 'centralnotice-no-notices-exist' => 'Хәбәрләр юк', |
| 7566 | + 'centralnotice-no-templates-translate' => 'Тәрҗемәне карау өчен үрнәк юк', |
| 7567 | + 'centralnotice-number-uses' => 'Кулланыла', |
| 7568 | + 'centralnotice-edit-template' => 'Үрнәкне үзгәртергә', |
| 7569 | + 'centralnotice-edit-template-summary' => 'Локалләштерелгән хат язу өчен, сез җөмләне өчле фигуралы җәяләргә алырга тиешсез. Мәсәлән {{{өземтә-Сәлам}}}.', |
| 7570 | + 'centralnotice-message' => 'Хат', |
| 7571 | + 'centralnotice-message-not-set' => 'Хат тикшерелмәде', |
| 7572 | + 'centralnotice-clone' => 'Кабатлау', |
| 7573 | + 'centralnotice-clone-notice' => 'Үрнәне кабатлап ясау', |
| 7574 | + 'centralnotice-clone-name' => 'Исеме:', |
| 7575 | + 'centralnotice-preview-all-template-translations' => 'Үрнәкнең мөмкин булган тәрҗемәләрен карарга', |
| 7576 | + 'centralnotice-insert' => 'Өстәү: $1', |
| 7577 | + 'centralnotice-hide-button' => '{{int:centralnotice-shared-hide}} төймәсе', |
| 7578 | + 'centralnotice-collapse-button' => '{{int:centralnotice-shared-collapse}} төймәсе', |
| 7579 | + 'centralnotice-expand-button' => '{{int:centralnotice-shared-expand}} төймәсе', |
| 7580 | + 'right-centralnotice-admin' => 'Үзәкләштерелгән идарә иту системасы', |
| 7581 | + 'right-centralnotice-translate' => 'Хәбәрләрне тәрҗемә итү', |
| 7582 | + 'action-centralnotice-admin' => 'үзәкләштерелгән идарә иту системасы', |
| 7583 | + 'action-centralnotice-translate' => 'хәбәрләрне тәрҗемә итү', |
| 7584 | + 'centralnotice-preferred' => 'Катгый рәвештә', |
| 7585 | +); |
| 7586 | + |
6537 | 7587 | /** Udmurt (Удмурт) |
6538 | 7588 | * @author Kaganer |
6539 | 7589 | */ |
— | — | @@ -6543,6 +7593,9 @@ |
6544 | 7594 | /** Ukrainian (Українська) |
6545 | 7595 | * @author Ahonc |
6546 | 7596 | * @author Aleksandrit |
| 7597 | + * @author Riwnodennyk |
| 7598 | + * @author Ytsukeng Fyvaprol |
| 7599 | + * @author Тест |
6547 | 7600 | */ |
6548 | 7601 | $messages['uk'] = array( |
6549 | 7602 | 'centralnotice' => 'Управління централізованими сповіщеннями', |
— | — | @@ -6560,8 +7613,10 @@ |
6561 | 7614 | 'centralnotice-remove' => 'Вилучити', |
6562 | 7615 | 'centralnotice-translate-heading' => 'Переклад для $1', |
6563 | 7616 | 'centralnotice-manage' => 'Управління централізованими сповіщеннями', |
| 7617 | + 'centralnotice-manage-templates' => 'Управління банерами', |
6564 | 7618 | 'centralnotice-add' => 'Додати', |
6565 | 7619 | 'centralnotice-add-notice' => 'Додати повідомлення', |
| 7620 | + 'centralnotice-edit-notice' => 'Змінити кампанію', |
6566 | 7621 | 'centralnotice-add-template' => 'Додати шаблон', |
6567 | 7622 | 'centralnotice-show-notices' => 'Показати повідомлення', |
6568 | 7623 | 'centralnotice-list-templates' => 'Cписок шаблонів', |
— | — | @@ -6569,17 +7624,21 @@ |
6570 | 7625 | 'centralnotice-translate-to' => 'Переклад на', |
6571 | 7626 | 'centralnotice-translate' => 'Переклад', |
6572 | 7627 | 'centralnotice-english' => 'англійську', |
6573 | | - 'centralnotice-template-name' => 'Назва шаблону', |
| 7628 | + 'centralnotice-banner-name' => 'Назва шаблону', |
| 7629 | + 'centralnotice-banner' => 'Банер', |
| 7630 | + 'centralnotice-banner-heading' => 'Банер: $1', |
6574 | 7631 | 'centralnotice-templates' => 'Шаблони', |
6575 | 7632 | 'centralnotice-weight' => 'Ширина', |
6576 | 7633 | 'centralnotice-locked' => 'Заблокований', |
| 7634 | + 'centralnotice-notice' => 'Кампанія', |
6577 | 7635 | 'centralnotice-notices' => 'повідомлення', |
6578 | 7636 | 'centralnotice-notice-exists' => 'Повідомлення вже існує. |
6579 | 7637 | Не додається', |
6580 | 7638 | 'centralnotice-template-exists' => 'Шаблон вже існує. |
6581 | 7639 | Не додається', |
6582 | | - 'centralnotice-notice-doesnt-exist' => 'Повідомлення не існує. |
6583 | | -Нема чого видаляти', |
| 7640 | + 'centralnotice-notice-doesnt-exist' => 'Кампанії не існує.', |
| 7641 | + 'centralnotice-remove-notice-doesnt-exist' => 'Кампанії не існує. |
| 7642 | +Нема чого вилучати.', |
6584 | 7643 | 'centralnotice-template-still-bound' => "Шаблон, як і раніше, пов'язаний з повідомленням. |
6585 | 7644 | Не видаляється.", |
6586 | 7645 | 'centralnotice-template-body' => 'Тіло шаблону:', |
— | — | @@ -6601,7 +7660,7 @@ |
6602 | 7661 | 'centralnotice-template-already-exists' => "Шаблон вже прив'язаний. |
6603 | 7662 | Не доданий", |
6604 | 7663 | 'centralnotice-preview-template' => 'Попередній перегляд шаблону', |
6605 | | - 'centralnotice-start-hour' => 'Час початку', |
| 7664 | + 'centralnotice-start-hour' => 'Час початку (GMT)', |
6606 | 7665 | 'centralnotice-change-lang' => 'Змінити мову перекладу', |
6607 | 7666 | 'centralnotice-weights' => 'Ваги', |
6608 | 7667 | 'centralnotice-notice-is-locked' => 'Повідомлення заблоковано. |
— | — | @@ -6619,11 +7678,16 @@ |
6620 | 7679 | 'centralnotice-no-templates-translate' => 'Не має ні одного шаблону для редагування перекладу', |
6621 | 7680 | 'centralnotice-number-uses' => 'Використовуються', |
6622 | 7681 | 'centralnotice-edit-template' => 'Редагувати шаблон', |
| 7682 | + 'centralnotice-edit-template-summary' => 'Щоб створити повідомлення, яке можна локалізувати, укладіть рядок з дефісом в три фігурні дужки, наприклад {{{цитата-джимбо}}}.', |
6623 | 7683 | 'centralnotice-message' => 'Повідомлення', |
6624 | 7684 | 'centralnotice-message-not-set' => 'Повідомлення не встановлено', |
6625 | 7685 | 'centralnotice-clone' => 'Клонування', |
6626 | 7686 | 'centralnotice-clone-notice' => 'Створити копію шаблона', |
| 7687 | + 'centralnotice-clone-name' => 'Назва:', |
6627 | 7688 | 'centralnotice-preview-all-template-translations' => 'Переглянути всі доступні переклади шаблону', |
| 7689 | + 'centralnotice-donate-button' => 'Ґудзик для пожертв', |
| 7690 | + 'centralnotice-banner-anonymous' => 'Анонімні користувачі', |
| 7691 | + 'centralnotice-banner-type' => 'Тип банера:', |
6628 | 7692 | 'right-centralnotice-admin' => 'Управління централізованими сповіщеннями', |
6629 | 7693 | 'right-centralnotice-translate' => 'Переклад централізованих повідомлень', |
6630 | 7694 | 'action-centralnotice-admin' => 'управління централізованими сповіщеннями', |
— | — | @@ -6660,7 +7724,7 @@ |
6661 | 7725 | 'centralnotice-translate-to' => 'Tradusi con', |
6662 | 7726 | 'centralnotice-translate' => 'Tradusi', |
6663 | 7727 | 'centralnotice-english' => 'Inglese', |
6664 | | - 'centralnotice-template-name' => 'Nome modeło', |
| 7728 | + 'centralnotice-banner-name' => 'Nome modeło', |
6665 | 7729 | 'centralnotice-templates' => 'Modèi', |
6666 | 7730 | 'centralnotice-weight' => 'Peso', |
6667 | 7731 | 'centralnotice-locked' => 'Blocà', |
— | — | @@ -6727,7 +7791,7 @@ |
6728 | 7792 | */ |
6729 | 7793 | $messages['vi'] = array( |
6730 | 7794 | 'centralnotice' => 'Quản lý các thông báo chung', |
6731 | | - 'noticetemplate' => 'Bản mẫu thông báo chung', |
| 7795 | + 'noticetemplate' => 'Bảng thông báo chung', |
6732 | 7796 | 'centralnotice-desc' => 'Thêm thông báo ở đầu các trang tại hơn một wiki', |
6733 | 7797 | 'centralnotice-summary' => 'Dùng phần này, bạn có thể sửa đổi các thông báo chung đã được thiết lập, cũng như thêm thông báo mới hoặc dời thông báo cũ.', |
6734 | 7798 | 'centralnotice-query' => 'Sửa đổi các thông báo hiện hành', |
— | — | @@ -6735,63 +7799,93 @@ |
6736 | 7800 | 'centralnotice-end-date' => 'Ngày kết thúc', |
6737 | 7801 | 'centralnotice-enabled' => 'Đang hiện', |
6738 | 7802 | 'centralnotice-modify' => 'Lưu các thông báo', |
| 7803 | + 'centralnotice-save-banner' => 'Lưu bảng', |
6739 | 7804 | 'centralnotice-preview' => 'Xem trước', |
6740 | 7805 | 'centralnotice-add-new' => 'Thêm thông báo chung mới', |
6741 | 7806 | 'centralnotice-remove' => 'Dời', |
6742 | 7807 | 'centralnotice-translate-heading' => 'Dịch $1', |
6743 | 7808 | 'centralnotice-manage' => 'Quản lý thông báo chung', |
| 7809 | + 'centralnotice-manage-templates' => 'Quản lý bảng', |
6744 | 7810 | 'centralnotice-add' => 'Thêm', |
6745 | 7811 | 'centralnotice-add-notice' => 'Thêm thông báo', |
6746 | | - 'centralnotice-add-template' => 'Thêm bản mẫu', |
| 7812 | + 'centralnotice-edit-notice' => 'Sửa đổi cuộc vận động', |
| 7813 | + 'centralnotice-add-template' => 'Thêm bảng', |
6747 | 7814 | 'centralnotice-show-notices' => 'Xem các thông báo', |
6748 | | - 'centralnotice-list-templates' => 'Liệt kê các bản mẫu', |
| 7815 | + 'centralnotice-list-templates' => 'Liệt kê các bảng', |
| 7816 | + 'centralnotice-multiple_languages' => 'đa ngữ ($1)', |
6749 | 7817 | 'centralnotice-translations' => 'Bản dịch', |
6750 | 7818 | 'centralnotice-translate-to' => 'Dịch ra', |
6751 | 7819 | 'centralnotice-translate' => 'Biên dịch', |
6752 | 7820 | 'centralnotice-english' => 'tiếng Anh', |
6753 | | - 'centralnotice-template-name' => 'Tên bản mẫu', |
6754 | | - 'centralnotice-templates' => 'Bản mẫu', |
| 7821 | + 'centralnotice-banner-name' => 'Tên bảng', |
| 7822 | + 'centralnotice-banner' => 'Bảng', |
| 7823 | + 'centralnotice-banner-heading' => 'Bảng: $1', |
| 7824 | + 'centralnotice-templates' => 'Bảng', |
6755 | 7825 | 'centralnotice-weight' => 'Mức ưu tiên', |
6756 | 7826 | 'centralnotice-locked' => 'Bị khóa', |
| 7827 | + 'centralnotice-notice' => 'Cuộc vận động', |
| 7828 | + 'centralnotice-notice-heading' => 'Cuộc vận động: $1', |
6757 | 7829 | 'centralnotice-notices' => 'Thông báo', |
6758 | 7830 | 'centralnotice-notice-exists' => 'Không thêm được: thông báo đã tồn tại.', |
6759 | | - 'centralnotice-template-exists' => 'Không thêm được: bản mẫu đã tồn tại.', |
6760 | | - 'centralnotice-notice-doesnt-exist' => 'Không dời được: thông báo không tồn tại.', |
6761 | | - 'centralnotice-template-still-bound' => 'Không dời được: có thông báo dựa theo bản mẫu.', |
6762 | | - 'centralnotice-template-body' => 'Nội dung bản mẫu:', |
| 7831 | + 'centralnotice-no-language' => 'Không thêm được: chưa chọn ngôn ngữ cho cuộc vận động.', |
| 7832 | + 'centralnotice-template-exists' => 'Không thêm được: bảng đã tồn tại.', |
| 7833 | + 'centralnotice-notice-doesnt-exist' => 'Cuộc vận động không tồn tại.', |
| 7834 | + 'centralnotice-remove-notice-doesnt-exist' => 'Cuộc vận động không tồn tại. |
| 7835 | +Không có gì để dời.', |
| 7836 | + 'centralnotice-template-still-bound' => 'Không dời được: có thông báo dựa theo cuộc vận động.', |
| 7837 | + 'centralnotice-template-body' => 'Nội dung bảng:', |
6763 | 7838 | 'centralnotice-day' => 'Ngày', |
6764 | 7839 | 'centralnotice-year' => 'Năm', |
6765 | 7840 | 'centralnotice-month' => 'Tháng', |
6766 | 7841 | 'centralnotice-hours' => 'Giờ', |
6767 | 7842 | 'centralnotice-min' => 'Phút', |
6768 | 7843 | 'centralnotice-project-lang' => 'Ngôn ngữ của dự án', |
| 7844 | + 'centralnotice-select' => 'Chọn: $1', |
| 7845 | + 'centralnotice-top-ten-languages' => 'Top 10 ngôn ngữ', |
6769 | 7846 | 'centralnotice-project-name' => 'Tên dự án', |
6770 | 7847 | 'centralnotice-start-date' => 'Ngày bắt đầu', |
6771 | 7848 | 'centralnotice-start-time' => 'Lúc bắt đầu (UTC)', |
6772 | | - 'centralnotice-assigned-templates' => 'Bản mẫu được sử dụng', |
6773 | | - 'centralnotice-no-templates' => 'Hệ thống không chứa bản mẫu. |
| 7849 | + 'centralnotice-assigned-templates' => 'Bảng được sử dụng', |
| 7850 | + 'centralnotice-no-templates' => 'Hệ thống không chứa bảng. |
6774 | 7851 | Hãy thêm vào!', |
6775 | | - 'centralnotice-no-templates-assigned' => 'Thông báo không dùng bản mẫu nào. Hãy chỉ định bản mẫu!', |
6776 | | - 'centralnotice-available-templates' => 'Bản mẫu có sẵn', |
6777 | | - 'centralnotice-template-already-exists' => 'Không chỉ định được: thông báo đã sử dụng bản mẫu.', |
6778 | | - 'centralnotice-preview-template' => 'Xem trước bản mẫu', |
6779 | | - 'centralnotice-start-hour' => 'Lúc bắt đầu', |
| 7852 | + 'centralnotice-no-templates-assigned' => 'Cuộc vận động không dùng bảng nào. Hãy chỉ định bảng!', |
| 7853 | + 'centralnotice-available-templates' => 'Bảng có sẵn', |
| 7854 | + 'centralnotice-template-already-exists' => 'Không chỉ định được: thông báo đã sử dụng bảng.', |
| 7855 | + 'centralnotice-preview-template' => 'Xem trước bảng', |
| 7856 | + 'centralnotice-start-hour' => 'Lúc bắt đầu (UTC)', |
6780 | 7857 | 'centralnotice-change-lang' => 'Thay đổi ngôn ngữ của bản dịch', |
6781 | 7858 | 'centralnotice-weights' => 'Mức ưu tiên', |
6782 | 7859 | 'centralnotice-notice-is-locked' => 'Không dời được: thông báo bị khóa.', |
6783 | 7860 | 'centralnotice-overlap' => 'Không thêm được: thông báo sẽ hiện cùng lúc với thông báo khác.', |
6784 | 7861 | 'centralnotice-invalid-date-range' => 'Không cập nhật được: thời gian không hợp lệ.', |
6785 | 7862 | 'centralnotice-null-string' => 'Không thêm được: chuỗi rỗng.', |
6786 | | - 'centralnotice-confirm-delete' => 'Bạn có chắc muốn xóa thông báo hoặc bản mẫu này không? Không thể phục hồi nó.', |
| 7863 | + 'centralnotice-confirm-delete' => 'Bạn có chắc muốn xóa không? Không thể lùi lại tác vụ này.', |
6787 | 7864 | 'centralnotice-no-notices-exist' => 'Chưa có thông báo. Hãy thêm thông báo ở dưới.', |
6788 | 7865 | 'centralnotice-no-templates-translate' => 'Không có bản mẫu để dịch', |
6789 | 7866 | 'centralnotice-number-uses' => 'Số thông báo dùng', |
| 7867 | + 'centralnotice-settings' => 'Thiết lập', |
6790 | 7868 | 'centralnotice-edit-template' => 'Sửa đổi bản mẫu', |
| 7869 | + 'centralnotice-edit-template-summary' => 'Để tạo thông điệp có thể bản địa hóa, đóng chuỗi ngắt trong ba dấu ngoặc kép, ví dụ {{{jimbo-quote}}}.', |
6791 | 7870 | 'centralnotice-message' => 'Thông báo', |
6792 | 7871 | 'centralnotice-message-not-set' => 'Thông báo chưa được thiết lập', |
6793 | 7872 | 'centralnotice-clone' => 'Sao', |
6794 | 7873 | 'centralnotice-clone-notice' => 'Tạo bản sao của bản mẫu', |
6795 | | - 'centralnotice-preview-all-template-translations' => 'Xem trước các bản dịch có sẵn của bản mẫu', |
| 7874 | + 'centralnotice-clone-name' => 'Tên:', |
| 7875 | + 'centralnotice-preview-all-template-translations' => 'Xem trước các bản dịch có sẵn của bảng', |
| 7876 | + 'centralnotice-insert' => 'Chèn: $1', |
| 7877 | + 'centralnotice-hide-button' => 'Nút {{int:centralnotice-shared-hide}}', |
| 7878 | + 'centralnotice-collapse-button' => 'Nút {{int:centralnotice-shared-collapse}}', |
| 7879 | + 'centralnotice-expand-button' => 'Nút {{int:centralnotice-shared-expand}}', |
| 7880 | + 'centralnotice-translate-button' => 'Nút giúp dịch', |
| 7881 | + 'centralnotice-donate-button' => 'Nút quyên góp', |
| 7882 | + 'centralnotice-expanded-banner' => 'Bảng mở rộng', |
| 7883 | + 'centralnotice-collapsed-banner' => 'Bảng thu nhỏ', |
| 7884 | + 'centralnotice-banner-display' => 'Hiển thị cho:', |
| 7885 | + 'centralnotice-banner-anonymous' => 'Người dùng vô danh', |
| 7886 | + 'centralnotice-banner-logged-in' => 'Thành viên đã đăng nhập', |
| 7887 | + 'centralnotice-banner-type' => 'Kiểu bảng:', |
| 7888 | + 'centralnotice-banner-hidable' => 'Cố định / Ẩn được', |
| 7889 | + 'centralnotice-banner-collapsible' => 'Thu nhỏ được', |
6796 | 7890 | 'right-centralnotice-admin' => 'Quản lý thông báo chung', |
6797 | 7891 | 'right-centralnotice-translate' => 'Dịch thông báo chung', |
6798 | 7892 | 'action-centralnotice-admin' => 'quản lý thông báo chung', |
— | — | @@ -6818,7 +7912,7 @@ |
6819 | 7913 | 'centralnotice-translate-to' => 'Tradutön ini', |
6820 | 7914 | 'centralnotice-translate' => 'Tradutön', |
6821 | 7915 | 'centralnotice-english' => 'Linglänapük', |
6822 | | - 'centralnotice-template-name' => 'Nem samafomota', |
| 7916 | + 'centralnotice-banner-name' => 'Nem samafomota', |
6823 | 7917 | 'centralnotice-templates' => 'Samafomots', |
6824 | 7918 | 'centralnotice-locked' => 'Pelökofärmükon', |
6825 | 7919 | 'centralnotice-template-exists' => 'Samafomot ya dabinon. |
— | — | @@ -6861,7 +7955,7 @@ |
6862 | 7956 | 'centralnotice-translate-to' => 'פֿאַרטייטשן אויף', |
6863 | 7957 | 'centralnotice-translate' => 'פֿאַרטייטשן', |
6864 | 7958 | 'centralnotice-english' => 'ענגליש', |
6865 | | - 'centralnotice-template-name' => 'מוסטער נאמען', |
| 7959 | + 'centralnotice-banner-name' => 'מוסטער נאמען', |
6866 | 7960 | 'centralnotice-templates' => 'מוסטערן', |
6867 | 7961 | 'centralnotice-locked' => 'פֿאַרשלאסן', |
6868 | 7962 | 'centralnotice-notices' => 'נאטיצן', |
— | — | @@ -6887,9 +7981,11 @@ |
6888 | 7982 | ); |
6889 | 7983 | |
6890 | 7984 | /** Cantonese (粵語) |
| 7985 | + * @author Horacewai2 |
6891 | 7986 | * @author Shinjiman |
6892 | 7987 | */ |
6893 | 7988 | $messages['yue'] = array( |
| 7989 | + 'centralnotice' => '統一通告管理', |
6894 | 7990 | 'centralnotice-desc' => '加入一個中央公告欄', |
6895 | 7991 | ); |
6896 | 7992 | |
— | — | @@ -6899,6 +7995,7 @@ |
6900 | 7996 | * @author Gzdavidwong |
6901 | 7997 | * @author Liangent |
6902 | 7998 | * @author Wmr89502270 |
| 7999 | + * @author Xiaomingyan |
6903 | 8000 | */ |
6904 | 8001 | $messages['zh-hans'] = array( |
6905 | 8002 | 'centralnotice' => '中央通告管理', |
— | — | @@ -6925,7 +8022,7 @@ |
6926 | 8023 | 'centralnotice-translate-to' => '翻译到', |
6927 | 8024 | 'centralnotice-translate' => '翻译', |
6928 | 8025 | 'centralnotice-english' => '英语', |
6929 | | - 'centralnotice-template-name' => '模板名称', |
| 8026 | + 'centralnotice-banner-name' => '模板名称', |
6930 | 8027 | 'centralnotice-templates' => '模板', |
6931 | 8028 | 'centralnotice-weight' => '权重', |
6932 | 8029 | 'centralnotice-locked' => '已锁定', |
— | — | @@ -6938,13 +8035,14 @@ |
6939 | 8036 | 没有东西移除', |
6940 | 8037 | 'centralnotice-template-still-bound' => '模板不存在。 |
6941 | 8038 | 没有东西移除。', |
6942 | | - 'centralnotice-template-body' => '模板体:', |
| 8039 | + 'centralnotice-template-body' => '模板主体:', |
6943 | 8040 | 'centralnotice-day' => '日', |
6944 | 8041 | 'centralnotice-year' => '年', |
6945 | 8042 | 'centralnotice-month' => '月', |
6946 | 8043 | 'centralnotice-hours' => '时', |
6947 | 8044 | 'centralnotice-min' => '分', |
6948 | 8045 | 'centralnotice-project-lang' => '计划语言', |
| 8046 | + 'centralnotice-select' => '选定', |
6949 | 8047 | 'centralnotice-project-name' => '计划名称', |
6950 | 8048 | 'centralnotice-start-date' => '开始日期', |
6951 | 8049 | 'centralnotice-start-time' => '开始时间(UTC)', |
— | — | @@ -6975,11 +8073,14 @@ |
6976 | 8074 | 'centralnotice-no-templates-translate' => '没有任何可以编辑翻译的模板', |
6977 | 8075 | 'centralnotice-number-uses' => '使用', |
6978 | 8076 | 'centralnotice-edit-template' => '编辑模板', |
| 8077 | + 'centralnotice-edit-template-summary' => '要创建一个可本地化的消息,使用三个{,例如{{{jimbo-quote}}}。', |
6979 | 8078 | 'centralnotice-message' => '消息', |
6980 | 8079 | 'centralnotice-message-not-set' => '没有设置消息', |
6981 | 8080 | 'centralnotice-clone' => '建立副本', |
6982 | 8081 | 'centralnotice-clone-notice' => '创建一个模板的副本', |
| 8082 | + 'centralnotice-clone-name' => '名称', |
6983 | 8083 | 'centralnotice-preview-all-template-translations' => '预览模板的所有可用翻译', |
| 8084 | + 'centralnotice-insert' => '插入', |
6984 | 8085 | 'right-centralnotice-admin' => '管理中央通告', |
6985 | 8086 | 'right-centralnotice-translate' => '翻译中央通告', |
6986 | 8087 | 'action-centralnotice-admin' => '管理中央通告', |
— | — | @@ -6989,6 +8090,7 @@ |
6990 | 8091 | |
6991 | 8092 | /** Traditional Chinese (中文(繁體)) |
6992 | 8093 | * @author Alex S.H. Lin |
| 8094 | + * @author Frankou |
6993 | 8095 | * @author Horacewai2 |
6994 | 8096 | * @author Liangent |
6995 | 8097 | * @author Wrightbus |
— | — | @@ -7018,7 +8120,7 @@ |
7019 | 8121 | 'centralnotice-translate-to' => '翻譯到', |
7020 | 8122 | 'centralnotice-translate' => '翻譯', |
7021 | 8123 | 'centralnotice-english' => '英語', |
7022 | | - 'centralnotice-template-name' => '模板名稱', |
| 8124 | + 'centralnotice-banner-name' => '模板名稱', |
7023 | 8125 | 'centralnotice-templates' => '模板', |
7024 | 8126 | 'centralnotice-weight' => '權重', |
7025 | 8127 | 'centralnotice-locked' => '已鎖定', |
— | — | @@ -7068,6 +8170,7 @@ |
7069 | 8171 | 'centralnotice-no-templates-translate' => '沒有任何可以編輯翻譯的模板', |
7070 | 8172 | 'centralnotice-number-uses' => '使用', |
7071 | 8173 | 'centralnotice-edit-template' => '編輯模板', |
| 8174 | + 'centralnotice-edit-template-summary' => '要創建一個可本地化的消息,使用三個大括號,例如{{{jimbo-quote}}}。', |
7072 | 8175 | 'centralnotice-message' => '消息', |
7073 | 8176 | 'centralnotice-message-not-set' => '沒有設置消息', |
7074 | 8177 | 'centralnotice-clone' => '建立副本', |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/up-arrow.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/up-arrow.png |
___________________________________________________________________ |
Added: svn:mime-type |
7075 | 8178 | + image/png |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/SpecialNoticeTemplate.php |
— | — | @@ -6,54 +6,30 @@ |
7 | 7 | } |
8 | 8 | |
9 | 9 | class SpecialNoticeTemplate extends UnlistedSpecialPage { |
10 | | - public $limitsShown = array( 20, 50, 100 ); |
11 | | - public $defaultLimit = 20; |
12 | | - public $mOffset, $mLimit; |
13 | | - protected $indexField = 'tmp_id'; |
14 | | - protected $mDb; |
15 | | - |
16 | | - /* Functions */ |
| 10 | + var $editable; |
17 | 11 | |
18 | 12 | function __construct() { |
19 | | - // Initialize special page |
20 | | - global $wgRequest; |
21 | | - $this->mRequest = $wgRequest; |
22 | | - |
23 | | - # NB: the offset is quoted, not validated. It is treated as an |
24 | | - # arbitrary string to support the widest variety of index types. Be |
25 | | - # careful outputting it into HTML! |
26 | | - $this->mOffset = $this->mRequest->getText( 'offset' ); |
27 | | - |
28 | | - # Set the limit, default to 20, ignore User default |
29 | | - $limit = $this->mRequest->getInt( 'limit', 0 ); |
30 | | - if ( $limit <= 0 ) { |
31 | | - $limit = 20; |
32 | | - } |
33 | | - if ( $limit > 5000 ) { |
34 | | - $limit = 5000; # We have *some* limits... |
35 | | - } |
36 | | - $this->mLimit = $limit; |
37 | | - |
38 | | - $this->mDb = wfGetDB( DB_SLAVE ); |
39 | | - |
40 | 13 | parent::__construct( 'NoticeTemplate' ); |
41 | 14 | |
42 | 15 | // Internationalization |
43 | 16 | wfLoadExtensionMessages( 'CentralNotice' ); |
44 | 17 | } |
45 | 18 | |
46 | | - /* |
47 | | - * Handle different types of page requests. |
| 19 | + /** |
| 20 | + * Handle different types of page requests |
48 | 21 | */ |
49 | 22 | function execute( $sub ) { |
50 | | - global $wgOut, $wgUser, $wgRequest; |
| 23 | + global $wgOut, $wgUser, $wgRequest, $wgScriptPath; |
51 | 24 | |
52 | 25 | // Begin output |
53 | 26 | $this->setHeaders(); |
| 27 | + |
| 28 | + // Add style file to the output headers |
| 29 | + $wgOut->addExtensionStyle( "$wgScriptPath/extensions/CentralNotice/centralnotice.css" ); |
| 30 | + |
| 31 | + // Add script file to the output headers |
| 32 | + $wgOut->addScriptFile( "$wgScriptPath/extensions/CentralNotice/centralnotice.js" ); |
54 | 33 | |
55 | | - // Get current skin |
56 | | - $sk = $wgUser->getSkin(); |
57 | | - |
58 | 34 | // Check permissions |
59 | 35 | $this->editable = $wgUser->isAllowed( 'centralnotice-admin' ); |
60 | 36 | |
— | — | @@ -63,14 +39,21 @@ |
64 | 40 | // Show header |
65 | 41 | CentralNotice::printHeader(); |
66 | 42 | |
67 | | - if ( $this->editable ) { |
68 | | - // Handle forms |
69 | | - if ( $wgRequest->wasPosted() ) { |
| 43 | + // Begin Banners tab content |
| 44 | + $wgOut->addHTML( Xml::openElement( 'div', array( 'id' => 'preferences' ) ) ); |
| 45 | + |
| 46 | + $method = $wgRequest->getVal( 'wpMethod' ); |
| 47 | + |
| 48 | + // Handle form submissions |
| 49 | + if ( $this->editable && $wgRequest->wasPosted() ) { |
| 50 | + |
| 51 | + // Check authentication token |
| 52 | + if ( $wgUser->matchEditToken( $wgRequest->getVal( 'authtoken' ) ) ) { |
70 | 53 | |
71 | | - // Handle removing |
| 54 | + // Handle removing banners |
72 | 55 | $toRemove = $wgRequest->getArray( 'removeTemplates' ); |
73 | 56 | if ( isset( $toRemove ) ) { |
74 | | - // Remove templates in list |
| 57 | + // Remove banners in list |
75 | 58 | foreach ( $toRemove as $template ) { |
76 | 59 | $this->removeTemplate( $template ); |
77 | 60 | } |
— | — | @@ -78,429 +61,485 @@ |
79 | 62 | |
80 | 63 | // Handle translation message update |
81 | 64 | $update = $wgRequest->getArray( 'updateText' ); |
82 | | - $token = $wgRequest->getArray( 'token' ); |
83 | 65 | if ( isset ( $update ) ) { |
84 | 66 | foreach ( $update as $lang => $messages ) { |
85 | 67 | foreach ( $messages as $text => $translation ) { |
86 | 68 | // If we actually have text |
87 | 69 | if ( $translation ) { |
88 | | - $this->updateMessage( $text, $translation, $lang, $token ); |
| 70 | + $this->updateMessage( $text, $translation, $lang ); |
89 | 71 | } |
90 | 72 | } |
91 | 73 | } |
92 | 74 | } |
93 | | - } |
94 | 75 | |
95 | | - // Handle adding |
96 | | - // FIXME: getText()? weak comparison |
97 | | - if ( $wgRequest->getVal( 'wpMethod' ) == 'addTemplate' ) { |
98 | | - $this->addTemplate( |
99 | | - $wgRequest->getVal( 'templateName' ), |
100 | | - $wgRequest->getVal( 'templateBody' ) |
101 | | - ); |
102 | | - $sub = 'view'; |
| 76 | + // Handle adding banner |
| 77 | + // FIXME: getText()? weak comparison |
| 78 | + if ( $method == 'addTemplate' ) { |
| 79 | + $newTemplateName = $wgRequest->getVal( 'templateName' ); |
| 80 | + $newTemplateBody = $wgRequest->getVal( 'templateBody' ); |
| 81 | + if ( $newTemplateName != '' && $newTemplateBody != '' ) { |
| 82 | + $this->addTemplate( |
| 83 | + $newTemplateName, |
| 84 | + $newTemplateBody, |
| 85 | + $wgRequest->getBool( 'displayAnon' ), |
| 86 | + $wgRequest->getBool( 'displayAccount' ) |
| 87 | + ); |
| 88 | + $sub = 'view'; |
| 89 | + } else { |
| 90 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-null-string' ); |
| 91 | + } |
| 92 | + } |
| 93 | + |
| 94 | + // Handle editing banner |
| 95 | + if ( $method == 'editTemplate' ) { |
| 96 | + $this->editTemplate( |
| 97 | + $wgRequest->getVal( 'template' ), |
| 98 | + $wgRequest->getVal( 'templateBody' ), |
| 99 | + $wgRequest->getBool( 'displayAnon' ), |
| 100 | + $wgRequest->getBool( 'displayAccount' ) |
| 101 | + ); |
| 102 | + $sub = 'view'; |
| 103 | + } |
| 104 | + |
| 105 | + } else { |
| 106 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'sessionfailure' ); |
103 | 107 | } |
104 | | - if ( $wgRequest->getVal( 'wpMethod' ) == 'editTemplate' ) { |
105 | | - $this->editTemplate( |
106 | | - $wgRequest->getVal( 'template' ), |
107 | | - $wgRequest->getVal( 'templateBody' ) |
108 | | - ); |
109 | | - $sub = 'view'; |
110 | | - } |
| 108 | + |
111 | 109 | } |
112 | 110 | |
113 | | - // Handle viewiing of a template in all languages |
| 111 | + // Handle viewing of a banner in all languages |
114 | 112 | if ( $sub == 'view' && $wgRequest->getVal( 'wpUserLanguage' ) == 'all' ) { |
115 | 113 | $template = $wgRequest->getVal( 'template' ); |
116 | 114 | $this->showViewAvailable( $template ); |
| 115 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
117 | 116 | return; |
118 | 117 | } |
119 | 118 | |
120 | | - // Handle viewing a specific template |
| 119 | + // Handle viewing a specific banner |
121 | 120 | if ( $sub == 'view' && $wgRequest->getText( 'template' ) != '' ) { |
122 | 121 | $this->showView(); |
| 122 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
123 | 123 | return; |
124 | 124 | } |
125 | 125 | |
126 | 126 | if ( $this->editable ) { |
127 | | - // Handle viewing a specific template |
| 127 | + // Handle showing "Add a banner" interface |
128 | 128 | if ( $sub == 'add' ) { |
129 | 129 | $this->showAdd(); |
| 130 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
130 | 131 | return; |
131 | 132 | } |
132 | | - |
| 133 | + |
| 134 | + // Handle cloning a specific banner |
133 | 135 | if ( $sub == 'clone' ) { |
134 | | - $oldTemplate = $wgRequest->getVal( 'oldTemplate' ); |
135 | | - $newTemplate = $wgRequest->getVal( 'newTemplate' ); |
136 | | - // We use the returned name in case any special characters had to be removed |
137 | | - $template = $this->cloneTemplate( $oldTemplate, $newTemplate ); |
138 | | - $wgOut->redirect( SpecialPage::getTitleFor( 'NoticeTemplate', 'view' )->getLocalUrl( "template=$template" ) ); |
139 | | - return; |
| 136 | + |
| 137 | + // Check authentication token |
| 138 | + if ( $wgUser->matchEditToken( $wgRequest->getVal( 'authtoken' ) ) ) { |
| 139 | + |
| 140 | + $oldTemplate = $wgRequest->getVal( 'oldTemplate' ); |
| 141 | + $newTemplate = $wgRequest->getVal( 'newTemplate' ); |
| 142 | + // We use the returned name in case any special characters had to be removed |
| 143 | + $template = $this->cloneTemplate( $oldTemplate, $newTemplate ); |
| 144 | + $wgOut->redirect( $this->getTitle( 'view' )->getLocalUrl( "template=$template" ) ); |
| 145 | + return; |
| 146 | + |
| 147 | + } else { |
| 148 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'sessionfailure' ); |
| 149 | + } |
| 150 | + |
140 | 151 | } |
| 152 | + |
141 | 153 | } |
142 | 154 | |
143 | | - // Show list by default |
| 155 | + // Show list of banners by default |
144 | 156 | $this->showList(); |
| 157 | + |
| 158 | + // End Banners tab content |
| 159 | + $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
145 | 160 | } |
146 | 161 | |
147 | | - /* |
148 | | - * Show a list of available templates. Newer templates are shown first. |
| 162 | + /** |
| 163 | + * Show a list of available banners. Newer banners are shown first. |
149 | 164 | */ |
150 | 165 | function showList() { |
151 | | - global $wgOut, $wgUser, $wgRequest, $wgLang; |
| 166 | + global $wgOut, $wgUser; |
152 | 167 | |
153 | 168 | $sk = $wgUser->getSkin(); |
154 | | - |
155 | | - // Templates |
156 | | - $offset = $wgRequest->getVal( 'offset' ); |
157 | | - if ( $wgRequest->getVal( 'limit' ) ) { |
158 | | - $limit = $wgRequest->getVal( 'limit' ); |
159 | | - } else { |
160 | | - $limit = $this->defaultLimit; |
161 | | - } |
162 | | - |
163 | | - $templates = $this->queryTemplates($offset, $limit); |
| 169 | + $pager = new TemplatePager( $this ); |
| 170 | + |
| 171 | + // Begin building HTML |
164 | 172 | $htmlOut = ''; |
165 | | - if ( count( $templates ) > 0 ) { |
166 | 173 | |
| 174 | + // Begin Manage Banners fieldset |
| 175 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 176 | + |
| 177 | + if ( !$pager->getNumRows() ) { |
| 178 | + $htmlOut .= Xml::element( 'p', null, wfMsg( 'centralnotice-no-templates' ) ); |
| 179 | + } else { |
167 | 180 | if ( $this->editable ) { |
168 | | - $htmlOut .= Xml::openElement( 'form', |
169 | | - array( |
170 | | - 'method' => 'post', |
171 | | - 'action' => '' |
172 | | - ) |
173 | | - ); |
| 181 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
174 | 182 | } |
175 | | - $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-available-templates' ) ); |
| 183 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-manage-templates' ) ); |
176 | 184 | |
177 | | - //Show pagination links |
178 | | - $opts = array( 'parsemag', 'escapenoentities' ); |
179 | | - $linkTexts = array( |
180 | | - 'prev' => wfMsgExt( 'prevn', $opts, $wgLang->formatNum( $this->mLimit ) ), |
181 | | - 'next' => wfMsgExt( 'nextn', $opts, $wgLang->formatNum($this->mLimit ) ), |
182 | | - 'first' => wfMsgExt( 'page_first', $opts ), |
183 | | - 'last' => wfMsgExt( 'page_last', $opts ) |
184 | | - ); |
185 | | - $pagingLinks = $this->getPagingLinks( $linkTexts, $offset, $limit ); |
186 | | - $limitLinks = $this->getLimitLinks(); |
187 | | - $limits = $wgLang->pipeList( $limitLinks ); |
188 | | - $htmlOut .= wfMsgHTML( 'viewprevnext', $pagingLinks['prev'], $pagingLinks['next'], $limits ); |
189 | | - |
190 | | - $htmlOut .= Xml::openElement( 'table', |
191 | | - array( |
192 | | - 'cellpadding' => 9, |
193 | | - 'width' => '100%' |
194 | | - ) |
195 | | - ); |
| 185 | + // Show paginated list of banners |
| 186 | + $htmlOut .= Xml::tags( 'div', array( 'class' => 'cn-pager' ), $pager->getNavigationBar() ); |
| 187 | + $htmlOut .= $pager->getBody(); |
| 188 | + $htmlOut .= Xml::tags( 'div', array( 'class' => 'cn-pager' ), $pager->getNavigationBar() ); |
| 189 | + |
196 | 190 | if ( $this->editable ) { |
197 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ), |
198 | | - wfMsg ( 'centralnotice-remove' ) |
199 | | - ); |
200 | | - } |
201 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left' ), |
202 | | - wfMsg ( 'centralnotice-template-name' ) |
203 | | - ); |
204 | | - |
205 | | - $msgConfirmDelete = wfMsgHTML( 'centralnotice-confirm-delete' ); |
206 | | - |
207 | | - foreach ( $templates as $templateName ) { |
208 | | - $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
209 | | - $htmlOut .= Xml::openElement( 'tr' ); |
210 | | - |
211 | | - if ( $this->editable ) { |
212 | | - // Remove box |
213 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
214 | | - Xml::check( 'removeTemplates[]', false, |
215 | | - array( |
216 | | - 'value' => $templateName, |
217 | | - 'onchange' => "if(this.checked){this.checked=confirm('{$msgConfirmDelete}')}" |
218 | | - ) |
219 | | - ) |
220 | | - ); |
221 | | - } |
222 | | - |
223 | | - // Link and Preview |
224 | | - $render = new SpecialNoticeText(); |
225 | | - $render->project = 'wikipedia'; |
226 | | - $render->language = $wgRequest->getVal( 'wpUserLanguage' ); |
227 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
228 | | - $sk->makeLinkObj( $viewPage, |
229 | | - htmlspecialchars( $templateName ), |
230 | | - 'template=' . urlencode( $templateName ) ) . |
231 | | - Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
232 | | - $render->getHtmlNotice( $templateName ) |
233 | | - ) |
234 | | - ); |
235 | | - |
236 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
237 | | - } |
238 | | - if ( $this->editable ) { |
239 | | - $htmlOut .= Xml::tags( 'tr', null, |
240 | | - Xml::tags( 'td', array( 'colspan' => 3 ), |
241 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
242 | | - ) |
243 | | - ); |
244 | | - } |
245 | | - $htmlOut .= Xml::closeElement( 'table' ); |
246 | | - |
247 | | - //Show pagination links |
248 | | - $htmlOut .= wfMsgHTML( 'viewprevnext', $pagingLinks['prev'], $pagingLinks['next'], $limits ); |
249 | | - |
250 | | - $htmlOut .= Xml::closeElement( 'fieldset' ); |
251 | | - if ( $this->editable ) { |
252 | 191 | $htmlOut .= Xml::closeElement( 'form' ); |
253 | 192 | } |
254 | | - |
255 | | - } else { |
256 | | - $htmlOut .= Xml::element( 'p', null, wfMsg( 'centralnotice-no-templates' ) ); |
257 | 193 | } |
258 | | - |
| 194 | + |
259 | 195 | if ( $this->editable ) { |
260 | 196 | $htmlOut .= Xml::element( 'p' ); |
261 | | - $newPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'add' ); |
| 197 | + $newPage = $this->getTitle( 'add' ); |
262 | 198 | $htmlOut .= $sk->makeLinkObj( $newPage, wfMsgHtml( 'centralnotice-add-template' ) ); |
263 | 199 | } |
| 200 | + |
| 201 | + // End Manage Banners fieldset |
| 202 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
264 | 203 | |
265 | | - // Output HTML |
266 | 204 | $wgOut->addHTML( $htmlOut ); |
267 | 205 | } |
268 | 206 | |
| 207 | + /** |
| 208 | + * Show "Add a banner" interface |
| 209 | + */ |
269 | 210 | function showAdd() { |
270 | | - global $wgOut, $wgUser; |
| 211 | + global $wgOut, $wgUser, $wgScriptPath, $wgLang, $wgRequest; |
| 212 | + $scriptPath = "$wgScriptPath/extensions/CentralNotice"; |
271 | 213 | |
272 | 214 | // Build HTML |
273 | | - $htmlOut = Xml::openElement( 'form', array( 'method' => 'post' ) ); |
274 | | - $htmlOut .= Xml::openElement( 'fieldset' ); |
275 | | - $htmlOut .= Xml::element( 'legend', null, wfMsg( 'centralnotice-add-template' ) ); |
| 215 | + $htmlOut = ''; |
| 216 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 217 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
| 218 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-add-template' ) ); |
276 | 219 | $htmlOut .= Xml::hidden( 'wpMethod', 'addTemplate' ); |
277 | 220 | $htmlOut .= Xml::tags( 'p', null, |
278 | | - Xml::inputLabel( |
279 | | - wfMsg( 'centralnotice-template-name' ), |
280 | | - 'templateName', |
281 | | - 'templateName', |
282 | | - 25 |
283 | | - ) |
| 221 | + Xml::inputLabel( wfMsg( 'centralnotice-banner-name' ), 'templateName', 'templateName', 25, $wgRequest->getVal( 'templateName' ) ) |
284 | 222 | ); |
285 | | - $htmlOut .= Xml::tags( 'p', null, |
286 | | - Xml::textarea( 'templateBody', '', 60, 20 ) |
| 223 | + |
| 224 | + $htmlOut .= Xml::openElement( 'p', null ); |
| 225 | + $htmlOut .= wfMsg( 'centralnotice-banner-display' ); |
| 226 | + if ( $wgRequest->wasPosted() ) { |
| 227 | + $displayAnon = $wgRequest->getCheck( 'displayAnon' ); // Restore checkbox state in event of error |
| 228 | + } else { |
| 229 | + $displayAnon = true; // Default is checked |
| 230 | + } |
| 231 | + $htmlOut .= Xml::check( 'displayAnon', $displayAnon, array( 'id' => 'displayAnon' ) ); |
| 232 | + $htmlOut .= Xml::label( wfMsg( 'centralnotice-banner-anonymous' ), 'displayAnon' ); |
| 233 | + if ( $wgRequest->wasPosted() ) { |
| 234 | + $displayAccount = $wgRequest->getCheck( 'displayAccount' ); // Restore checkbox state in event of error |
| 235 | + } else { |
| 236 | + $displayAccount = true; // Default is checked |
| 237 | + } |
| 238 | + $htmlOut .= Xml::check( 'displayAccount', $displayAccount, array( 'id' => 'displayAccount' ) ); |
| 239 | + $htmlOut .= Xml::label( wfMsg( 'centralnotice-banner-logged-in' ), 'displayAccount' ); |
| 240 | + $htmlOut .= Xml::closeElement( 'p' ); |
| 241 | + |
| 242 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-banner' ) ); |
| 243 | + $htmlOut .= wfMsg( 'centralnotice-edit-template-summary' ); |
| 244 | + $buttons = array(); |
| 245 | + $buttons[] = '<a href="#" onclick="insertButton(\'hide\');return false;">' . wfMsg( 'centralnotice-hide-button' ) . '</a>'; |
| 246 | + $buttons[] = '<a href="#" onclick="insertButton(\'translate\');return false;">' . wfMsg( 'centralnotice-translate-button' ) . '</a>'; |
| 247 | + $htmlOut .= Xml::tags( 'div', |
| 248 | + array( 'style' => 'margin-bottom: 0.2em;' ), |
| 249 | + '<img src="'.$scriptPath.'/down-arrow.png" style="vertical-align:baseline;"/>' . wfMsg( 'centralnotice-insert', $wgLang->commaList( $buttons ) ) |
287 | 250 | ); |
288 | | - $htmlOut .= Xml::tags( 'p', null, |
289 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
290 | | - ); |
| 251 | + |
| 252 | + // Restore banner body state in the event of an error on form submit |
| 253 | + $body = $wgRequest->getVal( 'templateBody', '' ); |
| 254 | + |
| 255 | + $htmlOut .= Xml::textarea( 'templateBody', $body, 60, 20 ); |
291 | 256 | $htmlOut .= Xml::closeElement( 'fieldset' ); |
| 257 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 258 | + |
| 259 | + // Submit button |
| 260 | + $htmlOut .= Xml::tags( 'div', |
| 261 | + array( 'class' => 'cn-buttons' ), |
| 262 | + Xml::submitButton( wfMsg( 'centralnotice-save-banner' ) ) |
| 263 | + ); |
| 264 | + |
292 | 265 | $htmlOut .= Xml::closeElement( 'form' ); |
| 266 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
293 | 267 | |
294 | 268 | // Output HTML |
295 | 269 | $wgOut->addHTML( $htmlOut ); |
296 | 270 | } |
297 | | - |
| 271 | + |
| 272 | + /** |
| 273 | + * View or edit an individual banner |
| 274 | + */ |
298 | 275 | private function showView() { |
299 | | - global $wgOut, $wgUser, $wgRequest, $wgContLanguageCode; |
300 | | - |
| 276 | + global $wgOut, $wgUser, $wgRequest, $wgContLanguageCode, $wgScriptPath, $wgLang; |
| 277 | + |
| 278 | + $scriptPath = "$wgScriptPath/extensions/CentralNotice"; |
301 | 279 | $sk = $wgUser->getSkin(); |
| 280 | + |
302 | 281 | if ( $this->editable ) { |
303 | 282 | $readonly = array(); |
| 283 | + $disabled = array(); |
304 | 284 | } else { |
305 | 285 | $readonly = array( 'readonly' => 'readonly' ); |
| 286 | + $disabled = array( 'disabled' => 'disabled' ); |
306 | 287 | } |
307 | 288 | |
308 | | - // Get token |
309 | | - $token = $wgUser->editToken(); |
310 | | - |
311 | 289 | // Get user's language |
312 | 290 | $wpUserLang = $wgRequest->getVal( 'wpUserLanguage' ) ? $wgRequest->getVal( 'wpUserLanguage' ) : $wgContLanguageCode; |
313 | 291 | |
314 | | - // Get current template |
| 292 | + // Get current banner |
315 | 293 | $currentTemplate = $wgRequest->getText( 'template' ); |
| 294 | + |
| 295 | + // Pull banner settings from database |
| 296 | + $dbr = wfGetDB( DB_SLAVE ); |
| 297 | + $row = $dbr->selectRow( 'cn_templates', |
| 298 | + array( |
| 299 | + 'tmp_display_anon', |
| 300 | + 'tmp_display_account' |
| 301 | + ), |
| 302 | + array( 'tmp_name' => $currentTemplate ), |
| 303 | + __METHOD__ |
| 304 | + ); |
| 305 | + |
| 306 | + // Begin building HTML |
| 307 | + $htmlOut = ''; |
| 308 | + |
| 309 | + // Begin View Banner fieldset |
| 310 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 311 | + |
| 312 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-banner-heading', $currentTemplate ) ); |
316 | 313 | |
317 | | - // Show preview |
| 314 | + // Show preview of banner |
318 | 315 | $render = new SpecialNoticeText(); |
319 | 316 | $render->project = 'wikipedia'; |
320 | 317 | $render->language = $wgRequest->getVal( 'wpUserLanguage' ); |
321 | | - $htmlOut = Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
322 | | - $render->getHtmlNotice( $wgRequest->getText( 'template' ) ) |
323 | | - ); |
324 | | - |
325 | | - // Build HTML |
326 | | - if ( $this->editable ) { |
327 | | - $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
| 318 | + if ( $render->language != '' ) { |
| 319 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-preview' ) . " ($render->language)", |
| 320 | + $render->getHtmlNotice( $wgRequest->getText( 'template' ) ) |
| 321 | + ); |
| 322 | + } else { |
| 323 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
| 324 | + $render->getHtmlNotice( $wgRequest->getText( 'template' ) ) |
| 325 | + ); |
328 | 326 | } |
329 | | - $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-translate-heading', $currentTemplate ) ); |
330 | | - $htmlOut .= Xml::openElement( 'table', |
331 | | - array ( |
332 | | - 'cellpadding' => 9, |
333 | | - 'width' => '100%' |
334 | | - ) |
335 | | - ); |
336 | 327 | |
337 | | - // Headers |
338 | | - $htmlOut .= Xml::element( 'th', array( 'width' => '15%' ), wfMsg( 'centralnotice-message' ) ); |
339 | | - $htmlOut .= Xml::element( 'th', array( 'width' => '5%' ), wfMsg ( 'centralnotice-number-uses' ) ); |
340 | | - $htmlOut .= Xml::element( 'th', array( 'width' => '40%' ), wfMsg ( 'centralnotice-english' ) ); |
341 | | - $languages = Language::getLanguageNames(); |
342 | | - $htmlOut .= Xml::element( 'th', array( 'width' => '40%' ), $languages[$wpUserLang] ); |
343 | | - |
344 | | - // Pull text and respect any inc: markup |
| 328 | + // Pull banner text and respect any inc: markup |
345 | 329 | $bodyPage = Title::newFromText( "Centralnotice-template-{$currentTemplate}", NS_MEDIAWIKI ); |
346 | 330 | $curRev = Revision::newFromTitle( $bodyPage ); |
347 | 331 | $body = $curRev ? $curRev->getText() : ''; |
348 | | - |
| 332 | + |
| 333 | + // Extract message fields from the banner body |
349 | 334 | $fields = array(); |
350 | | - preg_match_all( '/\{\{\{([A-Za-z0-9\_\-}]+)\}\}\}/', $body, $fields ); |
351 | | - |
352 | | - // Remove duplicates |
353 | | - $filteredFields = array(); |
354 | | - foreach ( $fields[1] as $field ) { |
355 | | - $filteredFields[$field] = array_key_exists( $field, $filteredFields ) ? $filteredFields[$field] + 1 : 1; |
356 | | - } |
357 | | - |
358 | | - // Rows |
359 | | - foreach ( $filteredFields as $field => $count ) { |
360 | | - // Message |
361 | | - $message = ( $wpUserLang == 'en' ) ? "Centralnotice-{$currentTemplate}-{$field}" : "Centralnotice-{$currentTemplate}-{$field}/{$wpUserLang}"; |
362 | | - |
363 | | - // English value |
364 | | - $htmlOut .= Xml::openElement( 'tr' ); |
365 | | - |
366 | | - $title = Title::newFromText( "MediaWiki:{$message}" ); |
367 | | - $htmlOut .= Xml::tags( 'td', null, |
368 | | - $sk->makeLinkObj( $title, htmlspecialchars( $field ) ) |
369 | | - ); |
370 | | - |
371 | | - $htmlOut .= Xml::element( 'td', null, $count ); |
372 | | - |
373 | | - // English text |
374 | | - $englishText = wfMsg( 'centralnotice-message-not-set' ); |
375 | | - $englishTextExists = false; |
376 | | - if ( Title::newFromText( "Centralnotice-{$currentTemplate}-{$field}", NS_MEDIAWIKI )->exists() ) { |
377 | | - $englishText = wfMsgExt( "Centralnotice-{$currentTemplate}-{$field}", |
378 | | - array( 'language' => 'en' ) |
379 | | - ); |
380 | | - $englishTextExists = true; |
| 335 | + $allowedChars = Title::legalChars(); |
| 336 | + preg_match_all( "/\{\{\{([$allowedChars]+)\}\}\}/u", $body, $fields ); |
| 337 | + |
| 338 | + // Restore banner body state in the event of an error on form submit |
| 339 | + $body = $wgRequest->getVal( 'templateBody', $body ); |
| 340 | + |
| 341 | + // If there are any message fields in the banner, display translation tools. |
| 342 | + if ( count( $fields[0] ) > 0 ) { |
| 343 | + if ( $this->editable ) { |
| 344 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
381 | 345 | } |
382 | | - $htmlOut .= Xml::tags( 'td', null, |
383 | | - Xml::element( 'span', |
384 | | - array( 'style' => 'font-style:italic;' . ( !$englishTextExists ? 'color:silver' : '' ) ), |
385 | | - $englishText |
| 346 | + $htmlOut .= Xml::fieldset( |
| 347 | + wfMsg( 'centralnotice-translate-heading', $currentTemplate ), |
| 348 | + false, |
| 349 | + array( 'id' => 'mw-centralnotice-translations-for' ) |
| 350 | + ); |
| 351 | + $htmlOut .= Xml::openElement( 'table', |
| 352 | + array ( |
| 353 | + 'cellpadding' => 9, |
| 354 | + 'width' => '100%' |
386 | 355 | ) |
387 | 356 | ); |
388 | | - |
389 | | - // Foreign text input |
390 | | - $foreignText = ''; |
391 | | - $foreignTextExists = false; |
392 | | - if ( Title::newFromText( $message, NS_MEDIAWIKI )->exists() ) { |
393 | | - $foreignText = wfMsgExt( "Centralnotice-{$currentTemplate}-{$field}", |
394 | | - array( 'language' => $wpUserLang ) |
| 357 | + |
| 358 | + // Table headers |
| 359 | + $htmlOut .= Xml::element( 'th', array( 'width' => '15%' ), wfMsg( 'centralnotice-message' ) ); |
| 360 | + $htmlOut .= Xml::element( 'th', array( 'width' => '5%' ), wfMsg ( 'centralnotice-number-uses' ) ); |
| 361 | + $htmlOut .= Xml::element( 'th', array( 'width' => '40%' ), wfMsg ( 'centralnotice-english' ) ); |
| 362 | + $languages = Language::getLanguageNames(); |
| 363 | + $htmlOut .= Xml::element( 'th', array( 'width' => '40%' ), $languages[$wpUserLang] ); |
| 364 | + |
| 365 | + // Remove duplicate message fields |
| 366 | + $filteredFields = array(); |
| 367 | + foreach ( $fields[1] as $field ) { |
| 368 | + $filteredFields[$field] = array_key_exists( $field, $filteredFields ) ? $filteredFields[$field] + 1 : 1; |
| 369 | + } |
| 370 | + |
| 371 | + // Table rows |
| 372 | + foreach ( $filteredFields as $field => $count ) { |
| 373 | + // Message |
| 374 | + $message = ( $wpUserLang == 'en' ) ? "Centralnotice-{$currentTemplate}-{$field}" : "Centralnotice-{$currentTemplate}-{$field}/{$wpUserLang}"; |
| 375 | + |
| 376 | + // English value |
| 377 | + $htmlOut .= Xml::openElement( 'tr' ); |
| 378 | + |
| 379 | + $title = Title::newFromText( "MediaWiki:{$message}" ); |
| 380 | + $htmlOut .= Xml::tags( 'td', null, |
| 381 | + $sk->makeLinkObj( $title, htmlspecialchars( $field ) ) |
395 | 382 | ); |
396 | | - $foreignTextExists = true; |
| 383 | + |
| 384 | + $htmlOut .= Xml::element( 'td', null, $count ); |
| 385 | + |
| 386 | + // English text |
| 387 | + $englishText = wfMsg( 'centralnotice-message-not-set' ); |
| 388 | + $englishTextExists = false; |
| 389 | + if ( Title::newFromText( "Centralnotice-{$currentTemplate}-{$field}", NS_MEDIAWIKI )->exists() ) { |
| 390 | + $englishText = wfMsgExt( "Centralnotice-{$currentTemplate}-{$field}", |
| 391 | + array( 'language' => 'en' ) |
| 392 | + ); |
| 393 | + $englishTextExists = true; |
| 394 | + } |
| 395 | + $htmlOut .= Xml::tags( 'td', null, |
| 396 | + Xml::element( 'span', |
| 397 | + array( 'style' => 'font-style:italic;' . ( !$englishTextExists ? 'color:silver' : '' ) ), |
| 398 | + $englishText |
| 399 | + ) |
| 400 | + ); |
| 401 | + |
| 402 | + // Foreign text input |
| 403 | + $foreignText = ''; |
| 404 | + $foreignTextExists = false; |
| 405 | + if ( Title::newFromText( $message, NS_MEDIAWIKI )->exists() ) { |
| 406 | + $foreignText = wfMsgExt( "Centralnotice-{$currentTemplate}-{$field}", |
| 407 | + array( 'language' => $wpUserLang ) |
| 408 | + ); |
| 409 | + $foreignTextExists = true; |
| 410 | + } |
| 411 | + $htmlOut .= Xml::tags( 'td', null, |
| 412 | + Xml::input( "updateText[{$wpUserLang}][{$currentTemplate}-{$field}]", '', $foreignText, |
| 413 | + wfArrayMerge( $readonly, |
| 414 | + array( 'style' => 'width:100%;' . ( !$foreignTextExists ? 'color:red' : '' ) ) ) |
| 415 | + ) |
| 416 | + ); |
| 417 | + $htmlOut .= Xml::closeElement( 'tr' ); |
397 | 418 | } |
398 | | - $htmlOut .= Xml::tags( 'td', null, |
399 | | - Xml::input( "updateText[{$wpUserLang}][{$currentTemplate}-{$field}]", '', $foreignText, |
400 | | - wfArrayMerge( $readonly, |
401 | | - array( 'style' => 'width:100%;' . ( !$foreignTextExists ? 'color:red' : '' ) ) ) |
| 419 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 420 | + |
| 421 | + if ( $this->editable ) { |
| 422 | + $htmlOut .= Xml::hidden( 'wpUserLanguage', $wpUserLang ); |
| 423 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 424 | + $htmlOut .= Xml::tags( 'div', |
| 425 | + array( 'class' => 'cn-buttons' ), |
| 426 | + Xml::submitButton( wfMsg( 'centralnotice-modify' ), array( 'name' => 'update' ) ) |
| 427 | + ); |
| 428 | + } |
| 429 | + |
| 430 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
| 431 | + |
| 432 | + if ( $this->editable ) { |
| 433 | + $htmlOut .= Xml::closeElement( 'form' ); |
| 434 | + } |
| 435 | + |
| 436 | + // Show language selection form |
| 437 | + $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
| 438 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-change-lang' ) ); |
| 439 | + $htmlOut .= Xml::openElement( 'table', array ( 'cellpadding' => 9 ) ); |
| 440 | + list( $lsLabel, $lsSelect ) = Xml::languageSelector( $wpUserLang ); |
| 441 | + |
| 442 | + $newPage = $this->getTitle( 'view' ); |
| 443 | + |
| 444 | + $htmlOut .= Xml::tags( 'tr', null, |
| 445 | + Xml::tags( 'td', null, $lsLabel ) . |
| 446 | + Xml::tags( 'td', null, $lsSelect ) . |
| 447 | + Xml::tags( 'td', array( 'colspan' => 2 ), |
| 448 | + Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
402 | 449 | ) |
403 | 450 | ); |
404 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
405 | | - } |
406 | | - if ( $this->editable ) { |
407 | | - $htmlOut .= Xml::hidden( 'token', $token ); |
408 | | - $htmlOut .= Xml::hidden( 'wpUserLanguage', $wpUserLang ); |
409 | | - $htmlOut .= Xml::openElement( 'tr' ); |
410 | | - $htmlOut .= Xml::tags( 'td', array( 'colspan' => 4 ), |
411 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ), array( 'name' => 'update' ) ) |
| 451 | + $htmlOut .= Xml::tags( 'tr', null, |
| 452 | + Xml::tags( 'td', null, '' ) . |
| 453 | + Xml::tags( 'td', null, $sk->makeLinkObj( $newPage, wfMsgHtml( 'centralnotice-preview-all-template-translations' ), "template=$currentTemplate&wpUserLanguage=all" ) ) |
412 | 454 | ); |
413 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
414 | | - } |
415 | | - |
416 | | - $htmlOut .= Xml::closeElement( 'table' ); |
417 | | - $htmlOut .= Xml::closeElement( 'fieldset' ); |
418 | | - |
419 | | - if ( $this->editable ) { |
| 455 | + $htmlOut .= Xml::closeElement( 'table' ); |
| 456 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 457 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
420 | 458 | $htmlOut .= Xml::closeElement( 'form' ); |
421 | 459 | } |
422 | 460 | |
423 | | - /* |
424 | | - * Show language selection form |
425 | | - */ |
426 | | - $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
427 | | - $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-change-lang' ) ); |
428 | | - $htmlOut .= Xml::openElement( 'table', array ( 'cellpadding' => 9 ) ); |
429 | | - list( $lsLabel, $lsSelect ) = Xml::languageSelector( $wpUserLang ); |
430 | | - |
431 | | - $newPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
432 | | - |
433 | | - $htmlOut .= Xml::tags( 'tr', null, |
434 | | - Xml::tags( 'td', null, $lsLabel ) . |
435 | | - Xml::tags( 'td', null, $lsSelect ) . |
436 | | - Xml::tags( 'td', array( 'colspan' => 2 ), |
437 | | - Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) |
438 | | - ) |
439 | | - ); |
440 | | - $htmlOut .= Xml::tags( 'tr', null, |
441 | | - Xml::tags( 'td', null, '' ) . |
442 | | - Xml::tags( 'td', null, $sk->makeLinkObj( $newPage, wfMsgHtml( 'centralnotice-preview-all-template-translations' ), "template=$currentTemplate&wpUserLanguage=all" ) ) |
443 | | - ); |
444 | | - $htmlOut .= Xml::closeElement( 'table' ); |
445 | | - $htmlOut .= Xml::closeElement( 'fieldset' ); |
446 | | - $htmlOut .= Xml::closeElement( 'form' ); |
447 | | - |
448 | | - /* |
449 | | - * Show edit form |
450 | | - */ |
| 461 | + // Show edit form |
451 | 462 | if ( $this->editable ) { |
452 | 463 | $htmlOut .= Xml::openElement( 'form', array( 'method' => 'post' ) ); |
453 | 464 | $htmlOut .= Xml::hidden( 'wpMethod', 'editTemplate' ); |
454 | 465 | } |
455 | | - $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-edit-template' ) ); |
456 | | - $htmlOut .= Xml::openElement( 'table', |
457 | | - array( |
458 | | - 'cellpadding' => 9, |
459 | | - 'width' => '100%' |
460 | | - ) |
461 | | - ); |
462 | | - $htmlOut .= Xml::tags( 'tr', null, |
463 | | - Xml::tags( 'td', null, Xml::textarea( 'templateBody', $body, 60, 20, $readonly ) ) |
464 | | - ); |
| 466 | + |
| 467 | + // Show banner settings |
| 468 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-settings' ) ); |
| 469 | + $htmlOut .= Xml::openElement( 'p', null ); |
| 470 | + $htmlOut .= wfMsg( 'centralnotice-banner-display' ); |
| 471 | + if ( $wgRequest->wasPosted() ) { |
| 472 | + $displayAnon = $wgRequest->getCheck( 'displayAnon' ); // Restore checkbox state in event of error |
| 473 | + } else { |
| 474 | + $displayAnon = ( $row->tmp_display_anon == 1 ); // Default to saved state |
| 475 | + } |
| 476 | + $htmlOut .= Xml::check( 'displayAnon', $displayAnon, wfArrayMerge( $disabled, array( 'id' => 'displayAnon' ) ) ); |
| 477 | + $htmlOut .= Xml::label( wfMsg( 'centralnotice-banner-anonymous' ), 'displayAnon' ); |
| 478 | + if ( $wgRequest->wasPosted() ) { |
| 479 | + $displayAccount = $wgRequest->getCheck( 'displayAccount' ); // Restore checkbox state in event of error |
| 480 | + } else { |
| 481 | + $displayAccount = ( $row->tmp_display_account == 1 ); // Default to saved state |
| 482 | + } |
| 483 | + $htmlOut .= Xml::check( 'displayAccount', $displayAccount, wfArrayMerge( $disabled, array( 'id' => 'displayAccount' ) ) ); |
| 484 | + $htmlOut .= Xml::label( wfMsg( 'centralnotice-banner-logged-in' ), 'displayAccount' ); |
| 485 | + $htmlOut .= Xml::closeElement( 'p' ); |
| 486 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
465 | 487 | if ( $this->editable ) { |
466 | | - $htmlOut .= Xml::tags( 'tr', null, |
467 | | - Xml::tags( 'td', null, Xml::submitButton( wfMsg( 'centralnotice-modify' ) ) ) |
| 488 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-edit-template' ) ); |
| 489 | + $htmlOut .= wfMsg( 'centralnotice-edit-template-summary' ); |
| 490 | + $buttons = array(); |
| 491 | + $buttons[] = '<a href="#" onclick="insertButton(\'hide\');return false;">' . wfMsg( 'centralnotice-hide-button' ) . '</a>'; |
| 492 | + $buttons[] = '<a href="#" onclick="insertButton(\'translate\');return false;">' . wfMsg( 'centralnotice-translate-button' ) . '</a>'; |
| 493 | + $htmlOut .= Xml::tags( 'div', |
| 494 | + array( 'style' => 'margin-bottom: 0.2em;' ), |
| 495 | + '<img src="'.$scriptPath.'/down-arrow.png" style="vertical-align:baseline;"/>' . wfMsg( 'centralnotice-insert', $wgLang->commaList( $buttons ) ) |
468 | 496 | ); |
| 497 | + } else { |
| 498 | + $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-banner' ) ); |
469 | 499 | } |
470 | | - $htmlOut .= Xml::closeElement( 'table' ); |
| 500 | + $htmlOut .= Xml::textarea( 'templateBody', $body, 60, 20, $readonly ); |
471 | 501 | $htmlOut .= Xml::closeElement( 'fieldset' ); |
472 | 502 | if ( $this->editable ) { |
| 503 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
| 504 | + $htmlOut .= Xml::tags( 'div', |
| 505 | + array( 'class' => 'cn-buttons' ), |
| 506 | + Xml::submitButton( wfMsg( 'centralnotice-save-banner' ) ) |
| 507 | + ); |
473 | 508 | $htmlOut .= Xml::closeElement( 'form' ); |
474 | 509 | } |
475 | 510 | |
476 | | - /* |
477 | | - * Show Clone form |
478 | | - */ |
| 511 | + // Show clone form |
479 | 512 | if ( $this->editable ) { |
480 | 513 | $htmlOut .= Xml::openElement ( 'form', |
481 | 514 | array( |
482 | 515 | 'method' => 'post', |
483 | | - 'action' => SpecialPage::getTitleFor( 'NoticeTemplate', 'clone' )->getLocalUrl() |
| 516 | + 'action' => $this->getTitle( 'clone' )->getLocalUrl() |
484 | 517 | ) |
485 | 518 | ); |
486 | 519 | |
487 | 520 | $htmlOut .= Xml::fieldset( wfMsg( 'centralnotice-clone-notice' ) ); |
488 | 521 | $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) ); |
489 | 522 | $htmlOut .= Xml::openElement( 'tr' ); |
490 | | - // FIXME: hardcoded text? |
491 | | - $htmlOut .= Xml::inputLabel( 'Name:', 'newTemplate', 'newTemplate, 25' ); |
| 523 | + $htmlOut .= Xml::inputLabel( wfMsg( 'centralnotice-clone-name' ), 'newTemplate', 'newTemplate', '25' ); |
492 | 524 | $htmlOut .= Xml::submitButton( wfMsg( 'centralnotice-clone' ), array ( 'id' => 'clone' ) ); |
493 | 525 | $htmlOut .= Xml::hidden( 'oldTemplate', $currentTemplate ); |
494 | 526 | |
495 | 527 | $htmlOut .= Xml::closeElement( 'tr' ); |
496 | 528 | $htmlOut .= Xml::closeElement( 'table' ); |
| 529 | + $htmlOut .= Xml::hidden( 'authtoken', $wgUser->editToken() ); |
497 | 530 | $htmlOut .= Xml::closeElement( 'fieldset' ); |
498 | 531 | $htmlOut .= Xml::closeElement( 'form' ); |
499 | 532 | } |
| 533 | + |
| 534 | + // End View Banner fieldset |
| 535 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
500 | 536 | |
501 | 537 | // Output HTML |
502 | 538 | $wgOut->addHTML( $htmlOut ); |
503 | 539 | } |
504 | | - |
| 540 | + |
| 541 | + /** |
| 542 | + * Preview all available translations of a banner |
| 543 | + */ |
505 | 544 | public function showViewAvailable( $template ) { |
506 | 545 | global $wgOut, $wgUser; |
507 | 546 | |
— | — | @@ -509,13 +548,18 @@ |
510 | 549 | |
511 | 550 | $sk = $wgUser->getSkin(); |
512 | 551 | |
513 | | - // Pull all available text for a template |
| 552 | + // Pull all available text for a banner |
514 | 553 | $langs = array_keys( $this->getTranslations( $template ) ); |
515 | 554 | $htmlOut = ''; |
| 555 | + |
| 556 | + // Begin View Banner fieldset |
| 557 | + $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) ); |
| 558 | + |
| 559 | + $htmlOut .= Xml::element( 'h2', null, wfMsg( 'centralnotice-banner-heading', $template ) ); |
516 | 560 | |
517 | 561 | foreach ( $langs as $lang ) { |
518 | 562 | // Link and Preview all available translations |
519 | | - $viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' ); |
| 563 | + $viewPage = $this->getTitle( 'view' ); |
520 | 564 | $render = new SpecialNoticeText(); |
521 | 565 | $render->project = 'wikipedia'; |
522 | 566 | $render->language = $lang; |
— | — | @@ -524,16 +568,22 @@ |
525 | 569 | $lang, |
526 | 570 | 'template=' . urlencode( $template ) . "&wpUserLanguage=$lang" ) . |
527 | 571 | Xml::fieldset( wfMsg( 'centralnotice-preview' ), |
528 | | - $render->getHtmlNotice( $template ) |
| 572 | + $render->getHtmlNotice( $template ), |
| 573 | + array( 'class' => 'cn-bannerpreview') |
529 | 574 | ) |
530 | 575 | ); |
531 | 576 | } |
| 577 | + |
| 578 | + // End View Banner fieldset |
| 579 | + $htmlOut .= Xml::closeElement( 'fieldset' ); |
| 580 | + |
532 | 581 | return $wgOut->addHtml( $htmlOut ); |
533 | 582 | } |
534 | | - |
535 | | - private function updateMessage( $text, $translation, $lang, $token = false ) { |
536 | | - global $wgUser; |
537 | | - |
| 583 | + |
| 584 | + /** |
| 585 | + * Add or update a message |
| 586 | + */ |
| 587 | + private function updateMessage( $text, $translation, $lang ) { |
538 | 588 | $title = Title::newFromText( |
539 | 589 | ( $lang == 'en' ) ? "Centralnotice-{$text}" : "Centralnotice-{$text}/{$lang}", |
540 | 590 | NS_MEDIAWIKI |
— | — | @@ -542,41 +592,7 @@ |
543 | 593 | $article->doEdit( $translation, '', EDIT_FORCE_BOT ); |
544 | 594 | } |
545 | 595 | |
546 | | - /* |
547 | | - * Return an array of templates constrained by offset and limit parameters. |
548 | | - */ |
549 | | - function queryTemplates( $offset, $limit ) { |
550 | | - $dbr = wfGetDB( DB_SLAVE ); |
551 | | - $conds = array(); |
552 | | - $options['ORDER BY'] = $this->indexField . ' DESC'; |
553 | | - $options['LIMIT'] = intval( $limit ); |
554 | | - $operator = '<'; |
555 | | - if ( $offset ) { |
556 | | - $conds[] = $this->indexField . $operator . $this->mDb->addQuotes( $offset ); |
557 | | - $res = $dbr->select( 'cn_templates', |
558 | | - array( 'tmp_name', 'tmp_id' ), |
559 | | - $conds, |
560 | | - __METHOD__, |
561 | | - $options |
562 | | - ); |
563 | | - } else { |
564 | | - $res = $dbr->select( 'cn_templates', |
565 | | - array( 'tmp_name', 'tmp_id' ), |
566 | | - '', |
567 | | - __METHOD__, |
568 | | - $options |
569 | | - ); |
570 | | - } |
571 | | - $templates = array(); |
572 | | - foreach ( $res as $row ) { |
573 | | - array_push( $templates, $row->tmp_name ); |
574 | | - } |
575 | | - return $templates; |
576 | | - } |
577 | | - |
578 | 596 | private function getTemplateId ( $templateName ) { |
579 | | - global $wgOut, $egCentralNoticeTables; |
580 | | - |
581 | 597 | $dbr = wfGetDB( DB_SLAVE ); |
582 | 598 | $res = $dbr->select( 'cn_templates', 'tmp_id', |
583 | 599 | array( 'tmp_name' => $templateName ), |
— | — | @@ -591,21 +607,14 @@ |
592 | 608 | } |
593 | 609 | |
594 | 610 | private function removeTemplate ( $name ) { |
595 | | - global $wgOut, $egCentralNoticeTables; |
| 611 | + global $wgOut; |
596 | 612 | |
597 | | - // FIXME: weak comparison |
598 | | - if ( $name == '' ) { |
599 | | - // FIXME: message not defined? |
600 | | - $wgOut->addWikiMsg( 'centralnotice-template-doesnt-exist' ); |
601 | | - return; |
602 | | - } |
603 | | - |
604 | 613 | $id = $this->getTemplateId( $name ); |
605 | 614 | $dbr = wfGetDB( DB_SLAVE ); |
606 | 615 | $res = $dbr->select( 'cn_assignments', 'asn_id', array( 'tmp_id' => $id ), __METHOD__ ); |
607 | 616 | |
608 | 617 | if ( $dbr->numRows( $res ) > 0 ) { |
609 | | - $wgOut->addWikiMsg( 'centralnotice-template-still-bound' ); |
| 618 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-template-still-bound' ); |
610 | 619 | return; |
611 | 620 | } else { |
612 | 621 | $dbw = wfGetDB( DB_MASTER ); |
— | — | @@ -623,16 +632,19 @@ |
624 | 633 | } |
625 | 634 | } |
626 | 635 | |
627 | | - private function addTemplate ( $name, $body ) { |
628 | | - global $wgOut, $egCentralNoticeTables; |
| 636 | + /** |
| 637 | + * Create a new banner |
| 638 | + */ |
| 639 | + private function addTemplate( $name, $body, $displayAnon, $displayAccount ) { |
| 640 | + global $wgOut; |
629 | 641 | |
630 | 642 | if ( $body == '' || $name == '' ) { |
631 | | - $wgOut->addWikiMsg( 'centralnotice-null-string' ); |
| 643 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-null-string' ); |
632 | 644 | return; |
633 | 645 | } |
634 | 646 | |
635 | 647 | // Format name so there are only letters, numbers, and underscores |
636 | | - $name = ereg_replace( '[^A-Za-z0-9\_]', '', $name ); |
| 648 | + $name = preg_replace( '/[^A-Za-z0-9_]/', '', $name ); |
637 | 649 | |
638 | 650 | $dbr = wfGetDB( DB_SLAVE ); |
639 | 651 | $res = $dbr->select( |
— | — | @@ -643,21 +655,20 @@ |
644 | 656 | ); |
645 | 657 | |
646 | 658 | if ( $dbr->numRows( $res ) > 0 ) { |
647 | | - $wgOut->addWikiMsg( 'centralnotice-template-exists' ); |
| 659 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-template-exists' ); |
648 | 660 | return false; |
649 | 661 | } else { |
650 | 662 | $dbw = wfGetDB( DB_MASTER ); |
651 | | - $dbw->begin(); |
652 | | - $res = $dbw->insert( |
653 | | - 'cn_templates', |
654 | | - array( 'tmp_name' => $name ), |
| 663 | + $res = $dbw->insert( 'cn_templates', |
| 664 | + array( |
| 665 | + 'tmp_name' => $name, |
| 666 | + 'tmp_display_anon' => $displayAnon, |
| 667 | + 'tmp_display_account' => $displayAccount |
| 668 | + ), |
655 | 669 | __METHOD__ |
656 | 670 | ); |
657 | | - $dbw->commit(); |
658 | 671 | |
659 | | - /* |
660 | | - * Perhaps these should move into the db as blob |
661 | | - */ |
| 672 | + // Perhaps these should move into the db as blob |
662 | 673 | $article = new Article( |
663 | 674 | Title::newFromText( "centralnotice-template-{$name}", NS_MEDIAWIKI ) |
664 | 675 | ); |
— | — | @@ -666,11 +677,14 @@ |
667 | 678 | } |
668 | 679 | } |
669 | 680 | |
670 | | - private function editTemplate ( $name, $body ) { |
671 | | - global $wgOut, $egCentralNoticeTables; |
| 681 | + /** |
| 682 | + * Update a banner |
| 683 | + */ |
| 684 | + private function editTemplate( $name, $body, $displayAnon, $displayAccount ) { |
| 685 | + global $wgOut; |
672 | 686 | |
673 | 687 | if ( $body == '' || $name == '' ) { |
674 | | - $wgOut->addWikiMsg( 'centralnotice-null-string' ); |
| 688 | + $wgOut->wrapWikiMsg( "<div class='cn-error'>\n$1\n</div>", 'centralnotice-null-string' ); |
675 | 689 | return; |
676 | 690 | } |
677 | 691 | |
— | — | @@ -680,10 +694,17 @@ |
681 | 695 | __METHOD__ |
682 | 696 | ); |
683 | 697 | |
684 | | - if ( $dbr->numRows( $res ) > 0 ) { |
685 | | - /* |
686 | | - * Perhaps these should move into the db as blob |
687 | | - */ |
| 698 | + if ( $dbr->numRows( $res ) == 1 ) { |
| 699 | + $dbw = wfGetDB( DB_MASTER ); |
| 700 | + $res = $dbw->update( 'cn_templates', |
| 701 | + array( |
| 702 | + 'tmp_display_anon' => $displayAnon, |
| 703 | + 'tmp_display_account' => $displayAccount |
| 704 | + ), |
| 705 | + array( 'tmp_name' => $name ) |
| 706 | + ); |
| 707 | + |
| 708 | + // Perhaps these should move into the db as blob |
688 | 709 | $article = new Article( |
689 | 710 | Title::newFromText( "centralnotice-template-{$name}", NS_MEDIAWIKI ) |
690 | 711 | ); |
— | — | @@ -692,23 +713,39 @@ |
693 | 714 | } |
694 | 715 | } |
695 | 716 | |
696 | | - /* |
697 | | - * Copy all the data from one template to another |
| 717 | + /** |
| 718 | + * Copy all the data from one banner to another |
698 | 719 | */ |
699 | 720 | public function cloneTemplate( $source, $dest ) { |
| 721 | + |
700 | 722 | // Reset the timer as updates on meta take a long time |
701 | 723 | set_time_limit( 300 ); |
| 724 | + |
702 | 725 | // Pull all possible langs |
703 | 726 | $langs = $this->getTranslations( $source ); |
704 | 727 | |
705 | 728 | // Normalize name |
706 | | - $dest = ereg_replace( '[^A-Za-z0-9\_]', '', $dest ); |
| 729 | + $dest = preg_replace( '/[^A-Za-z0-9_]/', '', $dest ); |
| 730 | + |
| 731 | + // Pull banner settings from database |
| 732 | + $dbr = wfGetDB( DB_SLAVE ); |
| 733 | + $row = $dbr->selectRow( 'cn_templates', |
| 734 | + array( |
| 735 | + 'tmp_display_anon', |
| 736 | + 'tmp_display_account' |
| 737 | + ), |
| 738 | + array( 'tmp_name' => $source ), |
| 739 | + __METHOD__ |
| 740 | + ); |
| 741 | + $displayAnon = $row->tmp_display_anon; |
| 742 | + $displayAccount = $row->tmp_display_account; |
707 | 743 | |
708 | | - // Pull text and respect any inc: markup |
| 744 | + // Pull banner text and respect any inc: markup |
709 | 745 | $bodyPage = Title::newFromText( "Centralnotice-template-{$source}", NS_MEDIAWIKI ); |
710 | 746 | $template_body = Revision::newFromTitle( $bodyPage )->getText(); |
711 | 747 | |
712 | | - if ( $this->addTemplate( $dest, $template_body ) ) { |
| 748 | + // Create new banner |
| 749 | + if ( $this->addTemplate( $dest, $template_body, $displayAnon, $displayAccount ) ) { |
713 | 750 | |
714 | 751 | // Populate the fields |
715 | 752 | foreach ( $langs as $lang => $fields ) { |
— | — | @@ -720,16 +757,17 @@ |
721 | 758 | } |
722 | 759 | } |
723 | 760 | |
724 | | - /* |
725 | | - * Find all fields set for a template |
| 761 | + /** |
| 762 | + * Find all message fields set for a banner |
726 | 763 | */ |
727 | 764 | private function findFields( $template ) { |
728 | 765 | $messages = array(); |
729 | 766 | $body = wfMsg( "Centralnotice-template-{$template}" ); |
730 | 767 | |
731 | | - // Generate fields from parsing the body |
| 768 | + // Generate list of message fields from parsing the body |
732 | 769 | $fields = array(); |
733 | | - preg_match_all( '/\{\{\{([A-Za-z0-9\_\-}]+)\}\}\}/', $body, $fields ); |
| 770 | + $allowedChars = Title::legalChars(); |
| 771 | + preg_match_all( "/\{\{\{([$allowedChars]+)\}\}\}/u", $body, $fields ); |
734 | 772 | |
735 | 773 | // Remove duplicates |
736 | 774 | $filteredFields = array(); |
— | — | @@ -740,8 +778,9 @@ |
741 | 779 | return $filteredFields; |
742 | 780 | } |
743 | 781 | |
744 | | - /* |
745 | | - * Given a template return a list of every set field in every language |
| 782 | + /** |
| 783 | + * Get all the translations of all the messages for a banner |
| 784 | + * @return a 2D array of every set message in every language for one banner |
746 | 785 | */ |
747 | 786 | public function getTranslations( $template ) { |
748 | 787 | $translations = array(); |
— | — | @@ -749,14 +788,14 @@ |
750 | 789 | // Pull all language codes to enumerate |
751 | 790 | $allLangs = array_keys( Language::getLanguageNames() ); |
752 | 791 | |
753 | | - // Lookup all the possible fields for a template |
| 792 | + // Lookup all the message fields for a banner |
754 | 793 | $fields = $this->findFields( $template ); |
755 | 794 | |
756 | 795 | // Iterate through all possible languages to find matches |
757 | 796 | foreach ( $allLangs as $lang ) { |
758 | | - // Iterate through all possible fields |
| 797 | + // Iterate through all possible message fields |
759 | 798 | foreach ( $fields as $field => $count ) { |
760 | | - // Put all fields together for a lookup |
| 799 | + // Put all message fields together for a lookup |
761 | 800 | $message = ( $lang == 'en' ) ? "Centralnotice-{$template}-{$field}" : "Centralnotice-{$template}-{$field}/{$lang}"; |
762 | 801 | if ( Title::newFromText( $message, NS_MEDIAWIKI )->exists() ) { |
763 | 802 | $translations[$lang][$field] = wfMsgExt( |
— | — | @@ -768,181 +807,4 @@ |
769 | 808 | } |
770 | 809 | return $translations; |
771 | 810 | } |
772 | | - |
773 | | - /* Begin methods copied (and modified) from Pager class */ |
774 | | - |
775 | | - /** |
776 | | - * Get a URL query array for the prev and next links. |
777 | | - */ |
778 | | - function getPagingQueries( $offset, $limit ) { |
779 | | - $dbr = wfGetDB( DB_SLAVE ); |
780 | | - if ( $offset ) { |
781 | | - // Build previous link |
782 | | - $templates = array(); |
783 | | - $conds = array(); |
784 | | - $options['ORDER BY'] = $this->indexField . ' ASC'; |
785 | | - $options['LIMIT'] = intval( $limit + 1); |
786 | | - $conds[] = $this->indexField . '>=' . $this->mDb->addQuotes( $offset ); |
787 | | - $res = $dbr->select( 'cn_templates', |
788 | | - array( 'tmp_name', 'tmp_id' ), |
789 | | - $conds, |
790 | | - __METHOD__, |
791 | | - $options |
792 | | - ); |
793 | | - foreach ( $res as $row ) { |
794 | | - array_push( $templates, $row->tmp_id ); |
795 | | - } |
796 | | - if ( count( $templates ) == $limit + 1 ) { |
797 | | - $prev = array( 'offset' => end( $templates ), 'limit' => $limit ); |
798 | | - } else { |
799 | | - $prev = array( 'offset' => '0', 'limit' => $limit ); |
800 | | - } |
801 | | - // Build next link |
802 | | - $templates = array(); |
803 | | - $conds = array(); |
804 | | - $conds[] = $this->indexField . '<' . $this->mDb->addQuotes( $offset ); |
805 | | - $options['ORDER BY'] = $this->indexField . ' DESC'; |
806 | | - $options['LIMIT'] = intval( $limit ) + 1; |
807 | | - $res = $dbr->select( 'cn_templates', |
808 | | - array( 'tmp_name', 'tmp_id' ), |
809 | | - $conds, |
810 | | - __METHOD__, |
811 | | - $options |
812 | | - ); |
813 | | - foreach ( $res as $row ) { |
814 | | - array_push( $templates, $row->tmp_id ); |
815 | | - } |
816 | | - if ( count( $templates ) == $limit + 1 ) { |
817 | | - end( $templates ); |
818 | | - $next = array( 'offset' => prev( $templates ), 'limit' => $limit ); |
819 | | - } else { |
820 | | - $next = false; |
821 | | - } |
822 | | - } else { |
823 | | - // No previous link needed |
824 | | - $prev = false; |
825 | | - // Build next link |
826 | | - $templates = array(); |
827 | | - $options['ORDER BY'] = $this->indexField . ' DESC'; |
828 | | - $options['LIMIT'] = intval( $limit ) + 1; |
829 | | - $res = $dbr->select( 'cn_templates', |
830 | | - array( 'tmp_name', 'tmp_id' ), |
831 | | - '', |
832 | | - __METHOD__, |
833 | | - $options |
834 | | - ); |
835 | | - while ( $row = $dbr->fetchObject( $res ) ) { |
836 | | - array_push( $templates, $row->tmp_id ); |
837 | | - } |
838 | | - if ( count( $templates ) == $limit + 1 ) { |
839 | | - end( $templates ); |
840 | | - $next = array( 'offset' => prev( $templates ), 'limit' => $limit ); |
841 | | - } else { |
842 | | - $next = false; |
843 | | - } |
844 | | - } |
845 | | - return array( 'prev' => $prev, 'next' => $next ); |
846 | | - } |
847 | | - |
848 | | - /** |
849 | | - * Get paging links. If a link is disabled, the item from $disabledTexts |
850 | | - * will be used. If there is no such item, the unlinked text from |
851 | | - * $linkTexts will be used. Both $linkTexts and $disabledTexts are arrays |
852 | | - * of HTML. |
853 | | - */ |
854 | | - function getPagingLinks( $linkTexts, $offset, $limit, $disabledTexts = array() ) { |
855 | | - $queries = $this->getPagingQueries( $offset, $limit ); |
856 | | - $links = array(); |
857 | | - foreach ( $queries as $type => $query ) { |
858 | | - if ( $query !== false ) { |
859 | | - $links[$type] = $this->makeLink( $linkTexts[$type], $queries[$type], $type ); |
860 | | - } elseif ( isset( $disabledTexts[$type] ) ) { |
861 | | - $links[$type] = $disabledTexts[$type]; |
862 | | - } else { |
863 | | - $links[$type] = $linkTexts[$type]; |
864 | | - } |
865 | | - } |
866 | | - return $links; |
867 | | - } |
868 | | - |
869 | | - /** |
870 | | - * Get limit links, i.e. the links that change the query limit. This list |
871 | | - * is based on the limitsShown array. |
872 | | - */ |
873 | | - function getLimitLinks() { |
874 | | - global $wgLang; |
875 | | - $links = array(); |
876 | | - $offset = $this->mOffset; |
877 | | - foreach ( $this->limitsShown as $limit ) { |
878 | | - $links[] = $this->makeLink( |
879 | | - $wgLang->formatNum( $limit ), |
880 | | - array( 'offset' => $offset, 'limit' => $limit ), |
881 | | - 'num' |
882 | | - ); |
883 | | - } |
884 | | - return $links; |
885 | | - } |
886 | | - |
887 | | - /** |
888 | | - * Make a self-link |
889 | | - */ |
890 | | - function makeLink($text, $query = null, $type=null) { |
891 | | - if ( $query === null ) { |
892 | | - return $text; |
893 | | - } |
894 | | - |
895 | | - $attrs = array(); |
896 | | - if( in_array( $type, array( 'first', 'prev', 'next', 'last' ) ) ) { |
897 | | - # HTML5 rel attributes |
898 | | - $attrs['rel'] = $type; |
899 | | - } |
900 | | - |
901 | | - if( $type ) { |
902 | | - $attrs['class'] = "mw-{$type}link"; |
903 | | - } |
904 | | - return $this->getSkin()->link( $this->getTitle(), $text, |
905 | | - $attrs, $query + $this->getDefaultQuery(), array('noclasses','known') ); |
906 | | - } |
907 | | - |
908 | | - /** |
909 | | - * Set the offset from an other source than $wgRequest |
910 | | - */ |
911 | | - function setOffset( $offset ) { |
912 | | - $this->mOffset = $offset; |
913 | | - } |
914 | | - /** |
915 | | - * Set the limit from an other source than $wgRequest |
916 | | - */ |
917 | | - function setLimit( $limit ) { |
918 | | - $this->mLimit = $limit; |
919 | | - } |
920 | | - |
921 | | - /** |
922 | | - * Get the current skin. This can be overridden if necessary. |
923 | | - */ |
924 | | - function getSkin() { |
925 | | - if ( !isset( $this->mSkin ) ) { |
926 | | - global $wgUser; |
927 | | - $this->mSkin = $wgUser->getSkin(); |
928 | | - } |
929 | | - return $this->mSkin; |
930 | | - } |
931 | | - |
932 | | - /** |
933 | | - * Get an array of query parameters that should be put into self-links. |
934 | | - * By default, all parameters passed in the URL are used, except for a |
935 | | - * short blacklist. |
936 | | - */ |
937 | | - function getDefaultQuery() { |
938 | | - if ( !isset( $this->mDefaultQuery ) ) { |
939 | | - $this->mDefaultQuery = $_GET; |
940 | | - unset( $this->mDefaultQuery['title'] ); |
941 | | - unset( $this->mDefaultQuery['offset'] ); |
942 | | - unset( $this->mDefaultQuery['limit'] ); |
943 | | - } |
944 | | - return $this->mDefaultQuery; |
945 | | - } |
946 | | - |
947 | | - /* End methods copied from Pager class */ |
948 | | - |
949 | | -} |
\ No newline at end of file |
| 811 | +} |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.db.php |
— | — | @@ -10,9 +10,6 @@ |
11 | 11 | /* Functions */ |
12 | 12 | |
13 | 13 | function CentralNoticeDB() { |
14 | | - // Register special page |
15 | | - SpecialPage::SpecialPage( 'CentralNotice' ); |
16 | | - |
17 | 14 | // Internationalization |
18 | 15 | wfLoadExtensionMessages( 'CentralNotice' ); |
19 | 16 | } |
— | — | @@ -21,19 +18,29 @@ |
22 | 19 | * Return notices in the system within given constraints |
23 | 20 | * Optional: return both enabled and disabled notices |
24 | 21 | */ |
25 | | - public function getNotices( $project = false, $language = false , $date = false , $enabled = true, $preferred = false ) { |
| 22 | + public function getNotices( $project = false, $language = false, $date = false, $enabled = true, $preferred = false ) { |
26 | 23 | // Database setup |
27 | 24 | $dbr = wfGetDB( DB_SLAVE ); |
| 25 | + |
| 26 | + $tables[] = "cn_notices"; |
| 27 | + if ( $language ) { |
| 28 | + $tables[] = "cn_notice_languages"; |
| 29 | + } |
28 | 30 | |
29 | 31 | // Use whatever conditional arguments got passed in |
30 | | - if ( $project ) |
| 32 | + if ( $project ) { |
31 | 33 | $conds[] = "not_project =" . $dbr->addQuotes( $project ); |
32 | | - if ( $language ) |
33 | | - $conds[] = "not_language =" . $dbr->addQuotes( $language ); |
34 | | - if ( $preferred ) |
| 34 | + } |
| 35 | + if ( $language ) { |
| 36 | + $conds[] = "nl_notice_id = cn_notices.not_id"; |
| 37 | + $conds[] = "nl_language =" . $dbr->addQuotes( $language ); |
| 38 | + } |
| 39 | + if ( $preferred ) { |
35 | 40 | $conds[] = "not_preferred = 1"; |
36 | | - if ( !$date ) |
| 41 | + } |
| 42 | + if ( !$date ) { |
37 | 43 | $date = $dbr->timestamp(); |
| 44 | + } |
38 | 45 | |
39 | 46 | $conds[] = ( $date ) ? "not_start <= " . $dbr->addQuotes( $date ) : "not_start <= " . $dbr->addQuotes( $dbr->timestamp( $date ) ); |
40 | 47 | $conds[] = ( $date ) ? "not_end >= " . $dbr->addQuotes( $date ) : "not_end >= " . $dbr->addQuotes( $dbr->timestamp( $date ) ); |
— | — | @@ -41,21 +48,19 @@ |
42 | 49 | |
43 | 50 | // Pull db data |
44 | 51 | $res = $dbr->select( |
| 52 | + $tables, |
45 | 53 | array( |
46 | | - 'cn_notices', |
47 | | - ), |
48 | | - array( |
49 | 54 | 'not_name', |
50 | 55 | 'not_project', |
51 | | - 'not_language', |
52 | 56 | 'not_locked', |
53 | 57 | 'not_enabled', |
54 | | - 'not_preferred', |
| 58 | + 'not_preferred' |
55 | 59 | ), |
56 | 60 | $conds, |
57 | 61 | __METHOD__ |
58 | 62 | ); |
59 | 63 | |
| 64 | + // If no matching notices, return NULL |
60 | 65 | if ( $dbr->numRows( $res ) < 1 ) { |
61 | 66 | return; |
62 | 67 | } |
— | — | @@ -65,7 +70,6 @@ |
66 | 71 | while ( $row = $dbr->fetchObject( $res ) ) { |
67 | 72 | $notice = $row->not_name; |
68 | 73 | $notices[$notice]['project'] = $row->not_project; |
69 | | - $notices[$notice]['language'] = $row->not_language; |
70 | 74 | $notices[$notice]['preferred'] = $row->not_preferred; |
71 | 75 | $notices[$notice]['locked'] = $row->not_locked; |
72 | 76 | $notices[$notice]['enabled'] = $row->not_enabled; |
— | — | @@ -75,7 +79,7 @@ |
76 | 80 | } |
77 | 81 | |
78 | 82 | /* |
79 | | - * Given a notice return all templates bound to it |
| 83 | + * Given a notice return all banners bound to it |
80 | 84 | */ |
81 | 85 | public function selectTemplatesAssigned( $notice ) { |
82 | 86 | $dbr = wfGetDB( DB_SLAVE ); |
— | — | @@ -88,8 +92,10 @@ |
89 | 93 | 'cn_templates' |
90 | 94 | ), |
91 | 95 | array( |
92 | | - 'cn_templates.tmp_name', |
| 96 | + 'tmp_name', |
93 | 97 | 'SUM(tmp_weight) AS total_weight', |
| 98 | + 'tmp_display_anon', |
| 99 | + 'tmp_display_account' |
94 | 100 | ), |
95 | 101 | array( |
96 | 102 | 'cn_notices.not_name' => $notice, |
— | — | @@ -101,13 +107,16 @@ |
102 | 108 | 'GROUP BY' => 'tmp_name' |
103 | 109 | ) |
104 | 110 | ); |
105 | | - $templateWeights = array(); |
| 111 | + $templates = array(); |
106 | 112 | foreach ( $res as $row ) { |
107 | | - $name = $row->tmp_name; |
108 | | - $weight = intval( $row->total_weight ); |
109 | | - $templateWeights[$name] = $weight; |
| 113 | + $template = array(); |
| 114 | + $template['name'] = $row->tmp_name; |
| 115 | + $template['weight'] = intval( $row->total_weight ); |
| 116 | + $template['display_anon'] = intval( $row->tmp_display_anon ); |
| 117 | + $template['display_account'] = intval( $row->tmp_display_account ); |
| 118 | + $templates[] = $template; |
110 | 119 | } |
111 | | - return $templateWeights; |
| 120 | + return $templates; |
112 | 121 | } |
113 | 122 | |
114 | 123 | public function updatePreferred( $notice, $preferred ) { |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/centralnotice.js |
— | — | @@ -0,0 +1,45 @@ |
| 2 | +function selectLanguages(selectAll) { |
| 3 | + var selectBox = document.getElementById('project_languages[]'); |
| 4 | + var firstSelect = selectBox.options.length - 1; |
| 5 | + for (var i = firstSelect; i >= 0; i--) { |
| 6 | + selectBox.options[i].selected = selectAll; |
| 7 | + } |
| 8 | +} |
| 9 | +function top10Languages() { |
| 10 | + var selectBox = document.getElementById('project_languages[]'); |
| 11 | + var top10 = new Array('en','de','fr','it','pt','ja','es','pl','ru','nl'); |
| 12 | + selectLanguages(false); |
| 13 | + for (var i = 0; i < selectBox.options.length; i++) { |
| 14 | + var lang = selectBox.options[i].value; |
| 15 | + if (top10.toString().indexOf(lang)!==-1) { |
| 16 | + selectBox.options[i].selected = true; |
| 17 | + } |
| 18 | + } |
| 19 | +} |
| 20 | +function insertButton( buttonType ) { |
| 21 | + var bannerField = document.getElementById('templateBody'); |
| 22 | + switch( buttonType ) { |
| 23 | + case 'translate': |
| 24 | + var buttonValue = '[<a href="http://meta.wikimedia.org/wiki/CentralNotice">{{int:centralnotice-shared-help-translate}}</a>]'; |
| 25 | + break; |
| 26 | + case 'hide': |
| 27 | + var buttonValue = '[<a href="#" onclick="toggleNotice();return false">{{int:centralnotice-shared-hide}}</a>]'; |
| 28 | + break; |
| 29 | + } |
| 30 | + if (document.selection) { |
| 31 | + // IE support |
| 32 | + bannerField.focus(); |
| 33 | + sel = document.selection.createRange(); |
| 34 | + sel.text = buttonValue; |
| 35 | + } else if (bannerField.selectionStart || bannerField.selectionStart == '0') { |
| 36 | + // Mozilla support |
| 37 | + var startPos = bannerField.selectionStart; |
| 38 | + var endPos = bannerField.selectionEnd; |
| 39 | + bannerField.value = bannerField.value.substring(0, startPos) |
| 40 | + + buttonValue |
| 41 | + + bannerField.value.substring(endPos, bannerField.value.length); |
| 42 | + } else { |
| 43 | + bannerField.value += buttonValue; |
| 44 | + } |
| 45 | + bannerField.focus(); |
| 46 | +} |
\ No newline at end of file |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice/centralnotice.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 47 | + native |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/CentralNotice.alias.php |
— | — | @@ -9,26 +9,69 @@ |
10 | 10 | 'CentralNotice' => array( 'CentralNotice' ), |
11 | 11 | 'NoticeText' => array( 'NoticeText' ), |
12 | 12 | 'NoticeTemplate' => array( 'NoticeTemplate' ), |
| 13 | + 'NoticeLocal' => array( 'NoticeLocal' ), |
13 | 14 | ); |
14 | 15 | |
15 | | -/** Arabic (العربية) */ |
16 | 16 | $aliases['ar'] = array( |
17 | | - 'CentralNotice' => array( 'ملاحظة_مركزية' ), |
18 | | - 'NoticeText' => array( 'نص_الملاحظة' ), |
19 | | - 'NoticeTemplate' => array( 'قالب_الملاحظة' ), |
| 17 | + 'CentralNotice' => array( 'ملاحظة_مركزية' ), |
| 18 | + 'NoticeText' => array( 'نص_الملاحظة' ), |
| 19 | + 'NoticeTemplate' => array( 'قالب_الملاحظة' ), |
20 | 20 | ); |
21 | 21 | |
22 | | -/** Japanese (日本語) */ |
| 22 | +$aliases['arz'] = array( |
| 23 | + 'CentralNotice' => array( 'ملاحظة_مركزية' ), |
| 24 | + 'NoticeText' => array( 'نص_الملاحظة' ), |
| 25 | + 'NoticeTemplate' => array( 'قالب_الملاحظة' ), |
| 26 | +); |
| 27 | + |
| 28 | +$aliases['fa'] = array( |
| 29 | + 'CentralNotice' => array( 'اعلامیه_مرکزی' ), |
| 30 | + 'NoticeText' => array( 'متن_اعلامیه' ), |
| 31 | + 'NoticeTemplate' => array( 'الگوی_اعلامیه' ), |
| 32 | + 'NoticeLocal' => array( 'اعلامیه_محلی' ), |
| 33 | +); |
| 34 | + |
23 | 35 | $aliases['ja'] = array( |
24 | | - 'CentralNotice' => array( '中央管理通知' ), |
25 | | - 'NoticeText' => array( '通知文' ), |
26 | | - 'NoticeTemplate' => array( '通知テンプレート' ), |
| 36 | + 'CentralNotice' => array( '中央管理通知' ), |
| 37 | + 'NoticeText' => array( '通知文' ), |
| 38 | + 'NoticeTemplate' => array( '通知テンプレート' ), |
27 | 39 | ); |
28 | 40 | |
29 | | -/** Malayalam (മലയാളം) */ |
| 41 | +$aliases['lad'] = array( |
| 42 | + 'CentralNotice' => array( 'AvisoCentral' ), |
| 43 | + 'NoticeText' => array( 'Teksto_de_aviso' ), |
| 44 | + 'NoticeTemplate' => array( 'Xabblón_de_aviso' ), |
| 45 | + 'NoticeLocal' => array( 'AvisoLocal' ), |
| 46 | +); |
| 47 | + |
30 | 48 | $aliases['ml'] = array( |
31 | | - 'CentralNotice' => array( 'കേന്ദ്രീകൃതഅറിയിപ്പ്' ), |
32 | | - 'NoticeText' => array( 'അറിയിപ്പ്എഴുത്ത്' ), |
33 | | - 'NoticeTemplate' => array( 'അറിയിപ്പ്ഫലകം' ), |
| 49 | + 'CentralNotice' => array( 'കേന്ദ്രീകൃതഅറിയിപ്പ്' ), |
| 50 | + 'NoticeText' => array( 'അറിയിപ്പ്എഴുത്ത്' ), |
| 51 | + 'NoticeTemplate' => array( 'അറിയിപ്പ്ഫലകം' ), |
| 52 | + 'NoticeLocal' => array( 'പ്രാദേശികഅറിയിപ്പ്' ), |
34 | 53 | ); |
35 | 54 | |
| 55 | +$aliases['nn'] = array( |
| 56 | + 'CentralNotice' => array( 'Sentralmerknad' ), |
| 57 | + 'NoticeText' => array( 'Merknadstekst' ), |
| 58 | + 'NoticeTemplate' => array( 'Merknadsmal' ), |
| 59 | +); |
| 60 | + |
| 61 | +$aliases['no'] = array( |
| 62 | + 'CentralNotice' => array( 'Sentralnotis' ), |
| 63 | + 'NoticeText' => array( 'Notistekst' ), |
| 64 | + 'NoticeTemplate' => array( 'Notismal' ), |
| 65 | +); |
| 66 | + |
| 67 | +$aliases['pl'] = array( |
| 68 | + 'CentralNotice' => array( 'Globalny_komunikat' ), |
| 69 | + 'NoticeText' => array( 'Treść_komunikatu' ), |
| 70 | + 'NoticeTemplate' => array( 'Szablon_komunikatu' ), |
| 71 | +); |
| 72 | + |
| 73 | +$aliases['zh-hant'] = array( |
| 74 | + 'CentralNotice' => array( '中央通告' ), |
| 75 | + 'NoticeText' => array( '通告內文' ), |
| 76 | + 'NoticeTemplate' => array( '通告模板' ), |
| 77 | + 'NoticeLocal' => array( '本地化通告' ), |
| 78 | +); |
Index: branches/wmf/1.16wmf4/extensions/CentralNotice/SpecialNoticeText.php |
— | — | @@ -1,11 +1,17 @@ |
2 | 2 | <?php |
3 | 3 | |
| 4 | +/** |
| 5 | + * Generates content for static Javascript files |
| 6 | + */ |
4 | 7 | class SpecialNoticeText extends NoticePage { |
5 | 8 | var $project = 'wikipedia'; |
6 | 9 | var $language = 'en'; |
| 10 | + var $centralNoticeDB; |
7 | 11 | |
8 | 12 | function __construct() { |
9 | 13 | parent::__construct( "NoticeText" ); |
| 14 | + |
| 15 | + $this->centralNoticeDB = new CentralNoticeDB(); |
10 | 16 | } |
11 | 17 | |
12 | 18 | /** |
— | — | @@ -18,7 +24,12 @@ |
19 | 25 | return 86400 * 7; |
20 | 26 | } |
21 | 27 | |
| 28 | + /** |
| 29 | + * Given a project key, generate the body for a static Javascript file |
| 30 | + */ |
22 | 31 | function getJsOutput( $par ) { |
| 32 | + |
| 33 | + // Break $par into separate parameters and assign to $this->project and $this->language |
23 | 34 | $this->setLanguage( $par ); |
24 | 35 | |
25 | 36 | // Quick short circuit to be able to show preferred notices |
— | — | @@ -26,14 +37,14 @@ |
27 | 38 | |
28 | 39 | if ( $this->language == 'en' && $this->project != null ) { |
29 | 40 | // See if we have any preferred notices for all of en |
30 | | - $notices = CentralNoticeDB::getNotices( '', 'en', '', '', 1 ); |
| 41 | + $notices = $this->centralNoticeDB->getNotices( '', 'en', '', '', 1 ); |
31 | 42 | |
32 | 43 | if ( $notices ) { |
33 | 44 | // Pull out values |
34 | 45 | foreach ( $notices as $notice => $val ) { |
35 | 46 | // Either match against ALL project or a specific project |
36 | 47 | if ( $val['project'] == '' || $val['project'] == $this->project ) { |
37 | | - $templates = CentralNoticeDB::selectTemplatesAssigned( $notice ); |
| 48 | + $templates = $this->centralNoticeDB->selectTemplatesAssigned( $notice ); |
38 | 49 | break; |
39 | 50 | } |
40 | 51 | } |
— | — | @@ -41,16 +52,13 @@ |
42 | 53 | } |
43 | 54 | |
44 | 55 | if ( !$templates && $this->project == 'wikipedia' ) { |
45 | | - $notices = CentralNoticeDB::getNotices( 'wikipedia', '', '', '', 1 ); |
46 | | - if ( $notices && is_array( $notices ) ) { |
47 | | - foreach ( $notices as $notice => $val ) { |
48 | | - if ( $val['language'] == '' || |
49 | | - $val['language'] == $this->language ) { |
50 | | - $templates = CentralNoticeDB::selectTemplatesAssigned( $notice ); |
51 | | - break; |
52 | | - } |
53 | | - } |
| 56 | + $notices = $this->centralNoticeDB->getNotices( 'wikipedia', $this->language, '', '', 1 ); |
| 57 | + if ( $notices && is_array( $notices ) ) { |
| 58 | + foreach ( $notices as $notice => $val ) { |
| 59 | + $templates = $this->centralNoticeDB->selectTemplatesAssigned( $notice ); |
| 60 | + break; |
54 | 61 | } |
| 62 | + } |
55 | 63 | } |
56 | 64 | |
57 | 65 | // Didn't find any preferred matches so do an old style lookup |
— | — | @@ -58,7 +66,18 @@ |
59 | 67 | $templates = CentralNotice::selectNoticeTemplates( $this->project, $this->language ); |
60 | 68 | } |
61 | 69 | |
62 | | - $templateNames = array_keys( $templates ); |
| 70 | + // Slice the columns of the $templates array into separate arrays. |
| 71 | + // This is required due to how pickTemplate() currently works. |
| 72 | + $templateNames = array(); |
| 73 | + $templateWeights = array(); |
| 74 | + $templateDisplayAnons = array(); |
| 75 | + $templateDisplayAccounts = array(); |
| 76 | + foreach ( $templates as $template ) { |
| 77 | + $templateNames[] = $template['name']; |
| 78 | + $templateWeights[] = $template['weight']; |
| 79 | + $templateDisplayAnons[] = $template['display_anon']; |
| 80 | + $templateDisplayAccounts[] = $template['display_account']; |
| 81 | + } |
63 | 82 | |
64 | 83 | $templateTexts = array_map( |
65 | 84 | array( $this, 'getHtmlNotice' ), |
— | — | @@ -67,27 +86,27 @@ |
68 | 87 | if ( preg_grep( "/<centralnotice-template-\w{1,}>\z/", $templateTexts ) ) { |
69 | 88 | return false; // Bailing out if we have a failed cache lookup |
70 | 89 | } |
71 | | - |
72 | | - $weights = array_values( $templates ); |
73 | | - |
| 90 | + |
74 | 91 | return |
75 | 92 | $this->getScriptFunctions() . |
76 | 93 | $this->getToggleScripts() . |
77 | 94 | 'wgNotice=pickTemplate(' . |
78 | 95 | Xml::encodeJsVar( $templateTexts ) . |
79 | 96 | "," . |
80 | | - Xml::encodeJsVar( $weights ) . |
| 97 | + Xml::encodeJsVar( $templateWeights ) . |
| 98 | + "," . |
| 99 | + Xml::encodeJsVar( $templateDisplayAnons ) . |
| 100 | + "," . |
| 101 | + Xml::encodeJsVar( $templateDisplayAccounts ) . |
81 | 102 | ");\n" . |
82 | 103 | "if (wgNotice != '')\n" . |
83 | 104 | "wgNotice='<div id=\"centralNotice\" class=\"' + " . |
84 | 105 | "(wgNoticeToggleState ? 'expanded' : 'collapsed') + " . |
85 | | - "' ' + " . |
86 | | - "(wgUserName ? 'usernotice' : 'anonnotice' ) + " . |
87 | | - "'\">' + wgNotice+'</div>';\n"; |
| 106 | + "'\">' + wgNotice+'</div>';\n"; |
88 | 107 | } |
89 | 108 | |
90 | | - function getHtmlNotice( $noticeName ) { |
91 | | - $this->noticeName = $noticeName; |
| 109 | + function getHtmlNotice( $templateName ) { |
| 110 | + $this->templateName = $templateName; |
92 | 111 | return preg_replace_callback( |
93 | 112 | '/{{{(.*?)}}}/', |
94 | 113 | array( $this, 'getNoticeField' ), |
— | — | @@ -97,15 +116,15 @@ |
98 | 117 | function getToggleScripts() { |
99 | 118 | $showStyle = <<<END |
100 | 119 | <style type="text/css"> |
101 | | -#centralNotice .siteNoticeSmall{display:none;} |
102 | | -#centralNotice .siteNoticeSmallAnon{display:none;} |
103 | | -#centralNotice .siteNoticeSmallUser{display:none;} |
104 | | -#centralNotice.collapsed .siteNoticeBig{display:none;} |
105 | | -#centralNotice.collapsed .siteNoticeSmall{display:block;} |
106 | | -#centralNotice.collapsed .siteNoticeSmallUser{display:block;} |
107 | | -#centralNotice.collapsed .siteNoticeSmallAnon{display:block;} |
108 | | -#centralNotice.anonnotice .siteNoticeSmallUser{display:none !important;} |
109 | | -#centralNotice.usernotice .siteNoticeSmallAnon{display:none !important;} |
| 120 | +#centralNotice .siteNoticeSmall {display:none;} |
| 121 | +#centralNotice .siteNoticeSmallAnon {display:none;} |
| 122 | +#centralNotice .siteNoticeSmallUser {display:none;} |
| 123 | +#centralNotice.collapsed .siteNoticeBig {display:none;} |
| 124 | +#centralNotice.collapsed .siteNoticeSmall {display:block;} |
| 125 | +#centralNotice.collapsed .siteNoticeSmallUser {display:block;} |
| 126 | +#centralNotice.collapsed .siteNoticeSmallAnon {display:block;} |
| 127 | +#centralNotice.anonnotice .siteNoticeSmallUser {display:none !important;} |
| 128 | +#centralNotice.usernotice .siteNoticeSmallAnon {display:none !important;} |
110 | 129 | </style> |
111 | 130 | END; |
112 | 131 | $encShowStyle = Xml::encodeJsVar( $showStyle ); |
— | — | @@ -140,25 +159,27 @@ |
141 | 160 | var work='hidesnmessage='+state+'; expires=' + e.toGMTString() + '; path=/'; |
142 | 161 | document.cookie = work; |
143 | 162 | } |
144 | | -function pickTemplate(templates, weights) { |
| 163 | +function pickTemplate(templates, weights, displayAnons, displayAccounts) { |
145 | 164 | var weightedTemplates = new Array(); |
146 | 165 | var currentTemplate = 0; |
147 | 166 | var totalWeight = 0; |
148 | 167 | |
149 | 168 | if (templates.length == 0) |
150 | 169 | return ''; |
151 | | - |
| 170 | + |
152 | 171 | while (currentTemplate < templates.length) { |
153 | | - totalWeight += weights[currentTemplate]; |
154 | | - for (i=0; i<weights[currentTemplate]; i++) { |
155 | | - weightedTemplates[weightedTemplates.length] = templates[currentTemplate]; |
| 172 | + if ((wgUserName && displayAccounts[currentTemplate]) || (!wgUserName && displayAnons[currentTemplate])) { |
| 173 | + totalWeight += weights[currentTemplate]; |
| 174 | + for (var i=0; i<weights[currentTemplate]; i++) { |
| 175 | + weightedTemplates[weightedTemplates.length] = templates[currentTemplate]; |
| 176 | + } |
156 | 177 | } |
157 | 178 | currentTemplate++; |
158 | 179 | } |
159 | | - |
| 180 | + |
160 | 181 | if (totalWeight == 0) |
161 | 182 | return ''; |
162 | | - |
| 183 | + |
163 | 184 | var randomnumber=Math.floor(Math.random()*totalWeight); |
164 | 185 | return weightedTemplates[randomnumber]; |
165 | 186 | }\n\n"; |
— | — | @@ -188,7 +209,7 @@ |
189 | 210 | } |
190 | 211 | |
191 | 212 | function getNoticeTemplate() { |
192 | | - return $this->getMessage( "centralnotice-template-{$this->noticeName}" ); |
| 213 | + return $this->getMessage( "centralnotice-template-{$this->templateName}" ); |
193 | 214 | } |
194 | 215 | |
195 | 216 | function getNoticeField( $matches ) { |
— | — | @@ -197,7 +218,7 @@ |
198 | 219 | if ( $field == 'amount' ) { |
199 | 220 | $params = array( $this->formatNum( $this->getDonationAmount() ) ); |
200 | 221 | } |
201 | | - $message = "centralnotice-{$this->noticeName}-$field"; |
| 222 | + $message = "centralnotice-{$this->templateName}-$field"; |
202 | 223 | $source = $this->getMessage( $message, $params ); |
203 | 224 | return $source; |
204 | 225 | } |
— | — | @@ -227,7 +248,7 @@ |
228 | 249 | } |
229 | 250 | |
230 | 251 | private function projectName() { |
231 | | - global $wgConf, $IP; |
| 252 | + global $wgConf; |
232 | 253 | |
233 | 254 | $wgConf->loadFullData(); |
234 | 255 | |
Property changes on: branches/wmf/1.16wmf4/extensions/CentralNotice |
___________________________________________________________________ |
Modified: svn:mergeinfo |
235 | 256 | Merged /trunk/extensions/CentralNotice:r67559-71720 |