Index: branches/wmf/1.18wmf1/extensions/MoodBar/ApiQueryMoodBarComments.php |
— | — | @@ -0,0 +1,189 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +class ApiQueryMoodBarComments extends ApiQueryBase { |
| 5 | + public function __construct( $query, $moduleName ) { |
| 6 | + parent::__construct( $query, $moduleName, 'mbc' ); |
| 7 | + } |
| 8 | + |
| 9 | + public function execute() { |
| 10 | + global $wgLang, $wgUser; |
| 11 | + $params = $this->extractRequestParams(); |
| 12 | + $prop = array_flip( $params['prop'] ); |
| 13 | + |
| 14 | + // Build the query |
| 15 | + $this->addTables( array( 'moodbar_feedback', 'user' ) ); |
| 16 | + $this->addJoinConds( array( 'user' => array( 'LEFT JOIN', 'user_id=mbf_user_id' ) ) ); |
| 17 | + $this->addFields( array( 'user_name', 'mbf_id', 'mbf_type', 'mbf_timestamp', 'mbf_user_id', 'mbf_user_ip', |
| 18 | + 'mbf_comment', 'mbf_hidden_state' ) ); |
| 19 | + if ( count( $params['type'] ) ) { |
| 20 | + $this->addWhereFld( 'mbf_type', $params['type'] ); |
| 21 | + } |
| 22 | + if ( $params['user'] !== null ) { |
| 23 | + $user = User::newFromName( $params['user'] ); // returns false for IPs |
| 24 | + if ( !$user || $user->isAnon() ) { |
| 25 | + $this->addWhereFld( 'mbf_user_id', 0 ); |
| 26 | + $this->addWhereFld( 'mbf_user_ip', $params['user'] ); |
| 27 | + } else { |
| 28 | + $this->addWhereFld( 'mbf_user_id', $user->getID() ); |
| 29 | + $this->addWhere( 'mbf_user_ip IS NULL' ); |
| 30 | + } |
| 31 | + } |
| 32 | + |
| 33 | + if ( $params['continue'] !== null ) { |
| 34 | + $this->applyContinue( $params['continue'], $params['dir'] == 'older' ); |
| 35 | + } |
| 36 | + |
| 37 | + // Add ORDER BY mbf_timestamp {ASC|DESC}, mbf_id {ASC|DESC} |
| 38 | + $this->addWhereRange( 'mbf_timestamp', $params['dir'], null, null ); |
| 39 | + $this->addWhereRange( 'mbf_id', $params['dir'], null, null ); |
| 40 | + $this->addOption( 'LIMIT', $params['limit'] + 1 ); |
| 41 | + |
| 42 | + if ( ! $wgUser->isAllowed( 'moodbar-admin' ) ) { |
| 43 | + $this->addWhereFld( 'mbf_hidden_state', 0 ); |
| 44 | + } |
| 45 | + |
| 46 | + $res = $this->select( __METHOD__ ); |
| 47 | + $result = $this->getResult(); |
| 48 | + $count = 0; |
| 49 | + foreach ( $res as $row ) { |
| 50 | + if ( ++$count > $params['limit'] ) { |
| 51 | + // We've reached the one extra which shows that there are additional rows. Stop here |
| 52 | + $this->setContinueEnumParameter( 'continue', $this->getContinue( $row ) ); |
| 53 | + break; |
| 54 | + } |
| 55 | + |
| 56 | + $vals = $this->extractRowInfo( $row, $prop ); |
| 57 | + $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals ); |
| 58 | + if ( !$fit ) { |
| 59 | + $this->setContinueEnumParameter( 'continue', $this->getContinue( $row ) ); |
| 60 | + break; |
| 61 | + } |
| 62 | + } |
| 63 | + $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'comment' ); |
| 64 | + } |
| 65 | + |
| 66 | + protected function getContinue( $row ) { |
| 67 | + $ts = wfTimestamp( TS_MW, $row->mbf_timestamp ); |
| 68 | + return "$ts|{$row->mbf_id}"; |
| 69 | + } |
| 70 | + |
| 71 | + protected function applyContinue( $continue, $sortDesc ) { |
| 72 | + $vals = explode( '|', $continue, 3 ); |
| 73 | + if ( count( $vals ) !== 2 ) { |
| 74 | + // TODO this should be a standard message in ApiBase |
| 75 | + $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', 'badcontinue' ); |
| 76 | + } |
| 77 | + |
| 78 | + $db = $this->getDB(); |
| 79 | + $ts = $db->addQuotes( $db->timestamp( $vals[0] ) ); |
| 80 | + $id = intval( $vals[1] ); |
| 81 | + $op = $sortDesc ? '<' : '>'; |
| 82 | + // TODO there should be a standard way to do this in DatabaseBase or ApiQueryBase something |
| 83 | + $this->addWhere( "mbf_timestamp $op $ts OR " . |
| 84 | + "(mbf_timestamp = $ts AND " . |
| 85 | + "mbf_id $op= $id)" |
| 86 | + ); |
| 87 | + } |
| 88 | + |
| 89 | + protected function extractRowInfo( $row, $prop ) { |
| 90 | + global $wgUser; |
| 91 | + |
| 92 | + $r = array(); |
| 93 | + |
| 94 | + $showHidden = isset($prop['hidden']) && $wgUser->isAllowed('moodbar-admin'); |
| 95 | + $isHidden = $row->mbf_hidden_state > 0; |
| 96 | + |
| 97 | + if ( isset( $prop['metadata'] ) ) { |
| 98 | + $r += array( |
| 99 | + 'id' => intval( $row->mbf_id ), |
| 100 | + 'type' => $row->mbf_type, |
| 101 | + 'timestamp' => wfTimestamp( TS_ISO_8601, $row->mbf_timestamp ), |
| 102 | + 'userid' => intval( $row->mbf_user_id ), |
| 103 | + 'username' => $row->mbf_user_ip === null ? $row->user_name : $row->mbf_user_ip, |
| 104 | + ); |
| 105 | + ApiResult::setContent( $r, $row->mbf_comment ); |
| 106 | + } |
| 107 | + if ( isset( $prop['formatted'] ) ) { |
| 108 | + $params = array(); |
| 109 | + |
| 110 | + if ( $wgUser->isAllowed( 'moodbar-admin' ) ) { |
| 111 | + $params[] = 'admin'; |
| 112 | + } |
| 113 | + |
| 114 | + if ( $isHidden && $showHidden ) { |
| 115 | + $params[] = 'show-anyway'; |
| 116 | + } |
| 117 | + |
| 118 | + $r['formatted'] = SpecialFeedbackDashboard::formatListItem( $row, $params ); |
| 119 | + } |
| 120 | + |
| 121 | + if ( $isHidden && !$showHidden ) { |
| 122 | + unset($r['userid']); |
| 123 | + unset($r['username']); |
| 124 | + unset($r['type']); |
| 125 | + ApiResult::setContent( $r, '' ); |
| 126 | + $r['hidden'] = true; |
| 127 | + } |
| 128 | + |
| 129 | + return $r; |
| 130 | + } |
| 131 | + |
| 132 | + public function getAllowedParams() { |
| 133 | + return array( |
| 134 | + 'limit' => array( |
| 135 | + ApiBase::PARAM_DFLT => 10, |
| 136 | + ApiBase::PARAM_TYPE => 'limit', |
| 137 | + ApiBase::PARAM_MIN => 1, |
| 138 | + ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1, |
| 139 | + ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2 |
| 140 | + ), |
| 141 | + 'dir' => array( |
| 142 | + ApiBase::PARAM_DFLT => 'older', |
| 143 | + ApiBase::PARAM_TYPE => array( |
| 144 | + 'newer', |
| 145 | + 'older' |
| 146 | + ) |
| 147 | + ), |
| 148 | + 'continue' => null, |
| 149 | + 'type' => array( |
| 150 | + ApiBase::PARAM_TYPE => MBFeedbackItem::getValidTypes(), |
| 151 | + ApiBase::PARAM_ISMULTI => true, |
| 152 | + ApiBase::PARAM_DFLT => '', // all |
| 153 | + ), |
| 154 | + 'user' => array( |
| 155 | + ApiBase::PARAM_TYPE => 'user', |
| 156 | + ), |
| 157 | + 'prop' => array( |
| 158 | + ApiBase::PARAM_TYPE => array( 'metadata', 'formatted', 'hidden' ), |
| 159 | + ApiBase::PARAM_DFLT => 'metadata', |
| 160 | + ApiBase::PARAM_ISMULTI => true, |
| 161 | + ), |
| 162 | + ); |
| 163 | + } |
| 164 | + |
| 165 | + public function getVersion() { |
| 166 | + return __CLASS__ . ': $Id$'; |
| 167 | + } |
| 168 | + |
| 169 | + public function getParamDescription() { |
| 170 | + return array( |
| 171 | + 'limit' => 'How many comments to return', |
| 172 | + 'continue' => 'When more results are available, use this to continue', |
| 173 | + 'type' => 'Only return comments of the given type(s). If not set or empty, return all comments', |
| 174 | + 'user' => 'Only return comments submitted by the given user', |
| 175 | + 'prop' => array( 'Which properties to get:', |
| 176 | + ' metadata - Comment ID, type, timestamp, user', |
| 177 | + ' formatted - HTML that would be displayed for this comment on Special:MoodBarFeedback', |
| 178 | + ' hidden - Format the full HTML even if comments are hidden', |
| 179 | + ), |
| 180 | + ); |
| 181 | + } |
| 182 | + |
| 183 | + public function getDescription() { |
| 184 | + return 'List all feedback comments submitted through the MoodBar extension.'; |
| 185 | + } |
| 186 | + |
| 187 | + public function getCacheMode( $params ) { |
| 188 | + return isset($params['prop']['hidden']) ? 'private' : 'public'; |
| 189 | + } |
| 190 | +} |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/ApiQueryMoodBarComments.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 191 | + native |
Added: svn:keywords |
2 | 192 | + Id |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/MoodBar.sql |
— | — | @@ -16,6 +16,9 @@ |
17 | 17 | mbf_comment varchar(255) binary, |
18 | 18 | |
19 | 19 | -- Options and context |
| 20 | + -- Whether or not the feedback item is hidden |
| 21 | + -- 0 = No; 255 = Yes (other values reserved for partial hiding) |
| 22 | + mbf_hidden_state tinyint unsigned not null default 0, |
20 | 23 | mbf_anonymous tinyint unsigned not null default 0, -- Anonymity |
21 | 24 | mbf_timestamp varchar(14) binary not null, -- When feedback was received |
22 | 25 | mbf_system_type varchar(64) binary null, -- Operating System |
— | — | @@ -23,8 +26,12 @@ |
24 | 27 | mbf_locale varchar(32) binary null, -- The locale of the user's browser |
25 | 28 | mbf_editing tinyint unsigned not null, -- Whether or not the user was editing |
26 | 29 | mbf_bucket varchar(128) binary null -- Bucket, for A/B testing |
27 | | -) /*$wgDBtableOptions*/; |
| 30 | +) /*$wgDBTableOptions*/; |
28 | 31 | |
29 | 32 | -- A little overboard with the indexes perhaps, but we want to be able to dice this data a lot! |
30 | | -CREATE INDEX /*i*/type_timestamp ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp); |
31 | | -CREATE INDEX /*i*/title_type ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp); |
| 33 | +CREATE INDEX /*i*/mbf_type_timestamp_id ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp, mbf_id); |
| 34 | +CREATE INDEX /*i*/mbf_title_type_id ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp, mbf_id); |
| 35 | +-- CREATE INDEX /*i*/mbf_namespace_title_timestamp ON /*_*/moodbar_feedback (mbf_namespace, mbf_title, mbf_timestamp, mbf_id); --maybe in the future if we actually do per-page filtering |
| 36 | +CREATE INDEX /*i*/mbf_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id); |
| 37 | +CREATE INDEX /*i*/mbf_type_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_type, mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id); |
| 38 | +CREATE INDEX /*i*/mbf_timestamp_id ON /*_*/moodbar_feedback (mbf_timestamp, mbf_id); |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_timestamp_id.sql |
— | — | @@ -0,0 +1,5 @@ |
| 2 | +-- Add some indexes to the moodbar_feedback table |
| 3 | + |
| 4 | +CREATE INDEX /*i*/mbf_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id); |
| 5 | +CREATE INDEX /*i*/mbf_type_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_type, mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id); |
| 6 | +CREATE INDEX /*i*/mbf_timestamp_id ON /*_*/moodbar_feedback (mbf_timestamp, mbf_id); |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_timestamp_id.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 7 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes.sql |
— | — | @@ -0,0 +1,5 @@ |
| 2 | +-- Drop and recreate indexes to add mbf_id to the end |
| 3 | +DROP INDEX /*i*/type_timestamp ON /*_*/moodbar_feedback; |
| 4 | +DROP INDEX /*i*/title_type ON /*_*/moodbar_feedback; |
| 5 | +CREATE INDEX /*i*/mbf_type_timestamp_id ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp, mbf_id); |
| 6 | +CREATE INDEX /*i*/mbf_title_type_id ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp, mbf_id); |
\ No newline at end of file |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 7 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes2.sql |
— | — | @@ -0,0 +1,5 @@ |
| 2 | +-- Drop and recreate indexes to add mbf_id to the end |
| 3 | +DROP INDEX /*i*/mbf_userid_ip_timestamp ON /*_*/moodbar_feedback; |
| 4 | +DROP INDEX /*i*/mbf_type_userid_ip_timestamp ON /*_*/moodbar_feedback; |
| 5 | +DROP INDEX /*i*/mbf_timestamp ON /*_*/moodbar_feedback; |
| 6 | +-- Recreation is done in mbf_timestamp_id.sql |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes2.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 7 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_hidden_state.sql |
— | — | @@ -0,0 +1,4 @@ |
| 2 | +-- Adds the mbf_hidden_state field to the moodbar_feedback table, for |
| 3 | +-- hiding feedback from public view. |
| 4 | +-- Andrew Garrett, 2011-10-07 |
| 5 | +ALTER TABLE /*_*/moodbar_feedback ADD COLUMN mbf_hidden_state tinyint unsigned not null default 0; |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_hidden_state.sql |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 6 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.alias.php |
— | — | @@ -0,0 +1,15 @@ |
| 2 | +<?php |
| 3 | +/** |
| 4 | + * Aliases for Special:Gadgets |
| 5 | + * |
| 6 | + * @file |
| 7 | + * @ingroup Extensions |
| 8 | + */ |
| 9 | + |
| 10 | +$specialPageAliases = array(); |
| 11 | + |
| 12 | +/** English (English) */ |
| 13 | +$specialPageAliases['en'] = array( |
| 14 | + 'MoodBar' => array( 'MoodBar' ), |
| 15 | + 'FeedbackDashboard' => array( 'FeedbackDashboard' ), |
| 16 | +); |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.alias.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 17 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php |
— | — | @@ -0,0 +1,490 @@ |
| 2 | +<?php |
| 3 | +/** |
| 4 | + * Special:FeedbackDashboard. Special page for viewing moodbar comments. |
| 5 | + */ |
| 6 | +class SpecialFeedbackDashboard extends SpecialPage { |
| 7 | + protected $showHidden = false; |
| 8 | + protected $action = false; |
| 9 | + |
| 10 | + public function __construct() { |
| 11 | + parent::__construct( 'FeedbackDashboard' ); |
| 12 | + } |
| 13 | + |
| 14 | + public function getDescription() { |
| 15 | + return wfMessage( 'moodbar-feedback-title' )->plain(); |
| 16 | + } |
| 17 | + |
| 18 | + public function execute( $par ) { |
| 19 | + global $wgOut, $wgRequest; |
| 20 | + |
| 21 | + $limit = 20; |
| 22 | + $offset = false; |
| 23 | + $filterType = ''; |
| 24 | + $id = intval( $par ); |
| 25 | + if ( $id > 0 ) { |
| 26 | + // Special:FeedbackDashboard/123 is an ID/permalink view |
| 27 | + $filters = array( 'id' => $id ); |
| 28 | + $filterType = 'id'; |
| 29 | + if ( $wgRequest->getCheck( 'show-feedback' ) ) { |
| 30 | + $this->showHidden = true; |
| 31 | + } |
| 32 | + |
| 33 | + if ( $wgRequest->getCheck( 'restore-feedback' ) ) { |
| 34 | + $this->action = 'restore'; |
| 35 | + } elseif ( $wgRequest->getCheck( 'hide-feedback' ) ) { |
| 36 | + $this->action = 'hide'; |
| 37 | + } |
| 38 | + } else { |
| 39 | + // Determine filters and offset from the query string |
| 40 | + $filters = array(); |
| 41 | + $type = $wgRequest->getArray( 'type' ); |
| 42 | + if ( $type ) { |
| 43 | + $filters['type'] = $type; |
| 44 | + } |
| 45 | + $username = strval( $wgRequest->getVal( 'username' ) ); |
| 46 | + if ( $username !== '' ) { |
| 47 | + $filters['username'] = $username; |
| 48 | + } |
| 49 | + $offset = $wgRequest->getVal( 'offset', $offset ); |
| 50 | + if ( count( $filters ) ) { |
| 51 | + $filterType = 'filtered'; |
| 52 | + } |
| 53 | + } |
| 54 | + // Do the query |
| 55 | + $backwards = $wgRequest->getVal( 'dir' ) === 'prev'; |
| 56 | + $res = $this->doQuery( $filters, $limit, $offset, $backwards ); |
| 57 | + |
| 58 | + // Output HTML |
| 59 | + $wgOut->setPageTitle( wfMsg( 'moodbar-feedback-title' ) ); |
| 60 | + $wgOut->addHTML( $this->buildForm( $filterType ) ); |
| 61 | + $wgOut->addHTML( $this->buildList( $res ) ); |
| 62 | + $wgOut->addModuleStyles( 'ext.moodBar.dashboard.styles' ); |
| 63 | + $wgOut->addModules( 'ext.moodBar.dashboard' ); |
| 64 | + } |
| 65 | + |
| 66 | + /** |
| 67 | + * Build the filter form. The state of each form element is preserved |
| 68 | + * using data in $wgRequest. |
| 69 | + * @param $filterType string Value to pass in the <form>'s data-filtertype attribute |
| 70 | + * @return string HTML |
| 71 | + */ |
| 72 | + public function buildForm( $filterType ) { |
| 73 | + global $wgRequest, $wgMoodBarConfig; |
| 74 | + $filtersMsg = wfMessage( 'moodbar-feedback-filters' )->escaped(); |
| 75 | + $typeMsg = wfMessage( 'moodbar-feedback-filters-type' )->escaped(); |
| 76 | + $praiseMsg = wfMessage( 'moodbar-feedback-filters-type-happy' )->escaped(); |
| 77 | + $confusionMsg = wfMessage( 'moodbar-feedback-filters-type-confused' )->escaped(); |
| 78 | + $issuesMsg = wfMessage( 'moodbar-feedback-filters-type-sad' )->escaped(); |
| 79 | + $usernameMsg = wfMessage( 'moodbar-feedback-filters-username' )->escaped(); |
| 80 | + $setFiltersMsg = wfMessage( 'moodbar-feedback-filters-button' )->escaped(); |
| 81 | + $whatIsMsg = wfMessage( 'moodbar-feedback-whatis' )->escaped(); |
| 82 | + $whatIsURL = htmlspecialchars( $wgMoodBarConfig['infoUrl'] ); |
| 83 | + $actionURL = htmlspecialchars( $this->getTitle()->getLinkURL() ); |
| 84 | + |
| 85 | + $types = $wgRequest->getArray( 'type', array() ); |
| 86 | + $happyCheckbox = Xml::check( 'type[]', in_array( 'happy', $types ), |
| 87 | + array( 'id' => 'fbd-filters-type-praise', 'value' => 'happy' ) ); |
| 88 | + $confusedCheckbox = Xml::check( 'type[]', in_array( 'confused', $types ), |
| 89 | + array( 'id' => 'fbd-filters-type-confusion', 'value' => 'confused' ) ); |
| 90 | + $sadCheckbox = Xml::check( 'type[]', in_array( 'sad', $types ), |
| 91 | + array( 'id' => 'fbd-filters-type-issues', 'value' => 'sad' ) ); |
| 92 | + $usernameTextbox = Html::input( 'username', $wgRequest->getText( 'username' ), 'text', |
| 93 | + array( 'id' => 'fbd-filters-username', 'class' => 'fbd-filters-input' ) ); |
| 94 | + $filterType = htmlspecialchars( $filterType ); |
| 95 | + |
| 96 | + return <<<HTML |
| 97 | + <div id="fbd-filters"> |
| 98 | + <form action="$actionURL" data-filtertype="$filterType"> |
| 99 | + <h3 id="fbd-filters-title">$filtersMsg</h3> |
| 100 | + <fieldset id="fbd-filters-types"> |
| 101 | + <legend class="fbd-filters-label">$typeMsg</legend> |
| 102 | + <ul> |
| 103 | + <li> |
| 104 | + $happyCheckbox |
| 105 | + <label for="fbd-filters-type-praise" id="fbd-filters-type-praise-label">$praiseMsg</label> |
| 106 | + </li> |
| 107 | + <li> |
| 108 | + $confusedCheckbox |
| 109 | + <label for="fbd-filters-type-confusion" id="fbd-filters-type-confusion-label">$confusionMsg</label> |
| 110 | + </li> |
| 111 | + <li> |
| 112 | + $sadCheckbox |
| 113 | + <label for="fbd-filters-type-issues" id="fbd-filters-type-issues-label">$issuesMsg</label> |
| 114 | + </li> |
| 115 | + </ul> |
| 116 | + </fieldset> |
| 117 | + <label for="fbd-filters-username" class="fbd-filters-label">$usernameMsg</label> |
| 118 | + $usernameTextbox |
| 119 | + <button type="submit" id="fbd-filters-set">$setFiltersMsg</button> |
| 120 | + </form> |
| 121 | + <a href="$whatIsURL" id="fbd-about">$whatIsMsg</a> |
| 122 | + </div> |
| 123 | +HTML; |
| 124 | + } |
| 125 | + |
| 126 | + /** |
| 127 | + * Format a single list item from a database row. |
| 128 | + * @param $row Database row object |
| 129 | + * @param $params An array of flags. Valid flags: |
| 130 | + * * admin (user can show/hide feedback items) |
| 131 | + * * show-anyway (user has asked to see this hidden item) |
| 132 | + * @return string HTML |
| 133 | + */ |
| 134 | + public static function formatListItem( $row, $params = array() ) { |
| 135 | + global $wgLang; |
| 136 | + |
| 137 | + $feedbackItem = MBFeedbackItem::load( $row ); |
| 138 | + |
| 139 | + $classes = array('fbd-item'); |
| 140 | + $toolLinks = array(); |
| 141 | + |
| 142 | + // Type |
| 143 | + $type = $feedbackItem->getProperty('type'); |
| 144 | + $typeMsg = wfMessage( "moodbar-type-$type" )->escaped(); |
| 145 | + |
| 146 | + // Timestamp |
| 147 | + $now = wfTimestamp( TS_UNIX ); |
| 148 | + $timestamp = wfTimestamp( TS_UNIX, $feedbackItem->getProperty('timestamp') ); |
| 149 | + $time = $wgLang->formatTimePeriod( $now - $timestamp, |
| 150 | + array( 'avoid' => 'avoidminutes', 'noabbrevs' => true ) |
| 151 | + ); |
| 152 | + $timeMsg = wfMessage( 'ago' )->params( $time )->escaped(); |
| 153 | + |
| 154 | + // Comment |
| 155 | + $comment = htmlspecialchars( $feedbackItem->getProperty('comment') ); |
| 156 | + |
| 157 | + // User information |
| 158 | + $userInfo = self::buildUserInfo( $feedbackItem ); |
| 159 | + |
| 160 | + // Tool links |
| 161 | + $toolLinks[] = self::getPermalink( $feedbackItem ); |
| 162 | + |
| 163 | + // Continuation data |
| 164 | + $id = $feedbackItem->getProperty('id'); |
| 165 | + $continueData = wfTimestamp( TS_MW, $timestamp ) . '|' . intval( $id ); |
| 166 | + |
| 167 | + // Now handle hiding, showing, etc |
| 168 | + if ( $feedbackItem->getProperty('hidden-state') > 0 ) { |
| 169 | + $toolLinks = array(); |
| 170 | + if ( !in_array('show-anyway', $params) ) { |
| 171 | + $userInfo = wfMessage('moodbar-user-hidden')->escaped(); |
| 172 | + $comment = wfMessage('moodbar-comment-hidden')->escaped(); |
| 173 | + $type = 'hidden'; |
| 174 | + $typeMsg = ''; |
| 175 | + $classes[] = 'fbd-hidden'; |
| 176 | + } |
| 177 | + |
| 178 | + if ( in_array('admin', $params) ) { |
| 179 | + if ( in_array('show-anyway', $params) ) { |
| 180 | + $toolLinks[] = self::getHiddenFooter($feedbackItem, 'shown'); |
| 181 | + } else { |
| 182 | + $toolLinks[] = self::getHiddenFooter($feedbackItem, 'hidden'); |
| 183 | + } |
| 184 | + } |
| 185 | + } elseif ( in_array('admin', $params) ) { |
| 186 | + $toolLinks[] = self::getHideLink( $feedbackItem ); |
| 187 | + } |
| 188 | + |
| 189 | + $classes = Sanitizer::encodeAttribute( implode(' ', $classes) ); |
| 190 | + $toolLinks = implode("\n", $toolLinks ); |
| 191 | + |
| 192 | + return <<<HTML |
| 193 | + <li class="$classes" data-mbccontinue="$continueData"> |
| 194 | + <div class="fbd-item-emoticon fbd-item-emoticon-$type"> |
| 195 | + <span class="fbd-item-emoticon-label">$typeMsg</span> |
| 196 | + </div> |
| 197 | + <div class="fbd-item-time">$timeMsg</div> |
| 198 | +$userInfo |
| 199 | + <div class="fbd-item-message">$comment</div> |
| 200 | +$toolLinks |
| 201 | + <div style="clear:both"></div> |
| 202 | + </li> |
| 203 | +HTML; |
| 204 | + } |
| 205 | + |
| 206 | + /** |
| 207 | + * Build the "user information" part of an item on the feedback dashboard. |
| 208 | + * @param $feedbackItem MBFeedbackItem representing the feedback to show |
| 209 | + * @return string HTML |
| 210 | + */ |
| 211 | + protected static function buildUserInfo( $feedbackItem ) { |
| 212 | + $user = $feedbackItem->getProperty('user'); |
| 213 | + $username = htmlspecialchars( $user->getName() ); |
| 214 | + |
| 215 | + //$links = Linker::userToolLinks( $user->getId(), $username ); |
| 216 | + // 1.17wmf1 compat |
| 217 | + $links = $GLOBALS['wgUser']->getSkin() |
| 218 | + ->userToolLinks( $user->getId(), $username ); |
| 219 | + |
| 220 | + $userPageUrl = htmlspecialchars($user->getUserPage()->getLocalURL()); |
| 221 | + |
| 222 | + return <<<HTML |
| 223 | + <div class="fbd-item-userName"> |
| 224 | + <a href="$userPageUrl" class="fbd-item-userLink">$username</a> |
| 225 | + <sup class="fbd-item-userLinks"> |
| 226 | + $links |
| 227 | + </sup> |
| 228 | + </div> |
| 229 | +HTML; |
| 230 | + } |
| 231 | + |
| 232 | + /** |
| 233 | + * Gets a permanent link to a given feedback item |
| 234 | + * @param $feedbackItem MBFeedbackItem to get a link for |
| 235 | + * @return string HTML |
| 236 | + */ |
| 237 | + protected static function getPermalink( $feedbackItem ) { |
| 238 | + $id = $feedbackItem->getProperty('id'); |
| 239 | + $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id ); |
| 240 | + $permalinkText = wfMessage( 'moodbar-feedback-permalink' )->escaped(); |
| 241 | + $permalink = $GLOBALS['wgUser']->getSkin()->link( $permalinkTitle, $permalinkText ); |
| 242 | + return Xml::tags( 'div', array( 'class' => 'fbd-item-permalink' ), "($permalink)" ); |
| 243 | + } |
| 244 | + |
| 245 | + /** |
| 246 | + * Gets the footer for a hidden comment |
| 247 | + * @param $feedbackItem The feedback item in question. |
| 248 | + * @param $mode The mode to show in. Either 'shown' or 'hidden' |
| 249 | + * @return string HTML |
| 250 | + */ |
| 251 | + protected static function getHiddenFooter( $feedbackItem, $mode ) { |
| 252 | + $id = $feedbackItem->getProperty('id'); |
| 253 | + $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id ); |
| 254 | + if ( $mode === 'shown' ) { |
| 255 | + $linkText = wfMessage( 'moodbar-feedback-restore' )->escaped(); |
| 256 | + $query = array('restore-feedback' => '1'); |
| 257 | + $link = $GLOBALS['wgUser']->getSkin() |
| 258 | + ->link( $permalinkTitle, $linkText, array(), $query ); |
| 259 | + $link = Xml::tags( 'span', array( 'class' => 'fbd-item-restore' ), "($link)" ); |
| 260 | + |
| 261 | + $footer = wfMessage('moodbar-hidden-footer')->rawParams($link)->escaped(); |
| 262 | + return Xml::tags( 'div', array( 'class' => 'error' ), $footer ); |
| 263 | + } elseif ( $mode === 'hidden' ) { |
| 264 | + $linkText = wfMessage('moodbar-feedback-show')->escaped(); |
| 265 | + $query = array('show-feedback' => '1'); |
| 266 | + $link = $GLOBALS['wgUser']->getSkin() |
| 267 | + ->link( $permalinkTitle, $linkText, array(), $query ); |
| 268 | + return Xml::tags( 'div', array( 'class' => 'fbd-item-show' ), "($link)" ); |
| 269 | + } |
| 270 | + } |
| 271 | + |
| 272 | + /** |
| 273 | + * Gets a link to hide the current feedback item from view |
| 274 | + * @param $feedbackItem The feedback item to show a hide link for |
| 275 | + * @return string HTML |
| 276 | + */ |
| 277 | + protected static function getHideLink( $feedbackItem ) { |
| 278 | + $id = $feedbackItem->getProperty('id'); |
| 279 | + $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id ); |
| 280 | + $permalinkText = wfMessage( 'moodbar-feedback-hide' )->escaped(); |
| 281 | + $link = $GLOBALS['wgUser']->getSkin() |
| 282 | + ->link( $permalinkTitle, $permalinkText, |
| 283 | + array(), array('hide-feedback' => '1') ); |
| 284 | + return Xml::tags( 'div', array( 'class' => 'fbd-item-hide' ), "($link)" ); |
| 285 | + } |
| 286 | + |
| 287 | + |
| 288 | + /** |
| 289 | + * Build a comment list from a query result |
| 290 | + * @param $res array Return value of doQuery() |
| 291 | + * @return string HTML |
| 292 | + */ |
| 293 | + public function buildList( $res ) { |
| 294 | + global $wgRequest, $wgUser; |
| 295 | + $list = ''; |
| 296 | + |
| 297 | + $params = array(); |
| 298 | + if ( $wgUser->isAllowed('moodbar-admin') ) { |
| 299 | + $params[] = 'admin'; |
| 300 | + |
| 301 | + if ( $this->showHidden ) { |
| 302 | + $params[] = 'show-anyway'; |
| 303 | + } |
| 304 | + } |
| 305 | + |
| 306 | + foreach ( $res['rows'] as $row ) { |
| 307 | + $list .= self::formatListItem( $row, $params ); |
| 308 | + } |
| 309 | + |
| 310 | + if ( $list === '' ) { |
| 311 | + return '<div id="fbd-list">' . wfMessage( 'moodbar-feedback-noresults' )->escaped() . '</div>'; |
| 312 | + } else { |
| 313 | + // FIXME: We also need to show the More link (hidden) if there were no results |
| 314 | + $olderRow = $res['olderRow']; |
| 315 | + $newerRow = $res['newerRow']; |
| 316 | + $html = "<ul id=\"fbd-list\">$list</ul>"; |
| 317 | + |
| 318 | + // Only set for showing an individual row. |
| 319 | + $form = null; |
| 320 | + if ( $this->action == 'restore' ) { |
| 321 | + $form = new MBRestoreForm( $row->mbf_id ); |
| 322 | + } elseif ( $this->action == 'hide' ) { |
| 323 | + $form = new MBHideForm( $row->mbf_id ); |
| 324 | + } |
| 325 | + |
| 326 | + if ( $form ) { |
| 327 | + $result = $form->show(); |
| 328 | + if ( $result === true ) { |
| 329 | + global $wgOut; |
| 330 | + $title = SpecialPage::getTitleFor( 'FeedbackDashboard', |
| 331 | + $row->mbf_id ); |
| 332 | + $wgOut->redirect( $title->getFullURL() ); |
| 333 | + } else { |
| 334 | + $html .= "\n$result\n"; |
| 335 | + } |
| 336 | + } |
| 337 | + |
| 338 | + // Output the "More" link |
| 339 | + $moreText = wfMessage( 'moodbar-feedback-more' )->escaped(); |
| 340 | + $attribs = array( 'id' => 'fbd-list-more' ); |
| 341 | + if ( !$olderRow ) { |
| 342 | + // There are no more rows. Hide the More link |
| 343 | + // We still need to output it because the JS may need it later |
| 344 | + $attribs['style'] = 'display: none;'; |
| 345 | + } |
| 346 | + $html .= Html::rawElement( 'div', $attribs, '<a href="#">' . $moreText . '</a>' ); |
| 347 | + |
| 348 | + // Paging links for no-JS clients |
| 349 | + $olderURL = $newerURL = false; |
| 350 | + if ( $olderRow ) { |
| 351 | + $olderOffset = wfTimestamp( TS_MW, $olderRow->mbf_timestamp ) . '|' . intval( $olderRow->mbf_id ); |
| 352 | + $olderURL = htmlspecialchars( $this->getTitle()->getLinkURL( $this->getQuery( $olderOffset, false ) ) ); |
| 353 | + } |
| 354 | + if ( $newerRow ) { |
| 355 | + $newerOffset = wfTimestamp( TS_MW, $newerRow->mbf_timestamp ) . '|' . intval( $newerRow->mbf_id ); |
| 356 | + $newerURL = htmlspecialchars( $this->getTitle()->getLinkURL( $this->getQuery( $newerOffset, true ) ) ); |
| 357 | + } |
| 358 | + $olderText = wfMessage( 'moodbar-feedback-older' )->escaped(); |
| 359 | + $newerText = wfMessage( 'moodbar-feedback-newer' )->escaped(); |
| 360 | + $html .= '<div id="fbd-list-newer-older"><div id="fbd-list-newer">'; |
| 361 | + if ( $newerURL ) { |
| 362 | + $html .= "<a href=\"$newerURL\">$newerText</a>"; |
| 363 | + } else { |
| 364 | + $html .= "<span class=\"fbd-page-disabled\">$newerText</span>"; |
| 365 | + } |
| 366 | + $html .= '</div><div id="fbd-list-older">'; |
| 367 | + if ( $olderURL ) { |
| 368 | + $html .= "<a href=\"$olderURL\">$olderText</a>"; |
| 369 | + } else { |
| 370 | + $html .= "<span class=\"fbd-page-disabled\">$olderText</span>"; |
| 371 | + } |
| 372 | + $html .= '</div></div><div style="clear: both;"></div>'; |
| 373 | + return $html; |
| 374 | + } |
| 375 | + } |
| 376 | + |
| 377 | + /** |
| 378 | + * Get a set of comments from the database. |
| 379 | + * |
| 380 | + * The way paging is handled by this function is a bit weird. $offset is taken from |
| 381 | + * the last row that was displayed, as opposed to the first row that was not displayed. |
| 382 | + * This means that if $offset is set, the first row in the result (the one matching $offset) |
| 383 | + * is dropped, as well as the last row. The dropped rows are only used to detect the presence |
| 384 | + * or absence of more rows in each direction, the offset values for paging are taken from the |
| 385 | + * first and last row that are actually shown. |
| 386 | + * |
| 387 | + * $retval['olderRow'] is the row whose offset should be used to display older rows, or null if |
| 388 | + * there are no older rows. This means that, if there are older rows, $retval['olderRow'] is set |
| 389 | + * to the oldest row in $retval['rows']. $retval['newerRows'] is set similarly. |
| 390 | + * |
| 391 | + * @param $filters array Array of filters to apply. Recognized keys are 'type' (array), 'username' (string) and 'id' (int) |
| 392 | + * @param $limit int Number of comments to fetch |
| 393 | + * @param $offset string Query offset. Timestamp and ID of the last shown result, formatted as 'timestamp|id' |
| 394 | + * @param $backwards bool If true, page in ascending order rather than descending order, i.e. get $limit rows after $offset rather than before $offset. The result will still be sorted in descending order |
| 395 | + * @return array( 'rows' => array( row, row, ... ), 'olderRow' => row|null, 'newerRow' => row|null ) |
| 396 | + */ |
| 397 | + public function doQuery( $filters, $limit, $offset, $backwards ) { |
| 398 | + global $wgUser; |
| 399 | + |
| 400 | + $dbr = wfGetDB( DB_SLAVE ); |
| 401 | + |
| 402 | + // Set $conds based on $filters |
| 403 | + $conds = array(); |
| 404 | + if ( isset( $filters['type'] ) ) { |
| 405 | + $conds['mbf_type'] = $filters['type']; |
| 406 | + } |
| 407 | + if ( isset( $filters['username'] ) ) { |
| 408 | + $user = User::newFromName( $filters['username'] ); // Returns false for IPs |
| 409 | + if ( !$user || $user->isAnon() ) { |
| 410 | + $conds['mbf_user_id'] = 0; |
| 411 | + $conds['mbf_user_ip'] = $filters['username']; |
| 412 | + } else { |
| 413 | + $conds['mbf_user_id'] = $user->getID(); |
| 414 | + $conds[] = 'mbf_user_ip IS NULL'; |
| 415 | + } |
| 416 | + } |
| 417 | + if ( isset( $filters['id'] ) ) { |
| 418 | + $conds['mbf_id'] = $filters['id']; |
| 419 | + } elseif ( !$wgUser->isAllowed('moodbar-admin') ) { |
| 420 | + $conds['mbf_hidden_state'] = 0; |
| 421 | + } |
| 422 | + |
| 423 | + // Process $offset |
| 424 | + if ( $offset !== false ) { |
| 425 | + $arr = explode( '|', $offset, 2 ); |
| 426 | + $ts = $dbr->addQuotes( $dbr->timestamp( $arr[0] ) ); |
| 427 | + $id = isset( $arr[1] ) ? intval( $arr[1] ) : 0; |
| 428 | + $op = $backwards ? '>' : '<'; |
| 429 | + $conds[] = "mbf_timestamp $op $ts OR (mbf_timestamp = $ts AND mbf_id $op= $id)"; |
| 430 | + } |
| 431 | + |
| 432 | + // Do the actual query |
| 433 | + $desc = $backwards ? '' : ' DESC'; |
| 434 | + $res = $dbr->select( array( 'moodbar_feedback', 'user' ), array( |
| 435 | + 'user_name', 'mbf_id', 'mbf_type', |
| 436 | + 'mbf_timestamp', 'mbf_user_id', 'mbf_user_ip', 'mbf_comment', |
| 437 | + 'mbf_anonymous', 'mbf_hidden_state', |
| 438 | + ), |
| 439 | + $conds, |
| 440 | + __METHOD__, |
| 441 | + array( 'LIMIT' => $limit + 2, 'ORDER BY' => "mbf_timestamp$desc, mbf_id$desc" ), |
| 442 | + array( 'user' => array( 'LEFT JOIN', 'user_id=mbf_user_id' ) ) |
| 443 | + ); |
| 444 | + $rows = iterator_to_array( $res, /*$use_keys=*/false ); |
| 445 | + |
| 446 | + // Figure out whether there are newer and older rows |
| 447 | + $olderRow = $newerRow = null; |
| 448 | + $count = count( $rows ); |
| 449 | + if ( $offset && $count > 0 ) { |
| 450 | + // If there is an offset, drop the first row |
| 451 | + if ( $count > 1 ) { |
| 452 | + array_shift( $rows ); |
| 453 | + $count--; |
| 454 | + } |
| 455 | + // We now know there is a previous row |
| 456 | + $newerRow = $rows[0]; |
| 457 | + } |
| 458 | + if ( $count > $limit ) { |
| 459 | + // If there are rows past the limit, drop them |
| 460 | + array_splice( $rows, $limit ); |
| 461 | + // We now know there is a next row |
| 462 | + $olderRow = $rows[$limit - 1]; |
| 463 | + } |
| 464 | + |
| 465 | + // If we got things backwards, reverse them |
| 466 | + if ( $backwards ) { |
| 467 | + $rows = array_reverse( $rows ); |
| 468 | + list( $olderRow, $newerRow ) = array( $newerRow, $olderRow ); |
| 469 | + } |
| 470 | + return array( 'rows' => $rows, 'olderRow' => $olderRow, 'newerRow' => $newerRow ); |
| 471 | + } |
| 472 | + |
| 473 | + /** |
| 474 | + * Get a query string array for a given offset, using filter parameters obtained from $wgRequest. |
| 475 | + * @param $offset string Value for &offset= |
| 476 | + * @param $backwards bool If true, set &dir=prev |
| 477 | + * @return array |
| 478 | + */ |
| 479 | + protected function getQuery( $offset, $backwards ) { |
| 480 | + global $wgRequest; |
| 481 | + $query = array( |
| 482 | + 'type' => $wgRequest->getArray( 'type', array() ), |
| 483 | + 'username' => $wgRequest->getVal( 'username' ), |
| 484 | + 'offset' => $offset, |
| 485 | + ); |
| 486 | + if ( $backwards ) { |
| 487 | + $query['dir'] = 'prev'; |
| 488 | + } |
| 489 | + return $query; |
| 490 | + } |
| 491 | +} |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 492 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/DashboardForms.php |
— | — | @@ -0,0 +1,194 @@ |
| 2 | +<?php |
| 3 | +/** |
| 4 | + * Contains assorted forms associated with the Feedback Dashboards |
| 5 | + */ |
| 6 | + |
| 7 | + |
| 8 | +abstract class MBDashboardForm { |
| 9 | + /** |
| 10 | + * Gets an HTMLForm object suitable for showing this form |
| 11 | + */ |
| 12 | + public function getForm() { |
| 13 | + $form = new HTMLForm( $this->getFormDescriptor() ); |
| 14 | + $form->setSubmitCallback( array( $this, 'submit' ) ); |
| 15 | + |
| 16 | + return $form; |
| 17 | + } |
| 18 | + |
| 19 | + /** |
| 20 | + * Shows the form, but returns the output as HTML instead of sending it to $wgOut |
| 21 | + */ |
| 22 | + public function show() { |
| 23 | + global $wgOut; |
| 24 | + |
| 25 | + $oldText = $wgOut->getHTML(); |
| 26 | + $wgOut->clearHTML(); |
| 27 | + |
| 28 | + $result = $this->getForm()->show(); |
| 29 | + |
| 30 | + $output = $wgOut->getHTML(); |
| 31 | + $wgOut->clearHTML( ); |
| 32 | + $wgOut->addHTML( $oldText ); |
| 33 | + |
| 34 | + if ( $result === true ) { |
| 35 | + return true; |
| 36 | + } |
| 37 | + |
| 38 | + return $output; |
| 39 | + } |
| 40 | + |
| 41 | + /** |
| 42 | + * Gets the HTMLForm form descriptor |
| 43 | + * @return A structured array suitable for the HTMLForm constructor. |
| 44 | + */ |
| 45 | + public abstract function getFormDescriptor(); |
| 46 | + |
| 47 | + /** |
| 48 | + * Submits the form. |
| 49 | + */ |
| 50 | + public abstract function submit( $data ); |
| 51 | +} |
| 52 | + |
| 53 | +abstract class MBActionForm extends MBDashboardForm { |
| 54 | + public function __construct( $id ) { |
| 55 | + $this->id = $id; |
| 56 | + } |
| 57 | + |
| 58 | + public function getForm() { |
| 59 | + $form = parent::getForm(); |
| 60 | + |
| 61 | + $title = SpecialPage::getTitleFor( 'FeedbackDashboard', $this->id ); |
| 62 | + $form->setTitle( $title ); |
| 63 | + |
| 64 | + return $form; |
| 65 | + } |
| 66 | + |
| 67 | + /** |
| 68 | + * Adds an 'item' field to provide built in support for doing actions to feedback items. |
| 69 | + */ |
| 70 | + public function getFormDescriptor() { |
| 71 | + $template = array( |
| 72 | + 'item' => array( |
| 73 | + 'type' => 'hidden', |
| 74 | + 'required' => true, |
| 75 | + 'readonly' => 'readonly', |
| 76 | + 'label-message' => 'moodbar-action-item', |
| 77 | + 'default' => $this->id, |
| 78 | + ), |
| 79 | + 'reason' => array( |
| 80 | + 'type' => 'text', |
| 81 | + 'size' => '60', |
| 82 | + 'maxlength' => '200', |
| 83 | + 'label-message' => 'movereason', |
| 84 | + ), |
| 85 | + ); |
| 86 | + |
| 87 | + return $template; |
| 88 | + } |
| 89 | + |
| 90 | + /** |
| 91 | + * Load our item and do our thing |
| 92 | + */ |
| 93 | + public function submit( $data ) { |
| 94 | + $id = $data['item']; |
| 95 | + $dbr = wfGetDB( DB_SLAVE ); |
| 96 | + |
| 97 | + $row = $dbr->selectRow( 'moodbar_feedback', '*', |
| 98 | + array( 'mbf_id' => $id ), __METHOD__ ); |
| 99 | + |
| 100 | + if ( ! $row ) { |
| 101 | + return wfMessage( 'moodbar-invalid-item' )->parse(); |
| 102 | + } |
| 103 | + |
| 104 | + $feedbackItem = MBFeedbackItem::load( $row ); |
| 105 | + |
| 106 | + $this->manipulateItem( $feedbackItem, $data ); |
| 107 | + |
| 108 | + return true; |
| 109 | + } |
| 110 | + |
| 111 | + /** |
| 112 | + * Do whatever action you need to do to the $feedbackItem in this function |
| 113 | + * @param $feedbackItem MBFeedbackItem to manipulate. |
| 114 | + * @param $data The form data. |
| 115 | + */ |
| 116 | + protected abstract function manipulateItem( $feedbackItem, $data ); |
| 117 | +} |
| 118 | + |
| 119 | +class MBHideForm extends MBActionForm { |
| 120 | + public function getFormDescriptor() { |
| 121 | + $desc = parent::getFormDescriptor(); |
| 122 | + $desc += array( |
| 123 | + 'hide-feedback' => array( |
| 124 | + 'type' => 'hidden', |
| 125 | + 'default' => '1', |
| 126 | + 'name' => 'hide-feedback', |
| 127 | + ), |
| 128 | + ); |
| 129 | + |
| 130 | + return $desc; |
| 131 | + } |
| 132 | + |
| 133 | + protected function manipulateItem( $feedbackItem, $data ) { |
| 134 | + $feedbackItem->setProperty('hidden-state', 255); |
| 135 | + $feedbackItem->save(); |
| 136 | + |
| 137 | + $title = SpecialPage::getTitleFor( 'FeedbackDashboard', |
| 138 | + $feedbackItem->getProperty('id') ); |
| 139 | + |
| 140 | + $logPage = new LogPage('moodbar'); |
| 141 | + $logPage->addEntry( 'hide', $title, $data['reason'] ); |
| 142 | + } |
| 143 | + |
| 144 | + public function getForm() { |
| 145 | + $form = parent::getForm(); |
| 146 | + |
| 147 | + $header = Html::rawElement( 'h3', null, |
| 148 | + wfMessage( 'moodbar-hide-header' )->parse() ); |
| 149 | + |
| 150 | + $header .= wfMessage( 'moodbar-hide-intro' )->parse(); |
| 151 | + |
| 152 | + $form->addPreText( $header ); |
| 153 | + |
| 154 | + return $form; |
| 155 | + } |
| 156 | +} |
| 157 | + |
| 158 | +class MBRestoreForm extends MBActionForm { |
| 159 | + public function getFormDescriptor() { |
| 160 | + $desc = parent::getFormDescriptor(); |
| 161 | + $desc += array( |
| 162 | + 'restore-feedback' => array( |
| 163 | + 'type' => 'hidden', |
| 164 | + 'default' => '1', |
| 165 | + 'name' => 'restore-feedback', |
| 166 | + ), |
| 167 | + ); |
| 168 | + |
| 169 | + return $desc; |
| 170 | + } |
| 171 | + |
| 172 | + protected function manipulateItem( $feedbackItem, $data ) { |
| 173 | + $feedbackItem->setProperty('hidden-state', 0); |
| 174 | + $feedbackItem->save(); |
| 175 | + |
| 176 | + $title = SpecialPage::getTitleFor( 'FeedbackDashboard', |
| 177 | + $feedbackItem->getProperty('id') ); |
| 178 | + |
| 179 | + $logPage = new LogPage('moodbar'); |
| 180 | + $logPage->addEntry( 'restore', $title, $data['reason'] ); |
| 181 | + } |
| 182 | + |
| 183 | + public function getForm() { |
| 184 | + $form = parent::getForm(); |
| 185 | + |
| 186 | + $header = Html::rawElement( 'h3', null, |
| 187 | + wfMessage( 'moodbar-restore-header' )->parse() ); |
| 188 | + |
| 189 | + $header .= wfMessage( 'moodbar-restore-intro' )->parse(); |
| 190 | + |
| 191 | + $form->addPreText( $header ); |
| 192 | + |
| 193 | + return $form; |
| 194 | + } |
| 195 | +} |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/DashboardForms.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 196 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php |
— | — | @@ -54,6 +54,7 @@ |
55 | 55 | 'moodbar-error-subtitle' => 'Something went wrong! Please try sharing your feedback again later.', |
56 | 56 | // Special:MoodBar |
57 | 57 | 'right-moodbar-view' => 'View and export MoodBar feedback', |
| 58 | + 'right-moodbar-admin' => 'Alter visibility on the feedback dashboard', |
58 | 59 | 'moodbar-admin-title' => 'MoodBar feedback', |
59 | 60 | 'moodbar-admin-intro' => 'This page allows you to view feedback submitted with the MoodBar.', |
60 | 61 | 'moodbar-admin-empty' => 'No results', |
— | — | @@ -72,19 +73,58 @@ |
73 | 74 | 'moodbar-header-user-editcount' => 'User edit count', |
74 | 75 | 'moodbar-header-namespace' => 'Namespace', |
75 | 76 | 'moodbar-header-own-talk' => 'Own talk page', |
| 77 | + // Special:MoodBarFeedback |
| 78 | + 'moodbar-feedback-title' => 'Feedback dashboard', |
| 79 | + 'moodbar-feedback-filters' => 'Filters', |
| 80 | + 'moodbar-feedback-filters-type' => 'Mood:', |
| 81 | + 'moodbar-feedback-filters-type-happy' => 'Happy', |
| 82 | + 'moodbar-feedback-filters-type-confused' => 'Confused', |
| 83 | + 'moodbar-feedback-filters-type-sad' => 'Sad', |
| 84 | + 'moodbar-feedback-filters-username' => 'Username', |
| 85 | + 'moodbar-feedback-filters-button' => 'Set filters', |
| 86 | + 'moodbar-feedback-whatis' => 'What is this feature?', |
| 87 | + 'moodbar-feedback-permalink' => 'link to here', |
| 88 | + 'moodbar-feedback-noresults' => 'There are no comments that match your filters.', |
| 89 | + 'moodbar-feedback-more' => 'More', |
| 90 | + 'moodbar-feedback-nomore' => 'There are no more results to show.', |
| 91 | + 'moodbar-feedback-newer' => 'Newer', |
| 92 | + 'moodbar-feedback-older' => 'Older', |
| 93 | + 'moodbar-feedback-ajaxerror' => 'An error occurred while fetching more results.', |
| 94 | + 'moodbar-user-hidden' => '(User hidden)', |
| 95 | + 'moodbar-comment-hidden' => '(Feedback hidden by administrative action)', |
| 96 | + 'moodbar-feedback-show' => 'show hidden feedback', |
| 97 | + 'moodbar-feedback-hide' => 'hide feedback', |
| 98 | + 'moodbar-hidden-footer' => 'Hidden Feedback $1', |
| 99 | + 'moodbar-feedback-restore' => 'restore hidden feedback', |
| 100 | + 'moodbar-action-item' => 'Feedback item:', |
| 101 | + 'moodbar-hide-header' => 'Hide this item from view', |
| 102 | + 'moodbar-hide-intro' => '', |
| 103 | + 'moodbar-restore-header' => "Restore this item's visibility", |
| 104 | + 'moodbar-restore-intro' => '', |
| 105 | + 'moodbar-invalid-item' => 'The system was unable to find the correct feedback item.', |
| 106 | + 'moodbar-feedback-action-error' => 'An error occurred when trying to perform this action.', |
76 | 107 | // Mood types |
77 | 108 | 'moodbar-type-happy' => 'Happy', |
78 | 109 | 'moodbar-type-sad' => 'Sad', |
79 | 110 | 'moodbar-type-confused' => 'Confused', |
80 | 111 | // User types |
81 | 112 | 'moodbar-user-anonymized' => 'Anonymized', |
82 | | - 'moodbar-user-ip' => 'IP Address', |
| 113 | + 'moodbar-user-ip' => 'IP address', |
83 | 114 | 'moodbar-user-user' => 'Registered user', |
| 115 | + // Log types |
| 116 | + 'moodbar-log-name' => 'Feedback log', |
| 117 | + 'moodbar-log-header' => 'This is the log of actions taken on feedback items listed on the [[Special:FeedbackDashboard|feedback dashboard]].', |
| 118 | + 'moodbar-log-hide' => 'hid [[$1]]', |
| 119 | + 'moodbar-log-restore' => 'restored the visibility for [[$1]]', |
84 | 120 | ); |
85 | 121 | |
86 | 122 | /** Message documentation (Message documentation) |
87 | 123 | * @author Krinkle |
88 | 124 | * @author SPQRobin |
| 125 | + * @author EugeneZelenko |
| 126 | + * @author Lloffiwr |
| 127 | + * @author Purodha |
| 128 | + * @author Raymond |
89 | 129 | */ |
90 | 130 | |
91 | 131 | $messages['qqq'] = array( |
— | — | @@ -117,13 +157,60 @@ |
118 | 158 | 'moodbar-loading-subtitle' => 'Subtitle of Loading-screen. $1 is the SITENAME', |
119 | 159 | 'moodbar-success-subtitle' => 'Subtitle of screen when feedback was successfullyully submitted. $1 is the SITENAME', |
120 | 160 | 'moodbar-error-subtitle' => 'Subtitle of screen when an error occurred. $1 is the SITENAME', |
| 161 | + 'moodbar-feedback-more' => 'Text of the link that the user can click to see more results. Only visible if JavaScript is enabled.', |
| 162 | + 'moodbar-feedback-newer' => 'Text of the link that the user can click to go back to more recent results. Only visible if JavaScript is not enabled.', |
| 163 | + 'moodbar-feedback-older' => 'Text of the link that the user can click to see less recent results. Only visible if JavaScript is not enabled.', |
| 164 | + 'moodbar-desc' => '{{desc}} |
| 165 | +This is a feature in development. See [[mw:MoodBar 0.1/Design]] for background information.', |
| 166 | + 'moodbar-trigger-feedback' => 'Link text of the MoodBar overlay trigger. $1 is the SITENAME.', |
| 167 | + 'moodbar-trigger-editing' => "Link text of the MoodBar overlay trigger. \$1 is the SITENAME. The implied sentence is ''\"Using [Sitename] made me happy/sad/...\"''. See [[mw:MoodBar 0.1/Design]] for background development information.", |
| 168 | + 'moodbar-close' => 'Link text of the close-button. Make sure to include parentheses. |
| 169 | + |
| 170 | +See also: |
| 171 | +* {{msg|parentheses}} |
| 172 | +{{Identical|Close}}', |
| 173 | + 'moodbar-intro-feedback' => 'Intro title of the MoodBar overlay trigger. $1 is the SITENAME.', |
| 174 | + 'moodbar-intro-editing' => '[[File:MoodBar-Step-1.png|right|200px]] |
| 175 | +Intro title of the MoodBar overlay trigger. $1 is the SITENAME.', |
| 176 | + 'moodbar-type-happy-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 177 | + 'moodbar-type-sad-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 178 | + 'moodbar-type-confused-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 179 | + 'tooltip-moodbar-what' => 'Tooltip displayed when hovering the What-link. |
| 180 | + |
| 181 | +See also: |
| 182 | +* {{msg|moodbar-what-label}}', |
| 183 | + 'moodbar-what-label' => 'Link text for the page where more info abut MoodBar can be found. |
| 184 | +{{Identical|What is this}}', |
| 185 | + 'moodbar-what-content' => '$1 is the message {{msg-mw|moodbar-what-link}} which links to the page [[mw:MoodBar|MoodBar]] on MediaWiki.org.', |
| 186 | + 'moodbar-what-link' => 'This is the link embedded as parameter $1 in {{msg-mw|moodbar-what-content}}.', |
| 187 | + 'moodbar-privacy' => 'Parameters: |
| 188 | +*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}} |
| 189 | + |
| 190 | +The link is to the privacy policy of the wiki. |
| 191 | + |
| 192 | +See [[Thread:Support/About MediaWiki:Moodbar-privacy/en (2)/reply (4)|discussion]].', |
| 193 | + 'moodbar-privacy-link' => 'This is the anchor text being used in the link replacing $1 in the message {{msg-mw|moodbar-privacy}}', |
| 194 | + 'moodbar-header-timestamp' => '{{Identical|Timestamp}}', |
| 195 | + 'moodbar-header-type' => '{{Identical|Type}}', |
| 196 | + 'moodbar-header-page' => '{{Identical|Page}}', |
| 197 | + 'moodbar-header-user' => '{{Identical|User}}', |
| 198 | + 'moodbar-header-comment' => '{{Identical|Comment}}', |
| 199 | + 'moodbar-header-namespace' => '{{Identical|Namespace}}', |
| 200 | + 'moodbar-type-happy' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 201 | + 'moodbar-type-sad' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 202 | + 'moodbar-type-confused' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 203 | + 'moodbar-user-ip' => '{{Identical|IP Address}}', |
121 | 204 | ); |
122 | 205 | |
123 | 206 | /** Message documentation (Message documentation) |
124 | 207 | * @author EugeneZelenko |
| 208 | + * @author IAlex |
| 209 | + * @author Lloffiwr |
| 210 | + * @author McDutchie |
125 | 211 | * @author Purodha |
126 | 212 | * @author Raymond |
127 | 213 | * @author SPQRobin |
| 214 | + * @author Umherirrender |
128 | 215 | */ |
129 | 216 | $messages['qqq'] = array( |
130 | 217 | 'moodbar-desc' => '{{desc}} |
— | — | @@ -138,6 +225,9 @@ |
139 | 226 | 'moodbar-intro-feedback' => 'Intro title of the MoodBar overlay trigger. $1 is the SITENAME.', |
140 | 227 | 'moodbar-intro-editing' => '[[File:MoodBar-Step-1.png|right|200px]] |
141 | 228 | Intro title of the MoodBar overlay trigger. $1 is the SITENAME.', |
| 229 | + 'moodbar-type-happy-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 230 | + 'moodbar-type-sad-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 231 | + 'moodbar-type-confused-title' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
142 | 232 | 'tooltip-moodbar-what' => 'Tooltip displayed when hovering the What-link. |
143 | 233 | |
144 | 234 | See also: |
— | — | @@ -147,14 +237,44 @@ |
148 | 238 | 'moodbar-what-content' => '$1 is the message {{msg-mw|moodbar-what-link}} which links to the page [[mw:MoodBar|MoodBar]] on MediaWiki.org.', |
149 | 239 | 'moodbar-what-link' => 'This is the link embedded as parameter $1 in {{msg-mw|moodbar-what-content}}.', |
150 | 240 | 'moodbar-privacy' => 'Parameters: |
151 | | -*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}}', |
| 241 | +*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}} |
| 242 | + |
| 243 | +The link is to the privacy policy of the wiki. |
| 244 | + |
| 245 | +See [[Thread:Support/About MediaWiki:Moodbar-privacy/en (2)/reply (4)|discussion]].', |
152 | 246 | 'moodbar-privacy-link' => 'This is the anchor text being used in the link replacing $1 in the message {{msg-mw|moodbar-privacy}}', |
| 247 | + 'moodbar-form-policy-text' => 'Text displayed below the input area. |
| 248 | + |
| 249 | +See also: |
| 250 | +* {{msg|moodbar-form-policy-label}}', |
| 251 | + 'moodbar-form-policy-label' => 'Label text for the link to the privacy policy,. |
| 252 | + |
| 253 | +See also: |
| 254 | +* {{msg|moodbar-form-policy-text}}', |
| 255 | + 'moodbar-loading-title' => 'Title of the screen when the widget is loading.', |
| 256 | + 'moodbar-success-title' => 'Title of the screen after the feedback was successfully submitted.', |
| 257 | + 'moodbar-error-title' => 'Title of the screen when after an error occurred and submission aborted.', |
| 258 | + 'moodbar-success-subtitle' => 'Subtitle of screen when feedback was successfullyully submitted. $1 is the SITENAME', |
| 259 | + 'moodbar-error-subtitle' => 'Subtitle of screen when an error occurred. $1 is the SITENAME', |
| 260 | + 'right-moodbar-view' => '{{doc-right|moodbar-view}}', |
| 261 | + 'right-moodbar-admin' => '{{doc-right|moodbar-admin}}', |
153 | 262 | 'moodbar-header-timestamp' => '{{Identical|Timestamp}}', |
154 | 263 | 'moodbar-header-type' => '{{Identical|Type}}', |
155 | 264 | 'moodbar-header-page' => '{{Identical|Page}}', |
156 | 265 | 'moodbar-header-user' => '{{Identical|User}}', |
157 | 266 | 'moodbar-header-comment' => '{{Identical|Comment}}', |
158 | 267 | 'moodbar-header-namespace' => '{{Identical|Namespace}}', |
| 268 | + 'moodbar-feedback-filters' => '{{Identical|Filter}}', |
| 269 | + 'moodbar-feedback-filters-type' => '{{Identical|Mood}}', |
| 270 | + 'moodbar-feedback-filters-username' => '{{Identical|Username}}', |
| 271 | + 'moodbar-feedback-more' => 'Text of the link that the user can click to see more results. Only visible if JavaScript is enabled. |
| 272 | +{{Identical|More}}', |
| 273 | + 'moodbar-feedback-newer' => 'Text of the link that the user can click to go back to more recent results. Only visible if JavaScript is not enabled.', |
| 274 | + 'moodbar-feedback-older' => 'Text of the link that the user can click to see less recent results. Only visible if JavaScript is not enabled.', |
| 275 | + 'moodbar-hidden-footer' => '* $1 is a link to restore the item displaying {{msg-mw|moodbar-feedback-restore}}', |
| 276 | + 'moodbar-type-happy' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 277 | + 'moodbar-type-sad' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
| 278 | + 'moodbar-type-confused' => 'No gender support ([[bugzilla:30071|bug 30071]])', |
159 | 279 | 'moodbar-user-ip' => '{{Identical|IP Address}}', |
160 | 280 | ); |
161 | 281 | |
— | — | @@ -163,15 +283,152 @@ |
164 | 284 | */ |
165 | 285 | $messages['af'] = array( |
166 | 286 | 'moodbar-desc' => 'Laat spesifieke gebruikers toe om hulle gemoedstoestand aan die webwerf se operateur terug te stuur', |
| 287 | + 'moodbar-trigger-editing' => 'Die wysiging van $1...', |
| 288 | + 'moodbar-close' => '(sluit)', |
| 289 | + 'moodbar-type-happy-title' => 'Bly', |
| 290 | + 'moodbar-type-sad-title' => 'Afgehaal', |
| 291 | + 'moodbar-type-confused-title' => 'Verward', |
| 292 | + 'moodbar-what-label' => 'Wat is dit?', |
| 293 | + 'moodbar-privacy-link' => 'voorwaardes', |
| 294 | + 'moodbar-disable-link' => 'Ek stel nie belang nie. Deaktiveer die funksie.', |
| 295 | + 'moodbar-form-title' => 'Omdat...', |
| 296 | + 'moodbar-form-policy-label' => 'ons beleid', |
| 297 | + 'moodbar-loading-title' => 'Deel...', |
| 298 | + 'moodbar-success-title' => 'Dankie!', |
| 299 | + 'moodbar-error-title' => 'Oeps!', |
| 300 | + 'moodbar-admin-empty' => 'Geen resultate', |
| 301 | + 'moodbar-header-id' => 'Terugvoer-ID', |
| 302 | + 'moodbar-header-timestamp' => 'Tydstip', |
| 303 | + 'moodbar-header-type' => 'Tipe', |
| 304 | + 'moodbar-header-page' => 'Bladsy', |
| 305 | + 'moodbar-header-usertype' => 'Gebruikerstipe', |
| 306 | + 'moodbar-header-user' => 'Gebruiker', |
| 307 | + 'moodbar-header-editmode' => 'Wysig-modus', |
| 308 | + 'moodbar-header-bucket' => 'Toetgroep', |
| 309 | + 'moodbar-header-system' => 'Stelseltipe', |
| 310 | + 'moodbar-header-locale' => 'Lokaal', |
| 311 | + 'moodbar-header-useragent' => 'User-agent', |
| 312 | + 'moodbar-header-comment' => 'Opmerkings', |
| 313 | + 'moodbar-header-namespace' => 'Naamruimte', |
| 314 | + 'moodbar-header-own-talk' => 'Eie besprekingsblad', |
| 315 | + 'moodbar-type-happy' => 'Bly', |
| 316 | + 'moodbar-type-sad' => 'Afgehaal', |
| 317 | + 'moodbar-type-confused' => 'Verward', |
| 318 | + 'moodbar-user-anonymized' => 'Geanonimiseerd', |
| 319 | + 'moodbar-user-ip' => 'IP-adres', |
| 320 | + 'moodbar-user-user' => 'Geregistreerde gebruiker', |
167 | 321 | ); |
168 | 322 | |
169 | 323 | /** Arabic (العربية) |
| 324 | + * @author AwamerT |
170 | 325 | * @author OsamaK |
| 326 | + * @author زكريا |
171 | 327 | */ |
172 | 328 | $messages['ar'] = array( |
| 329 | + 'moodbar-desc' => 'يسمح للمستخدمين المعينين بالتعليق على خبرتهم التحريرية', |
| 330 | + 'moodbar-trigger-feedback' => 'تعليق على التحرير', |
| 331 | + 'moodbar-trigger-share' => 'تبادل الخبرات', |
| 332 | + 'moodbar-trigger-editing' => 'تعديل $1...', |
| 333 | + 'moodbar-close' => '(إغلاق)', |
| 334 | + 'moodbar-intro-feedback' => 'تعديل $1 جعلني...', |
| 335 | + 'moodbar-intro-share' => 'تجربتي في $1 جعلتني...', |
| 336 | + 'moodbar-intro-editing' => 'تعديل $1 جعلني...', |
| 337 | + 'moodbar-type-happy-title' => 'سعيد', |
| 338 | + 'moodbar-type-sad-title' => 'حزين', |
| 339 | + 'moodbar-type-confused-title' => 'مرتبك', |
| 340 | + 'tooltip-moodbar-what' => 'اعرف المزيد عن هذه الخاصية', |
| 341 | + 'moodbar-what-label' => 'ما هذا؟', |
| 342 | + 'moodbar-what-content' => 'هذه الخاصية مخصصة لمساعدة المجتمع على إدراك الخبرة التي يتمتع بها المحررون في الموقع. |
| 343 | +لمزيد من المعلومات، زر $1.', |
| 344 | + 'moodbar-what-link' => 'صفحة الخاصية', |
| 345 | + 'moodbar-privacy' => 'عند الحفظ تكون قد وافقت بالشفافية على هذه $1.', |
| 346 | + 'moodbar-privacy-link' => 'الشروط', |
| 347 | + 'moodbar-disable-link' => 'لا أبالي. عطل الخاصية.', |
| 348 | + 'moodbar-form-title' => 'السبب...', |
| 349 | + 'moodbar-form-note' => '140 حرفا على الأكثر', |
| 350 | + 'moodbar-form-note-dynamic' => '$1 عدد الأحرف المتبقية', |
| 351 | + 'moodbar-form-submit' => 'شارك التقييم', |
| 352 | + 'moodbar-form-policy-text' => 'عند الحفظ، $1', |
| 353 | + 'moodbar-form-policy-label' => 'سياستنا', |
| 354 | + 'moodbar-loading-title' => 'مشاركة...', |
173 | 355 | 'moodbar-success-title' => 'شكرا!', |
| 356 | + 'moodbar-error-title' => 'آه!', |
| 357 | + 'moodbar-success-subtitle' => 'مشاركة تجربتك التحريرية تساعدك على تحسين $1.', |
| 358 | + 'moodbar-error-subtitle' => 'لقد حصل خطأ! كرر محاولة مشاركة التعليقات لاحقا.', |
| 359 | + 'right-moodbar-view' => 'انظر تعليقات شريط المزاج وصدرها', |
| 360 | + 'right-moodbar-admin' => 'غير مستوى الظهور على لوحة الملاحظات', |
| 361 | + 'moodbar-admin-title' => 'تعليقات شريط المزاج', |
| 362 | + 'moodbar-admin-intro' => 'تتيح هذه الصفحة الاطلاع على التعليقات المرسلة باستعمال شريط المزاج.', |
| 363 | + 'moodbar-admin-empty' => 'لا نتائج', |
| 364 | + 'moodbar-header-id' => 'معرف التعليقات', |
| 365 | + 'moodbar-header-timestamp' => 'طابع زمني', |
| 366 | + 'moodbar-header-type' => 'نوع', |
| 367 | + 'moodbar-header-page' => 'صفحة', |
| 368 | + 'moodbar-header-usertype' => 'نوع المستخدم', |
| 369 | + 'moodbar-header-user' => 'مستخدم', |
| 370 | + 'moodbar-header-editmode' => 'تعديل الوضع', |
| 371 | + 'moodbar-header-bucket' => 'مختبر', |
| 372 | + 'moodbar-header-system' => 'نوع النظام', |
| 373 | + 'moodbar-header-locale' => 'موضع', |
| 374 | + 'moodbar-header-useragent' => 'وكيل مستخدم', |
| 375 | + 'moodbar-header-comment' => 'تعليقات', |
| 376 | + 'moodbar-header-user-editcount' => 'عداد تعديلات المستخدم', |
| 377 | + 'moodbar-header-namespace' => 'نطاق', |
| 378 | + 'moodbar-header-own-talk' => 'الصفحة النقاش الخاصة', |
| 379 | + 'moodbar-feedback-title' => 'لوحة الملاحظات', |
| 380 | + 'moodbar-feedback-filters' => 'مرشحات', |
| 381 | + 'moodbar-feedback-filters-type' => 'النوع:', |
| 382 | + 'moodbar-feedback-filters-type-happy' => 'شكر', |
| 383 | + 'moodbar-feedback-filters-type-confused' => 'إرتباك', |
| 384 | + 'moodbar-feedback-filters-type-sad' => 'قضايا', |
| 385 | + 'moodbar-feedback-filters-username' => 'اسم المستخدم', |
| 386 | + 'moodbar-feedback-filters-button' => 'إضبط المرشحات', |
| 387 | + 'moodbar-feedback-whatis' => 'ماهذه الميزة؟', |
| 388 | + 'moodbar-feedback-permalink' => 'وصلة تصل الى هنا', |
| 389 | + 'moodbar-feedback-noresults' => 'لا يوجد تعليقات مطابقة للمرشحات الخاصة بك.', |
| 390 | + 'moodbar-feedback-more' => 'المزيد', |
| 391 | + 'moodbar-feedback-nomore' => 'لا يوجد نتائج أكثر لإظهارها.', |
| 392 | + 'moodbar-feedback-newer' => 'احدث', |
| 393 | + 'moodbar-feedback-older' => 'أقدم', |
| 394 | + 'moodbar-feedback-ajaxerror' => 'حدث خطأ عند المحاولة في جلب المزيد من النتائج.', |
| 395 | + 'moodbar-user-hidden' => '(مستخدم مخفي)', |
| 396 | + 'moodbar-comment-hidden' => '(الملاحظات مخفية بواسطة إجراءات إدارية)', |
| 397 | + 'moodbar-feedback-show' => 'أظهر الملاحظات المخفية', |
| 398 | + 'moodbar-feedback-hide' => 'إخف الملاحظات', |
| 399 | + 'moodbar-hidden-footer' => 'الملاحظات المخفية$1', |
| 400 | + 'moodbar-feedback-restore' => 'إستعد الملاحظات المخفية', |
| 401 | + 'moodbar-action-item' => 'بند الملاحظات:', |
| 402 | + 'moodbar-hide-header' => 'إخف هذا العنصر من الظهور', |
| 403 | + 'moodbar-restore-header' => 'إستعد ظهور هذا العنصر', |
| 404 | + 'moodbar-invalid-item' => 'لم يتمكن النظام من العثور على عنصر الملاحظات الصحيح.', |
| 405 | + 'moodbar-type-happy' => 'سعيد', |
| 406 | + 'moodbar-type-sad' => 'حزين', |
| 407 | + 'moodbar-type-confused' => 'مرتبك', |
| 408 | + 'moodbar-user-anonymized' => 'مجهّل', |
| 409 | + 'moodbar-user-ip' => 'عنوان بروتوكول إنترنت', |
| 410 | + 'moodbar-user-user' => 'مستخدم مسجل', |
| 411 | + 'moodbar-log-name' => 'سجل الملاحظات', |
| 412 | + 'moodbar-log-header' => 'هذا هو سجل الإجراءات المتخذة بشأن عناصر الملاحظات المدرجة في [[Special:FeedbackDashboard|feedback dashboard]].', |
| 413 | + 'moodbar-log-hide' => 'تم إخفاء "[[$1]]"', |
| 414 | + 'moodbar-log-restore' => 'تم استعادة الظهور لـ [[ $1 ]]', |
174 | 415 | ); |
175 | 416 | |
| 417 | +/** Azerbaijani (Azərbaycanca) |
| 418 | + * @author Cekli829 |
| 419 | + */ |
| 420 | +$messages['az'] = array( |
| 421 | + 'moodbar-close' => '(bağlı)', |
| 422 | + 'moodbar-type-happy-title' => 'Xoşbəxt', |
| 423 | + 'moodbar-what-label' => 'Bu nədir?', |
| 424 | + 'moodbar-privacy-link' => 'terminlər', |
| 425 | + 'moodbar-success-title' => 'Təşəkkürlər!', |
| 426 | + 'moodbar-header-type' => 'Tipi', |
| 427 | + 'moodbar-header-page' => 'Səhifə', |
| 428 | + 'moodbar-header-user' => 'İstifadəçi', |
| 429 | + 'moodbar-header-comment' => 'Şərhlər', |
| 430 | + 'moodbar-type-happy' => 'Xoşbəxt', |
| 431 | +); |
| 432 | + |
176 | 433 | /** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца)) |
177 | 434 | * @author EugeneZelenko |
178 | 435 | * @author Jim-by |
— | — | @@ -208,6 +465,7 @@ |
209 | 466 | 'moodbar-success-subtitle' => 'Адкрыцьцё доступу да Вашага вопыту рэдагаваньня дапамагае палепшыць {{GRAMMAR:вінавальны|$1}}.', |
210 | 467 | 'moodbar-error-subtitle' => 'Нешта пайшло ня так! Калі ласка, паспрабуйце адкрыць доступ да вашага водгуку потым.', |
211 | 468 | 'right-moodbar-view' => 'прагляд і экспарт водгукаў MoodBar', |
| 469 | + 'right-moodbar-admin' => 'зьмяненьне бачнасьці на дошцы водгукаў', |
212 | 470 | 'moodbar-admin-title' => 'Водгукі MoodBar', |
213 | 471 | 'moodbar-admin-intro' => 'Гэтая старонка дазваляе Вам праглядаць водгукі пакінутыя праз MoodBar.', |
214 | 472 | 'moodbar-admin-empty' => 'Вынікаў няма', |
— | — | @@ -226,6 +484,23 @@ |
227 | 485 | 'moodbar-header-user-editcount' => 'Колькасьць рэдагаваньняў удзельнікаў', |
228 | 486 | 'moodbar-header-namespace' => 'Прастора назваў', |
229 | 487 | 'moodbar-header-own-talk' => 'Уласная старонка гутарак', |
| 488 | + 'moodbar-feedback-title' => 'Дошка водгукаў', |
| 489 | + 'moodbar-feedback-filters' => 'Фільтры', |
| 490 | + 'moodbar-feedback-filters-type' => 'Тып:', |
| 491 | + 'moodbar-feedback-filters-type-happy' => 'Пахвала', |
| 492 | + 'moodbar-feedback-filters-type-confused' => 'Блытаніна', |
| 493 | + 'moodbar-feedback-filters-type-sad' => 'Праблемы', |
| 494 | + 'moodbar-feedback-filters-username' => 'Імя ўдзельніка', |
| 495 | + 'moodbar-feedback-filters-button' => 'Наладзіць фільтры', |
| 496 | + 'moodbar-feedback-whatis' => 'Што гэта за магчымасьць?', |
| 497 | + 'moodbar-feedback-permalink' => 'спасылка сюды', |
| 498 | + 'moodbar-feedback-noresults' => 'Няма камэнтараў, якія адпавядаюць Вашым фільтрам.', |
| 499 | + 'moodbar-feedback-more' => 'Болей', |
| 500 | + 'moodbar-feedback-nomore' => 'Болей няма вынікаў для паказу.', |
| 501 | + 'moodbar-feedback-newer' => 'Навейшыя', |
| 502 | + 'moodbar-feedback-older' => 'Старэйшыя', |
| 503 | + 'moodbar-feedback-ajaxerror' => 'Узьнікла памылка падчас атрыманьня дадатковых вынікаў.', |
| 504 | + 'moodbar-user-hidden' => '(Удзельнік схаваны)', |
230 | 505 | 'moodbar-type-happy' => 'Шчасьлівы', |
231 | 506 | 'moodbar-type-sad' => 'Смутны', |
232 | 507 | 'moodbar-type-confused' => 'Зьмешаныя пачуцьці', |
— | — | @@ -234,8 +509,153 @@ |
235 | 510 | 'moodbar-user-user' => 'Зарэгістраваны ўдзельнік', |
236 | 511 | ); |
237 | 512 | |
| 513 | +/** Bulgarian (Български) |
| 514 | + * @author Spiritia |
| 515 | + */ |
| 516 | +$messages['bg'] = array( |
| 517 | + 'moodbar-what-label' => 'Какво е това?', |
| 518 | + 'moodbar-what-content' => 'Тази функционалност е предназначена да помогне на общността да проучи опита на хората, които редактират този сайт. |
| 519 | +За повече информация посетете $1.', |
| 520 | + 'moodbar-form-note' => 'Максимум 140 символа', |
| 521 | + 'moodbar-form-note-dynamic' => 'Остават $1 символа', |
| 522 | + 'moodbar-success-title' => 'Благодарим!', |
| 523 | + 'moodbar-error-title' => 'Опа!', |
| 524 | + 'moodbar-success-subtitle' => 'Като споделяте опита си като редактор ни помагате да подобрим $1.', |
| 525 | + 'moodbar-error-subtitle' => 'Нещо се обърка! Моля, опитайте отново да споделите вашето мнение по-късно.', |
| 526 | + 'moodbar-header-usertype' => 'Тип потребител', |
| 527 | + 'moodbar-header-user' => 'Потребител', |
| 528 | + 'moodbar-header-editmode' => 'Режим на редактиране', |
| 529 | + 'moodbar-header-comment' => 'Коментари', |
| 530 | + 'moodbar-header-user-editcount' => 'Брой потребителски приноси', |
| 531 | + 'moodbar-header-namespace' => 'Именно пространство', |
| 532 | + 'moodbar-header-own-talk' => 'Лична беседа', |
| 533 | + 'moodbar-user-ip' => 'IP-адрес', |
| 534 | + 'moodbar-user-user' => 'Регистриран потребител', |
| 535 | +); |
| 536 | + |
| 537 | +/** Breton (Brezhoneg) |
| 538 | + * @author Fulup |
| 539 | + * @author Y-M D |
| 540 | + */ |
| 541 | +$messages['br'] = array( |
| 542 | + 'moodbar-desc' => "Talvezout a ra d'an implijerien spisaet da lavaret ar pezh o soñj goude bezañ amprouet an traoù", |
| 543 | + 'moodbar-trigger-feedback' => 'Ho soñj war an doare da zegas kemmoù', |
| 544 | + 'moodbar-trigger-share' => 'Rannit ho skiant-prenañ ganeomp', |
| 545 | + 'moodbar-trigger-editing' => "Oc'h aozañ $1...", |
| 546 | + 'moodbar-close' => '(serriñ)', |
| 547 | + 'moodbar-intro-feedback' => 'Degas kemmoù e $1 en deus ma lakaet da vezañ...', |
| 548 | + 'moodbar-intro-share' => 'Ma zamm troiad war $1 en deus ma lakaet da vezañ...', |
| 549 | + 'moodbar-intro-editing' => 'Degas kemmoù e $1 en deus ma lakaet da vezañ...', |
| 550 | + 'moodbar-type-happy-title' => 'Laouen', |
| 551 | + 'moodbar-type-sad-title' => 'Trist', |
| 552 | + 'moodbar-type-confused-title' => 'Trubuilhet', |
| 553 | + 'tooltip-moodbar-what' => "Gouzout hiroc'h diwar-benn ar perzh-mañ", |
| 554 | + 'moodbar-what-label' => 'Petra eo se ?', |
| 555 | + 'moodbar-privacy-link' => 'termenoù', |
| 556 | + 'moodbar-disable-link' => "N'on ket dedennet. Diweredekaat ar perzh-mañ.", |
| 557 | + 'moodbar-form-title' => 'Peogwir...', |
| 558 | + 'moodbar-form-note' => "140 arouezenn d'ar muiañ", |
| 559 | + 'moodbar-form-note-dynamic' => '$1 a chom', |
| 560 | + 'moodbar-form-policy-label' => 'hor politikerezh', |
| 561 | + 'moodbar-loading-title' => 'O rannañ...', |
| 562 | + 'moodbar-success-title' => 'Trugarez !', |
| 563 | + 'moodbar-error-title' => 'Chaous !', |
| 564 | + 'moodbar-admin-empty' => "Disoc'h ebet", |
| 565 | + 'moodbar-header-timestamp' => 'Deiziad hag eur', |
| 566 | + 'moodbar-header-type' => 'Seurt', |
| 567 | + 'moodbar-header-page' => 'Pajenn', |
| 568 | + 'moodbar-header-usertype' => 'Seurt implijer', |
| 569 | + 'moodbar-header-user' => 'Implijer', |
| 570 | + 'moodbar-header-editmode' => 'Mod kemmañ', |
| 571 | + 'moodbar-header-system' => 'Seurt reizhiad', |
| 572 | + 'moodbar-header-locale' => "Lec'hel", |
| 573 | + 'moodbar-header-comment' => 'Evezhiadennoù', |
| 574 | + 'moodbar-header-user-editcount' => 'Niver a gemmoù degaset gant an implijer', |
| 575 | + 'moodbar-header-namespace' => 'Esaouenn anv', |
| 576 | + 'moodbar-feedback-filters' => 'Siloù', |
| 577 | + 'moodbar-feedback-filters-type' => 'Seurt :', |
| 578 | + 'moodbar-feedback-filters-type-happy' => 'Laouen', |
| 579 | + 'moodbar-feedback-filters-type-confused' => 'Trubuilhet', |
| 580 | + 'moodbar-feedback-filters-type-sad' => 'Trist', |
| 581 | + 'moodbar-feedback-filters-username' => 'Anv implijer', |
| 582 | + 'moodbar-feedback-whatis' => 'Petra eo kement-mañ ?', |
| 583 | + 'moodbar-feedback-more' => "Muioc'h", |
| 584 | + 'moodbar-feedback-nomore' => "N'eus disoc'h ebet all da ziskouez.", |
| 585 | + 'moodbar-feedback-newer' => "Nevesoc'h", |
| 586 | + 'moodbar-feedback-older' => "Koshoc'h", |
| 587 | + 'moodbar-feedback-ajaxerror' => "Ur fazi zo bet en ur glask disoc'hoù all.", |
| 588 | + 'moodbar-type-happy' => 'Laouen', |
| 589 | + 'moodbar-type-sad' => 'Trist', |
| 590 | + 'moodbar-type-confused' => 'Trubuilhet', |
| 591 | + 'moodbar-user-anonymized' => 'Dianavezet', |
| 592 | + 'moodbar-user-ip' => "Chomlec'h IP", |
| 593 | + 'moodbar-user-user' => 'Implijer enrollet', |
| 594 | +); |
| 595 | + |
| 596 | +/** Danish (Dansk) |
| 597 | + * @author Peter Alberti |
| 598 | + */ |
| 599 | +$messages['da'] = array( |
| 600 | + 'moodbar-desc' => 'Tillader udvalgte brugere at give feedback om deres redigeringsoplevelse', |
| 601 | + 'moodbar-trigger-feedback' => 'Feedback om redigering', |
| 602 | + 'moodbar-trigger-share' => 'Del din oplevelse', |
| 603 | + 'moodbar-trigger-editing' => 'Redigerer $1...', |
| 604 | + 'moodbar-close' => '(luk)', |
| 605 | + 'moodbar-intro-feedback' => 'At redigere $1 gjorde mig...', |
| 606 | + 'moodbar-intro-share' => 'Mine erfaringer med $1 gjorde mig...', |
| 607 | + 'moodbar-intro-editing' => 'At redigere $1 gjorde mig...', |
| 608 | + 'moodbar-type-happy-title' => 'Glad', |
| 609 | + 'moodbar-type-sad-title' => 'Trist', |
| 610 | + 'moodbar-type-confused-title' => 'Forvirret', |
| 611 | + 'tooltip-moodbar-what' => 'Lær mere om denne funktion', |
| 612 | + 'moodbar-what-label' => 'Hvad er dette?', |
| 613 | + 'moodbar-what-content' => 'Denne funktion er beregnet til at hjælpe fællesskabet med at forstå hvordan folk oplever det at redigere denne hjemmeside. |
| 614 | +For yderligere oplysninger, besøg venligst $1.', |
| 615 | + 'moodbar-what-link' => 'funktionsside', |
| 616 | + 'moodbar-privacy' => 'Ved at sende, accepterer du gennemsigtighed under disse $1.', |
| 617 | + 'moodbar-privacy-link' => 'vilkår', |
| 618 | + 'moodbar-disable-link' => 'Jeg er ikke interesseret. Slå denne funktion fra.', |
| 619 | + 'moodbar-form-title' => 'Fordi...', |
| 620 | + 'moodbar-form-note' => 'maksimalt 140 tegn', |
| 621 | + 'moodbar-form-note-dynamic' => '$1 tegn tilbage', |
| 622 | + 'moodbar-form-submit' => 'Del Feedback', |
| 623 | + 'moodbar-form-policy-text' => 'Ved at indsende, $1', |
| 624 | + 'moodbar-form-policy-label' => 'vores politik', |
| 625 | + 'moodbar-loading-title' => 'Deler...', |
| 626 | + 'moodbar-success-title' => 'Tak!', |
| 627 | + 'moodbar-error-title' => 'Ups!', |
| 628 | + 'moodbar-success-subtitle' => 'Ved at dele din redigeringsoplevelse hjælper du os med at forbedre $1.', |
| 629 | + 'moodbar-error-subtitle' => 'Noget gik galt! Prøv at dele din feedback igen senere.', |
| 630 | + 'right-moodbar-view' => 'Se og eksporter MoodBar feedback', |
| 631 | + 'moodbar-admin-title' => 'MoodBar feedback', |
| 632 | + 'moodbar-admin-intro' => 'På denne side kan du se feedback, som blev indsendt med MoodBar.', |
| 633 | + 'moodbar-admin-empty' => 'Ingen resultater', |
| 634 | + 'moodbar-header-id' => 'Feedback-ID', |
| 635 | + 'moodbar-header-timestamp' => 'Tidsstempel', |
| 636 | + 'moodbar-header-type' => 'Type', |
| 637 | + 'moodbar-header-page' => 'Side', |
| 638 | + 'moodbar-header-usertype' => 'Brugertype', |
| 639 | + 'moodbar-header-user' => 'Bruger', |
| 640 | + 'moodbar-header-editmode' => 'Redigeringstilstand', |
| 641 | + 'moodbar-header-bucket' => 'Testspand', |
| 642 | + 'moodbar-header-system' => 'Systemtype', |
| 643 | + 'moodbar-header-locale' => 'Sprogindstilling', |
| 644 | + 'moodbar-header-useragent' => 'Brugeragent', |
| 645 | + 'moodbar-header-comment' => 'Kommentarer', |
| 646 | + 'moodbar-header-user-editcount' => 'Brugerens antal redigeringer', |
| 647 | + 'moodbar-header-namespace' => 'Navnerum', |
| 648 | + 'moodbar-header-own-talk' => 'Egen diskussionsside', |
| 649 | + 'moodbar-type-happy' => 'Glad', |
| 650 | + 'moodbar-type-sad' => 'Trist', |
| 651 | + 'moodbar-type-confused' => 'Forvirret', |
| 652 | + 'moodbar-user-anonymized' => 'Anonymiseret', |
| 653 | + 'moodbar-user-ip' => 'IP-adresse', |
| 654 | + 'moodbar-user-user' => 'Registreret bruger', |
| 655 | +); |
| 656 | + |
238 | 657 | /** German (Deutsch) |
239 | 658 | * @author Kghbln |
| 659 | + * @author Metalhead64 |
240 | 660 | * @author Purodha |
241 | 661 | */ |
242 | 662 | $messages['de'] = array( |
— | — | @@ -270,6 +690,7 @@ |
271 | 691 | 'moodbar-success-subtitle' => 'Uns deine Stimmung mitzuteilen hilft uns dabei $1 weiter zu verbessern.', |
272 | 692 | 'moodbar-error-subtitle' => 'Etwas ist schief gelaufen. Bitte versuche es später noch einmal uns deine Rückmeldung mitzuteilen.', |
273 | 693 | 'right-moodbar-view' => 'Rückmeldung zur Stimmung ansehen und exportieren', |
| 694 | + 'right-moodbar-admin' => 'Sichtbarkeit auf der Übersichts- und Verwaltungsseite der Rückmeldungen ändern', |
274 | 695 | 'moodbar-admin-title' => 'Rückmeldung zur Stimmung', |
275 | 696 | 'moodbar-admin-intro' => 'Auf dieser Seite können die Rückmeldungen zur Stimmung angesehen werden', |
276 | 697 | 'moodbar-admin-empty' => 'Keine Ergebnisse', |
— | — | @@ -288,12 +709,43 @@ |
289 | 710 | 'moodbar-header-user-editcount' => 'Bearbeitungszähler', |
290 | 711 | 'moodbar-header-namespace' => 'Namensraum', |
291 | 712 | 'moodbar-header-own-talk' => 'Eigene Diskussionsseite', |
| 713 | + 'moodbar-feedback-title' => 'Rückmeldungen', |
| 714 | + 'moodbar-feedback-filters' => 'Filter', |
| 715 | + 'moodbar-feedback-filters-type' => 'Stimmung:', |
| 716 | + 'moodbar-feedback-filters-type-happy' => 'Glücklich', |
| 717 | + 'moodbar-feedback-filters-type-confused' => 'Verwirrt', |
| 718 | + 'moodbar-feedback-filters-type-sad' => 'Traurig', |
| 719 | + 'moodbar-feedback-filters-username' => 'Benutzername', |
| 720 | + 'moodbar-feedback-filters-button' => 'Filter setzen', |
| 721 | + 'moodbar-feedback-whatis' => 'Über dieses Feature', |
| 722 | + 'moodbar-feedback-permalink' => 'Nach hier verlinken', |
| 723 | + 'moodbar-feedback-noresults' => 'Es gibt keine zutreffenden Kommentare.', |
| 724 | + 'moodbar-feedback-more' => 'Weitere', |
| 725 | + 'moodbar-feedback-nomore' => 'Es gibt keine weiteren Ergebnisse zum Anzeigen.', |
| 726 | + 'moodbar-feedback-newer' => 'Aktuellere', |
| 727 | + 'moodbar-feedback-older' => 'Ältere', |
| 728 | + 'moodbar-feedback-ajaxerror' => 'Beim Abrufen weiterer Ergebnisse ist ein Fehler aufgetreten.', |
| 729 | + 'moodbar-user-hidden' => '(Benutzer ausgeblendet)', |
| 730 | + 'moodbar-comment-hidden' => '(Rückmeldung vom Administrator ausgeblendet)', |
| 731 | + 'moodbar-feedback-show' => 'ausgeblendete Rückmeldung anzeigen', |
| 732 | + 'moodbar-feedback-hide' => 'Rückmeldung ausblenden', |
| 733 | + 'moodbar-hidden-footer' => 'Ausgeblendete Rückmeldung $1', |
| 734 | + 'moodbar-feedback-restore' => 'ausgeblendete Rückmeldung wieder einblenden', |
| 735 | + 'moodbar-action-item' => 'Teil der Rückmeldung:', |
| 736 | + 'moodbar-hide-header' => 'diesen Teil der Rückmeldung verstecken', |
| 737 | + 'moodbar-restore-header' => 'versteckten Teil der Rückmeldung wiederherstellen', |
| 738 | + 'moodbar-invalid-item' => 'Das System konnte den richtigen Teil der Rückmeldung nicht finden.', |
| 739 | + 'moodbar-feedback-action-error' => 'Während des Ausführens dieser Aktion ist ein Fehler aufgetreten.', |
292 | 740 | 'moodbar-type-happy' => 'glücklich', |
293 | 741 | 'moodbar-type-sad' => 'traurig', |
294 | 742 | 'moodbar-type-confused' => 'verwirrt', |
295 | 743 | 'moodbar-user-anonymized' => 'Anonymisiert', |
296 | 744 | 'moodbar-user-ip' => 'IP-Adresse', |
297 | 745 | 'moodbar-user-user' => 'Registrierter Benutzer', |
| 746 | + 'moodbar-log-name' => 'Rückmeldungs-Logbuch', |
| 747 | + 'moodbar-log-header' => 'Dies ist das Logbuch der Aktionen zu den Rückmeldungen, die auf der [[Special:FeedbackDashboard|Administrations- und Übersichtsseite]] der Rückmeldungen angezeigt werden.', |
| 748 | + 'moodbar-log-hide' => 'blendete [[$1]] aus', |
| 749 | + 'moodbar-log-restore' => 'blendete [[$1]] wieder ein', |
298 | 750 | ); |
299 | 751 | |
300 | 752 | /** German (formal address) (Deutsch (Sie-Form)) |
— | — | @@ -306,6 +758,111 @@ |
307 | 759 | 'moodbar-error-subtitle' => 'Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal uns Ihre Rückmeldung mitzuteilen.', |
308 | 760 | ); |
309 | 761 | |
| 762 | +/** Greek (Ελληνικά) |
| 763 | + * @author ZaDiak |
| 764 | + */ |
| 765 | +$messages['el'] = array( |
| 766 | + 'moodbar-trigger-feedback' => 'Ανατροφοδότηση σχετικά με την επεξεργασία', |
| 767 | + 'moodbar-trigger-editing' => 'Επεξεργασία $1...', |
| 768 | + 'moodbar-close' => '(κλείσιμο)', |
| 769 | + 'moodbar-type-happy-title' => 'Χαρούμενος', |
| 770 | + 'moodbar-type-sad-title' => 'Θλιμμένος', |
| 771 | + 'moodbar-type-confused-title' => 'Μπερδεμένος', |
| 772 | + 'tooltip-moodbar-what' => 'Μάθετε περισσότερα σχετικά με αυτό το χαρακτηριστικό', |
| 773 | + 'moodbar-what-label' => 'Τι είναι αυτό;', |
| 774 | + 'moodbar-what-link' => 'σελίδα χαρακτηριστικού', |
| 775 | + 'moodbar-privacy-link' => 'όροι', |
| 776 | + 'moodbar-form-title' => 'Επειδή...', |
| 777 | + 'moodbar-form-note' => '140 χαρακτήρες το μέγιστο', |
| 778 | + 'moodbar-form-note-dynamic' => '$1 χαρακτήρες απομένουν', |
| 779 | + 'moodbar-form-submit' => 'Κοινοποίηση Ανατροφοδότησης', |
| 780 | + 'moodbar-form-policy-text' => 'Με την υποβολή, $1', |
| 781 | + 'moodbar-form-policy-label' => 'η πολιτική μας', |
| 782 | + 'moodbar-loading-title' => 'Κοινοποίηση...', |
| 783 | + 'moodbar-success-title' => 'Ευχαριστούμε!', |
| 784 | + 'moodbar-error-title' => 'Ουπς!', |
| 785 | + 'moodbar-admin-empty' => 'Κανένα αποτέλεσμα', |
| 786 | + 'moodbar-header-id' => 'Ταυτότητα Ανατροφοδότησης', |
| 787 | + 'moodbar-header-timestamp' => 'Ημερομηνία', |
| 788 | + 'moodbar-header-type' => 'Τύπος', |
| 789 | + 'moodbar-header-page' => 'Σελίδα', |
| 790 | + 'moodbar-header-usertype' => 'Τύπος χρήστη', |
| 791 | + 'moodbar-header-user' => 'Χρήστης', |
| 792 | + 'moodbar-header-editmode' => 'Λειτουργία επεξεργασίας', |
| 793 | + 'moodbar-header-system' => 'Τύπος συστήματος', |
| 794 | + 'moodbar-header-comment' => 'Σχόλια', |
| 795 | + 'moodbar-header-user-editcount' => 'Αριθμός επεξεργασιών χρήστη', |
| 796 | + 'moodbar-header-namespace' => 'Περιοχή ονομάτων', |
| 797 | + 'moodbar-header-own-talk' => 'Ίδια σελίδα συζήτησης', |
| 798 | + 'moodbar-type-happy' => 'Χαρούμενος', |
| 799 | + 'moodbar-type-sad' => 'Θλιμμένος', |
| 800 | + 'moodbar-type-confused' => 'Μπερδεμένος', |
| 801 | + 'moodbar-user-anonymized' => 'Ανώνυμα', |
| 802 | + 'moodbar-user-ip' => 'Διεύθυνση IP', |
| 803 | + 'moodbar-user-user' => 'Εγγεγραμμένος χρήστης', |
| 804 | +); |
| 805 | + |
| 806 | +/** Esperanto (Esperanto) |
| 807 | + * @author Yekrats |
| 808 | + */ |
| 809 | +$messages['eo'] = array( |
| 810 | + 'moodbar-desc' => 'Permesas al specifigitaj uzantoj por provizi opiniaron pri ties opinio de redaktado.', |
| 811 | + 'moodbar-trigger-feedback' => 'Komentoj pri redaktado', |
| 812 | + 'moodbar-trigger-share' => 'Komentu pri via opinio', |
| 813 | + 'moodbar-trigger-editing' => 'Redaktante $1...', |
| 814 | + 'moodbar-close' => '(fermi)', |
| 815 | + 'moodbar-intro-feedback' => 'Redaktante $1 mi sentis...', |
| 816 | + 'moodbar-intro-share' => 'Dum mia sperto en $1, mi sentis...', |
| 817 | + 'moodbar-intro-editing' => 'Redaktante $1 mi sentis...', |
| 818 | + 'moodbar-type-happy-title' => 'Ĝoja', |
| 819 | + 'moodbar-type-sad-title' => 'Malĝoja', |
| 820 | + 'moodbar-type-confused-title' => 'Konfuzita', |
| 821 | + 'tooltip-moodbar-what' => 'Lerni pli pri ĉi tiu funkcio', |
| 822 | + 'moodbar-what-label' => 'Kio estas?', |
| 823 | + 'moodbar-what-content' => 'Ĉi tiu funkcio estas farita por helpi al la komunumo kompreni la opiniojn de ties redaktantojn |
| 824 | +Por pli informo, bonvolu viziti la $1n.', |
| 825 | + 'moodbar-what-link' => 'celpaĝo', |
| 826 | + 'moodbar-privacy' => 'Sendante, vi konsentas al travidebleco sub ĉi tiuj $1.', |
| 827 | + 'moodbar-privacy-link' => 'kondiĉoj', |
| 828 | + 'moodbar-disable-link' => 'Mi ne interesas. Bonvolu malŝalti ĉi tiun econ.', |
| 829 | + 'moodbar-form-title' => 'Ĉar...', |
| 830 | + 'moodbar-form-note' => 'Maksimumo de 140 signoj', |
| 831 | + 'moodbar-form-note-dynamic' => '$1 signoj restas', |
| 832 | + 'moodbar-form-submit' => 'Doni Komenton', |
| 833 | + 'moodbar-form-policy-text' => 'Enigante $1', |
| 834 | + 'moodbar-form-policy-label' => 'nia regularo', |
| 835 | + 'moodbar-loading-title' => 'Komentante...', |
| 836 | + 'moodbar-success-title' => 'Dankon!', |
| 837 | + 'moodbar-error-title' => 'Ho ve!', |
| 838 | + 'moodbar-success-subtitle' => 'Via opinio pri via redaktado helpos al ni plibonigi $1.', |
| 839 | + 'moodbar-error-subtitle' => 'Io fuŝis! Bonvolu reprovu doni komenton baldaŭ.', |
| 840 | + 'right-moodbar-view' => 'Vidi kaj eksporti opiniojn pri MoodBar', |
| 841 | + 'moodbar-admin-title' => 'Komenti pri MoodBar', |
| 842 | + 'moodbar-admin-intro' => 'Ĉi tiu paĝo permesas al vi por vidi opiniaron senditan de la MoodBar.', |
| 843 | + 'moodbar-admin-empty' => 'Mankas rezultoj', |
| 844 | + 'moodbar-header-id' => 'Identigo de komentaro', |
| 845 | + 'moodbar-header-timestamp' => 'Tempindiko', |
| 846 | + 'moodbar-header-type' => 'Tipo', |
| 847 | + 'moodbar-header-page' => 'Paĝo', |
| 848 | + 'moodbar-header-usertype' => 'Tipo de uzanto', |
| 849 | + 'moodbar-header-user' => 'Uzanto', |
| 850 | + 'moodbar-header-editmode' => 'Redakta reĝimo', |
| 851 | + 'moodbar-header-bucket' => 'Testejo', |
| 852 | + 'moodbar-header-system' => 'Tipo de sistemo', |
| 853 | + 'moodbar-header-locale' => 'Lokaĵaro', |
| 854 | + 'moodbar-header-useragent' => 'Klienta Aplikaĵo', |
| 855 | + 'moodbar-header-comment' => 'Komentoj', |
| 856 | + 'moodbar-header-user-editcount' => 'Konto de redaktoj', |
| 857 | + 'moodbar-header-namespace' => 'Nomspaco', |
| 858 | + 'moodbar-header-own-talk' => 'Propra diskuto-paĝo', |
| 859 | + 'moodbar-type-happy' => 'Ĝoja', |
| 860 | + 'moodbar-type-sad' => 'Malĝoja', |
| 861 | + 'moodbar-type-confused' => 'Konfuzita', |
| 862 | + 'moodbar-user-anonymized' => 'Anonima', |
| 863 | + 'moodbar-user-ip' => 'IP-adreso', |
| 864 | + 'moodbar-user-user' => 'Registrita Uzanto', |
| 865 | +); |
| 866 | + |
310 | 867 | /** Spanish (Español) |
311 | 868 | * @author Crazymadlover |
312 | 869 | * @author Fitoschido |
— | — | @@ -362,10 +919,133 @@ |
363 | 920 | 'moodbar-user-user' => 'Usuario registrado', |
364 | 921 | ); |
365 | 922 | |
| 923 | +/** Persian (فارسی) |
| 924 | + * @author Mjbmr |
| 925 | + */ |
| 926 | +$messages['fa'] = array( |
| 927 | + 'moodbar-desc' => 'به کاربران مشخص این اجازه را میدهد که بازخوردی از تجربهٔ ویرایشهایشان، ارائه دهند', |
| 928 | + 'moodbar-trigger-feedback' => 'بازخود دربارهٔ ویرایش کردن', |
| 929 | + 'moodbar-trigger-share' => 'به اشتراک گذاشتن تجربهٔ خود', |
| 930 | + 'moodbar-trigger-editing' => 'در حال ویرایش $1...', |
| 931 | + 'moodbar-close' => '(بستن)', |
| 932 | + 'moodbar-intro-feedback' => 'ویرایش $1 باعث شد من...', |
| 933 | + 'moodbar-intro-share' => 'تجربه من در $1 باعث شد من...', |
| 934 | + 'moodbar-intro-editing' => 'ویرایش $1 باعث شد من...', |
| 935 | + 'moodbar-type-happy-title' => 'شاد', |
| 936 | + 'moodbar-type-sad-title' => 'غمگین', |
| 937 | + 'moodbar-type-confused-title' => 'گیج', |
| 938 | + 'tooltip-moodbar-what' => 'دربارهٔ این ویژگی بیشتر مطالعه کنید', |
| 939 | + 'moodbar-what-label' => 'این چیست؟', |
| 940 | + 'moodbar-what-content' => 'این ویژگی طوری طراحی شده است که به جامعه برای فهم تجربهٔ مردم از ویرایش در این وبگاه کمک میکند. |
| 941 | +برای اطلاعات بیشتر، به $1 مراجعه کنید.', |
| 942 | + 'moodbar-what-link' => 'صفحهٔ ویژگی', |
| 943 | + 'moodbar-privacy' => 'با ثبت کردن، شما به شفافیت با این $1 موافقت میکنید.', |
| 944 | + 'moodbar-privacy-link' => 'شرایط', |
| 945 | + 'moodbar-disable-link' => 'من علاقهای ندارم. لطفاً این ویژگی را غیرفعال کنید.', |
| 946 | + 'moodbar-form-title' => 'زیرا...', |
| 947 | + 'moodbar-form-note' => 'حداکثر ۱۴۰ نویسه', |
| 948 | + 'moodbar-form-note-dynamic' => '$1 نویسه باقی مانده', |
| 949 | + 'moodbar-form-submit' => 'اشتراک گذاشتن بازخورد', |
| 950 | + 'moodbar-form-policy-text' => 'توسط ثبت، $1', |
| 951 | + 'moodbar-form-policy-label' => 'سیاست ما', |
| 952 | + 'moodbar-loading-title' => 'در حال اشتراک گذاشتن...', |
| 953 | + 'moodbar-success-title' => 'سپاس!', |
| 954 | + 'moodbar-error-title' => 'اوه!', |
| 955 | + 'moodbar-success-subtitle' => 'به اشتراک گذاشتن تجربهٔ شما به ما کمک میکند که $1 را بهبود بخشیم.', |
| 956 | + 'moodbar-error-subtitle' => 'چیزی اشتباه پیش رفت! لطفاً بعداً مجدد سعی به اشتراک گذاری بازخورد خود کنید.', |
| 957 | + 'right-moodbar-view' => 'مشاهده و خروجی گرفتن از بازخورد نوار خُلق', |
| 958 | + 'moodbar-admin-title' => 'بازخورد نوار خُلق', |
| 959 | + 'moodbar-admin-intro' => 'این صفحه به شما اجازه می دهد که بازخوردهایی که توسط نوار خُلق ثبت شدهاند را مشاهده نمائید.', |
| 960 | + 'moodbar-admin-empty' => 'بدون نتیجه', |
| 961 | + 'moodbar-header-id' => 'شماره بازخورد', |
| 962 | + 'moodbar-header-timestamp' => 'برچسب زمان', |
| 963 | + 'moodbar-header-type' => 'نوع', |
| 964 | + 'moodbar-header-page' => 'صفحه', |
| 965 | + 'moodbar-header-usertype' => 'نوع کاربر', |
| 966 | + 'moodbar-header-user' => 'کاربر', |
| 967 | + 'moodbar-header-editmode' => 'حالت ویرایش', |
| 968 | + 'moodbar-header-bucket' => 'سطل آزمایش', |
| 969 | + 'moodbar-header-system' => 'نوع سامانه', |
| 970 | + 'moodbar-header-locale' => 'محلی', |
| 971 | + 'moodbar-header-useragent' => 'عامل کاربر', |
| 972 | + 'moodbar-header-comment' => 'نظرها', |
| 973 | + 'moodbar-header-user-editcount' => 'شمار ویرایشهای کاربر', |
| 974 | + 'moodbar-header-namespace' => 'فضای نام', |
| 975 | + 'moodbar-header-own-talk' => 'صفحهٔ بحث خود', |
| 976 | + 'moodbar-type-happy' => 'شاد', |
| 977 | + 'moodbar-type-sad' => 'غمگین', |
| 978 | + 'moodbar-type-confused' => 'گیج', |
| 979 | + 'moodbar-user-anonymized' => 'گمنام', |
| 980 | + 'moodbar-user-ip' => 'نشانی آیپی', |
| 981 | + 'moodbar-user-user' => 'کاربر ثبت شده', |
| 982 | +); |
| 983 | + |
| 984 | +/** Finnish (Suomi) |
| 985 | + * @author Olli |
| 986 | + */ |
| 987 | +$messages['fi'] = array( |
| 988 | + 'moodbar-desc' => 'Sallii tiettyjen käyttäjien antaa palautetta heidän muokkauskokemuksesta', |
| 989 | + 'moodbar-trigger-feedback' => 'Palautetta muokkaamisesta', |
| 990 | + 'moodbar-trigger-share' => 'Jaa kokemuksesi', |
| 991 | + 'moodbar-trigger-editing' => 'Muokataan $1...', |
| 992 | + 'moodbar-close' => '(sulje)', |
| 993 | + 'moodbar-intro-feedback' => 'Sivuston $1 muokkaaminen sai minut...', |
| 994 | + 'moodbar-intro-share' => 'Kokemukseni sivustolla $1 sai minut...', |
| 995 | + 'moodbar-intro-editing' => 'Sivuston $1 muokkaaminen sai minut...', |
| 996 | + 'moodbar-type-happy-title' => 'Iloiseksi', |
| 997 | + 'moodbar-type-sad-title' => 'Surulliseksi', |
| 998 | + 'moodbar-type-confused-title' => 'Hämmentyneeksi', |
| 999 | + 'tooltip-moodbar-what' => 'Lue lisää tästä ominaisuudesta', |
| 1000 | + 'moodbar-what-label' => 'Mikä tämä on?', |
| 1001 | + 'moodbar-what-content' => 'Tämä ominaisuus on tehty, jotta yhteisö ymmärtäisi paremmin, mitä ihmiset tuntevat muokatessaan sivustoa. Saadaksesi lisätietoja, käy $1.', |
| 1002 | + 'moodbar-what-link' => 'ominaisuussivulla', |
| 1003 | + 'moodbar-privacy' => 'Lähettämällä, sallit avoimuuden $1 alaisena.', |
| 1004 | + 'moodbar-privacy-link' => 'ehtojen', |
| 1005 | + 'moodbar-disable-link' => 'En ole kiinnostunut. Poista käytöstä ominaisuus.', |
| 1006 | + 'moodbar-form-title' => 'Koska...', |
| 1007 | + 'moodbar-form-note' => 'Enintään 140 merkkiä', |
| 1008 | + 'moodbar-form-note-dynamic' => '$1 merkkiä jäljellä', |
| 1009 | + 'moodbar-form-submit' => 'Jaa palautetta', |
| 1010 | + 'moodbar-form-policy-text' => 'Lähettämällä, $1', |
| 1011 | + 'moodbar-form-policy-label' => 'käytäntömme', |
| 1012 | + 'moodbar-loading-title' => 'Jakamalla...', |
| 1013 | + 'moodbar-success-title' => 'Kiitos!', |
| 1014 | + 'moodbar-error-title' => 'Hups!', |
| 1015 | + 'moodbar-success-subtitle' => 'Muokkauskokemuksesi jakaminen auttaa meitä kehittämään $1.', |
| 1016 | + 'moodbar-error-subtitle' => 'Joku meni vikaan! Yritä palautteesi jakamista myöhemmin.', |
| 1017 | + 'right-moodbar-view' => 'Näytä ja vie MoodBar-palautetta', |
| 1018 | + 'moodbar-admin-title' => 'MoodBar-palaute', |
| 1019 | + 'moodbar-admin-intro' => 'Tällä sivulla voit katsella MoodBarin kautta lähetettyä palautetta.', |
| 1020 | + 'moodbar-admin-empty' => 'Ei tuloksia', |
| 1021 | + 'moodbar-header-id' => 'Palautteen tunnus', |
| 1022 | + 'moodbar-header-timestamp' => 'Aikaleima', |
| 1023 | + 'moodbar-header-type' => 'Tyyppi', |
| 1024 | + 'moodbar-header-page' => 'Sivu', |
| 1025 | + 'moodbar-header-usertype' => 'Käyttäjän tyyppi', |
| 1026 | + 'moodbar-header-user' => 'Käyttäjä', |
| 1027 | + 'moodbar-header-editmode' => 'Muokkaustila', |
| 1028 | + 'moodbar-header-bucket' => 'Testauspaikka', |
| 1029 | + 'moodbar-header-system' => 'Järjestelmän tyyppi', |
| 1030 | + 'moodbar-header-locale' => 'Kieli', |
| 1031 | + 'moodbar-header-useragent' => 'Selain', |
| 1032 | + 'moodbar-header-comment' => 'Kommentit', |
| 1033 | + 'moodbar-header-user-editcount' => 'Käyttäjän muokkausmäärä', |
| 1034 | + 'moodbar-header-namespace' => 'Nimiavaruus', |
| 1035 | + 'moodbar-header-own-talk' => 'Oma keskustelusivu', |
| 1036 | + 'moodbar-type-happy' => 'Iloinen', |
| 1037 | + 'moodbar-type-sad' => 'Surullinen', |
| 1038 | + 'moodbar-type-confused' => 'Hämmentynyt', |
| 1039 | + 'moodbar-user-anonymized' => 'Nimetön', |
| 1040 | + 'moodbar-user-ip' => 'IP-osoite', |
| 1041 | + 'moodbar-user-user' => 'Rekisteröitynyt käyttäjä', |
| 1042 | +); |
| 1043 | + |
366 | 1044 | /** French (Français) |
| 1045 | + * @author ChrisPtDe |
367 | 1046 | * @author Crochet.david |
368 | 1047 | * @author Gomoko |
369 | 1048 | * @author Hashar |
| 1049 | + * @author IAlex |
370 | 1050 | * @author Tpt |
371 | 1051 | */ |
372 | 1052 | $messages['fr'] = array( |
— | — | @@ -400,6 +1080,7 @@ |
401 | 1081 | 'moodbar-success-subtitle' => 'Partager votre expérience nous aide à améliorer $1.', |
402 | 1082 | 'moodbar-error-subtitle' => "Quelque chose s'est mal passé ! Essayer de partager vos commentaires plus tard.", |
403 | 1083 | 'right-moodbar-view' => 'Afficher et exporter vos ressentis MoodBar', |
| 1084 | + 'right-moodbar-admin' => 'Modifier la visibilité sur le tableau de bord des commentaires', |
404 | 1085 | 'moodbar-admin-title' => 'Ressenti MoodBar', |
405 | 1086 | 'moodbar-admin-intro' => "Cette page vous permet d'afficher les ressentis fournis avec ModdBar.", |
406 | 1087 | 'moodbar-admin-empty' => 'Aucun résultat', |
— | — | @@ -418,43 +1099,126 @@ |
419 | 1100 | 'moodbar-header-user-editcount' => "Compteur d'édition", |
420 | 1101 | 'moodbar-header-namespace' => 'Espace de noms', |
421 | 1102 | 'moodbar-header-own-talk' => 'Page de discussion personnelle', |
| 1103 | + 'moodbar-feedback-title' => 'Tableau de bord des ressentis', |
| 1104 | + 'moodbar-feedback-filters' => 'Filtres', |
| 1105 | + 'moodbar-feedback-filters-type' => 'Humeur:', |
| 1106 | + 'moodbar-feedback-filters-type-happy' => 'Heureux', |
| 1107 | + 'moodbar-feedback-filters-type-confused' => 'Confus', |
| 1108 | + 'moodbar-feedback-filters-type-sad' => 'Triste', |
| 1109 | + 'moodbar-feedback-filters-username' => "Nom d'utilisateur", |
| 1110 | + 'moodbar-feedback-filters-button' => 'Positionner les filtres', |
| 1111 | + 'moodbar-feedback-whatis' => "Qu'est-ce que cette fonctionnalité?", |
| 1112 | + 'moodbar-feedback-permalink' => 'faire un lien vers ici', |
| 1113 | + 'moodbar-feedback-noresults' => "Il n'y a aucun commentaire qui correspond à vos filtres.", |
| 1114 | + 'moodbar-feedback-more' => 'Plus', |
| 1115 | + 'moodbar-feedback-nomore' => "Il n'y a plus de résultats à afficher.", |
| 1116 | + 'moodbar-feedback-newer' => 'Plus récent', |
| 1117 | + 'moodbar-feedback-older' => 'Plus ancien', |
| 1118 | + 'moodbar-feedback-ajaxerror' => "Une erreur s'est produite en recherchant plus de résultats.", |
| 1119 | + 'moodbar-user-hidden' => '(Utilisateur caché)', |
| 1120 | + 'moodbar-comment-hidden' => '(Commentaire caché par mesure administrative)', |
| 1121 | + 'moodbar-feedback-show' => 'afficher les commentaires cachés', |
| 1122 | + 'moodbar-feedback-hide' => 'masquer les commentaires', |
| 1123 | + 'moodbar-hidden-footer' => 'Commentaire caché, $1', |
| 1124 | + 'moodbar-feedback-restore' => 'restaurer les commentaires cachés', |
| 1125 | + 'moodbar-action-item' => 'Objet du commentaire :', |
| 1126 | + 'moodbar-hide-header' => "Cacher cet élément de l'affichage", |
| 1127 | + 'moodbar-restore-header' => 'Restaurer la visibilité de cet élément', |
| 1128 | + 'moodbar-invalid-item' => 'Le système a été incapable de trouver le commentaire correct.', |
422 | 1129 | 'moodbar-type-happy' => 'Heureux', |
423 | 1130 | 'moodbar-type-sad' => 'Triste', |
424 | 1131 | 'moodbar-type-confused' => 'Confus', |
425 | 1132 | 'moodbar-user-anonymized' => 'Anonymisé', |
426 | 1133 | 'moodbar-user-ip' => 'Adresse IP', |
427 | 1134 | 'moodbar-user-user' => 'Utilisateur enregistré', |
| 1135 | + 'moodbar-log-name' => 'Journal des commentaires', |
| 1136 | + 'moodbar-log-header' => 'Ceci est le journal des actions prises sur les commentaires listés sur [[Special:FeedbackDashboard|tableau de bord de commentaires]].', |
| 1137 | + 'moodbar-log-hide' => 'a caché [[$1]]', |
| 1138 | + 'moodbar-log-restore' => 'a restauré la visibilité de [[$1]]', |
428 | 1139 | ); |
429 | 1140 | |
430 | 1141 | /** Franco-Provençal (Arpetan) |
431 | 1142 | * @author ChrisPtDe |
432 | 1143 | */ |
433 | 1144 | $messages['frp'] = array( |
| 1145 | + 'moodbar-desc' => 'Pèrmèt ux utilisators spècefiâs de balyér lor avis sur lor èxpèrience d’èdicion.', |
| 1146 | + 'moodbar-trigger-feedback' => 'Voutros avis sur lo changement', |
| 1147 | + 'moodbar-trigger-share' => 'Partagiéd voutra èxpèrience', |
434 | 1148 | 'moodbar-trigger-editing' => 'Changement de $1...', |
435 | 1149 | 'moodbar-close' => '(cllôre)', |
| 1150 | + 'moodbar-intro-feedback' => 'Changiér $1 m’at rendu...', |
| 1151 | + 'moodbar-intro-share' => 'Mon èxpèrience dessus $1 m’at rendu...', |
| 1152 | + 'moodbar-intro-editing' => 'Changiér $1 m’at rendu...', |
436 | 1153 | 'moodbar-type-happy-title' => 'Herox', |
437 | 1154 | 'moodbar-type-sad-title' => 'Tristo', |
438 | 1155 | 'moodbar-type-confused-title' => 'Confondu', |
| 1156 | + 'tooltip-moodbar-what' => 'Nen savêr més sur cela fonccionalitât', |
439 | 1157 | 'moodbar-what-label' => 'Qu’est-o qu’il est ?', |
| 1158 | + 'moodbar-what-content' => 'Ceta fonccionalitât est conçua por édiér la comunôtât a comprendre l’èxpèrience a les gens que chanjont lo seto. |
| 1159 | +Por més d’enformacions, volyéd visitar la $1.', |
440 | 1160 | 'moodbar-what-link' => 'pâge que dècrit la fonccion', |
| 1161 | + 'moodbar-privacy' => 'En sometent, vos accèptâd una transparence en acôrd avouéc cetes $1.', |
| 1162 | + 'moodbar-privacy-link' => 'condicions', |
| 1163 | + 'moodbar-disable-link' => 'Su pas entèrèssiê. Volyéd dèsactivar cela fonccionalitât.', |
441 | 1164 | 'moodbar-form-title' => 'Perce que ...', |
| 1165 | + 'moodbar-form-note' => '140 caractèros u més', |
| 1166 | + 'moodbar-form-note-dynamic' => '$1 caractèros que réstont', |
| 1167 | + 'moodbar-form-submit' => 'Partagiér voutron avis', |
| 1168 | + 'moodbar-form-policy-text' => 'En sometent, $1', |
| 1169 | + 'moodbar-form-policy-label' => 'noutra politica', |
| 1170 | + 'moodbar-loading-title' => 'Partagiér...', |
442 | 1171 | 'moodbar-success-title' => 'Grant-marci !', |
443 | 1172 | 'moodbar-error-title' => 'Crenom !', |
| 1173 | + 'moodbar-success-subtitle' => 'Partagiér voutra èxpèrience nos éde a mèlyorar $1.', |
| 1174 | + 'moodbar-error-subtitle' => 'Quârque-ren s’est mâl passâ ! Volyéd tornar tâchiér de partagiér voutros avis ples târd.', |
| 1175 | + 'right-moodbar-view' => 'Fâre vêre et èxportar voutros avis MoodBar', |
| 1176 | + 'moodbar-admin-title' => 'Avis MoodBar', |
| 1177 | + 'moodbar-admin-intro' => 'Ceta pâge vos pèrmèt de fâre vêre los avis balyês avouéc MoodBar.', |
444 | 1178 | 'moodbar-admin-empty' => 'Gins de rèsultat', |
| 1179 | + 'moodbar-header-id' => 'Numerô d’avis', |
445 | 1180 | 'moodbar-header-timestamp' => 'Dâta et hora', |
446 | 1181 | 'moodbar-header-type' => 'Tipo', |
447 | 1182 | 'moodbar-header-page' => 'Pâge', |
| 1183 | + 'moodbar-header-usertype' => 'Tipo d’utilisator', |
448 | 1184 | 'moodbar-header-user' => 'Utilisator', |
| 1185 | + 'moodbar-header-editmode' => 'Fôrma èdicion', |
| 1186 | + 'moodbar-header-bucket' => 'Ensemblo d’èprôva', |
| 1187 | + 'moodbar-header-system' => 'Tipo de sistèmo', |
| 1188 | + 'moodbar-header-locale' => 'Règ·ionâl', |
449 | 1189 | 'moodbar-header-useragent' => 'Agent utilisator', |
450 | 1190 | 'moodbar-header-comment' => 'Comentèros', |
| 1191 | + 'moodbar-header-user-editcount' => 'Comptor de changements a l’utilisator', |
451 | 1192 | 'moodbar-header-namespace' => 'Èspâço de noms', |
452 | 1193 | 'moodbar-header-own-talk' => 'Pâge de discussion a sè', |
| 1194 | + 'moodbar-feedback-title' => 'Tablô de bôrd des avis', |
| 1195 | + 'moodbar-feedback-filters' => 'Filtros', |
| 1196 | + 'moodbar-feedback-filters-type' => 'Caractèro :', |
| 1197 | + 'moodbar-feedback-filters-type-happy' => 'Herox', |
| 1198 | + 'moodbar-feedback-filters-type-confused' => 'Confondu', |
| 1199 | + 'moodbar-feedback-filters-type-sad' => 'Tristo', |
| 1200 | + 'moodbar-feedback-filters-username' => 'Nom d’utilisator', |
| 1201 | + 'moodbar-feedback-filters-button' => 'Posicionar los filtros', |
| 1202 | + 'moodbar-feedback-whatis' => 'Qu’est-o que cela fonccionalitât ?', |
| 1203 | + 'moodbar-feedback-permalink' => 'fâre un lim de vers ique', |
| 1204 | + 'moodbar-feedback-more' => 'Més', |
| 1205 | + 'moodbar-feedback-newer' => 'Ples novél', |
| 1206 | + 'moodbar-feedback-older' => 'Ples viely', |
| 1207 | + 'moodbar-user-hidden' => '(Cachiê per utilisator)', |
| 1208 | + 'moodbar-comment-hidden' => '(Avis cachiê per mesera administrativa)', |
| 1209 | + 'moodbar-feedback-show' => 'fâre vêre los avis cachiês', |
| 1210 | + 'moodbar-feedback-hide' => 'cachiér los avis', |
| 1211 | + 'moodbar-hidden-footer' => 'Avis cachiê, $1', |
| 1212 | + 'moodbar-feedback-restore' => 'refâre los avis cachiês', |
| 1213 | + 'moodbar-action-item' => 'Chousa de l’avis :', |
453 | 1214 | 'moodbar-type-happy' => 'Herox', |
454 | 1215 | 'moodbar-type-sad' => 'Tristo', |
455 | 1216 | 'moodbar-type-confused' => 'Confondu', |
456 | 1217 | 'moodbar-user-anonymized' => 'Anonimisâ', |
457 | 1218 | 'moodbar-user-ip' => 'Adrèce IP', |
458 | 1219 | 'moodbar-user-user' => 'Utilisator encartâ', |
| 1220 | + 'moodbar-log-name' => 'Jornal des avis', |
| 1221 | + 'moodbar-log-hide' => 'at cachiê [[$1]]', |
| 1222 | + 'moodbar-log-restore' => 'at refêt la visibilitât de [[$1]]', |
459 | 1223 | ); |
460 | 1224 | |
461 | 1225 | /** Galician (Galego) |
— | — | @@ -492,6 +1256,7 @@ |
493 | 1257 | 'moodbar-success-subtitle' => 'Compartir a súa experiencia na edición axúdanos a mellorar $1.', |
494 | 1258 | 'moodbar-error-subtitle' => 'Algo foi mal! Intente compartir os seus comentarios máis tarde.', |
495 | 1259 | 'right-moodbar-view' => 'Ver e exportar a barra de comentarios', |
| 1260 | + 'right-moodbar-admin' => 'Alterar a visibilidade no taboleiro de comentarios', |
496 | 1261 | 'moodbar-admin-title' => 'Barra de comentarios', |
497 | 1262 | 'moodbar-admin-intro' => 'Esta páxina permite ver as valoracións enviadas a través da barra de comentarios.', |
498 | 1263 | 'moodbar-admin-empty' => 'Sen resultados', |
— | — | @@ -510,12 +1275,42 @@ |
511 | 1276 | 'moodbar-header-user-editcount' => 'Número de edición do usuario', |
512 | 1277 | 'moodbar-header-namespace' => 'Espazo de nomes', |
513 | 1278 | 'moodbar-header-own-talk' => 'Páxina de conversa propia', |
| 1279 | + 'moodbar-feedback-title' => 'Comentarios sobre o taboleiro', |
| 1280 | + 'moodbar-feedback-filters' => 'Filtros', |
| 1281 | + 'moodbar-feedback-filters-type' => 'Humor:', |
| 1282 | + 'moodbar-feedback-filters-type-happy' => 'Contento', |
| 1283 | + 'moodbar-feedback-filters-type-confused' => 'Confuso', |
| 1284 | + 'moodbar-feedback-filters-type-sad' => 'Triste', |
| 1285 | + 'moodbar-feedback-filters-username' => 'Nome de usuario', |
| 1286 | + 'moodbar-feedback-filters-button' => 'Definir os filtros', |
| 1287 | + 'moodbar-feedback-whatis' => 'Que é isto?', |
| 1288 | + 'moodbar-feedback-permalink' => 'ligazón cara aquí', |
| 1289 | + 'moodbar-feedback-noresults' => 'Non hai ningún comentario que coincida cos seus filtros.', |
| 1290 | + 'moodbar-feedback-more' => 'Máis', |
| 1291 | + 'moodbar-feedback-nomore' => 'Non hai máis resultados que mostrar.', |
| 1292 | + 'moodbar-feedback-newer' => 'Máis novos', |
| 1293 | + 'moodbar-feedback-older' => 'Máis vellos', |
| 1294 | + 'moodbar-feedback-ajaxerror' => 'Houbo un erro ao procurar máis resultados.', |
| 1295 | + 'moodbar-user-hidden' => '(Usuario agochado)', |
| 1296 | + 'moodbar-comment-hidden' => '(Comentario agochado por un administrador)', |
| 1297 | + 'moodbar-feedback-show' => 'mostrar o comentario agochado', |
| 1298 | + 'moodbar-feedback-hide' => 'agochar o comentario', |
| 1299 | + 'moodbar-hidden-footer' => 'Comentario agochado $1', |
| 1300 | + 'moodbar-feedback-restore' => 'restaurar o comentario agochado', |
| 1301 | + 'moodbar-action-item' => 'Elemento de valoración:', |
| 1302 | + 'moodbar-hide-header' => 'Agochar este elemento da vista', |
| 1303 | + 'moodbar-restore-header' => 'Restaurar a visibilidade deste elemento', |
| 1304 | + 'moodbar-invalid-item' => 'O sistema non puido atopar o elemento de valoración correcto.', |
514 | 1305 | 'moodbar-type-happy' => 'Contento', |
515 | 1306 | 'moodbar-type-sad' => 'Triste', |
516 | 1307 | 'moodbar-type-confused' => 'Confuso', |
517 | 1308 | 'moodbar-user-anonymized' => 'Anónimo', |
518 | 1309 | 'moodbar-user-ip' => 'Enderezo IP', |
519 | 1310 | 'moodbar-user-user' => 'Usuario rexistrado', |
| 1311 | + 'moodbar-log-name' => 'Rexistro de comentarios', |
| 1312 | + 'moodbar-log-header' => 'Este é o rexistro das accións levadas a cabo nos elementos de valoración listados no [[Special:FeedbackDashboard|taboleiro de comentarios]].', |
| 1313 | + 'moodbar-log-hide' => 'agochou "[[$1]]"', |
| 1314 | + 'moodbar-log-restore' => 'restaurou a visibilidade de "[[$1]]"', |
520 | 1315 | ); |
521 | 1316 | |
522 | 1317 | /** Hebrew (עברית) |
— | — | @@ -553,6 +1348,7 @@ |
554 | 1349 | 'moodbar-success-subtitle' => 'שיתוף חוויית המשתמש שלך עוזר לנו לשפר את $1.', |
555 | 1350 | 'moodbar-error-subtitle' => 'משהו השתבש! נא לנסות לשתף אותנו במשוב שלך מאוחר יותר.', |
556 | 1351 | 'right-moodbar-view' => 'הצגה וייצוא של משוב מסרגל מצב הרוח', |
| 1352 | + 'right-moodbar-admin' => 'לשנות נראוּת בלוח הבקרה של המשוב', |
557 | 1353 | 'moodbar-admin-title' => 'משוב על סרגל מצב הרוח', |
558 | 1354 | 'moodbar-admin-intro' => 'הדף הזה מאפשר לך לראות משוב שנשלח באמצעות סרגל מצב הרוח.', |
559 | 1355 | 'moodbar-admin-empty' => 'אין תוצאות', |
— | — | @@ -571,12 +1367,43 @@ |
572 | 1368 | 'moodbar-header-user-editcount' => 'מספר עריכות', |
573 | 1369 | 'moodbar-header-namespace' => 'מרחב שם', |
574 | 1370 | 'moodbar-header-own-talk' => 'דף שיחה של עצמי', |
| 1371 | + 'moodbar-feedback-title' => 'לוח בקרה של משובים', |
| 1372 | + 'moodbar-feedback-filters' => 'מסננים', |
| 1373 | + 'moodbar-feedback-filters-type' => 'מצב רוח:', |
| 1374 | + 'moodbar-feedback-filters-type-happy' => 'שמחה', |
| 1375 | + 'moodbar-feedback-filters-type-confused' => 'בלבול', |
| 1376 | + 'moodbar-feedback-filters-type-sad' => 'עצב', |
| 1377 | + 'moodbar-feedback-filters-username' => 'שם משתמש', |
| 1378 | + 'moodbar-feedback-filters-button' => 'הגדרת מסננים', |
| 1379 | + 'moodbar-feedback-whatis' => 'מהי התכונה הזו?', |
| 1380 | + 'moodbar-feedback-permalink' => 'קישור לכאן', |
| 1381 | + 'moodbar-feedback-noresults' => 'אין עוד תגובות שתואמות את המסננים שלך.', |
| 1382 | + 'moodbar-feedback-more' => ' |
| 1383 | +עוד', |
| 1384 | + 'moodbar-feedback-nomore' => 'אין עוד תוצאות להציג.', |
| 1385 | + 'moodbar-feedback-newer' => 'חדשות יותר', |
| 1386 | + 'moodbar-feedback-older' => 'ישנות יותר', |
| 1387 | + 'moodbar-feedback-ajaxerror' => 'אירעה שגיאה בעת אחזור תוצאות נוספות.', |
| 1388 | + 'moodbar-user-hidden' => '(חשבון מוסתר)', |
| 1389 | + 'moodbar-comment-hidden' => '(המשוב הוסתר על־ידי פעולת מנהל)', |
| 1390 | + 'moodbar-feedback-show' => 'הצגת משוב מוסתר', |
| 1391 | + 'moodbar-feedback-hide' => 'הסתרת משוב', |
| 1392 | + 'moodbar-hidden-footer' => 'משוב מוסתר $1', |
| 1393 | + 'moodbar-feedback-restore' => 'שחזור משוב מוסתר', |
| 1394 | + 'moodbar-action-item' => 'פריט משוב:', |
| 1395 | + 'moodbar-hide-header' => 'הסתרת הפריט הזה מהתצוגה', |
| 1396 | + 'moodbar-restore-header' => 'שחזור הנראוּת של הפריט הזה', |
| 1397 | + 'moodbar-invalid-item' => 'המערכת לא הצליחה למצא את פריט המשוב הנכון.', |
575 | 1398 | 'moodbar-type-happy' => 'שמחה', |
576 | 1399 | 'moodbar-type-sad' => 'עצב', |
577 | 1400 | 'moodbar-type-confused' => 'בלבול', |
578 | 1401 | 'moodbar-user-anonymized' => 'ללא פרטים מזהים', |
579 | 1402 | 'moodbar-user-ip' => 'כתובת IP', |
580 | 1403 | 'moodbar-user-user' => 'משתמש רשום', |
| 1404 | + 'moodbar-log-name' => 'יומן משוב', |
| 1405 | + 'moodbar-log-header' => 'זהו יומן של פעולות שנעשו על פריטי משוב שרשומים ב[[Special:FeedbackDashboard|לוח הבקרה של המשוב]].', |
| 1406 | + 'moodbar-log-hide' => 'הסתיר את [[$1]]', |
| 1407 | + 'moodbar-log-restore' => 'שחזר את הנראוּת של [[$1]]', |
581 | 1408 | ); |
582 | 1409 | |
583 | 1410 | /** Interlingua (Interlingua) |
— | — | @@ -599,7 +1426,7 @@ |
600 | 1427 | 'moodbar-what-content' => 'Iste function es concipite pro adjutar le communitate a comprender le experientia del personas qui modifica le sito. |
601 | 1428 | Pro ulterior information, per favor visita le $1.', |
602 | 1429 | 'moodbar-what-link' => 'pagina de function', |
603 | | - 'moodbar-privacy' => 'Per submitter, tu te declara de accordo que tu contribution sia public in concordantia con iste $1.', |
| 1430 | + 'moodbar-privacy' => 'Per submitter, tu accepta que tu contribution essera usate publicamente sub iste $1.', |
604 | 1431 | 'moodbar-privacy-link' => 'conditiones', |
605 | 1432 | 'moodbar-disable-link' => 'Isto non me interessa. Per favor disactiva iste function.', |
606 | 1433 | 'moodbar-form-title' => 'Perque...', |
— | — | @@ -614,6 +1441,7 @@ |
615 | 1442 | 'moodbar-success-subtitle' => 'Per specificar tu experientia durante le modification, tu nos adjuta a meliorar $1.', |
616 | 1443 | 'moodbar-error-subtitle' => 'Un problema ha occurrite! Per favor tenta specificar tu retroaction de novo plus tarde.', |
617 | 1444 | 'right-moodbar-view' => 'Vider e exportar reactiones del Barra de Humor', |
| 1445 | + 'right-moodbar-admin' => 'Alterar le visibilitate sur le pannello de retroaction', |
618 | 1446 | 'moodbar-admin-title' => 'Reactiones del Barra de Humor', |
619 | 1447 | 'moodbar-admin-intro' => 'Iste pagina permitte vider reactiones submittite con le Barra de Humor', |
620 | 1448 | 'moodbar-admin-empty' => 'Nulle resultato', |
— | — | @@ -632,12 +1460,42 @@ |
633 | 1461 | 'moodbar-header-user-editcount' => 'Numero de modificationes del usator', |
634 | 1462 | 'moodbar-header-namespace' => 'Spatio de nomines', |
635 | 1463 | 'moodbar-header-own-talk' => 'Pagina de discussion proprie', |
| 1464 | + 'moodbar-feedback-title' => 'Pannello de retroaction', |
| 1465 | + 'moodbar-feedback-filters' => 'Filtros', |
| 1466 | + 'moodbar-feedback-filters-type' => 'Humor:', |
| 1467 | + 'moodbar-feedback-filters-type-happy' => 'Felice', |
| 1468 | + 'moodbar-feedback-filters-type-confused' => 'Confuse', |
| 1469 | + 'moodbar-feedback-filters-type-sad' => 'Triste', |
| 1470 | + 'moodbar-feedback-filters-username' => 'Nomine de usator', |
| 1471 | + 'moodbar-feedback-filters-button' => 'Definir filtros', |
| 1472 | + 'moodbar-feedback-whatis' => 'Que es isto?', |
| 1473 | + 'moodbar-feedback-permalink' => 'ligamine a hic', |
| 1474 | + 'moodbar-feedback-noresults' => 'Il non ha commentos que corresponde con tu filtros.', |
| 1475 | + 'moodbar-feedback-more' => 'Plus', |
| 1476 | + 'moodbar-feedback-nomore' => 'Il non ha plus resultatos a monstrar.', |
| 1477 | + 'moodbar-feedback-newer' => 'Plus nove', |
| 1478 | + 'moodbar-feedback-older' => 'Plus ancian', |
| 1479 | + 'moodbar-feedback-ajaxerror' => 'Un error ha occurrite durante le obtention de altere resultatos.', |
| 1480 | + 'moodbar-user-hidden' => '(Usator celate)', |
| 1481 | + 'moodbar-comment-hidden' => '(Commentario celate per action administrative)', |
| 1482 | + 'moodbar-feedback-show' => 'monstrar commentario celate', |
| 1483 | + 'moodbar-feedback-hide' => 'celar commentario', |
| 1484 | + 'moodbar-hidden-footer' => 'Commentario celate $1', |
| 1485 | + 'moodbar-feedback-restore' => 'restaurar commentario celate', |
| 1486 | + 'moodbar-action-item' => 'Elemento de retroaction:', |
| 1487 | + 'moodbar-hide-header' => 'Render iste elemento invisibile', |
| 1488 | + 'moodbar-restore-header' => 'Restaurar le visibilitate de iste elemento', |
| 1489 | + 'moodbar-invalid-item' => 'Le systema non poteva trovar le elemento de retroaction correcte.', |
636 | 1490 | 'moodbar-type-happy' => 'Felice', |
637 | 1491 | 'moodbar-type-sad' => 'Triste', |
638 | 1492 | 'moodbar-type-confused' => 'Confuse', |
639 | 1493 | 'moodbar-user-anonymized' => 'Anonymisate', |
640 | 1494 | 'moodbar-user-ip' => 'Adresse IP', |
641 | 1495 | 'moodbar-user-user' => 'Usator registrate', |
| 1496 | + 'moodbar-log-name' => 'Registro de retroaction', |
| 1497 | + 'moodbar-log-header' => 'Isto es le registro de actiones prendite sur elementos de retroaction listate in le [[Special:FeedbackDashboard|pannello de retroaction]].', |
| 1498 | + 'moodbar-log-hide' => 'celava [[$1]]', |
| 1499 | + 'moodbar-log-restore' => 'restaurava le visibilitate de [[$1]]', |
642 | 1500 | ); |
643 | 1501 | |
644 | 1502 | /** Colognian (Ripoarisch) |
— | — | @@ -645,7 +1503,7 @@ |
646 | 1504 | */ |
647 | 1505 | $messages['ksh'] = array( |
648 | 1506 | 'moodbar-close' => '(zohmaache)', |
649 | | - 'moodbar-privacy' => 'Wä heh jät enjitt, moß met dä $1 enverschtande sen, söns moß mer et sennlohße.', |
| 1507 | + 'moodbar-privacy' => 'Wä heh jät enjitt, moß met dä $1 enverschtande sen, söns moß mer et blieve lohße.', |
650 | 1508 | 'moodbar-privacy-link' => 'Begengonge', |
651 | 1509 | 'moodbar-success-title' => 'Mer bedanke uns.', |
652 | 1510 | ); |
— | — | @@ -689,10 +1547,30 @@ |
690 | 1548 | 'moodbar-header-usertype' => 'Benotzer-Typ', |
691 | 1549 | 'moodbar-header-user' => 'Benotzer', |
692 | 1550 | 'moodbar-header-editmode' => 'Ännerungsmodus', |
| 1551 | + 'moodbar-header-useragent' => 'Browser', |
693 | 1552 | 'moodbar-header-comment' => 'Bemierkungen', |
694 | 1553 | 'moodbar-header-user-editcount' => 'Compteur vun den Ännerunge pro Benotzer', |
695 | 1554 | 'moodbar-header-namespace' => 'Nummraum', |
696 | 1555 | 'moodbar-header-own-talk' => 'Eegen Diskussiounssäit', |
| 1556 | + 'moodbar-feedback-filters' => 'Filteren', |
| 1557 | + 'moodbar-feedback-filters-type' => 'Stëmmung:', |
| 1558 | + 'moodbar-feedback-filters-type-happy' => 'Glécklech', |
| 1559 | + 'moodbar-feedback-filters-type-confused' => 'Duercherneen', |
| 1560 | + 'moodbar-feedback-filters-type-sad' => 'Traureg', |
| 1561 | + 'moodbar-feedback-filters-username' => 'Benotzernumm', |
| 1562 | + 'moodbar-feedback-filters-button' => 'Filtere setzen', |
| 1563 | + 'moodbar-feedback-whatis' => 'Wéi dës Fonctioun fonctionnéiert.', |
| 1564 | + 'moodbar-feedback-permalink' => 'Heihi verlinken', |
| 1565 | + 'moodbar-feedback-noresults' => 'Et gëtt keng Bemierkungen déi op Är Filtere passen.', |
| 1566 | + 'moodbar-feedback-more' => 'Méi', |
| 1567 | + 'moodbar-feedback-nomore' => 'Et gëtt ne tméi Resultater fir ze weisen.', |
| 1568 | + 'moodbar-feedback-newer' => 'Méi rezent', |
| 1569 | + 'moodbar-feedback-older' => 'Méi al', |
| 1570 | + 'moodbar-feedback-ajaxerror' => 'Am Sichen no méi Resultater ass e Feeler geschitt.', |
| 1571 | + 'moodbar-user-hidden' => '(Benotzer verstoppt)', |
| 1572 | + 'moodbar-feedback-show' => 'verstoppte Feedback weisen', |
| 1573 | + 'moodbar-feedback-hide' => 'Feedback verstoppen', |
| 1574 | + 'moodbar-hidden-footer' => 'Verstoppte Feedback $1', |
697 | 1575 | 'moodbar-type-happy' => 'Glécklech', |
698 | 1576 | 'moodbar-type-sad' => 'Traureg', |
699 | 1577 | 'moodbar-type-confused' => 'Duercherneen', |
— | — | @@ -701,11 +1579,46 @@ |
702 | 1580 | 'moodbar-user-user' => 'Registréierte Benotzer', |
703 | 1581 | ); |
704 | 1582 | |
| 1583 | +/** Lithuanian (Lietuvių) |
| 1584 | + * @author Eitvys200 |
| 1585 | + */ |
| 1586 | +$messages['lt'] = array( |
| 1587 | + 'moodbar-trigger-share' => 'Pasidalinkite savo patirtimi', |
| 1588 | + 'moodbar-trigger-editing' => 'Taisoma $1...', |
| 1589 | + 'moodbar-close' => '(uždaryti)', |
| 1590 | + 'moodbar-type-happy-title' => 'Laimingas', |
| 1591 | + 'moodbar-type-sad-title' => 'Liūdnas', |
| 1592 | + 'moodbar-type-confused-title' => 'Sutrikęs', |
| 1593 | + 'tooltip-moodbar-what' => 'Sužinokite daugiau apie šią funkciją', |
| 1594 | + 'moodbar-what-label' => 'Kas tai?', |
| 1595 | + 'moodbar-privacy-link' => 'sąlygos', |
| 1596 | + 'moodbar-form-title' => 'Nes...', |
| 1597 | + 'moodbar-form-note' => '140 simbolių daugiausia', |
| 1598 | + 'moodbar-form-policy-label' => 'mūsų politika', |
| 1599 | + 'moodbar-loading-title' => 'Dalijimasis ...', |
| 1600 | + 'moodbar-success-title' => 'Ačiū!', |
| 1601 | + 'moodbar-error-title' => 'Oi!', |
| 1602 | + 'moodbar-admin-empty' => 'Nėra rezultatų', |
| 1603 | + 'moodbar-header-id' => 'Atsiliepimo ID', |
| 1604 | + 'moodbar-header-timestamp' => 'Laiko žymė', |
| 1605 | + 'moodbar-header-type' => 'Tipas', |
| 1606 | + 'moodbar-header-page' => 'Puslapis', |
| 1607 | + 'moodbar-header-usertype' => 'Vartotojo tipas', |
| 1608 | + 'moodbar-header-user' => 'Vartotojas', |
| 1609 | + 'moodbar-header-editmode' => 'Redagavimo režimas', |
| 1610 | + 'moodbar-header-bucket' => 'Testavimo kibiras', |
| 1611 | + 'moodbar-header-system' => 'Sistemos tipas', |
| 1612 | + 'moodbar-header-comment' => 'Komentarai', |
| 1613 | + 'moodbar-type-happy' => 'Laimingas', |
| 1614 | + 'moodbar-type-sad' => 'Liūdnas', |
| 1615 | + 'moodbar-user-ip' => 'IP Adresas', |
| 1616 | +); |
| 1617 | + |
705 | 1618 | /** Macedonian (Македонски) |
706 | 1619 | * @author Bjankuloski06 |
707 | 1620 | */ |
708 | 1621 | $messages['mk'] = array( |
709 | | - 'moodbar-desc' => '!Им овозможува на одредени корисници да даваат мислење за уредувањето', |
| 1622 | + 'moodbar-desc' => 'Им овозможува на одредени корисници да даваат мислење за уредувањето', |
710 | 1623 | 'moodbar-trigger-feedback' => 'Мислења за уредувањето', |
711 | 1624 | 'moodbar-trigger-share' => 'Споделете го вашето искуство', |
712 | 1625 | 'moodbar-trigger-editing' => 'Уредување на $1...', |
— | — | @@ -736,6 +1649,7 @@ |
737 | 1650 | 'moodbar-success-subtitle' => 'Споделувајќи го вашето уредувачко искуство ни помагате да ја подобриме $1.', |
738 | 1651 | 'moodbar-error-subtitle' => 'Нешто не е во ред! Обидете се да го споделите вашето мислење подоцна.', |
739 | 1652 | 'right-moodbar-view' => 'Преглед и извоз на мислења од MoodBar', |
| 1653 | + 'right-moodbar-admin' => 'Менување на видливоста на таблата за мислења', |
740 | 1654 | 'moodbar-admin-title' => 'Мислења со MoodBar', |
741 | 1655 | 'moodbar-admin-intro' => 'Оваа страница служи за преглед на мислења поднесени со MoodBar', |
742 | 1656 | 'moodbar-admin-empty' => 'Нема резултати', |
— | — | @@ -754,12 +1668,42 @@ |
755 | 1669 | 'moodbar-header-user-editcount' => 'Бр. на кориснички уредувања', |
756 | 1670 | 'moodbar-header-namespace' => 'Именски простор', |
757 | 1671 | 'moodbar-header-own-talk' => 'Сопствена страница за разговор', |
| 1672 | + 'moodbar-feedback-title' => 'Табла за мислења', |
| 1673 | + 'moodbar-feedback-filters' => 'Филтри', |
| 1674 | + 'moodbar-feedback-filters-type' => 'Расположение:', |
| 1675 | + 'moodbar-feedback-filters-type-happy' => 'Среќни', |
| 1676 | + 'moodbar-feedback-filters-type-confused' => 'Збунети', |
| 1677 | + 'moodbar-feedback-filters-type-sad' => 'Тажни', |
| 1678 | + 'moodbar-feedback-filters-username' => 'Корисничко име', |
| 1679 | + 'moodbar-feedback-filters-button' => 'Задај филтри', |
| 1680 | + 'moodbar-feedback-whatis' => 'Што прави оваа функција?', |
| 1681 | + 'moodbar-feedback-permalink' => 'врска до страницава', |
| 1682 | + 'moodbar-feedback-noresults' => 'Нема коментари што се совпаѓаат со филтрите.', |
| 1683 | + 'moodbar-feedback-more' => 'Повеќе', |
| 1684 | + 'moodbar-feedback-nomore' => 'Нема повеќе резултати за прикажување.', |
| 1685 | + 'moodbar-feedback-newer' => 'Понови', |
| 1686 | + 'moodbar-feedback-older' => 'Постари', |
| 1687 | + 'moodbar-feedback-ajaxerror' => 'Се појави грешка при обидот да добијам повеќе резултати.', |
| 1688 | + 'moodbar-user-hidden' => '(Корисникот е скриен)', |
| 1689 | + 'moodbar-comment-hidden' => '(Мислењата се скриени од администратор)', |
| 1690 | + 'moodbar-feedback-show' => 'прикажи скриени мислења', |
| 1691 | + 'moodbar-feedback-hide' => 'скриј мислења', |
| 1692 | + 'moodbar-hidden-footer' => 'Скриено мислење $1', |
| 1693 | + 'moodbar-feedback-restore' => 'поврати скриени мислења', |
| 1694 | + 'moodbar-action-item' => 'Мислење:', |
| 1695 | + 'moodbar-hide-header' => 'Скриј го мислењето', |
| 1696 | + 'moodbar-restore-header' => 'Врати ја видливоста на мислењето', |
| 1697 | + 'moodbar-invalid-item' => 'Системот не можеше да го најде бараното мислење', |
758 | 1698 | 'moodbar-type-happy' => 'Среќен', |
759 | 1699 | 'moodbar-type-sad' => 'Тажен', |
760 | 1700 | 'moodbar-type-confused' => 'Збунет', |
761 | 1701 | 'moodbar-user-anonymized' => 'Анонимизирано', |
762 | 1702 | 'moodbar-user-ip' => 'IP-адреса', |
763 | 1703 | 'moodbar-user-user' => 'Регистриран корисник', |
| 1704 | + 'moodbar-log-name' => 'Дневник на мислења', |
| 1705 | + 'moodbar-log-header' => 'Ова е дневник на дејства што се однесуваат на мислењата искажани на [[Special:FeedbackDashboard|таблата за мислења и коментари]].', |
| 1706 | + 'moodbar-log-hide' => 'скриено [[$1]]', |
| 1707 | + 'moodbar-log-restore' => 'вратена видливоста на [[$1]]', |
764 | 1708 | ); |
765 | 1709 | |
766 | 1710 | /** Malayalam (മലയാളം) |
— | — | @@ -801,11 +1745,19 @@ |
802 | 1746 | 'moodbar-header-usertype' => 'ഉപയോക്തൃതരം', |
803 | 1747 | 'moodbar-header-user' => 'ഉപയോക്താവ്', |
804 | 1748 | 'moodbar-header-editmode' => 'തിരുത്തൽ രൂപം', |
| 1749 | + 'moodbar-header-bucket' => 'പരീക്ഷണ തൊട്ടി', |
805 | 1750 | 'moodbar-header-system' => 'സിസ്റ്റം തരം', |
806 | 1751 | 'moodbar-header-comment' => 'അഭിപ്രായങ്ങൾ', |
807 | 1752 | 'moodbar-header-user-editcount' => 'ഉപയോക്തൃ തിരുത്തലുകളുടെ എണ്ണം', |
808 | 1753 | 'moodbar-header-namespace' => 'നാമമേഖല', |
809 | 1754 | 'moodbar-header-own-talk' => 'സ്വന്തം സംവാദം താൾ', |
| 1755 | + 'moodbar-feedback-filters-type' => 'തരം:', |
| 1756 | + 'moodbar-feedback-filters-username' => 'ഉപയോക്തൃനാമം', |
| 1757 | + 'moodbar-feedback-more' => 'കൂടുതൽ', |
| 1758 | + 'moodbar-feedback-newer' => 'പുതിയവ', |
| 1759 | + 'moodbar-feedback-older' => 'പഴയവ', |
| 1760 | + 'moodbar-feedback-ajaxerror' => 'കൂടുതൽ ഫലങ്ങൾ ശേഖരിക്കുന്നതിനിടെ പിഴവുണ്ടയി.', |
| 1761 | + 'moodbar-user-hidden' => '(ഉപയോക്താവ് മറയ്ക്കപ്പെട്ടിരിക്കുന്നു)', |
810 | 1762 | 'moodbar-type-happy' => 'സന്തോഷം', |
811 | 1763 | 'moodbar-type-sad' => 'ദുഃഖം', |
812 | 1764 | 'moodbar-type-confused' => 'ആശയക്കുഴപ്പം', |
— | — | @@ -849,6 +1801,7 @@ |
850 | 1802 | 'moodbar-success-subtitle' => 'Berkongsi pengalaman menyunting anda membantu kami meningkatkan $1.', |
851 | 1803 | 'moodbar-error-subtitle' => 'Ada yang tak kena! Sila cuba berkongsi maklum balas anda kemudian.', |
852 | 1804 | 'right-moodbar-view' => 'Lihat dan eksport maklum balas MoodBar', |
| 1805 | + 'right-moodbar-admin' => 'Mengubah keterlihatan di papan pemuka maklum balas', |
853 | 1806 | 'moodbar-admin-title' => 'Maklum balas MoodBar', |
854 | 1807 | 'moodbar-admin-intro' => 'Laman ini membolehkan anda melihat maklum balas yang dihantar bersama MoodBar.', |
855 | 1808 | 'moodbar-admin-empty' => 'Tiada hasil', |
— | — | @@ -861,18 +1814,48 @@ |
862 | 1815 | 'moodbar-header-editmode' => 'Mod sunting', |
863 | 1816 | 'moodbar-header-bucket' => 'Timba ujian', |
864 | 1817 | 'moodbar-header-system' => 'Jenis sistem', |
865 | | - 'moodbar-header-locale' => 'Lokal', |
| 1818 | + 'moodbar-header-locale' => 'Tempat', |
866 | 1819 | 'moodbar-header-useragent' => 'Ejen Pengguna', |
867 | 1820 | 'moodbar-header-comment' => 'Komen', |
868 | 1821 | 'moodbar-header-user-editcount' => 'Kiraan suntingan pengguna', |
869 | 1822 | 'moodbar-header-namespace' => 'Ruang nama', |
870 | 1823 | 'moodbar-header-own-talk' => 'Laman perbincangan sendiri', |
| 1824 | + 'moodbar-feedback-title' => 'Papan pemuka maklum balas', |
| 1825 | + 'moodbar-feedback-filters' => 'Penapis', |
| 1826 | + 'moodbar-feedback-filters-type' => 'Angin:', |
| 1827 | + 'moodbar-feedback-filters-type-happy' => 'Gembira', |
| 1828 | + 'moodbar-feedback-filters-type-confused' => 'Keliru', |
| 1829 | + 'moodbar-feedback-filters-type-sad' => 'Sedih', |
| 1830 | + 'moodbar-feedback-filters-username' => 'Nama pengguna', |
| 1831 | + 'moodbar-feedback-filters-button' => 'Tetapkan penapis', |
| 1832 | + 'moodbar-feedback-whatis' => 'Ciri ini apa?', |
| 1833 | + 'moodbar-feedback-permalink' => 'pautkan ke sini', |
| 1834 | + 'moodbar-feedback-noresults' => 'Tiada komen yang sepadan dengan tapisan anda.', |
| 1835 | + 'moodbar-feedback-more' => 'Lagi', |
| 1836 | + 'moodbar-feedback-nomore' => 'Tiada lagi hasil untuk ditunjukkan.', |
| 1837 | + 'moodbar-feedback-newer' => 'Lebih baru', |
| 1838 | + 'moodbar-feedback-older' => 'Lebih lama', |
| 1839 | + 'moodbar-feedback-ajaxerror' => 'Ralat berlaku ketika mengambil lebih banyak hasil.', |
| 1840 | + 'moodbar-user-hidden' => '(Pengguna tersorok)', |
| 1841 | + 'moodbar-comment-hidden' => '(Maklum balas disorokkan oleh tindakan pentadbiran)', |
| 1842 | + 'moodbar-feedback-show' => 'tunjukkan maklum balas tersorok', |
| 1843 | + 'moodbar-feedback-hide' => 'sorokkan maklum balas', |
| 1844 | + 'moodbar-hidden-footer' => 'Maklum Balas Tersorok $1', |
| 1845 | + 'moodbar-feedback-restore' => 'pulihkan maklum balas tersorok', |
| 1846 | + 'moodbar-action-item' => 'Butiran maklum balas:', |
| 1847 | + 'moodbar-hide-header' => 'Sorokkan butiran ini dari pandangan', |
| 1848 | + 'moodbar-restore-header' => 'Perlihatkan semula butiran ini', |
| 1849 | + 'moodbar-invalid-item' => 'Sistem tidak dapat mencari butiran maklum balas yang betul.', |
871 | 1850 | 'moodbar-type-happy' => 'Gembira', |
872 | 1851 | 'moodbar-type-sad' => 'Sedih', |
873 | 1852 | 'moodbar-type-confused' => 'Keliru', |
874 | 1853 | 'moodbar-user-anonymized' => 'Rahsia', |
875 | 1854 | 'moodbar-user-ip' => 'Alamat IP', |
876 | 1855 | 'moodbar-user-user' => 'Pengguna berdaftar', |
| 1856 | + 'moodbar-log-name' => 'Log maklum balas', |
| 1857 | + 'moodbar-log-header' => 'Inilah log tindakan kepada butiran maklum balas yang tersenarai dalam [[Special:FeedbackDashboard|papan pemuka maklum balas]].', |
| 1858 | + 'moodbar-log-hide' => 'menyorokkan [[$1]]', |
| 1859 | + 'moodbar-log-restore' => 'memperlihatkan semula [[$1]]', |
877 | 1860 | ); |
878 | 1861 | |
879 | 1862 | /** Dutch (Nederlands) |
— | — | @@ -893,7 +1876,7 @@ |
894 | 1877 | 'moodbar-type-confused-title' => 'Verward', |
895 | 1878 | 'tooltip-moodbar-what' => 'Meer informatie over deze functie', |
896 | 1879 | 'moodbar-what-label' => 'Wat is dit?', |
897 | | - 'moodbar-what-content' => 'Deze functie is ontworpen om de gemeenschap de ervaring van mensen die de site bewerken, te helpen begrijpen. |
| 1880 | + 'moodbar-what-content' => 'Deze functie is ontworpen om de ervaring van mensen die de site bewerken te helpen begrijpen. |
898 | 1881 | Ga naar de $1 voor mee informatie.', |
899 | 1882 | 'moodbar-what-link' => 'pagina over deze functie', |
900 | 1883 | 'moodbar-privacy' => 'Door te delen gaat u akkoord met transparantie onder deze $1.', |
— | — | @@ -911,6 +1894,7 @@ |
912 | 1895 | 'moodbar-success-subtitle' => 'Door het delen van uw ervaringen bij het bewerken, helpt u mee $1 te verbeteren.', |
913 | 1896 | 'moodbar-error-subtitle' => 'Er is iets misgegaan! Probeer later opnieuw uw terugkoppeling te delen.', |
914 | 1897 | 'right-moodbar-view' => 'MoodBar-terugkoppeling bekijken en exporteren', |
| 1898 | + 'right-moodbar-admin' => 'Zichtbaarheid van de terugkoppelingsdashboard wijzigen', |
915 | 1899 | 'moodbar-admin-title' => 'MoodBar-terugkoppeling', |
916 | 1900 | 'moodbar-admin-intro' => 'Deze pagina laat u toe om terugkoppeling die met de MoodBar is verzonden, te bekijken', |
917 | 1901 | 'moodbar-admin-empty' => 'Geen resultaten', |
— | — | @@ -929,18 +1913,61 @@ |
930 | 1914 | 'moodbar-header-user-editcount' => 'Aantal bewerkingen van de gebruiker', |
931 | 1915 | 'moodbar-header-namespace' => 'Naamruimte', |
932 | 1916 | 'moodbar-header-own-talk' => 'Eigen overlegpagina', |
| 1917 | + 'moodbar-feedback-title' => 'Dashboard voor terugkoppeling', |
| 1918 | + 'moodbar-feedback-filters' => 'Filters', |
| 1919 | + 'moodbar-feedback-filters-type' => 'Stemming:', |
| 1920 | + 'moodbar-feedback-filters-type-happy' => 'Blij', |
| 1921 | + 'moodbar-feedback-filters-type-confused' => 'Verward', |
| 1922 | + 'moodbar-feedback-filters-type-sad' => 'Triest', |
| 1923 | + 'moodbar-feedback-filters-username' => 'Gebruikersnaam', |
| 1924 | + 'moodbar-feedback-filters-button' => 'Filters instellen', |
| 1925 | + 'moodbar-feedback-whatis' => 'Wat doet deze functie?', |
| 1926 | + 'moodbar-feedback-permalink' => 'hierheen verwijzen', |
| 1927 | + 'moodbar-feedback-noresults' => 'Er zijn geen opmerkingen die voldoen aan uw filters.', |
| 1928 | + 'moodbar-feedback-more' => 'Meer', |
| 1929 | + 'moodbar-feedback-nomore' => 'Er zijn niet meer weer te geven resultaten.', |
| 1930 | + 'moodbar-feedback-newer' => 'Nieuwere', |
| 1931 | + 'moodbar-feedback-older' => 'Oudere', |
| 1932 | + 'moodbar-feedback-ajaxerror' => 'Er is een fout opgetreden bij het ophalen van meer resultaten.', |
| 1933 | + 'moodbar-user-hidden' => '(Gebruiker verborgen)', |
| 1934 | + 'moodbar-comment-hidden' => '(Terugkoppeling verborgen door een administratieve handeling)', |
| 1935 | + 'moodbar-feedback-show' => 'verborgen terugkoppeling weergeven', |
| 1936 | + 'moodbar-feedback-hide' => 'terugkoppeling verbergen', |
| 1937 | + 'moodbar-hidden-footer' => 'Verborgen terugkoppeling $1', |
| 1938 | + 'moodbar-feedback-restore' => 'verborgen terugkoppeling herstellen', |
| 1939 | + 'moodbar-action-item' => 'Terugkoppelingsitem:', |
| 1940 | + 'moodbar-hide-header' => 'Dit item verbergen uit weergave', |
| 1941 | + 'moodbar-restore-header' => 'De zichtbaarheid van dit item herstellen', |
| 1942 | + 'moodbar-invalid-item' => 'Het systeem kon het juiste terugkoppelingsitem niet vinden.', |
933 | 1943 | 'moodbar-type-happy' => 'Blij', |
934 | 1944 | 'moodbar-type-sad' => 'Triest', |
935 | 1945 | 'moodbar-type-confused' => 'Verward', |
936 | 1946 | 'moodbar-user-anonymized' => 'Geanonimiseerd', |
937 | 1947 | 'moodbar-user-ip' => 'IP-adres', |
938 | 1948 | 'moodbar-user-user' => 'Geregistreerde gebruiker', |
| 1949 | + 'moodbar-log-name' => 'Terugkoppelingslogboek', |
| 1950 | + 'moodbar-log-header' => 'Dit is een logboek met uitgevoerde handelingen op items uit het [[Special:FeedbackDashboard|terugkoppelingsdashboard]].', |
| 1951 | + 'moodbar-log-hide' => 'heeft [[$1]] verborgen', |
| 1952 | + 'moodbar-log-restore' => 'herstelde de zichtbaarheid voor [[$1]]', |
939 | 1953 | ); |
940 | 1954 | |
941 | 1955 | /** Norwegian (bokmål) (Norsk (bokmål)) |
942 | 1956 | * @author Event |
| 1957 | + * @author Nghtwlkr |
943 | 1958 | */ |
944 | 1959 | $messages['no'] = array( |
| 1960 | + 'moodbar-close' => '(lukk)', |
| 1961 | + 'moodbar-type-happy-title' => 'Glad', |
| 1962 | + 'moodbar-type-sad-title' => 'Trist', |
| 1963 | + 'moodbar-type-confused-title' => 'Forvirret', |
| 1964 | + 'moodbar-form-title' => 'Fordi...', |
| 1965 | + 'moodbar-form-note' => 'maksimum 140 tegn', |
| 1966 | + 'moodbar-form-note-dynamic' => '$1 tegn igjen', |
| 1967 | + 'moodbar-success-title' => 'Takk!', |
| 1968 | + 'moodbar-error-title' => 'Ups!', |
| 1969 | + 'moodbar-admin-empty' => 'Ingen resultater', |
| 1970 | + 'moodbar-header-type' => 'Type', |
| 1971 | + 'moodbar-header-page' => 'Side', |
945 | 1972 | 'moodbar-header-user' => 'Bruker', |
946 | 1973 | 'moodbar-header-editmode' => 'Redigeringsmodus', |
947 | 1974 | 'moodbar-header-bucket' => 'Testebøtte', |
— | — | @@ -957,13 +1984,22 @@ |
958 | 1985 | 'moodbar-user-user' => 'Registrert bruker', |
959 | 1986 | ); |
960 | 1987 | |
| 1988 | +/** Oriya (ଓଡ଼ିଆ) |
| 1989 | + * @author Psubhashish |
| 1990 | + */ |
| 1991 | +$messages['or'] = array( |
| 1992 | + 'moodbar-header-timestamp' => 'ସମୟଚିହ୍ନ', |
| 1993 | +); |
| 1994 | + |
961 | 1995 | /** Polish (Polski) |
| 1996 | + * @author Leinad |
| 1997 | + * @author Masti |
962 | 1998 | * @author Sp5uhe |
963 | 1999 | */ |
964 | 2000 | $messages['pl'] = array( |
965 | 2001 | 'moodbar-desc' => 'Pozwala określonym użytkownikom na wyrażenie opinii o posiadanym doświadczeniu w edytowaniu', |
966 | 2002 | 'moodbar-trigger-feedback' => 'Opinia na temat edytowania', |
967 | | - 'moodbar-trigger-share' => 'Podziel się swoim doświadczeniem', |
| 2003 | + 'moodbar-trigger-share' => 'Podziel się swoimi wrażeniami', |
968 | 2004 | 'moodbar-trigger-editing' => 'Edytowanie {{GRAMMAR:D.lp|$1}}...', |
969 | 2005 | 'moodbar-close' => '(zamknij)', |
970 | 2006 | 'moodbar-intro-feedback' => 'Edytowanie {{GRAMMAR:D.lp|$1}} przyniosło mi...', |
— | — | @@ -974,9 +2010,9 @@ |
975 | 2011 | 'moodbar-type-confused-title' => 'mieszane uczucia', |
976 | 2012 | 'tooltip-moodbar-what' => 'Więcej informacji na temat tej funkcji', |
977 | 2013 | 'moodbar-what-label' => 'O co tu chodzi?', |
978 | | - 'moodbar-what-content' => 'Ten dodatek pomaga społeczności zrozumieć doświadczenia osób edytujących projekt. |
| 2014 | + 'moodbar-what-content' => 'To narzędzie pomaga społeczności zrozumieć doświadczenia osób edytujących projekt. |
979 | 2015 | Więcej informacji uzyskasz na $1.', |
980 | | - 'moodbar-what-link' => 'tej stronie', |
| 2016 | + 'moodbar-what-link' => 'stronie opisu tego narzędzia', |
981 | 2017 | 'moodbar-privacy' => 'Przesyłając, wyrażasz zgodę na udostępnienie na następujących $1.', |
982 | 2018 | 'moodbar-privacy-link' => 'warunkach', |
983 | 2019 | 'moodbar-disable-link' => 'Nie jestem zainteresowany. Proszę wyłączyć tę funkcję.', |
— | — | @@ -992,6 +2028,7 @@ |
993 | 2029 | 'moodbar-success-subtitle' => 'Wymiana doświadczeń w edytowaniu pomaga udoskonalać {{GRAMMAR:MS.lp|$1}}.', |
994 | 2030 | 'moodbar-error-subtitle' => 'Coś poszło źle! Spróbuj udostępnić swoją opinię ponownie za jakiś czas.', |
995 | 2031 | 'right-moodbar-view' => 'Widok i eksport opinii MoodBar', |
| 2032 | + 'right-moodbar-admin' => 'Zmiana widoczności elementów na tablicy otrzymanych opinii', |
996 | 2033 | 'moodbar-admin-title' => 'Opinie MoodBar', |
997 | 2034 | 'moodbar-admin-intro' => 'Strona umożliwia przeglądanie opinii zapisanych przy pomocy MoodBar.', |
998 | 2035 | 'moodbar-admin-empty' => 'Brak wyników', |
— | — | @@ -1010,6 +2047,27 @@ |
1011 | 2048 | 'moodbar-header-user-editcount' => 'Licznik edycji użytkownika', |
1012 | 2049 | 'moodbar-header-namespace' => 'Przestrzeń nazw', |
1013 | 2050 | 'moodbar-header-own-talk' => 'Własna strona dyskusji', |
| 2051 | + 'moodbar-feedback-title' => 'Tablica z otrzymanymi opiniami', |
| 2052 | + 'moodbar-feedback-filters' => 'Filtrowanie', |
| 2053 | + 'moodbar-feedback-filters-type' => 'Nastrój', |
| 2054 | + 'moodbar-feedback-filters-type-happy' => 'szczęśliwy', |
| 2055 | + 'moodbar-feedback-filters-type-confused' => 'mieszane uczucia', |
| 2056 | + 'moodbar-feedback-filters-type-sad' => 'smutny', |
| 2057 | + 'moodbar-feedback-filters-username' => 'Nazwa użytkownika', |
| 2058 | + 'moodbar-feedback-filters-button' => 'Filtruj', |
| 2059 | + 'moodbar-feedback-whatis' => 'Jak działa to narzędzie?', |
| 2060 | + 'moodbar-feedback-permalink' => 'link do tej opinii', |
| 2061 | + 'moodbar-feedback-noresults' => 'Brak opinii pasujących do wybranego filtru.', |
| 2062 | + 'moodbar-feedback-more' => 'Więcej', |
| 2063 | + 'moodbar-feedback-nomore' => 'Nie ma więcej opinii do wyświetlenia.', |
| 2064 | + 'moodbar-feedback-newer' => 'Nowsze', |
| 2065 | + 'moodbar-feedback-older' => 'Starsze', |
| 2066 | + 'moodbar-feedback-ajaxerror' => 'Wystąpił błąd przy pobieraniu kolejnych wyników.', |
| 2067 | + 'moodbar-user-hidden' => '(Użytkownik ukryty)', |
| 2068 | + 'moodbar-comment-hidden' => '(Opinia ukryta na skutek działania administracyjnego)', |
| 2069 | + 'moodbar-feedback-show' => 'pokaż ukrytą opinię', |
| 2070 | + 'moodbar-feedback-hide' => 'ukryj opinię', |
| 2071 | + 'moodbar-feedback-restore' => 'przywróć ukrytą opinię', |
1014 | 2072 | 'moodbar-type-happy' => 'Szczęśliwy', |
1015 | 2073 | 'moodbar-type-sad' => 'Smutny', |
1016 | 2074 | 'moodbar-type-confused' => 'Zmieszany', |
— | — | @@ -1018,6 +2076,88 @@ |
1019 | 2077 | 'moodbar-user-user' => 'Zarejestrowany użytkownik', |
1020 | 2078 | ); |
1021 | 2079 | |
| 2080 | +/** Piedmontese (Piemontèis) |
| 2081 | + * @author Borichèt |
| 2082 | + * @author Dragonòt |
| 2083 | + */ |
| 2084 | +$messages['pms'] = array( |
| 2085 | + 'moodbar-desc' => "A përmët a j'utent spessificà ëd dé soa opinion su soa esperiensa ëd modìfica", |
| 2086 | + 'moodbar-trigger-feedback' => 'Coment an sla modìfica', |
| 2087 | + 'moodbar-trigger-share' => "Ch'a partagia soa esperiensa", |
| 2088 | + 'moodbar-trigger-editing' => 'Modifiché $1...', |
| 2089 | + 'moodbar-close' => '(saré)', |
| 2090 | + 'moodbar-intro-feedback' => "Modifiché $1 a l'ha fame...", |
| 2091 | + 'moodbar-intro-share' => "Mia esperiensa su $1 a l'ha fame...", |
| 2092 | + 'moodbar-intro-editing' => "Modifiché $1 a l'ha fame...", |
| 2093 | + 'moodbar-type-happy-title' => 'Content', |
| 2094 | + 'moodbar-type-sad-title' => 'Scontent', |
| 2095 | + 'moodbar-type-confused-title' => 'Confus', |
| 2096 | + 'tooltip-moodbar-what' => 'Amprende ëd pi su sta funsionalità', |
| 2097 | + 'moodbar-what-label' => "Lòn ch'a l'é sossì?", |
| 2098 | + 'moodbar-what-content' => "Sta funsionalità a l'é progetà për giuté la comunità a capì l'esperiensa ëd përson-e ch'a modifico ël sit. |
| 2099 | +Për savèjne ëd pi, për piasì vìsita ël $1.", |
| 2100 | + 'moodbar-what-link' => 'pàgina ëd funsionalità', |
| 2101 | + 'moodbar-privacy' => 'An sgnacand, a aceta na trasparensa conforma a coste $1.', |
| 2102 | + 'moodbar-privacy-link' => 'condission', |
| 2103 | + 'moodbar-disable-link' => 'I son pa anteressà. Për piasì disabìlita sta funsionalità-sì.', |
| 2104 | + 'moodbar-form-title' => 'Përchè...', |
| 2105 | + 'moodbar-form-note' => '140 caràter al pi', |
| 2106 | + 'moodbar-form-note-dynamic' => "$1 caràter ch'a resto", |
| 2107 | + 'moodbar-form-submit' => 'Partagé soa opinion', |
| 2108 | + 'moodbar-form-policy-text' => 'An sgnacand, $1', |
| 2109 | + 'moodbar-form-policy-label' => 'nòstre régole', |
| 2110 | + 'moodbar-loading-title' => 'Partagé...', |
| 2111 | + 'moodbar-success-title' => 'Mersì!', |
| 2112 | + 'moodbar-error-title' => 'Contacc!', |
| 2113 | + 'moodbar-success-subtitle' => 'Partagé soa esperiensa ëd modìfica an giuta a amelioré $1.', |
| 2114 | + 'moodbar-error-subtitle' => "Quaicòs a l'é andàit mal! Për piasì, ch'a preuva a partagé ij tò coment torna pi tard.", |
| 2115 | + 'right-moodbar-view' => "Smon-e e esporté lòn ch'a pensa ëd MoodBar", |
| 2116 | + 'moodbar-admin-title' => 'Opinion MoodBar', |
| 2117 | + 'moodbar-admin-intro' => "Costa pàgina a-j përmët ëd vëdde j'opinion mandà con ël MoodBar.", |
| 2118 | + 'moodbar-admin-empty' => 'Gnun arzultà', |
| 2119 | + 'moodbar-header-id' => "ID d'opinion", |
| 2120 | + 'moodbar-header-timestamp' => 'Stampin data e ora', |
| 2121 | + 'moodbar-header-type' => 'Sòrt', |
| 2122 | + 'moodbar-header-page' => 'Pàgina', |
| 2123 | + 'moodbar-header-usertype' => "Sòrt d'utent", |
| 2124 | + 'moodbar-header-user' => 'Utent', |
| 2125 | + 'moodbar-header-editmode' => 'Manera ëd modìfica', |
| 2126 | + 'moodbar-header-bucket' => 'Ansema ëd preuva', |
| 2127 | + 'moodbar-header-system' => 'Sòrt ëd sistema', |
| 2128 | + 'moodbar-header-locale' => 'Local', |
| 2129 | + 'moodbar-header-useragent' => 'Agent-Utent', |
| 2130 | + 'moodbar-header-comment' => 'Coment', |
| 2131 | + 'moodbar-header-user-editcount' => "Conteur ëd le modìfiche dl'utent", |
| 2132 | + 'moodbar-header-namespace' => 'Spassi nominal', |
| 2133 | + 'moodbar-header-own-talk' => 'Pàgina ëd discussion përsonal', |
| 2134 | + 'moodbar-type-happy' => 'Content', |
| 2135 | + 'moodbar-type-sad' => 'Scontent', |
| 2136 | + 'moodbar-type-confused' => 'Confus', |
| 2137 | + 'moodbar-user-anonymized' => 'Anonimisà', |
| 2138 | + 'moodbar-user-ip' => 'Adrëssa IP', |
| 2139 | + 'moodbar-user-user' => 'Utent registrà', |
| 2140 | +); |
| 2141 | + |
| 2142 | +/** Pashto (پښتو) |
| 2143 | + * @author Ahmed-Najib-Biabani-Ibrahimkhel |
| 2144 | + */ |
| 2145 | +$messages['ps'] = array( |
| 2146 | + 'moodbar-close' => '(تړل)', |
| 2147 | + 'moodbar-type-happy-title' => 'خوښ', |
| 2148 | + 'moodbar-type-sad-title' => 'خپه', |
| 2149 | + 'moodbar-what-label' => 'دا څه دی؟', |
| 2150 | + 'moodbar-form-title' => 'د دې پخاطر...', |
| 2151 | + 'moodbar-success-title' => 'مننه!', |
| 2152 | + 'moodbar-admin-empty' => 'بې پايلو', |
| 2153 | + 'moodbar-header-page' => 'مخ', |
| 2154 | + 'moodbar-header-user' => 'کارن', |
| 2155 | + 'moodbar-feedback-filters' => 'چاڼګرونه', |
| 2156 | + 'moodbar-feedback-filters-type-happy' => 'خوښ', |
| 2157 | + 'moodbar-feedback-filters-username' => 'کارن-نوم', |
| 2158 | + 'moodbar-type-happy' => 'خوښ', |
| 2159 | + 'moodbar-type-sad' => 'خپه', |
| 2160 | +); |
| 2161 | + |
1022 | 2162 | /** Portuguese (Português) |
1023 | 2163 | * @author Hamilton Abreu |
1024 | 2164 | */ |
— | — | @@ -1079,7 +2219,182 @@ |
1080 | 2220 | 'moodbar-user-user' => 'Utilizador registado', |
1081 | 2221 | ); |
1082 | 2222 | |
| 2223 | +/** Brazilian Portuguese (Português do Brasil) |
| 2224 | + * @author MetalBrasil |
| 2225 | + */ |
| 2226 | +$messages['pt-br'] = array( |
| 2227 | + 'moodbar-desc' => 'Permite que usuários específicados enviem ao operador do site uma indicação da sua experiência em edição', |
| 2228 | + 'moodbar-trigger-feedback' => 'Comentários sobre edição', |
| 2229 | + 'moodbar-trigger-share' => 'Partilhe sua experiência', |
| 2230 | + 'moodbar-trigger-editing' => 'Editando $1...', |
| 2231 | + 'moodbar-close' => '(fechar)', |
| 2232 | + 'moodbar-intro-feedback' => 'Editar a $1 fez-me sentir...', |
| 2233 | + 'moodbar-intro-share' => 'A minha experiência em $1 fez-me sentir...', |
| 2234 | + 'moodbar-intro-editing' => 'Editar a $1 fez-me sentir...', |
| 2235 | + 'moodbar-type-happy-title' => 'Feliz', |
| 2236 | + 'moodbar-type-sad-title' => 'Triste', |
| 2237 | + 'moodbar-type-confused-title' => 'Confuso', |
| 2238 | + 'tooltip-moodbar-what' => 'Saiba mais sobre esta função', |
| 2239 | + 'moodbar-what-label' => 'O que é isto?', |
| 2240 | + 'moodbar-what-content' => 'Este recurso foi programado para ajudar a comunidade a entender a experiência das pessoas que editam o site. Para mais informações, por favor, visite $1.', |
| 2241 | + 'moodbar-what-link' => 'Página do recurso', |
| 2242 | + 'moodbar-privacy' => 'Ao enviar, você estará concordando com a transparência nestas $1', |
| 2243 | + 'moodbar-privacy-link' => 'Termos', |
| 2244 | + 'moodbar-disable-link' => 'Não estou interessado. Por favor, desative este recurso.', |
| 2245 | + 'moodbar-form-title' => 'Porque...', |
| 2246 | + 'moodbar-form-note' => '140 caracteres no máximo', |
| 2247 | + 'moodbar-form-note-dynamic' => ' restam $1 caracteres', |
| 2248 | + 'moodbar-form-submit' => 'Compartilhar comentários', |
| 2249 | + 'moodbar-form-policy-text' => 'Ao enviar, $1', |
| 2250 | + 'moodbar-form-policy-label' => 'A nossa política', |
| 2251 | + 'moodbar-loading-title' => 'Compartilhando...', |
| 2252 | + 'moodbar-success-title' => 'Obrigado!', |
| 2253 | + 'moodbar-error-title' => 'Erro!', |
| 2254 | + 'moodbar-success-subtitle' => 'Compartilhar sua experiência de edição nos ajuda a melhorar $1.', |
| 2255 | + 'moodbar-error-subtitle' => 'Algo deu errado! Por favor, tente enviar o seus comentários de novo mais tarde.', |
| 2256 | + 'right-moodbar-view' => 'Visualizar e exportar os comentários da MoodBar', |
| 2257 | + 'moodbar-admin-title' => 'Comentários da MoodBar', |
| 2258 | + 'moodbar-admin-intro' => 'Essa página permite que você visualize comentários enviados com a MoodBar.', |
| 2259 | + 'moodbar-admin-empty' => 'Nenhum resultado.', |
| 2260 | + 'moodbar-header-id' => 'ID do comentário', |
| 2261 | + 'moodbar-header-timestamp' => 'Data e hora', |
| 2262 | + 'moodbar-header-type' => 'Tipo', |
| 2263 | + 'moodbar-header-page' => 'Página', |
| 2264 | + 'moodbar-header-usertype' => 'Tipo de usuário', |
| 2265 | + 'moodbar-header-user' => 'Usuário', |
| 2266 | + 'moodbar-header-editmode' => 'Modo de edição', |
| 2267 | + 'moodbar-header-bucket' => 'Zona de testes', |
| 2268 | + 'moodbar-header-system' => 'Tipo de sistema', |
| 2269 | + 'moodbar-header-locale' => 'Local', |
| 2270 | + 'moodbar-header-useragent' => 'Agente usuário', |
| 2271 | + 'moodbar-header-comment' => 'Comentários', |
| 2272 | + 'moodbar-header-user-editcount' => 'Contador de edições do usuário', |
| 2273 | + 'moodbar-header-namespace' => 'Espaço nominal', |
| 2274 | + 'moodbar-header-own-talk' => 'Página de conversa própria', |
| 2275 | + 'moodbar-type-happy' => 'Feliz', |
| 2276 | + 'moodbar-type-sad' => 'Triste', |
| 2277 | + 'moodbar-type-confused' => 'Confuso', |
| 2278 | + 'moodbar-user-anonymized' => 'Tornado anônimo', |
| 2279 | + 'moodbar-user-ip' => 'Endereço de IP', |
| 2280 | + 'moodbar-user-user' => 'Usuário cadastrado', |
| 2281 | +); |
| 2282 | + |
| 2283 | +/** Romanian (Română) |
| 2284 | + * @author Firilacroco |
| 2285 | + */ |
| 2286 | +$messages['ro'] = array( |
| 2287 | + 'moodbar-desc' => 'Permite utilizatorilor specificați să își trimită părerea despre experiența lor din timpul editării', |
| 2288 | + 'moodbar-trigger-feedback' => 'Părerea dumneavoastră despre modificare', |
| 2289 | + 'moodbar-trigger-share' => 'Împărtășiți experiența dumneavoastră', |
| 2290 | + 'moodbar-trigger-editing' => 'Modificare $1...', |
| 2291 | + 'moodbar-close' => '(închide)', |
| 2292 | + 'moodbar-intro-feedback' => 'Contribuirea pe $1 m-a făcut...', |
| 2293 | + 'moodbar-intro-share' => 'Experiența mea pe $1 m-a făcut...', |
| 2294 | + 'moodbar-intro-editing' => 'Contribuirea la $1 m-a făcut...', |
| 2295 | + 'moodbar-type-happy-title' => 'Fericit', |
| 2296 | + 'moodbar-type-sad-title' => 'Trist', |
| 2297 | + 'moodbar-type-confused-title' => 'Confuz', |
| 2298 | + 'tooltip-moodbar-what' => 'Aflați mai multe despre această funcție', |
| 2299 | + 'moodbar-what-label' => 'Ce este aceasta?', |
| 2300 | + 'moodbar-what-content' => 'Această funcție este concepută să ajute comunitatea să înțeleagă experiențele oamenilor din timpul modificării site-ului. |
| 2301 | +Pentru mai multe informații, vizitați $1.', |
| 2302 | + 'moodbar-what-link' => 'pagina funcției', |
| 2303 | + 'moodbar-privacy' => 'Prin trimitere, sunteți de acord cu acești $1.', |
| 2304 | + 'moodbar-privacy-link' => 'termeni', |
| 2305 | + 'moodbar-disable-link' => 'Nu sunt interesat. Dezactivează această funcție.', |
| 2306 | + 'moodbar-form-title' => 'Deoarece...', |
| 2307 | + 'moodbar-form-note' => 'maximum 140 de caractere', |
| 2308 | + 'moodbar-form-note-dynamic' => '$1 caractere rămase', |
| 2309 | + 'moodbar-form-submit' => 'Trimite părerea', |
| 2310 | + 'moodbar-form-policy-text' => 'Prin trimitere, $1', |
| 2311 | + 'moodbar-form-policy-label' => 'politica noastră', |
| 2312 | + 'moodbar-loading-title' => 'Partajare...', |
| 2313 | + 'moodbar-success-title' => 'Mulțumesc!', |
| 2314 | + 'moodbar-error-title' => 'Ups!', |
| 2315 | + 'moodbar-success-subtitle' => 'Împărtășindu-ne experiența dumneavoastră ne ajutați să îmbunătățim $1.', |
| 2316 | + 'moodbar-error-subtitle' => 'Ceva nu a mers bine! Încercați din nou mai târziu.', |
| 2317 | + 'right-moodbar-view' => 'Vizualizați și exportați părerile trimise prin MoodBar', |
| 2318 | + 'moodbar-admin-title' => 'Feedback MoodBar', |
| 2319 | + 'moodbar-admin-intro' => 'Această pagină vă permite să vizualizați părerile trimise cu MoodBar.', |
| 2320 | + 'moodbar-admin-empty' => 'Niciun rezultat', |
| 2321 | + 'moodbar-header-id' => 'ID părere', |
| 2322 | + 'moodbar-header-timestamp' => 'Data și ora', |
| 2323 | + 'moodbar-header-type' => 'Tip', |
| 2324 | + 'moodbar-header-page' => 'Pagină', |
| 2325 | + 'moodbar-header-usertype' => 'Tip de utilizator', |
| 2326 | + 'moodbar-header-user' => 'Utilizator', |
| 2327 | + 'moodbar-header-editmode' => 'Modul de editare', |
| 2328 | + 'moodbar-header-system' => 'Tipul de sistem', |
| 2329 | + 'moodbar-header-locale' => 'Regional', |
| 2330 | + 'moodbar-header-useragent' => 'Agent utilizator', |
| 2331 | + 'moodbar-header-comment' => 'Comentarii', |
| 2332 | + 'moodbar-header-user-editcount' => 'Număr contribuții utilizator', |
| 2333 | + 'moodbar-header-namespace' => 'Spațiu de nume', |
| 2334 | + 'moodbar-header-own-talk' => 'Pagina proprie de discuții', |
| 2335 | + 'moodbar-type-happy' => 'Fericit', |
| 2336 | + 'moodbar-type-sad' => 'Trist', |
| 2337 | + 'moodbar-type-confused' => 'Confuz', |
| 2338 | + 'moodbar-user-anonymized' => 'Transmise anonime', |
| 2339 | + 'moodbar-user-ip' => 'Adresă IP', |
| 2340 | + 'moodbar-user-user' => 'Utilizator înregistrat', |
| 2341 | +); |
| 2342 | + |
| 2343 | +/** Tarandíne (Tarandíne) |
| 2344 | + * @author Joetaras |
| 2345 | + */ |
| 2346 | +$messages['roa-tara'] = array( |
| 2347 | + 'moodbar-trigger-feedback' => 'Feedback sus a le cangiaminde', |
| 2348 | + 'moodbar-trigger-share' => "Condivide l'esperienza toje", |
| 2349 | + 'moodbar-trigger-editing' => 'Stoche a cange $1 ...', |
| 2350 | + 'moodbar-close' => '(chiude)', |
| 2351 | + 'moodbar-intro-feedback' => 'Cangiamende de $1 fatte da me...', |
| 2352 | + 'moodbar-intro-editing' => 'Cangiamende de $1 fatte da me...', |
| 2353 | + 'moodbar-type-happy-title' => 'Felice', |
| 2354 | + 'moodbar-type-sad-title' => 'Triste', |
| 2355 | + 'moodbar-type-confused-title' => 'Confuse', |
| 2356 | + 'moodbar-what-label' => 'Ce jè quiste?', |
| 2357 | + 'moodbar-what-link' => 'pàgene de dettaglie', |
| 2358 | + 'moodbar-privacy-link' => 'termine', |
| 2359 | + 'moodbar-form-title' => 'Purcé...', |
| 2360 | + 'moodbar-form-note' => '140 carattere massime', |
| 2361 | + 'moodbar-form-note-dynamic' => '$1 carattere rumaste', |
| 2362 | + 'moodbar-form-submit' => "Condivide 'u feedback", |
| 2363 | + 'moodbar-form-policy-text' => 'Da confermà, $1', |
| 2364 | + 'moodbar-form-policy-label' => 'le reghele nuèstre', |
| 2365 | + 'moodbar-loading-title' => 'Stoche a condivide...', |
| 2366 | + 'moodbar-success-title' => 'Grazie!', |
| 2367 | + 'moodbar-error-title' => "Ohhhhh! C'è scritte!", |
| 2368 | + 'right-moodbar-view' => "Vide e esporte 'u feedbacl de MoodBar", |
| 2369 | + 'moodbar-admin-title' => 'Feedback de MoodBar', |
| 2370 | + 'moodbar-admin-intro' => "Sta pàgene te face vedè le feedback tune confermate cu 'a MoodBar.", |
| 2371 | + 'moodbar-admin-empty' => 'Nisciune resultate', |
| 2372 | + 'moodbar-header-id' => "ID d'u feedback", |
| 2373 | + 'moodbar-header-timestamp' => 'Orarie de stambe', |
| 2374 | + 'moodbar-header-type' => 'Tipe', |
| 2375 | + 'moodbar-header-page' => 'Pàgene', |
| 2376 | + 'moodbar-header-usertype' => "Tipe d'utende", |
| 2377 | + 'moodbar-header-user' => 'Utende', |
| 2378 | + 'moodbar-header-editmode' => 'Mode pu cangiamende', |
| 2379 | + 'moodbar-header-bucket' => "Stoche a test 'u secchie", |
| 2380 | + 'moodbar-header-system' => 'Tipe de sisteme', |
| 2381 | + 'moodbar-header-locale' => 'Locale', |
| 2382 | + 'moodbar-header-useragent' => 'Utende agente', |
| 2383 | + 'moodbar-header-comment' => 'Commende', |
| 2384 | + 'moodbar-header-user-editcount' => "Condatore de le cangiaminde de l'utende", |
| 2385 | + 'moodbar-header-namespace' => 'Namespace', |
| 2386 | + 'moodbar-header-own-talk' => "Pàgene de le 'ngazzaminde meje", |
| 2387 | + 'moodbar-feedback-filters-username' => "Nome de l'utende", |
| 2388 | + 'moodbar-type-happy' => 'Felice', |
| 2389 | + 'moodbar-type-sad' => 'Triste', |
| 2390 | + 'moodbar-type-confused' => 'Confuse', |
| 2391 | + 'moodbar-user-anonymized' => 'Anonimate', |
| 2392 | + 'moodbar-user-ip' => 'Indirizze IP', |
| 2393 | + 'moodbar-user-user' => 'Utende reggistrate', |
| 2394 | + 'moodbar-log-hide' => 'scunne "[[$1]]"', |
| 2395 | +); |
| 2396 | + |
1083 | 2397 | /** Russian (Русский) |
| 2398 | + * @author Engineering |
1084 | 2399 | * @author Александр Сигачёв |
1085 | 2400 | */ |
1086 | 2401 | $messages['ru'] = array( |
— | — | @@ -1114,6 +2429,7 @@ |
1115 | 2430 | 'moodbar-success-subtitle' => 'Поделившись своим опытом, вы поможете нам улучшить $1.', |
1116 | 2431 | 'moodbar-error-subtitle' => 'Что-то пошло не так! Пожалуйста, попробуйте отправить ваш отзыв позднее.', |
1117 | 2432 | 'right-moodbar-view' => 'Просмотр и экспорт отзывов MoodBar', |
| 2433 | + 'right-moodbar-admin' => 'Изменить видимость на панели отзывов', |
1118 | 2434 | 'moodbar-admin-title' => 'Отзыв MoodBar', |
1119 | 2435 | 'moodbar-admin-intro' => 'Эта страница позволяет просматривать отзывы, отправленные с помощью MoodBar.', |
1120 | 2436 | 'moodbar-admin-empty' => 'Нет данных', |
— | — | @@ -1132,14 +2448,105 @@ |
1133 | 2449 | 'moodbar-header-user-editcount' => 'Число правок участника', |
1134 | 2450 | 'moodbar-header-namespace' => 'Пространство имён', |
1135 | 2451 | 'moodbar-header-own-talk' => 'Собственная страница обсуждения', |
| 2452 | + 'moodbar-feedback-title' => 'Панель отзывов', |
| 2453 | + 'moodbar-feedback-filters' => 'Фильтры', |
| 2454 | + 'moodbar-feedback-filters-type' => 'Настроение:', |
| 2455 | + 'moodbar-feedback-filters-type-happy' => 'Радость', |
| 2456 | + 'moodbar-feedback-filters-type-confused' => 'Замешательство', |
| 2457 | + 'moodbar-feedback-filters-type-sad' => 'Грусть', |
| 2458 | + 'moodbar-feedback-filters-username' => 'Имя участника', |
| 2459 | + 'moodbar-feedback-filters-button' => 'Установка фильтров', |
| 2460 | + 'moodbar-feedback-whatis' => 'Что это за функции?', |
| 2461 | + 'moodbar-feedback-permalink' => 'ссылка сюда', |
| 2462 | + 'moodbar-feedback-noresults' => 'Нет комментариев, соответствующих вашим фильтрам.', |
| 2463 | + 'moodbar-feedback-more' => 'Ещё', |
| 2464 | + 'moodbar-feedback-nomore' => 'Больше нет данных для отображения.', |
| 2465 | + 'moodbar-feedback-newer' => 'Более новые', |
| 2466 | + 'moodbar-feedback-older' => 'Более старые', |
| 2467 | + 'moodbar-feedback-ajaxerror' => 'Произошла ошибка при получении дополнительных данных.', |
| 2468 | + 'moodbar-user-hidden' => '(Участник скрыт)', |
| 2469 | + 'moodbar-comment-hidden' => '(Отзыв скрыт администратором)', |
| 2470 | + 'moodbar-feedback-show' => 'показать скрытый отзыв', |
| 2471 | + 'moodbar-feedback-hide' => 'скрыть отзыв', |
| 2472 | + 'moodbar-hidden-footer' => 'Скрытый отзыв $1', |
| 2473 | + 'moodbar-feedback-restore' => 'восстановить скрытый отзыв', |
| 2474 | + 'moodbar-action-item' => 'Пункт Обратная связь:', |
| 2475 | + 'moodbar-hide-header' => 'Скрыть этот элемент из представления', |
| 2476 | + 'moodbar-restore-header' => 'Восстановить видимость этого пункта', |
| 2477 | + 'moodbar-invalid-item' => 'Системе не удалось найти правильного элемента обратной связи.', |
1136 | 2478 | 'moodbar-type-happy' => 'Радость', |
1137 | 2479 | 'moodbar-type-sad' => 'Грусть', |
1138 | 2480 | 'moodbar-type-confused' => 'Замешательство', |
1139 | 2481 | 'moodbar-user-anonymized' => 'Аноним', |
1140 | 2482 | 'moodbar-user-ip' => 'IP-адрес', |
1141 | 2483 | 'moodbar-user-user' => 'Зарегистрированный участник', |
| 2484 | + 'moodbar-log-name' => 'Журнал обратной связи', |
| 2485 | + 'moodbar-log-header' => 'Это журнал действий, связанных с обратной связью, см. список на [[Специальный: FeedbackDashboard|панели обратной связи]].', |
| 2486 | + 'moodbar-log-hide' => 'скрыть [[$1]]', |
| 2487 | + 'moodbar-log-restore' => 'восстановил видимость для [[$1]]', |
1142 | 2488 | ); |
1143 | 2489 | |
| 2490 | +/** Rusyn (Русиньскый) |
| 2491 | + * @author Gazeb |
| 2492 | + */ |
| 2493 | +$messages['rue'] = array( |
| 2494 | + 'moodbar-desc' => 'Доволює становленым хоснователям придати одозву з їх скусеностей з едітованя', |
| 2495 | + 'moodbar-trigger-feedback' => 'Одозва про едітованя', |
| 2496 | + 'moodbar-trigger-share' => 'Здїляти вашы скусености', |
| 2497 | + 'moodbar-trigger-editing' => 'Едітованя $1...', |
| 2498 | + 'moodbar-close' => '(заперти)', |
| 2499 | + 'moodbar-intro-feedback' => 'Едітованя $1 ня зробило...', |
| 2500 | + 'moodbar-intro-share' => 'Моя скусеность на $1 ня зробила...', |
| 2501 | + 'moodbar-intro-editing' => 'Едітованя $1 ня зробило...', |
| 2502 | + 'moodbar-type-happy-title' => 'Щастливый', |
| 2503 | + 'moodbar-type-sad-title' => 'Смутный', |
| 2504 | + 'moodbar-type-confused-title' => 'Ошаленый', |
| 2505 | + 'tooltip-moodbar-what' => 'Дізнайте ся веце про тоту функцію', |
| 2506 | + 'moodbar-what-label' => 'Што є тото?', |
| 2507 | + 'moodbar-what-content' => 'Тота функція є становлена про поміч комунітї порозуміти скусености людей, котры едітують сайт. |
| 2508 | +Про веце інформацій навщівте $1.', |
| 2509 | + 'moodbar-what-link' => 'наступну сторінку', |
| 2510 | + 'moodbar-privacy' => 'Одосланём сьте згодны з публічностёв дат під $1.', |
| 2511 | + 'moodbar-privacy-link' => 'условіях', |
| 2512 | + 'moodbar-disable-link' => 'Я не мам інтерес. Прошу выпнийте тоту функцію.', |
| 2513 | + 'moodbar-form-title' => 'Зато же...', |
| 2514 | + 'moodbar-form-note' => 'не веце 140 сімболів.', |
| 2515 | + 'moodbar-form-note-dynamic' => '$1 сімболів зістало', |
| 2516 | + 'moodbar-form-submit' => 'Подїлити ся одозвов', |
| 2517 | + 'moodbar-form-policy-text' => 'Посылаючі, $1', |
| 2518 | + 'moodbar-form-policy-label' => 'нашы правила', |
| 2519 | + 'moodbar-loading-title' => 'Здїляня...', |
| 2520 | + 'moodbar-success-title' => 'Дякуєме!', |
| 2521 | + 'moodbar-error-title' => 'Оёёй!', |
| 2522 | + 'moodbar-success-subtitle' => 'Здїляня вашых скусеностей з едітованём на поможе вылїпшыти $1.', |
| 2523 | + 'moodbar-error-subtitle' => 'Штось не добрї пішло! Просиме, спробуйте здїляти одозву знову пізнїше.', |
| 2524 | + 'right-moodbar-view' => 'Нагляд і експорт одозвы про MoodBar', |
| 2525 | + 'moodbar-admin-title' => 'Одозвы про MoodBar', |
| 2526 | + 'moodbar-admin-intro' => 'Тота сторінка доволює відїти одозвы посланы за помочі MoodBar.', |
| 2527 | + 'moodbar-admin-empty' => 'Жадны резултаты', |
| 2528 | + 'moodbar-header-id' => 'Ідентіфікатор одозвы', |
| 2529 | + 'moodbar-header-timestamp' => 'Часова значка', |
| 2530 | + 'moodbar-header-type' => 'Тіп', |
| 2531 | + 'moodbar-header-page' => 'Сторінка', |
| 2532 | + 'moodbar-header-usertype' => 'Тіп хоснователя', |
| 2533 | + 'moodbar-header-user' => 'Хоснователь', |
| 2534 | + 'moodbar-header-editmode' => 'Режім едітованя', |
| 2535 | + 'moodbar-header-bucket' => 'Область перевіркы', |
| 2536 | + 'moodbar-header-system' => 'Тіп сістемы', |
| 2537 | + 'moodbar-header-locale' => 'Локалны', |
| 2538 | + 'moodbar-header-useragent' => 'Кліентьскый проґрам', |
| 2539 | + 'moodbar-header-comment' => 'Коментарї', |
| 2540 | + 'moodbar-header-user-editcount' => 'Чісло едітовань хоснователя', |
| 2541 | + 'moodbar-header-namespace' => 'Простор назв', |
| 2542 | + 'moodbar-header-own-talk' => 'Властна сторінка діскузії', |
| 2543 | + 'moodbar-type-happy' => 'Щастливый', |
| 2544 | + 'moodbar-type-sad' => 'Смутный', |
| 2545 | + 'moodbar-type-confused' => 'Ошаленый', |
| 2546 | + 'moodbar-user-anonymized' => 'Анонім', |
| 2547 | + 'moodbar-user-ip' => 'IP адреса', |
| 2548 | + 'moodbar-user-user' => 'Реґістрованый хоснователь', |
| 2549 | +); |
| 2550 | + |
1144 | 2551 | /** Slovenian (Slovenščina) |
1145 | 2552 | * @author Dbc334 |
1146 | 2553 | */ |
— | — | @@ -1175,6 +2582,7 @@ |
1176 | 2583 | 'moodbar-success-subtitle' => 'Deljenje vaše urejevalne izkušnje nam pomaga izboljšati $1.', |
1177 | 2584 | 'moodbar-error-subtitle' => 'Nekaj je šlo narobe! Prosimo, poskusite znova deliti svojo povratno informacijo pozneje.', |
1178 | 2585 | 'right-moodbar-view' => 'Ogled in izvoz povratnih informacij MoodBar', |
| 2586 | + 'right-moodbar-admin' => 'Spreminjanje vidnosti na pregledni plošči povratnih informacij', |
1179 | 2587 | 'moodbar-admin-title' => 'Povratne informacije MoodBar', |
1180 | 2588 | 'moodbar-admin-intro' => 'Ta stran vam omogoča ogled povratnih informacij, poslanih z MoodBar.', |
1181 | 2589 | 'moodbar-admin-empty' => 'Ni zadetkov', |
— | — | @@ -1193,16 +2601,47 @@ |
1194 | 2602 | 'moodbar-header-user-editcount' => 'Števec urejanj uporabnika', |
1195 | 2603 | 'moodbar-header-namespace' => 'Imenski prostor', |
1196 | 2604 | 'moodbar-header-own-talk' => 'Lastna pogovorna stran', |
| 2605 | + 'moodbar-feedback-title' => 'Pregledna plošča povratnih informacij', |
| 2606 | + 'moodbar-feedback-filters' => 'Filtri', |
| 2607 | + 'moodbar-feedback-filters-type' => 'Razpoloženje:', |
| 2608 | + 'moodbar-feedback-filters-type-happy' => 'Veselo', |
| 2609 | + 'moodbar-feedback-filters-type-confused' => 'Zmedeno', |
| 2610 | + 'moodbar-feedback-filters-type-sad' => 'Žalostno', |
| 2611 | + 'moodbar-feedback-filters-username' => 'Uporabniško ime', |
| 2612 | + 'moodbar-feedback-filters-button' => 'Nastavi filtre', |
| 2613 | + 'moodbar-feedback-whatis' => 'Kaj je ta funkcija?', |
| 2614 | + 'moodbar-feedback-permalink' => 'povezava do sem', |
| 2615 | + 'moodbar-feedback-noresults' => 'Vašemu filtru ne ustrezajo nobene pripombe.', |
| 2616 | + 'moodbar-feedback-more' => 'Več', |
| 2617 | + 'moodbar-feedback-nomore' => 'Ni več rezultatov za prikaz.', |
| 2618 | + 'moodbar-feedback-newer' => 'Novejše', |
| 2619 | + 'moodbar-feedback-older' => 'Starejše', |
| 2620 | + 'moodbar-feedback-ajaxerror' => 'Med pridobivanjem več rezultatov je prišlo do napake.', |
| 2621 | + 'moodbar-user-hidden' => '(Uporabnik je skrit)', |
| 2622 | + 'moodbar-comment-hidden' => '(Povratno informacijo je skril ukrep administratorja)', |
| 2623 | + 'moodbar-feedback-show' => 'prikaži skrito povratno informacijo', |
| 2624 | + 'moodbar-feedback-hide' => 'skrij povratno informacijo', |
| 2625 | + 'moodbar-hidden-footer' => 'Skrite povratne informacije $1', |
| 2626 | + 'moodbar-feedback-restore' => 'obnovi skrito povratno informacijo', |
| 2627 | + 'moodbar-action-item' => 'Predmet povratne informacije:', |
| 2628 | + 'moodbar-hide-header' => 'Skrij ta predmet iz pogleda', |
| 2629 | + 'moodbar-restore-header' => 'Obnovi vidljivost tega predmeta', |
| 2630 | + 'moodbar-invalid-item' => 'Sistem ni mogel najti ustreznega predmeta povratne informacije.', |
1197 | 2631 | 'moodbar-type-happy' => 'Veselega', |
1198 | 2632 | 'moodbar-type-sad' => 'Žalostnega', |
1199 | 2633 | 'moodbar-type-confused' => 'Zmedenega', |
1200 | 2634 | 'moodbar-user-anonymized' => 'Brezimen', |
1201 | 2635 | 'moodbar-user-ip' => 'IP-naslov', |
1202 | 2636 | 'moodbar-user-user' => 'Registriran uporabnik', |
| 2637 | + 'moodbar-log-name' => 'Dnevnik povratnih informacij', |
| 2638 | + 'moodbar-log-header' => 'To je dnevnik dejanj, izvedenih na predmetih povratnih informacij, navedenih na [[Special:FeedbackDashboard|pregledni plošči povratnih informacij]].', |
| 2639 | + 'moodbar-log-hide' => 'je skril(-a) [[$1]]', |
| 2640 | + 'moodbar-log-restore' => 'je obnovil(-a) vidljivost [[$1]]', |
1203 | 2641 | ); |
1204 | 2642 | |
1205 | 2643 | /** Swedish (Svenska) |
1206 | 2644 | * @author Ainali |
| 2645 | + * @author Diupwijk |
1207 | 2646 | * @author Lokal Profil |
1208 | 2647 | */ |
1209 | 2648 | $messages['sv'] = array( |
— | — | @@ -1255,6 +2694,9 @@ |
1256 | 2695 | 'moodbar-header-user-editcount' => 'Användarens antal redigeringar', |
1257 | 2696 | 'moodbar-header-namespace' => 'Namnrymd', |
1258 | 2697 | 'moodbar-header-own-talk' => 'Egen diskussionssida', |
| 2698 | + 'moodbar-feedback-filters-username' => 'Användarnamn', |
| 2699 | + 'moodbar-feedback-newer' => 'Nyare', |
| 2700 | + 'moodbar-feedback-older' => 'Äldre', |
1259 | 2701 | 'moodbar-type-happy' => 'Glad', |
1260 | 2702 | 'moodbar-type-sad' => 'Ledsen', |
1261 | 2703 | 'moodbar-type-confused' => 'Förvirrad', |
— | — | @@ -1263,6 +2705,79 @@ |
1264 | 2706 | 'moodbar-user-user' => 'Registrerad användare', |
1265 | 2707 | ); |
1266 | 2708 | |
| 2709 | +/** Telugu (తెలుగు) |
| 2710 | + * @author Veeven |
| 2711 | + */ |
| 2712 | +$messages['te'] = array( |
| 2713 | + 'moodbar-what-label' => 'ఇది ఏమిటి?', |
| 2714 | + 'moodbar-success-title' => 'కృతజ్ఞతలు!', |
| 2715 | + 'moodbar-header-type' => 'రకం', |
| 2716 | + 'moodbar-header-page' => 'పుట', |
| 2717 | + 'moodbar-header-usertype' => 'వాడుకరి రకం', |
| 2718 | + 'moodbar-header-user' => 'వాడుకరి', |
| 2719 | +); |
| 2720 | + |
| 2721 | +/** Ukrainian (Українська) |
| 2722 | + * @author Dim Grits |
| 2723 | + */ |
| 2724 | +$messages['uk'] = array( |
| 2725 | + 'moodbar-desc' => 'Дозволяє певним користувачам розміщувати відгуки про власний досвід редагування', |
| 2726 | + 'moodbar-trigger-feedback' => 'Відгук про редагування', |
| 2727 | + 'moodbar-trigger-share' => 'Поділіться власним досвідом', |
| 2728 | + 'moodbar-trigger-editing' => 'Редагування $1...', |
| 2729 | + 'moodbar-close' => '(закрити)', |
| 2730 | + 'moodbar-intro-feedback' => 'Редагування $1 зробило мене...', |
| 2731 | + 'moodbar-intro-share' => 'Мій досвід на $1 зробив мене...', |
| 2732 | + 'moodbar-intro-editing' => 'Редагування $1 зробило мене...', |
| 2733 | + 'moodbar-type-happy-title' => 'Щасливий', |
| 2734 | + 'moodbar-type-sad-title' => 'Сумний', |
| 2735 | + 'moodbar-type-confused-title' => 'Сконфужений', |
| 2736 | + 'tooltip-moodbar-what' => 'Дізнайтеся більше про цю функцію', |
| 2737 | + 'moodbar-what-label' => 'Що це?', |
| 2738 | + 'moodbar-what-content' => 'Ця функція призначена задля усвідомлення співтовариством досвіду людей, що редагують на сайті. |
| 2739 | +Для отримання додаткової інформації, будь ласка, відвідайте $1.', |
| 2740 | + 'moodbar-what-link' => 'наступну сторінку', |
| 2741 | + 'moodbar-privacy' => 'Відправляючи, ви погоджуєтесь з публічністю даних на $1.', |
| 2742 | + 'moodbar-privacy-link' => 'умовах', |
| 2743 | + 'moodbar-disable-link' => 'Я не зацікавлений. Будь ласка, вимкніть цю функцію.', |
| 2744 | + 'moodbar-form-title' => 'Тому що...', |
| 2745 | + 'moodbar-form-note' => 'не більше 140 символів.', |
| 2746 | + 'moodbar-form-note-dynamic' => '$1 символів залишилося', |
| 2747 | + 'moodbar-form-submit' => 'Поділитись власними думками', |
| 2748 | + 'moodbar-form-policy-text' => 'Надсилаючи, $1', |
| 2749 | + 'moodbar-form-policy-label' => 'Наші правила', |
| 2750 | + 'moodbar-loading-title' => 'Спільне використання...', |
| 2751 | + 'moodbar-success-title' => 'Дякуємо!', |
| 2752 | + 'moodbar-error-title' => 'Йой!', |
| 2753 | + 'moodbar-success-subtitle' => 'Ваш досвід допоможе нам покращити $1.', |
| 2754 | + 'moodbar-error-subtitle' => 'Щось пішло не так! Будь ласка, спробуйте відправити відгук пізніше.', |
| 2755 | + 'right-moodbar-view' => 'Перегляд і експорт відгуків MoodBar', |
| 2756 | + 'moodbar-admin-title' => 'Відгуки MoodBar', |
| 2757 | + 'moodbar-admin-intro' => 'Ця сторінка дозволяє переглянути відгуки, надіслані за допомогою MoodBar.', |
| 2758 | + 'moodbar-admin-empty' => 'Результатів не знайдено', |
| 2759 | + 'moodbar-header-id' => "Ідентифікатор зворотнього зв'язку", |
| 2760 | + 'moodbar-header-timestamp' => 'Дата / час', |
| 2761 | + 'moodbar-header-type' => 'Тип', |
| 2762 | + 'moodbar-header-page' => 'Сторінка', |
| 2763 | + 'moodbar-header-usertype' => 'Тип користувача', |
| 2764 | + 'moodbar-header-user' => 'Користувач', |
| 2765 | + 'moodbar-header-editmode' => 'Режим редагування', |
| 2766 | + 'moodbar-header-bucket' => 'Область перевірки', |
| 2767 | + 'moodbar-header-system' => 'Тип системи', |
| 2768 | + 'moodbar-header-locale' => 'Локальні', |
| 2769 | + 'moodbar-header-useragent' => 'Клієнтська програма', |
| 2770 | + 'moodbar-header-comment' => 'Коментарі', |
| 2771 | + 'moodbar-header-user-editcount' => 'Кількість правок користувача', |
| 2772 | + 'moodbar-header-namespace' => 'Простір імен', |
| 2773 | + 'moodbar-header-own-talk' => 'Власна сторінка обговорення', |
| 2774 | + 'moodbar-type-happy' => 'Щасливий', |
| 2775 | + 'moodbar-type-sad' => 'Сумний', |
| 2776 | + 'moodbar-type-confused' => 'Сконфужений', |
| 2777 | + 'moodbar-user-anonymized' => 'Анонім', |
| 2778 | + 'moodbar-user-ip' => 'IP-адреса', |
| 2779 | + 'moodbar-user-user' => 'Зареєстрований користувач', |
| 2780 | +); |
| 2781 | + |
1267 | 2782 | /** Vietnamese (Tiếng Việt) |
1268 | 2783 | * @author Minh Nguyen |
1269 | 2784 | */ |
— | — | @@ -1298,6 +2813,7 @@ |
1299 | 2814 | 'moodbar-success-subtitle' => 'Việc chia sẻ những ấn tượng về quá trình sửa đổi giúp chúng tôi cải thiện $1.', |
1300 | 2815 | 'moodbar-error-subtitle' => 'Oái, đã bị trục trặc! Xin vui lòng chia sẻ phản hồi của bạn lát nữa.', |
1301 | 2816 | 'right-moodbar-view' => 'Xem và xuất phản hồi MoodBar', |
| 2817 | + 'right-moodbar-admin' => 'Thay đổi mức hiển thị dùng bảng điều khiển phản hồi', |
1302 | 2818 | 'moodbar-admin-title' => 'Phản hồi về MoodBar', |
1303 | 2819 | 'moodbar-admin-intro' => 'Trang này cho phép đọc các phản hồi được gửi dùng MoodBar.', |
1304 | 2820 | 'moodbar-admin-empty' => 'Không có kết quả', |
— | — | @@ -1316,12 +2832,42 @@ |
1317 | 2833 | 'moodbar-header-user-editcount' => 'Số lần sửa đổi của người dùng', |
1318 | 2834 | 'moodbar-header-namespace' => 'Không gian tên', |
1319 | 2835 | 'moodbar-header-own-talk' => 'Trang thảo luận của chính mình', |
| 2836 | + 'moodbar-feedback-title' => 'Bảng điều khiển phản hồi', |
| 2837 | + 'moodbar-feedback-filters' => 'Bộ lọc', |
| 2838 | + 'moodbar-feedback-filters-type' => 'Tâm trạng:', |
| 2839 | + 'moodbar-feedback-filters-type-happy' => 'Hài lòng', |
| 2840 | + 'moodbar-feedback-filters-type-confused' => 'Bối rối', |
| 2841 | + 'moodbar-feedback-filters-type-sad' => 'Bực mình', |
| 2842 | + 'moodbar-feedback-filters-username' => 'Tên người dùng', |
| 2843 | + 'moodbar-feedback-filters-button' => 'Áp dụng bộ lọc', |
| 2844 | + 'moodbar-feedback-whatis' => 'Tính năng này làm gì?', |
| 2845 | + 'moodbar-feedback-permalink' => 'liên kết đến đây', |
| 2846 | + 'moodbar-feedback-noresults' => 'Không có bình luận nào khớp với các bộ lọc của bạn.', |
| 2847 | + 'moodbar-feedback-more' => 'Thêm', |
| 2848 | + 'moodbar-feedback-nomore' => 'Không có thêm kết quả để hiển thị.', |
| 2849 | + 'moodbar-feedback-newer' => 'Mới hơn', |
| 2850 | + 'moodbar-feedback-older' => 'Cũ hơn', |
| 2851 | + 'moodbar-feedback-ajaxerror' => 'Lỗi đã xảy ra khi lấy thêm kết quả.', |
| 2852 | + 'moodbar-user-hidden' => '(Người dùng được ẩn)', |
| 2853 | + 'moodbar-comment-hidden' => '(Phản hồi được bảo quản viên ẩn)', |
| 2854 | + 'moodbar-feedback-show' => 'hiện phản hồi đã ẩn', |
| 2855 | + 'moodbar-feedback-hide' => 'ẩn phản hồi', |
| 2856 | + 'moodbar-hidden-footer' => 'Phản hồi ẩn $1', |
| 2857 | + 'moodbar-feedback-restore' => 'phục hồi phản hồi đã ẩn', |
| 2858 | + 'moodbar-action-item' => 'Khoản mục phản hồi:', |
| 2859 | + 'moodbar-hide-header' => 'Ẩn khoản mục này khỏi danh sách', |
| 2860 | + 'moodbar-restore-header' => 'Phục hồi mức hiển thị của khoản mục này', |
| 2861 | + 'moodbar-invalid-item' => 'Không tìm thấy khoản mục phản hồi đúng.', |
1320 | 2862 | 'moodbar-type-happy' => 'Hài lòng', |
1321 | 2863 | 'moodbar-type-sad' => 'Bực mình', |
1322 | 2864 | 'moodbar-type-confused' => 'Bối rối', |
1323 | 2865 | 'moodbar-user-anonymized' => 'Ẩn danh', |
1324 | 2866 | 'moodbar-user-ip' => 'Địa chỉ IP', |
1325 | 2867 | 'moodbar-user-user' => 'Người dùng đăng ký', |
| 2868 | + 'moodbar-log-name' => 'Nhật trình phản hồi', |
| 2869 | + 'moodbar-log-header' => 'Nhật trình này liệt kê các tác vụ được thực hiện do các khoản mục phản hồi trên [[Special:FeedbackDashboard|bảng điều khiển phản hồi]].', |
| 2870 | + 'moodbar-log-hide' => 'đã ẩn [[$1]]', |
| 2871 | + 'moodbar-log-restore' => 'đã phục hồi mức hiển thị của [[$1]]', |
1326 | 2872 | ); |
1327 | 2873 | |
1328 | 2874 | /** Yiddish (ייִדיש) |
— | — | @@ -1334,6 +2880,7 @@ |
1335 | 2881 | ); |
1336 | 2882 | |
1337 | 2883 | /** Simplified Chinese (中文(简体)) |
| 2884 | + * @author Bencmq |
1338 | 2885 | * @author PhiLiP |
1339 | 2886 | */ |
1340 | 2887 | $messages['zh-hans'] = array( |
— | — | @@ -1385,6 +2932,22 @@ |
1386 | 2933 | 'moodbar-header-user-editcount' => '用户编辑次数', |
1387 | 2934 | 'moodbar-header-namespace' => '名字空间', |
1388 | 2935 | 'moodbar-header-own-talk' => '自己的讨论页', |
| 2936 | + 'moodbar-feedback-title' => '反馈面板', |
| 2937 | + 'moodbar-feedback-filters' => '过滤器', |
| 2938 | + 'moodbar-feedback-filters-type' => '类型:', |
| 2939 | + 'moodbar-feedback-filters-type-happy' => '表扬', |
| 2940 | + 'moodbar-feedback-filters-type-confused' => '困惑', |
| 2941 | + 'moodbar-feedback-filters-type-sad' => '问题', |
| 2942 | + 'moodbar-feedback-filters-username' => '用户名', |
| 2943 | + 'moodbar-feedback-filters-button' => '设置过滤器', |
| 2944 | + 'moodbar-feedback-whatis' => '这是什么功能?', |
| 2945 | + 'moodbar-feedback-permalink' => '本页链接', |
| 2946 | + 'moodbar-feedback-noresults' => '没有符合您过滤器设置的评论。', |
| 2947 | + 'moodbar-feedback-more' => '更多', |
| 2948 | + 'moodbar-feedback-nomore' => '没有更多的结果。', |
| 2949 | + 'moodbar-feedback-newer' => '较新的', |
| 2950 | + 'moodbar-feedback-older' => '更早的', |
| 2951 | + 'moodbar-feedback-ajaxerror' => '获取更多的结果时出错。', |
1389 | 2952 | 'moodbar-type-happy' => '开心', |
1390 | 2953 | 'moodbar-type-sad' => '不快', |
1391 | 2954 | 'moodbar-type-confused' => '困惑', |
— | — | @@ -1393,3 +2956,63 @@ |
1394 | 2957 | 'moodbar-user-user' => '注册用户', |
1395 | 2958 | ); |
1396 | 2959 | |
| 2960 | +/** Traditional Chinese (中文(繁體)) |
| 2961 | + * @author Anakmalaysia |
| 2962 | + */ |
| 2963 | +$messages['zh-hant'] = array( |
| 2964 | + 'moodbar-desc' => '允許指定的用戶提供編輯體驗反饋', |
| 2965 | + 'moodbar-trigger-feedback' => '有關編輯的反饋', |
| 2966 | + 'moodbar-trigger-share' => '分享你的經驗', |
| 2967 | + 'moodbar-trigger-editing' => '編輯 $1……', |
| 2968 | + 'moodbar-close' => '(關閉)', |
| 2969 | + 'moodbar-intro-feedback' => '編輯$1使我……', |
| 2970 | + 'moodbar-intro-share' => '我在$1上的經歷使我……', |
| 2971 | + 'moodbar-intro-editing' => '編輯$1使我……', |
| 2972 | + 'moodbar-type-happy-title' => '開心', |
| 2973 | + 'moodbar-type-sad-title' => '不快', |
| 2974 | + 'moodbar-type-confused-title' => '困惑', |
| 2975 | + 'tooltip-moodbar-what' => '了解有關此功能的詳細信息', |
| 2976 | + 'moodbar-what-label' => '這是什麼?', |
| 2977 | + 'moodbar-what-content' => '此功能可以幫助社區了解人們在編輯此網站時的體驗。詳細信息請訪問$1。', |
| 2978 | + 'moodbar-what-link' => '功能頁面', |
| 2979 | + 'moodbar-privacy' => '提交後,您將同意在$1下的透明度。', |
| 2980 | + 'moodbar-privacy-link' => '條款', |
| 2981 | + 'moodbar-disable-link' => '我不感興趣,請禁用此功能。', |
| 2982 | + 'moodbar-form-title' => '因為……', |
| 2983 | + 'moodbar-form-note' => '最多140字', |
| 2984 | + 'moodbar-form-note-dynamic' => '剩餘$1字', |
| 2985 | + 'moodbar-form-submit' => '分享反饋', |
| 2986 | + 'moodbar-form-policy-text' => '提交後,$1', |
| 2987 | + 'moodbar-form-policy-label' => '我們的政策', |
| 2988 | + 'moodbar-loading-title' => '分享中……', |
| 2989 | + 'moodbar-success-title' => '謝謝!', |
| 2990 | + 'moodbar-error-title' => '糟糕!', |
| 2991 | + 'moodbar-success-subtitle' => '分享您的編輯體驗,幫助我們改善$1。', |
| 2992 | + 'moodbar-error-subtitle' => '出錯了!請重試分享您的反饋意見。', |
| 2993 | + 'right-moodbar-view' => '查看和導出MoodBar反饋', |
| 2994 | + 'moodbar-admin-title' => 'MoodBar反饋', |
| 2995 | + 'moodbar-admin-intro' => '此頁面允許你查看通過MoodBar提交的反饋。', |
| 2996 | + 'moodbar-admin-empty' => '沒有結果', |
| 2997 | + 'moodbar-header-id' => '反饋ID', |
| 2998 | + 'moodbar-header-timestamp' => '時間戳', |
| 2999 | + 'moodbar-header-type' => '類型', |
| 3000 | + 'moodbar-header-page' => '頁面', |
| 3001 | + 'moodbar-header-usertype' => '用戶類型', |
| 3002 | + 'moodbar-header-user' => '用戶', |
| 3003 | + 'moodbar-header-editmode' => '編輯模式', |
| 3004 | + 'moodbar-header-bucket' => '分桶測試', |
| 3005 | + 'moodbar-header-system' => '系統類型', |
| 3006 | + 'moodbar-header-locale' => '地區', |
| 3007 | + 'moodbar-header-useragent' => '用戶客戶端', |
| 3008 | + 'moodbar-header-comment' => '評論', |
| 3009 | + 'moodbar-header-user-editcount' => '用戶編輯次數', |
| 3010 | + 'moodbar-header-namespace' => '名字空間', |
| 3011 | + 'moodbar-header-own-talk' => '自己的討論頁', |
| 3012 | + 'moodbar-type-happy' => '開心', |
| 3013 | + 'moodbar-type-sad' => '不快', |
| 3014 | + 'moodbar-type-confused' => '困惑', |
| 3015 | + 'moodbar-user-anonymized' => '匿名', |
| 3016 | + 'moodbar-user-ip' => 'IP位址', |
| 3017 | + 'moodbar-user-user' => '註冊用戶', |
| 3018 | +); |
| 3019 | + |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.init.js |
— | — | @@ -18,7 +18,7 @@ |
19 | 19 | var browserDisabled = false; |
20 | 20 | var clientInfo = $.client.profile(); |
21 | 21 | |
22 | | - if ( clientInfo.name == 'msie' && clientInfo.versionNumber < 9 ) { |
| 22 | + if ( clientInfo.name == 'msie' && clientInfo.versionNumber < 7 ) { |
23 | 23 | browserDisabled = true; |
24 | 24 | } |
25 | 25 | |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.css |
— | — | @@ -40,17 +40,23 @@ |
41 | 41 | } |
42 | 42 | |
43 | 43 | .mw-moodBar-types { |
44 | | - overflow: hidden; /* clear */ |
45 | | - margin: 0 30px; |
| 44 | + margin: 0 auto; |
| 45 | + width: auto; |
| 46 | + display: inline-block; |
| 47 | +/* display: inline;*/ |
46 | 48 | } |
47 | 49 | |
48 | 50 | .mw-moodBar-type { |
49 | | - float: left; |
50 | 51 | min-width: 42px; |
51 | 52 | margin: 15px; |
52 | 53 | padding: 42px 0 5px 0; |
53 | 54 | /* @embed */ |
54 | 55 | background: transparent url(images/type-unknown.png) center top no-repeat; |
| 56 | + display: inline-block; |
| 57 | + /*display: inline;*/ |
| 58 | +} |
| 59 | + |
| 60 | +.mw-moodBar-types-container { |
55 | 61 | text-align: center; |
56 | 62 | } |
57 | 63 | |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js |
— | — | @@ -16,8 +16,10 @@ |
17 | 17 | <div class="mw-moodBar-overlayContent"></div>\ |
18 | 18 | </div></div>', |
19 | 19 | userinput: '\ |
20 | | - <div class="mw-moodBar-overlayTitle"><html:msg key="INTROTITLE" /></div>\ |
21 | | - <div class="mw-moodBar-types"></div>\ |
| 20 | + <div class="mw-moodBar-overlayTitle"><span><html:msg key="INTROTITLE" /></span></div>\ |
| 21 | + <div class="mw-moodBar-types-container">\ |
| 22 | + <div class="mw-moodBar-types"></div>\ |
| 23 | + </div>\ |
22 | 24 | <div class="mw-moodBar-form">\ |
23 | 25 | <div class="mw-moodBar-formTitle">\ |
24 | 26 | <span class="mw-moodBar-formNote"><html:msg key="moodbar-form-note" /></span>\ |
— | — | @@ -37,9 +39,9 @@ |
38 | 40 | <div class="mw-moodBar-overlayWhatContent"></div>\ |
39 | 41 | </span>', |
40 | 42 | type: '\ |
41 | | - <div class="mw-moodBar-type mw-moodBar-type-$1" rel="$1">\ |
| 43 | + <span class="mw-moodBar-type mw-moodBar-type-$1" rel="$1">\ |
42 | 44 | <span class="mw-moodBar-typeTitle"><html:msg key="moodbar-type-$1-title" /></span>\ |
43 | | - </div>', |
| 45 | + </span>', |
44 | 46 | loading: '\ |
45 | 47 | <div class="mw-moodBar-state mw-moodBar-state-loading">\ |
46 | 48 | <div class="mw-moodBar-state-title"><html:msg key="moodbar-loading-title" /></div>\ |
— | — | @@ -227,13 +229,26 @@ |
228 | 230 | .end(); |
229 | 231 | mb.swapContent( mb.tpl.userinput ); |
230 | 232 | |
231 | | - mb.ui.overlay |
232 | | - // Inject overlay |
233 | | - .appendTo( 'body' ) |
234 | | - // Fix the width after the icons and titles are localized and inserted |
235 | | - .width( function( i, width ) { |
236 | | - return width + 10; |
237 | | - } ); |
| 233 | + mb.ui.overlay.appendTo( 'body' ); |
| 234 | + mb.ui.overlay.show(); |
| 235 | + |
| 236 | + // Get the width of the types element, and add 100px |
| 237 | + // 52px in known margins, 58px seems to be a necessary |
| 238 | + // fudge factor, plus 30px so the close button doesn't collide |
| 239 | + // with the rounded corners |
| 240 | + var newWidth = mb.ui.overlay |
| 241 | + .find('.mw-moodBar-types') |
| 242 | + .width() + 140; |
| 243 | + var titleWidth = mb.ui.overlay |
| 244 | + .find('.mw-moodBar-overlayTitle span') |
| 245 | + .width() + 100; |
| 246 | + |
| 247 | + if ( newWidth < titleWidth ) { |
| 248 | + newWidth = titleWidth; |
| 249 | + } |
| 250 | + |
| 251 | + mb.ui.overlay.width(newWidth); |
| 252 | + mb.ui.overlay.hide(); |
238 | 253 | |
239 | 254 | // Bind triger |
240 | 255 | mb.ui.trigger.click( mb.event.trigger ); |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/images/ajax-spinner.gif |
___________________________________________________________________ |
Modified: svn:mime-type |
241 | 256 | - application/octet-stream |
242 | 257 | + image/gif |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css |
— | — | @@ -0,0 +1,240 @@ |
| 2 | +/* Filters */ |
| 3 | + |
| 4 | +#fbd-filters { |
| 5 | + position: absolute; |
| 6 | + width: 12em; |
| 7 | +} |
| 8 | + |
| 9 | +#fbd-filters form { |
| 10 | + margin: 0; |
| 11 | + padding: 1em; |
| 12 | + background-color: #e8f2f8; |
| 13 | +} |
| 14 | + |
| 15 | +#fbd-about { |
| 16 | + display: inline-block; |
| 17 | + font-size: 0.8em; |
| 18 | + margin-top: 0.5em; |
| 19 | +} |
| 20 | + |
| 21 | +#fbd-filters-title { |
| 22 | + font-size: 1.2em; |
| 23 | + margin: 0; |
| 24 | + padding: 0; |
| 25 | + border-bottom: solid 1px black; |
| 26 | +} |
| 27 | + |
| 28 | +#fbd-filters-types { |
| 29 | + margin: 0.5em 0 0 0; |
| 30 | + padding: 0; |
| 31 | + border: none; |
| 32 | +} |
| 33 | + |
| 34 | +.fbd-filters-label { |
| 35 | + display: block; |
| 36 | + margin: 0.5em 0 0 0; |
| 37 | + padding: 0; |
| 38 | + font-weight: bold; |
| 39 | +} |
| 40 | + |
| 41 | +.fbd-filters-input { |
| 42 | + margin: 0.25em 0 0.25em 0.75em; |
| 43 | + width: 10em; |
| 44 | +} |
| 45 | + |
| 46 | +#fbd-filters-types ul { |
| 47 | + margin: 0; |
| 48 | + padding: 0; |
| 49 | + list-style: none; |
| 50 | +} |
| 51 | + |
| 52 | +#fbd-filters-types li { |
| 53 | + margin: 0 0 0 0.75em; |
| 54 | + padding: 0; |
| 55 | + list-style: none; |
| 56 | +} |
| 57 | + |
| 58 | +#fbd-filters-types label { |
| 59 | + padding-left: 18px; |
| 60 | + background-position: left 45%; |
| 61 | + background-repeat: no-repeat; |
| 62 | +} |
| 63 | + |
| 64 | +#fbd-filters-type-praise-label { |
| 65 | + /* @embed */ |
| 66 | + background-image: url(images/filter-praise.png); |
| 67 | +} |
| 68 | + |
| 69 | +#fbd-filters-type-confusion-label { |
| 70 | + /* @embed */ |
| 71 | + background-image: url(images/filter-confusion.png); |
| 72 | +} |
| 73 | + |
| 74 | +#fbd-filters-type-issues-label { |
| 75 | + /* @embed */ |
| 76 | + background-image: url(images/filter-issues.png); |
| 77 | +} |
| 78 | + |
| 79 | +#fbd-filters-set { |
| 80 | + margin: 1em 0 0 0; |
| 81 | +} |
| 82 | + |
| 83 | +/* List */ |
| 84 | + |
| 85 | +#fbd-list { |
| 86 | + margin: 0 0 0 13em; |
| 87 | + padding: 0; |
| 88 | + min-height: 20em; |
| 89 | + list-style: none; |
| 90 | +} |
| 91 | + |
| 92 | +.client-nojs #fbd-list-more { |
| 93 | + display: none; |
| 94 | +} |
| 95 | + |
| 96 | +.client-js #fbd-list-newer-older { |
| 97 | + display: none; |
| 98 | +} |
| 99 | + |
| 100 | +#fbd-list-more, #fbd-list-newer-older { |
| 101 | + margin: 1em 0 0 13em; |
| 102 | + padding: 0.5em; |
| 103 | + background-color: #e8f2f8; |
| 104 | +} |
| 105 | + |
| 106 | +#fbd-list-more a, #fbd-list-more span, |
| 107 | +#fbd-list-newer a, #fbd-list-older a, |
| 108 | +#fbd-list-newer .fbd-page-disabled, #fbd-list-older .fbd-page-disabled { |
| 109 | + font-size: 1.4em; |
| 110 | + background-repeat: no-repeat; |
| 111 | +} |
| 112 | + |
| 113 | +#fbd-list-more { |
| 114 | + text-align: center; |
| 115 | +} |
| 116 | + |
| 117 | +#fbd-list-more a { |
| 118 | + /* @embed */ |
| 119 | + background-image: url(images/page-more.png); |
| 120 | + background-position: left center; |
| 121 | + padding-left: 20px; |
| 122 | +} |
| 123 | + |
| 124 | +#fbd-list-newer { |
| 125 | + float: left; |
| 126 | +} |
| 127 | + |
| 128 | +#fbd-list-newer a, #fbd-list-newer .fbd-page-disabled { |
| 129 | + background-position: left center; |
| 130 | + padding-left: 20px; |
| 131 | +} |
| 132 | + |
| 133 | +#fbd-list-more.mw-ajax-loader { |
| 134 | + /* Undo the repositioning done in shared.css. Padding is set to 0.5em above. */ |
| 135 | + position: static; |
| 136 | +} |
| 137 | + |
| 138 | +/* The images here are named -ltr instead of -left and -rtl instead of -right |
| 139 | + * because ResourceLoader flips -ltr and -rtl in URLs, but not -left and -right |
| 140 | + */ |
| 141 | +#fbd-list-newer a { |
| 142 | + /* @embed */ |
| 143 | + background-image: url(images/page-active-ltr.png); |
| 144 | +} |
| 145 | + |
| 146 | +#fbd-list-newer .fbd-page-disabled { |
| 147 | + /* @embed */ |
| 148 | + background-image: url(images/page-disabled-ltr.png); |
| 149 | +} |
| 150 | + |
| 151 | +#fbd-list-older { |
| 152 | + float: right; |
| 153 | +} |
| 154 | + |
| 155 | +#fbd-list-older a, #fbd-list-older .fbd-page-disabled { |
| 156 | + background-position: right center; |
| 157 | + padding-right: 20px; |
| 158 | +} |
| 159 | + |
| 160 | +#fbd-list-older a { |
| 161 | + /* @embed */ |
| 162 | + background-image: url(images/page-active-rtl.png); |
| 163 | +} |
| 164 | + |
| 165 | +#fbd-list-older .fbd-page-disabled { |
| 166 | + /* @embed */ |
| 167 | + background-image: url(images/page-disabled-rtl.png); |
| 168 | +} |
| 169 | + |
| 170 | +.fbd-page-disabled { |
| 171 | + color: #c6c6c6; |
| 172 | +} |
| 173 | + |
| 174 | +.fbd-item { |
| 175 | + border-bottom: solid 1px silver; |
| 176 | + position: relative; |
| 177 | +} |
| 178 | + |
| 179 | +.fbd-item-emoticon { |
| 180 | + float: left; |
| 181 | + margin-right: 0.5em; |
| 182 | + width: 75px; |
| 183 | + height: 90px; |
| 184 | + background-position: center top; |
| 185 | + background-repeat: no-repeat; |
| 186 | +} |
| 187 | + |
| 188 | +.fbd-item-emoticon-label { |
| 189 | + display: block; |
| 190 | + margin-top: 60px; |
| 191 | + text-align: center; |
| 192 | +} |
| 193 | + |
| 194 | +.fbd-item-emoticon-happy { |
| 195 | + /* @embed */ |
| 196 | + background-image: url(images/emoticon-happy.png); |
| 197 | +} |
| 198 | +.fbd-item-emoticon-confused { |
| 199 | + /* @embed */ |
| 200 | + background-image: url(images/emoticon-confused.png); |
| 201 | +} |
| 202 | +.fbd-item-emoticon-sad { |
| 203 | + /* @embed */ |
| 204 | + background-image: url(images/emoticon-sad.png); |
| 205 | +} |
| 206 | + |
| 207 | +.fbd-item-userName { |
| 208 | + font-size: 1.2em; |
| 209 | + margin: 0; |
| 210 | + padding: 0; |
| 211 | +} |
| 212 | + |
| 213 | +.fbd-item-userLinks { |
| 214 | + font-size: 0.5em; |
| 215 | +} |
| 216 | + |
| 217 | +.fbd-item-time { |
| 218 | + font-size: 1.2em; |
| 219 | + float: right; |
| 220 | +} |
| 221 | + |
| 222 | +.fbd-item-message { |
| 223 | + font-size: 1.4em; |
| 224 | + margin-top: 0.25em; |
| 225 | +} |
| 226 | + |
| 227 | +.fbd-item-permalink, |
| 228 | +.fbd-item-show, |
| 229 | +.fbd-item-hide { |
| 230 | + float: right; |
| 231 | + font-size: 0.8em; |
| 232 | +} |
| 233 | + |
| 234 | +.fbd-item-restore { |
| 235 | + font-size: 0.8em; |
| 236 | + color: silver; |
| 237 | +} |
| 238 | + |
| 239 | +.fbd-hidden { |
| 240 | + color: silver; |
| 241 | +} |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 242 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js |
— | — | @@ -0,0 +1,360 @@ |
| 2 | +/** |
| 3 | + * AJAX code for Special:MoodBarFeedback |
| 4 | + */ |
| 5 | +jQuery( function( $ ) { |
| 6 | + /** |
| 7 | + * Saved form state |
| 8 | + */ |
| 9 | + var formState = { types: [], username: '' }; |
| 10 | + |
| 11 | + /** |
| 12 | + * Save the current form state to formState |
| 13 | + */ |
| 14 | + function saveFormState() { |
| 15 | + formState.types = getSelectedTypes(); |
| 16 | + formState.username = $( '#fbd-filters-username' ).val(); |
| 17 | + } |
| 18 | + |
| 19 | + /** |
| 20 | + * Figure out which comment type filters have been selected. |
| 21 | + * @return array of comment types |
| 22 | + */ |
| 23 | + function getSelectedTypes() { |
| 24 | + var types = []; |
| 25 | + $( '#fbd-filters-type-praise, #fbd-filters-type-confusion, #fbd-filters-type-issues' ).each( function() { |
| 26 | + if ( $(this).prop( 'checked' ) ) { |
| 27 | + types.push( $(this).val() ); |
| 28 | + } |
| 29 | + } ); |
| 30 | + return types; |
| 31 | + } |
| 32 | + |
| 33 | + /** |
| 34 | + * Set the moodbar-feedback-types and moodbar-feedback-username cookies based on formState. |
| 35 | + * This function uses the form state saved in formState, so you may want to call saveFormState() first. |
| 36 | + */ |
| 37 | + function setCookies() { |
| 38 | + $.cookie( 'moodbar-feedback-types', formState.types.join( '|' ), { 'path': '/', 'expires': 7 } ); |
| 39 | + $.cookie( 'moodbar-feedback-username', formState.username, { 'path': '/', 'expires': 7 } ); |
| 40 | + } |
| 41 | + |
| 42 | + /** |
| 43 | + * Load the form state from the moodbar-feedback-types and moodbar-feedback-username cookies. |
| 44 | + * This assumes the form is currently blank. |
| 45 | + * @return bool True if the form is no longer blank (i.e. at least one value was changed), false otherwise |
| 46 | + */ |
| 47 | + function loadFromCookies() { |
| 48 | + var cookieTypes = $.cookie( 'moodbar-feedback-types' ), |
| 49 | + $username = $( '#fbd-filters-username' ), |
| 50 | + changed = false; |
| 51 | + if ( $username.val() == '' ) { |
| 52 | + var cookieUsername = $.cookie( 'moodbar-feedback-username' ); |
| 53 | + if ( cookieUsername != '' && cookieUsername !== null ) { |
| 54 | + $username.val( cookieUsername ); |
| 55 | + changed = true; |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + if ( cookieTypes ) { |
| 60 | + // Because calling .indexOf() on an array doesn't work in all browsers, |
| 61 | + // we'll use cookieTypes.indexOf( '|valueWereLookingFor' ) . In order for |
| 62 | + // that to work, we need to prepend a pipe first. |
| 63 | + cookieTypes = '|' + cookieTypes; |
| 64 | + $( '#fbd-filters-type-praise, #fbd-filters-type-confusion, #fbd-filters-type-issues' ).each( function() { |
| 65 | + if ( !$(this).prop( 'checked' ) && cookieTypes.indexOf( '|' + $(this).val() ) != -1 ) { |
| 66 | + $(this).prop( 'checked', true ); |
| 67 | + changed = true; |
| 68 | + } |
| 69 | + } ); |
| 70 | + } |
| 71 | + return changed; |
| 72 | + } |
| 73 | + |
| 74 | + /** |
| 75 | + * Show a message in the box that normally contains the More link. |
| 76 | + * This will hide the more link, remove any existing <span>s, |
| 77 | + * and add a <span> with the supplied text. |
| 78 | + * @param text string Message text |
| 79 | + */ |
| 80 | + function showMessage( text ) { |
| 81 | + $( '#fbd-list-more' ) |
| 82 | + .children( 'a' ) |
| 83 | + .hide() |
| 84 | + .end() |
| 85 | + .children( 'span' ) |
| 86 | + .remove() // Remove any previous messages |
| 87 | + .end() |
| 88 | + .append( $( '<span>' ).text( text ) ); |
| 89 | + } |
| 90 | + |
| 91 | + /** |
| 92 | + * Load a set of 20 comments into the list. In 'filter' mode, the list is |
| 93 | + * blanked before the new comments are loaded. In 'more' mode, the comments are |
| 94 | + * loaded at the end of the existing set. |
| 95 | + * |
| 96 | + * This function uses the form state saved in formState, so you may want to call saveFormState() first. |
| 97 | + * |
| 98 | + * @param mode string Either 'filter' or 'more' |
| 99 | + */ |
| 100 | + function loadComments( mode ) { |
| 101 | + var limit = 20, |
| 102 | + reqData; |
| 103 | + |
| 104 | + if ( mode == 'filter' ) { |
| 105 | + $( '#fbd-list' ).empty(); |
| 106 | + } |
| 107 | + // Hide the "More" link and put in a spinner |
| 108 | + $( '#fbd-list-more' ) |
| 109 | + .show() // may have been output with display: none; |
| 110 | + .addClass( 'mw-ajax-loader' ) |
| 111 | + .children( 'a' ) |
| 112 | + .css( 'visibility', 'hidden' ) // using .hide() cuts off the spinner |
| 113 | + .show() // showMessage() may have called .hide() |
| 114 | + .end() |
| 115 | + .children( 'span' ) |
| 116 | + .remove(); // Remove any message added by showMessage() |
| 117 | + |
| 118 | + // Build the API request |
| 119 | + // FIXME: in 'more' mode, changing the filters then clicking More will use the wrong criteria |
| 120 | + reqData = { |
| 121 | + 'action': 'query', |
| 122 | + 'list': 'moodbarcomments', |
| 123 | + 'format': 'json', |
| 124 | + 'mbcprop': 'formatted', |
| 125 | + 'mbclimit': limit + 2 // we drop the first and last result |
| 126 | + }; |
| 127 | + if ( mode == 'more' ) { |
| 128 | + reqData['mbccontinue'] = $( '#fbd-list').find( 'li:last' ).data( 'mbccontinue' ); |
| 129 | + } |
| 130 | + if ( formState.types.length ) { |
| 131 | + reqData['mbctype'] = formState.types.join( '|' ); |
| 132 | + } |
| 133 | + if ( formState.username.length ) { |
| 134 | + reqData['mbcuser'] = formState.username; |
| 135 | + } |
| 136 | + |
| 137 | + $.ajax( { |
| 138 | + 'url': mw.util.wikiScript( 'api' ), |
| 139 | + 'data': reqData, |
| 140 | + 'success': function( data ) { |
| 141 | + // Remove the spinner and restore the "More" link |
| 142 | + $( '#fbd-list-more' ) |
| 143 | + .removeClass( 'mw-ajax-loader' ) |
| 144 | + .children( 'a' ) |
| 145 | + .css( 'visibility', 'visible' ); // Undo visibility: hidden; |
| 146 | + |
| 147 | + if ( !data || !data.query || !data.query.moodbarcomments ) { |
| 148 | + showMessage( mw.msg( 'moodbar-feedback-ajaxerror' ) ); |
| 149 | + return; |
| 150 | + } |
| 151 | + |
| 152 | + var comments = data.query.moodbarcomments, |
| 153 | + len = comments.length, |
| 154 | + $ul = $( '#fbd-list' ), |
| 155 | + moreResults = false, |
| 156 | + i; |
| 157 | + if ( len == 0 ) { |
| 158 | + if ( mode == 'more' ) { |
| 159 | + showMessage( mw.msg( 'moodbar-feedback-nomore' ) ); |
| 160 | + } else { |
| 161 | + showMessage( mw.msg( 'moodbar-feedback-noresults' ) ); |
| 162 | + } |
| 163 | + return; |
| 164 | + } |
| 165 | + |
| 166 | + if ( mode == 'more' ) { |
| 167 | + // Drop the first element because it duplicates the last shown one |
| 168 | + comments.shift(); |
| 169 | + len--; |
| 170 | + } |
| 171 | + if ( len > limit ) { |
| 172 | + // Drop any elements past the limit. We do know there are more results now |
| 173 | + len = limit; |
| 174 | + moreResults = true; |
| 175 | + } |
| 176 | + |
| 177 | + for ( i = 0; i < len; i++ ) { |
| 178 | + $ul.append( comments[i].formatted ); |
| 179 | + } |
| 180 | + |
| 181 | + if ( !moreResults ) { |
| 182 | + if ( mode == 'more' ) { |
| 183 | + showMessage( mw.msg( 'moodbar-feedback-nomore' ) ); |
| 184 | + } else { |
| 185 | + $( '#fbd-list-more' ).hide(); |
| 186 | + } |
| 187 | + } |
| 188 | + }, |
| 189 | + 'error': function( jqXHR, textStatus, errorThrown ) { |
| 190 | + $( '#fbd-list-more' ).removeClass( 'mw-ajax-loader' ); |
| 191 | + showMessage( mw.msg( 'moodbar-feedback-ajaxerror' ) ); |
| 192 | + }, |
| 193 | + 'dataType': 'json' |
| 194 | + } ); |
| 195 | + } |
| 196 | + |
| 197 | + /** |
| 198 | + * Reload a comment, showing hidden comments if necessary |
| 199 | + * @param $item jQuery item containing the .fbd-item |
| 200 | + * @param show Set to true to show the comment despite its hidden status |
| 201 | + */ |
| 202 | + function reloadItem( $item, show ) { |
| 203 | + var cont = $item.data('mbccontinue'); |
| 204 | + |
| 205 | + var request = { |
| 206 | + 'action' : 'query', |
| 207 | + 'list' : 'moodbarcomments', |
| 208 | + 'format' : 'json', |
| 209 | + 'mbcprop' : 'formatted', |
| 210 | + 'mbclimit' : 1, |
| 211 | + 'mbccontinue' : cont |
| 212 | + }; |
| 213 | + |
| 214 | + if ( show ) { |
| 215 | + request.mbcprop = 'formatted|hidden'; |
| 216 | + } |
| 217 | + |
| 218 | + $.post( mw.util.wikiScript('api'), request, |
| 219 | + function( data ) { |
| 220 | + if ( data && data.query && data.query.moodbarcomments && |
| 221 | + data.query.moodbarcomments.length > 0 |
| 222 | + ) { |
| 223 | + var $content = $j(data.query.moodbarcomments[0].formatted); |
| 224 | + $item.replaceWith($content); |
| 225 | + } else { |
| 226 | + // Failure, just remove the link. |
| 227 | + $item.find('.fbd-item-show').remove(); |
| 228 | + $item.find('.mw-ajax-loader').remove(); |
| 229 | + showItemError( $item ); |
| 230 | + } |
| 231 | + }, 'json' ) |
| 232 | + .error( function() { showItemError( $item ); } ); |
| 233 | + } |
| 234 | + |
| 235 | + /** |
| 236 | + * Show a hidden comment |
| 237 | + */ |
| 238 | + function showHiddenItem(e) { |
| 239 | + var $item = $(this).closest('.fbd-item'); |
| 240 | + |
| 241 | + var $spinner = $('<span class="mw-ajax-loader"> </span>'); |
| 242 | + $item.find('.fbd-item-show').empty().append( $spinner ); |
| 243 | + |
| 244 | + reloadItem( $item, true ); |
| 245 | + |
| 246 | + e.preventDefault(); |
| 247 | + } |
| 248 | + |
| 249 | + /** |
| 250 | + * Show an error on an individual item |
| 251 | + * @param $item The .fbd-item to show the message on |
| 252 | + * @param message The message to show (currently ignored) |
| 253 | + */ |
| 254 | + function showItemError( $item, message ) { |
| 255 | + $item.find('.mw-ajax-loader').remove(); |
| 256 | + $('<div class="error"/>') |
| 257 | + .text( mw.msg('moodbar-feedback-action-error') ) |
| 258 | + .prependTo($item); |
| 259 | + } |
| 260 | + |
| 261 | + /** |
| 262 | + * Execute an action on an item |
| 263 | + */ |
| 264 | + function doAction( params, $item ) { |
| 265 | + var item_id = $item.data('mbccontinue').split('|')[1]; |
| 266 | + |
| 267 | + var errorHandler = function(error_str) { |
| 268 | + showItemError( $item, error_str ); |
| 269 | + }; |
| 270 | + |
| 271 | + $.post( mw.util.wikiScript('api'), |
| 272 | + $.extend( { |
| 273 | + 'action' : 'feedbackdashboard', |
| 274 | + 'token' : mw.user.tokens.get('editToken'), |
| 275 | + 'item' : item_id, |
| 276 | + 'format' : 'json' |
| 277 | + }, params ), |
| 278 | + function(response) { |
| 279 | + if ( response && response.feedbackdashboard ) { |
| 280 | + if ( response.feedbackdashboard.result == 'success' ) { |
| 281 | + reloadItem( $item ); |
| 282 | + } else { |
| 283 | + errorHandler( response.feedbackdashboard.error ); |
| 284 | + } |
| 285 | + } else if ( response && response.error ) { |
| 286 | + errorHandler( response.error.message ); |
| 287 | + } else { |
| 288 | + errorHandler(); |
| 289 | + } |
| 290 | + } ) |
| 291 | + .error( errorHandler ); |
| 292 | + } |
| 293 | + |
| 294 | + /** |
| 295 | + * Restore a hidden item to full visibility (event handler) |
| 296 | + */ |
| 297 | + function restoreItem(e) { |
| 298 | + var $item = $(this).closest('.fbd-item'); |
| 299 | + |
| 300 | + var $spinner = $('<span class="mw-ajax-loader"> </span>'); |
| 301 | + $item.find('.fbd-item-restore').empty().append( $spinner ); |
| 302 | + |
| 303 | + doAction( { 'mbaction' : 'restore' }, $item ); |
| 304 | + |
| 305 | + e.preventDefault(); |
| 306 | + } |
| 307 | + |
| 308 | + /** |
| 309 | + * Hide a item from view (event handler) |
| 310 | + */ |
| 311 | + function hideItem(e) { |
| 312 | + var $item = $(this).closest('.fbd-item'); |
| 313 | + |
| 314 | + var $spinner = $('<span class="mw-ajax-loader"> </span>'); |
| 315 | + $item.find('.fbd-item-hide').empty().append( $spinner ); |
| 316 | + |
| 317 | + doAction( { 'mbaction' : 'hide' }, $item ); |
| 318 | + |
| 319 | + e.preventDefault(); |
| 320 | + } |
| 321 | + |
| 322 | + // On-load stuff |
| 323 | + |
| 324 | + $('.fbd-item-show a').live( 'click', showHiddenItem ); |
| 325 | + |
| 326 | + $('.fbd-item-hide a').live( 'click', hideItem ); |
| 327 | + |
| 328 | + $('.fbd-item-restore').live( 'click', restoreItem ); |
| 329 | + |
| 330 | + $( '#fbd-filters' ).children( 'form' ).submit( function( e ) { |
| 331 | + e.preventDefault(); |
| 332 | + saveFormState(); |
| 333 | + setCookies(); |
| 334 | + loadComments( 'filter' ); |
| 335 | + } ); |
| 336 | + |
| 337 | + $( '.fbd-item-userLink' ).live( 'click', function( e ) { |
| 338 | + e.preventDefault(); |
| 339 | + $('#fbd-filters-username').val( $(this).text() ); |
| 340 | + $('#fbd-filters').children('form').submit(); |
| 341 | + } ); |
| 342 | + |
| 343 | + $( '#fbd-list-more' ).children( 'a' ).click( function( e ) { |
| 344 | + e.preventDefault(); |
| 345 | + // We don't call saveFormState() here because we want to use the state of the form |
| 346 | + // at the time it was last filtered. Otherwise, you would see strange behavior if |
| 347 | + // you changed the form state then clicked More. |
| 348 | + loadComments( 'more' ); |
| 349 | + } ); |
| 350 | + |
| 351 | + saveFormState(); |
| 352 | + var filterType = $( '#fbd-filters' ).children( 'form' ).data( 'filtertype' ); |
| 353 | + // If filtering already happened on the PHP side, don't load the form state from cookies |
| 354 | + if ( filterType != 'filtered' ) { |
| 355 | + // Don't do an AJAX filter if we're on an ID view, or if the form is still blank after loadFromCookies() |
| 356 | + if ( loadFromCookies() && filterType != 'id' ) { |
| 357 | + saveFormState(); |
| 358 | + loadComments( 'filter' ); |
| 359 | + } |
| 360 | + } |
| 361 | +} ); |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 362 | + native |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-happy.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-happy.png |
___________________________________________________________________ |
Added: svn:mime-type |
2 | 363 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-more.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-more.png |
___________________________________________________________________ |
Added: svn:mime-type |
3 | 364 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-issues.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-issues.png |
___________________________________________________________________ |
Added: svn:mime-type |
4 | 365 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-ltr.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-ltr.png |
___________________________________________________________________ |
Added: svn:mime-type |
5 | 366 | + image/png |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-rtl.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-rtl.png |
___________________________________________________________________ |
Added: svn:mime-type |
6 | 367 | + image/png |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-confused.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-confused.png |
___________________________________________________________________ |
Added: svn:mime-type |
7 | 368 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-sad.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-sad.png |
___________________________________________________________________ |
Added: svn:mime-type |
8 | 369 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-ltr.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-ltr.png |
___________________________________________________________________ |
Added: svn:mime-type |
9 | 370 | + image/png |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-rtl.png |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-rtl.png |
___________________________________________________________________ |
Added: svn:mime-type |
10 | 371 | + image/png |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-confusion.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-confusion.png |
___________________________________________________________________ |
Added: svn:mime-type |
11 | 372 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-praise.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-praise.png |
___________________________________________________________________ |
Added: svn:mime-type |
12 | 373 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-white.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-white.png |
___________________________________________________________________ |
Added: svn:mime-type |
13 | 374 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-gray.png |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-gray.png |
___________________________________________________________________ |
Added: svn:mime-type |
14 | 375 | + application/octet-stream |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php |
— | — | @@ -18,6 +18,7 @@ |
19 | 19 | 'timestamp', |
20 | 20 | 'user', // User object who submitted the feedback |
21 | 21 | 'anonymize', |
| 22 | + 'hidden-state', |
22 | 23 | |
23 | 24 | // Statistics |
24 | 25 | 'useragent', |
— | — | @@ -41,13 +42,14 @@ |
42 | 43 | // Non-nullable boolean fields |
43 | 44 | $this->setProperty('anonymize', false); |
44 | 45 | $this->setProperty('editmode', false); |
| 46 | + $this->setProperty('hidden-state', 0 ); |
45 | 47 | } |
46 | 48 | |
47 | 49 | /** |
48 | 50 | * Factory function to create a new MBFeedbackItem |
49 | 51 | * @param $info Associative array of values |
50 | 52 | * Valid keys: type, user, comment, page, flags, timestamp, |
51 | | - * useragent, system, locale, bucket, anonymize |
| 53 | + * useragent, system, locale, bucket, anonymize, hidden-state |
52 | 54 | * @return MBFeedbackItem object. |
53 | 55 | */ |
54 | 56 | public static function create( $info ) { |
— | — | @@ -90,27 +92,38 @@ |
91 | 93 | * @see MBFeedbackItem::load |
92 | 94 | */ |
93 | 95 | protected function initialiseFromRow( $row ) { |
94 | | - $properties = array( |
95 | | - 'id' => $row->mbf_id, |
96 | | - 'type' => $row->mbf_type, |
97 | | - 'comment' => $row->mbf_comment, |
98 | | - 'timestamp' => $row->mbf_timestamp, |
99 | | - 'anonymize' => $row->mbf_anonymous, |
100 | | - 'useragent' => $row->mbf_user_agent, |
101 | | - 'system' => $row->mbf_system_type, |
102 | | - 'locale' => $row->mbf_locale, |
103 | | - 'bucket' => $row->mbf_bucket, |
104 | | - 'editmode' => $row->mbf_editing, |
105 | | - 'user-editcount' => $row->mbf_user_editcount, |
| 96 | + static $propMappings = array( |
| 97 | + 'id' => 'mbf_id', |
| 98 | + 'type' => 'mbf_type', |
| 99 | + 'comment' => 'mbf_comment', |
| 100 | + 'timestamp' => 'mbf_timestamp', |
| 101 | + 'anonymize' => 'mbf_anonymous', |
| 102 | + 'useragent' => 'mbf_user_agent', |
| 103 | + 'system' => 'mbf_system_type', |
| 104 | + 'locale' => 'mbf_locale', |
| 105 | + 'bucket' => 'mbf_bucket', |
| 106 | + 'editmode' => 'mbf_editing', |
| 107 | + 'user-editcount' => 'mbf_user_editcount', |
| 108 | + 'hidden-state' => 'mbf_hidden_state', |
106 | 109 | ); |
| 110 | + |
| 111 | + $properties = array(); |
| 112 | + |
| 113 | + foreach( $propMappings as $property => $field ) { |
| 114 | + if ( isset( $row->$field ) ) { |
| 115 | + $properties[$property] = $row->$field; |
| 116 | + } |
| 117 | + } |
107 | 118 | |
108 | | - $properties['page'] = Title::makeTitleSafe( $row->mbf_namespace, $row->mbf_title ); |
| 119 | + if ( isset( $row->mbf_namespace ) && isset( $row->mbf_title ) ) { |
| 120 | + $properties['page'] = Title::makeTitleSafe( $row->mbf_namespace, $row->mbf_title ); |
| 121 | + } |
109 | 122 | |
110 | 123 | if ( !empty($row->user_id) ) { |
111 | 124 | $properties['user'] = User::newFromRow( $row ); |
112 | 125 | } elseif ( $row->mbf_user_id > 0 ) { |
113 | 126 | $properties['user'] = User::newFromId( $row->mbf_user_id ); |
114 | | - } else { |
| 127 | + } elseif ( $row->mbf_user_ip ) { |
115 | 128 | $properties['user'] = User::newFromName( $row->mbf_user_ip ); |
116 | 129 | } |
117 | 130 | |
— | — | @@ -192,11 +205,6 @@ |
193 | 206 | * @return The MBFeedbackItem's new ID. |
194 | 207 | */ |
195 | 208 | public function save() { |
196 | | - |
197 | | - if ( $this->getProperty('id') ) { |
198 | | - throw new MWException( "This ".__CLASS__." is already in the database." ); |
199 | | - } |
200 | | - |
201 | 209 | // Add edit count if necessary |
202 | 210 | if ( $this->getProperty('user-editcount') === null && |
203 | 211 | $this->getProperty('user') ) |
— | — | @@ -213,7 +221,6 @@ |
214 | 222 | $dbw = wfGetDB( DB_MASTER ); |
215 | 223 | |
216 | 224 | $row = array( |
217 | | - 'mbf_id' => $dbw->nextSequenceValue( 'moodbar_feedback_mbf_id' ), |
218 | 225 | 'mbf_type' => $this->getProperty('type'), |
219 | 226 | 'mbf_comment' => $this->getProperty('comment'), |
220 | 227 | 'mbf_timestamp' => $dbw->timestamp($this->getProperty('timestamp')), |
— | — | @@ -224,6 +231,7 @@ |
225 | 232 | 'mbf_bucket' => $this->getProperty('bucket'), |
226 | 233 | 'mbf_editing' => $this->getProperty('editmode'), |
227 | 234 | 'mbf_user_editcount' => $this->getProperty('user-editcount'), |
| 235 | + 'mbf_hidden_state' => $this->getProperty('hidden-state'), |
228 | 236 | ); |
229 | 237 | |
230 | 238 | $user = $this->getProperty('user'); |
— | — | @@ -240,10 +248,15 @@ |
241 | 249 | $row['mbf_title'] = $page->getDBkey(); |
242 | 250 | } |
243 | 251 | |
244 | | - $dbw->insert( 'moodbar_feedback', $row, __METHOD__ ); |
| 252 | + if ( $this->getProperty('id') ) { |
| 253 | + $row['mbf_id'] = $this->getProperty('id'); |
| 254 | + $dbw->replace( 'moodbar_feedback', array('mbf_id'), $row, __METHOD__ ); |
| 255 | + } else { |
| 256 | + $row['mbf_id'] = $dbw->nextSequenceValue( 'moodbar_feedback_mbf_id' ); |
| 257 | + $dbw->insert( 'moodbar_feedback', $row, __METHOD__ ); |
| 258 | + $this->setProperty( 'id', $dbw->insertId() ); |
| 259 | + } |
245 | 260 | |
246 | | - $this->setProperty( 'id', $dbw->insertId() ); |
247 | | - |
248 | 261 | return $this->getProperty('id'); |
249 | 262 | } |
250 | 263 | |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php |
— | — | @@ -20,6 +20,10 @@ |
21 | 21 | // API |
22 | 22 | $wgAutoloadClasses['ApiMoodBar'] = dirname(__FILE__).'/ApiMoodBar.php'; |
23 | 23 | $wgAPIModules['moodbar'] = 'ApiMoodBar'; |
| 24 | +$wgAutoloadClasses['ApiQueryMoodBarComments'] = dirname( __FILE__ ). '/ApiQueryMoodBarComments.php'; |
| 25 | +$wgAPIListModules['moodbarcomments'] = 'ApiQueryMoodBarComments'; |
| 26 | +$wgAutoloadClasses['ApiFeedbackDashboard'] = dirname(__FILE__).'/ApiFeedbackDashboard.php'; |
| 27 | +$wgAPIModules['feedbackdashboard'] = 'ApiFeedbackDashboard'; |
24 | 28 | |
25 | 29 | // Hooks |
26 | 30 | $wgAutoloadClasses['MoodBarHooks'] = dirname(__FILE__).'/MoodBar.hooks.php'; |
— | — | @@ -28,15 +32,35 @@ |
29 | 33 | $wgHooks['MakeGlobalVariablesScript'][] = 'MoodBarHooks::makeGlobalVariablesScript'; |
30 | 34 | $wgHooks['LoadExtensionSchemaUpdates'][] = 'MoodBarHooks::onLoadExtensionSchemaUpdates'; |
31 | 35 | |
32 | | -// Special page |
| 36 | +// Special pages |
33 | 37 | $wgAutoloadClasses['SpecialMoodBar'] = dirname(__FILE__).'/SpecialMoodBar.php'; |
34 | 38 | $wgSpecialPages['MoodBar'] = 'SpecialMoodBar'; |
| 39 | +$wgAutoloadClasses['SpecialFeedbackDashboard'] = dirname( __FILE__ ) . '/SpecialFeedbackDashboard.php'; |
| 40 | +$wgSpecialPages['FeedbackDashboard'] = 'SpecialFeedbackDashboard'; |
35 | 41 | |
| 42 | +$dashboardFormsPath = dirname(__FILE__) . '/DashboardForms.php'; |
| 43 | +$wgAutoloadClasses['MBDashboardForm'] = $dashboardFormsPath; |
| 44 | +$wgAutoloadClasses['MBActionForm'] = $dashboardFormsPath; |
| 45 | +$wgAutoloadClasses['MBHideForm'] = $dashboardFormsPath; |
| 46 | +$wgAutoloadClasses['MBRestoreForm'] = $dashboardFormsPath; |
| 47 | + |
| 48 | +$wgLogTypes[] = 'moodbar'; |
| 49 | +$wgLogNames['moodbar'] = 'moodbar-log-name'; |
| 50 | +$wgLogHeaders['moodbar'] = 'moodbar-log-header'; |
| 51 | +$wgLogActions += array( |
| 52 | + 'moodbar/hide' => 'moodbar-log-hide', |
| 53 | + 'moodbar/restore' => 'moodbar-log-restore', |
| 54 | +); |
| 55 | + |
36 | 56 | // User rights |
37 | 57 | $wgAvailableRights[] = 'moodbar-view'; |
| 58 | +$wgAvailableRights[] = 'moodbar-admin'; |
38 | 59 | |
| 60 | +$wgGroupPermissions['sysop']['moodbar-admin'] = true; |
| 61 | + |
39 | 62 | // Internationalisation |
40 | 63 | $wgExtensionMessagesFiles['MoodBar'] = dirname(__FILE__).'/MoodBar.i18n.php'; |
| 64 | +$wgExtensionMessagesFiles['MoodBarAliases'] = dirname( __FILE__ ) . '/MoodBar.alias.php'; |
41 | 65 | |
42 | 66 | // Resources |
43 | 67 | $mbResourceTemplate = array( |
— | — | @@ -111,7 +135,21 @@ |
112 | 136 | 'position' => 'bottom', |
113 | 137 | ); |
114 | 138 | |
| 139 | +$wgResourceModules['ext.moodBar.dashboard'] = $mbResourceTemplate + array( |
| 140 | + 'scripts' => 'ext.moodBar.dashboard/ext.moodBar.dashboard.js', |
| 141 | + 'dependencies' => array( 'mediawiki.util' ), |
| 142 | + 'messages' => array( |
| 143 | + 'moodbar-feedback-nomore', |
| 144 | + 'moodbar-feedback-noresults', |
| 145 | + 'moodbar-feedback-ajaxerror', |
| 146 | + 'moodbar-feedback-action-error', |
| 147 | + ), |
| 148 | +); |
115 | 149 | |
| 150 | +$wgResourceModules['ext.moodBar.dashboard.styles'] = $mbResourceTemplate + array( |
| 151 | + 'styles' => 'ext.moodBar.dashboard/ext.moodBar.dashboard.css', |
| 152 | +); |
| 153 | + |
116 | 154 | $wgResourceModules['jquery.moodBar'] = $mbResourceTemplate + array( |
117 | 155 | 'scripts' => 'jquery.moodBar/jquery.moodBar.js', |
118 | 156 | 'dependencies' => array( |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialMoodBar.php |
— | — | @@ -22,6 +22,10 @@ |
23 | 23 | parent::__construct( 'MoodBar', 'moodbar-view' ); |
24 | 24 | } |
25 | 25 | |
| 26 | + function getDescription() { |
| 27 | + return wfMessage( 'moodbar-admin-title' )->plain(); |
| 28 | + } |
| 29 | + |
26 | 30 | function execute($par) { |
27 | 31 | global $wgUser, $wgOut; |
28 | 32 | |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.hooks.php |
— | — | @@ -74,6 +74,25 @@ |
75 | 75 | $updater->addExtensionUpdate( array( 'addField', 'moodbar_feedback', |
76 | 76 | 'mbf_user_editcount', dirname(__FILE__).'/sql/mbf_user_editcount.sql', true ) |
77 | 77 | ); |
| 78 | + |
| 79 | + $db = $updater->getDB(); |
| 80 | + if ( $db->tableExists( 'moodbar_feedback' ) && |
| 81 | + $db->indexExists( 'moodbar_feedback', 'type_timestamp', __METHOD__ ) ) |
| 82 | + { |
| 83 | + $updater->addExtensionUpdate( array( 'addIndex', 'moodbar_feedback', |
| 84 | + 'mbf_type_timestamp_id', dirname( __FILE__ ) . '/sql/AddIDToIndexes.sql', true ) |
| 85 | + ); |
| 86 | + } |
| 87 | + $updater->addExtensionUpdate( array( 'dropIndex', 'moodbar_feedback', |
| 88 | + 'mbf_timestamp', dirname( __FILE__ ) . '/sql/AddIDToIndexes2.sql', true ) |
| 89 | + ); |
| 90 | + |
| 91 | + $updater->addExtensionUpdate( array( 'addIndex', 'moodbar_feedback', |
| 92 | + 'mbf_timestamp_id', dirname( __FILE__ ) . '/sql/mbf_timestamp_id.sql', true ) |
| 93 | + ); |
| 94 | + |
| 95 | + $updater->addExtensionUpdate( array( 'addField', 'moodbar_feedback', |
| 96 | + 'mbf_hidden_state', dirname(__FILE__).'/sql/mbf_hidden_state.sql', true ) ); |
78 | 97 | |
79 | 98 | return true; |
80 | 99 | } |
Index: branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php |
— | — | @@ -0,0 +1,90 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +class ApiFeedbackDashboard extends ApiBase { |
| 5 | + public function execute() { |
| 6 | + global $wgUser; |
| 7 | + if ( ! $wgUser->isAllowed('moodbar-admin') ) { |
| 8 | + $this->dieUsage( "You don't have permission to do that", 'permission-denied' ); |
| 9 | + } |
| 10 | + |
| 11 | + $params = $this->extractRequestParams(); |
| 12 | + $form = null; |
| 13 | + |
| 14 | + if ( $params['mbaction'] == 'hide' ) { |
| 15 | + $form = new MBHideForm( $params['item'] ); |
| 16 | + } elseif ( $params['mbaction'] == 'restore' ) { |
| 17 | + $form = new MBRestoreForm( $params['item'] ); |
| 18 | + } else { |
| 19 | + throw new MWException( "Action {$params['action']} not implemented" ); |
| 20 | + } |
| 21 | + |
| 22 | + $data = array( |
| 23 | + 'reason' => $params['reason'], |
| 24 | + 'item' => $params['item'], |
| 25 | + ); |
| 26 | + |
| 27 | + $result = null; |
| 28 | + $output = $form->submit( $data ); |
| 29 | + if ( $output === true ) { |
| 30 | + $result = array( 'result' => 'success' ); |
| 31 | + } else { |
| 32 | + $result = array( 'result' => 'error', 'error' => $output ); |
| 33 | + } |
| 34 | + |
| 35 | + $this->getResult()->addValue( null, $this->getModuleName(), $result ); |
| 36 | + } |
| 37 | + |
| 38 | + public function needsToken() { |
| 39 | + return true; |
| 40 | + } |
| 41 | + |
| 42 | + public function getTokenSalt() { |
| 43 | + return ''; |
| 44 | + } |
| 45 | + |
| 46 | + public function getAllowedParams() { |
| 47 | + return array( |
| 48 | + 'mbaction' => array( |
| 49 | + ApiBase::PARAM_REQUIRED => true, |
| 50 | + ApiBase::PARAM_TYPE => array( |
| 51 | + 'hide', |
| 52 | + 'restore', |
| 53 | + ), |
| 54 | + ), |
| 55 | + |
| 56 | + 'item' => array( |
| 57 | + ApiBase::PARAM_REQUIRED => true, |
| 58 | + ApiBase::PARAM_TYPE => 'integer', |
| 59 | + ), |
| 60 | + |
| 61 | + 'reason' => null, |
| 62 | + 'token' => array( |
| 63 | + ApiBase::PARAM_REQUIRED => true, |
| 64 | + ), |
| 65 | + ); |
| 66 | + } |
| 67 | + |
| 68 | + public function mustBePosted() { |
| 69 | + return true; |
| 70 | + } |
| 71 | + |
| 72 | + public function isWriteMode() { |
| 73 | + return true; |
| 74 | + } |
| 75 | + |
| 76 | + public function getVersion() { |
| 77 | + return __CLASS__ . ': $Id$'; |
| 78 | + } |
| 79 | + |
| 80 | + public function getParamDescription() { |
| 81 | + return array( |
| 82 | + 'mbaction' => 'The action to take', |
| 83 | + 'item' => 'The feedback item to apply it to', |
| 84 | + 'reason' => 'The reason to specify in the log', |
| 85 | + ); |
| 86 | + } |
| 87 | + |
| 88 | + public function getDescription() { |
| 89 | + return 'Allows administrators to manage submissions to the feedback dashboard'; |
| 90 | + } |
| 91 | +} |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 92 | + native |
Added: svn:keywords |
2 | 93 | + Id |
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar |
___________________________________________________________________ |
Modified: svn:mergeinfo |
3 | 94 | Merged /trunk/extensions/MoodBar:r95896-101006 |