Index: branches/stable/phase3/maintenance/archives/patch-interwiki.sql |
— | — | @@ -0,0 +1,11 @@ |
| 2 | +-- Creates interwiki prefix<->url mapping table |
| 3 | +-- used from 2003-08-21 dev version. |
| 4 | +-- Import the default mappings from maintenance/interwiki.sql |
| 5 | + |
| 6 | +CREATE TABLE interwiki ( |
| 7 | + iw_prefix char(32) NOT NULL, |
| 8 | + iw_url char(127) NOT NULL, |
| 9 | + iw_local BOOL NOT NULL, |
| 10 | + UNIQUE KEY iw_prefix (iw_prefix) |
| 11 | +); |
| 12 | + |
Property changes on: branches/stable/phase3/maintenance/archives/patch-interwiki.sql |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 13 | + native |
Name: svn:keywords |
2 | 14 | + Author Date Id Revision |
Index: branches/stable/phase3/docs/php-memcached/ChangeLog |
— | — | @@ -0,0 +1,45 @@ |
| 2 | +Release 1.0.10 |
| 3 | +-------------- |
| 4 | +* bug fix: changes hashing function to crc32, sprintf %u |
| 5 | +* feature: optional compression |
| 6 | + |
| 7 | +Release 1.0.9 |
| 8 | +------------- |
| 9 | +* protocol parsing bug |
| 10 | + |
| 11 | +Release 1.0.8 |
| 12 | +------------- |
| 13 | +* whitespace/punctuation/wording cleanups |
| 14 | + |
| 15 | +Release 1.0.7 |
| 16 | +------------- |
| 17 | +* added 3 functions which handle error reporting |
| 18 | + error() - returns error number of last error generated, else returns 0 |
| 19 | + error_string() - returns a string description of error number retuned |
| 20 | + error_clear() - clears the last error number and error string |
| 21 | +* removed call to preg_match() in _loaditems() |
| 22 | +* only non-scalar values are serialize() before being |
| 23 | + sent to the server |
| 24 | +* added the optional timestamp argument for delete() |
| 25 | + read Documentation file for details |
| 26 | +* PHPDocs/PEAR style comments added |
| 27 | +* abstract debugging (Brion Vibber <brion@pobox.com>) |
| 28 | + |
| 29 | +Release 1.0.6 |
| 30 | +------------- |
| 31 | +* removed all array_push() calls |
| 32 | +* applied patch provided by Stuart Herbert<stuart@gentoo.org> |
| 33 | + corrects possible endless loop. Available at |
| 34 | + http://bugs.gentoo.org/show_bug.cgi?id=25385 |
| 35 | +* fixed problem with storing large binary files |
| 36 | +* added more error checking, specifically on all socket functions |
| 37 | +* added support for the INCR and DECR commands |
| 38 | + which increment or decrement a value stored in MemCached |
| 39 | +* Documentation removed from source and is now available |
| 40 | + in the file Documentation |
| 41 | + |
| 42 | +Release 1.0.4 |
| 43 | +------------- |
| 44 | +* initial release, version numbers kept |
| 45 | + in sync with MemCached version |
| 46 | +* capable of storing any datatype in MemCached |
Property changes on: branches/stable/phase3/docs/php-memcached/ChangeLog |
___________________________________________________________________ |
Name: svn:keywords |
1 | 47 | + Author Date Id Revision |
Name: svn:eol-style |
2 | 48 | + native |
Index: branches/stable/phase3/docs/php-memcached/Documentation |
— | — | @@ -0,0 +1,258 @@ |
| 2 | +Ryan Gilfether <hotrodder@rocketmail.com> |
| 3 | +http://www.gilfether.com |
| 4 | +This module is Copyright (c) 2003 Ryan Gilfether. |
| 5 | +All rights reserved. |
| 6 | + |
| 7 | +You may distribute under the terms of the GNU General Public License |
| 8 | +This is free software. IT COMES WITHOUT WARRANTY OF ANY KIND. |
| 9 | + |
| 10 | +See the memcached website: http://www.danga.com/memcached/ |
| 11 | + |
| 12 | + |
| 13 | +// Takes one parameter, a array of options. The most important key is |
| 14 | +// options["servers"], but that can also be set later with the set_servers() |
| 15 | +// method. The servers must be an array of hosts, each of which is |
| 16 | +// either a scalar of the form <10.0.0.10:11211> or an array of the |
| 17 | +// former and an integer weight value. (the default weight if |
| 18 | +// unspecified is 1.) It's recommended that weight values be kept as low |
| 19 | +// as possible, as this module currently allocates memory for bucket |
| 20 | +// distribution proportional to the total host weights. |
| 21 | +// $options["debug"] turns the debugging on if set to true |
| 22 | +MemCachedClient::MemCachedClient($options); |
| 23 | + |
| 24 | +// sets up the list of servers and the ports to connect to |
| 25 | +// takes an array of servers in the same format as in the constructor |
| 26 | +MemCachedClient::set_servers($servers); |
| 27 | + |
| 28 | +// Retrieves a key from the memcache. Returns the value (automatically |
| 29 | +// unserialized, if necessary) or FALSE if it fails. |
| 30 | +// The $key can optionally be an array, with the first element being the |
| 31 | +// hash value, if you want to avoid making this module calculate a hash |
| 32 | +// value. You may prefer, for example, to keep all of a given user's |
| 33 | +// objects on the same memcache server, so you could use the user's |
| 34 | +// unique id as the hash value. |
| 35 | +// Possible errors set are: |
| 36 | +// MC_ERR_GET |
| 37 | +MemCachedClient::get($key); |
| 38 | + |
| 39 | +// just like get(), but takes an array of keys, returns FALSE on error |
| 40 | +// Possible errors set are: |
| 41 | +// MC_ERR_NOT_ACTIVE |
| 42 | +MemCachedClient::get_multi($keys) |
| 43 | + |
| 44 | +// Unconditionally sets a key to a given value in the memcache. Returns true |
| 45 | +// if it was stored successfully. |
| 46 | +// The $key can optionally be an arrayref, with the first element being the |
| 47 | +// hash value, as described above. |
| 48 | +// returns TRUE on success else FALSE |
| 49 | +// Possible errors set are: |
| 50 | +// MC_ERR_NOT_ACTIVE |
| 51 | +// MC_ERR_GET_SOCK |
| 52 | +// MC_ERR_SOCKET_WRITE |
| 53 | +// MC_ERR_SOCKET_READ |
| 54 | +// MC_ERR_SET |
| 55 | +MemCachedClient::set($key, $value, $exptime); |
| 56 | + |
| 57 | +// Like set(), but only stores in memcache if the key doesn't already exist. |
| 58 | +// returns TRUE on success else FALSE |
| 59 | +// Possible errors set are: |
| 60 | +// MC_ERR_NOT_ACTIVE |
| 61 | +// MC_ERR_GET_SOCK |
| 62 | +// MC_ERR_SOCKET_WRITE |
| 63 | +// MC_ERR_SOCKET_READ |
| 64 | +// MC_ERR_SET |
| 65 | +MemCachedClient::add($key, $value, $exptime); |
| 66 | + |
| 67 | +// Like set(), but only stores in memcache if the key already exists. |
| 68 | +// returns TRUE on success else FALSE |
| 69 | +// Possible errors set are: |
| 70 | +// MC_ERR_NOT_ACTIVE |
| 71 | +// MC_ERR_GET_SOCK |
| 72 | +// MC_ERR_SOCKET_WRITE |
| 73 | +// MC_ERR_SOCKET_READ |
| 74 | +// MC_ERR_SET |
| 75 | +MemCachedClient::replace($key, $value, $exptime); |
| 76 | + |
| 77 | +// removes the key from the MemCache |
| 78 | +// $time is the amount of time in seconds (or Unix time) until which |
| 79 | +// the client wishes the server to refuse "add" and "replace" commands |
| 80 | +// with this key. For this amount of item, the item is put into a |
| 81 | +// delete queue, which means that it won't possible to retrieve it by |
| 82 | +// the "get" command, but "add" and "replace" command with this key |
| 83 | +// will also fail (the "set" command will succeed, however). After the |
| 84 | +// time passes, the item is finally deleted from server memory. |
| 85 | +// The parameter $time is optional, and, if absent, defaults to 0 |
| 86 | +// (which means that the item will be deleted immediately and further |
| 87 | +// storage commands with this key will succeed). |
| 88 | +// returns TRUE on success else returns FALSE |
| 89 | +// Possible errors set are: |
| 90 | +// MC_ERR_NOT_ACTIVE |
| 91 | +// MC_ERR_GET_SOCK |
| 92 | +// MC_ERR_SOCKET_WRITE |
| 93 | +// MC_ERR_SOCKET_READ |
| 94 | +// MC_ERR_DELETE |
| 95 | +MemCachedClient::delete($key, $time = 0); |
| 96 | + |
| 97 | +// Sends a command to the server to atomically increment the value for |
| 98 | +// $key by $value, or by 1 if $value is undefined. Returns FALSE if $key |
| 99 | +// doesn't exist on server, otherwise it returns the new value after |
| 100 | +// incrementing. Value should be zero or greater. Overflow on server |
| 101 | +// is not checked. Be aware of values approaching 2**32. See decr. |
| 102 | +// Possible errors set are: |
| 103 | +// MC_ERR_NOT_ACTIVE |
| 104 | +// MC_ERR_GET_SOCK |
| 105 | +// MC_ERR_SOCKET_WRITE |
| 106 | +// MC_ERR_SOCKET_READ |
| 107 | +// returns new value on success, else returns FALSE |
| 108 | +// ONLY WORKS WITH NUMERIC VALUES |
| 109 | +MemCachedClient::incr($key[, $value]); |
| 110 | + |
| 111 | +// Like incr, but decrements. Unlike incr, underflow is checked and new |
| 112 | +// values are capped at 0. If server value is 1, a decrement of 2 |
| 113 | +// returns 0, not -1. |
| 114 | +// Possible errors set are: |
| 115 | +// MC_ERR_NOT_ACTIVE |
| 116 | +// MC_ERR_GET_SOCK |
| 117 | +// MC_ERR_SOCKET_WRITE |
| 118 | +// MC_ERR_SOCKET_READ |
| 119 | +// returns new value on success, else returns FALSE |
| 120 | +// ONLY WORKS WITH NUMERIC VALUES |
| 121 | +MemCachedClient::decr($key[, $value]); |
| 122 | + |
| 123 | +// disconnects from all servers |
| 124 | +MemCachedClient::disconnect_all(); |
| 125 | + |
| 126 | +// if $do_debug is set to true, will print out |
| 127 | +// debugging info, else debug is turned off |
| 128 | +MemCachedClient::set_debug($do_debug); |
| 129 | + |
| 130 | +// remove all cached hosts that are no longer good |
| 131 | +MemCachedClient::forget_dead_hosts(); |
| 132 | + |
| 133 | +// When a function returns FALSE, an error code is set. |
| 134 | +// This funtion will return the error code. |
| 135 | +// See error_string() |
| 136 | +// returns last error code set |
| 137 | +MemCachedClient::error() |
| 138 | + |
| 139 | +// Returns a string describing the error set in error() |
| 140 | +// See error() |
| 141 | +// returns a string describing the error code given |
| 142 | +MemCachedClient::error_string() |
| 143 | + |
| 144 | +// Resets the error number and error string |
| 145 | +MemCachedClient::error_clear() |
| 146 | + |
| 147 | +Error codes are as follows: |
| 148 | +MC_ERR_NOT_ACTIVE // no active servers |
| 149 | +MC_ERR_SOCKET_WRITE // socket_write() failed |
| 150 | +MC_ERR_SOCKET_READ // socket_read() failed |
| 151 | +MC_ERR_SOCKET_CONNECT // failed to connect to host |
| 152 | +MC_ERR_DELETE // delete() did not recieve DELETED command |
| 153 | +MC_ERR_HOST_FORMAT // sock_to_host() invalid host format |
| 154 | +MC_ERR_HOST_DEAD // sock_to_host() host is dead |
| 155 | +MC_ERR_GET_SOCK // get_sock() failed to find a valid socket |
| 156 | +MC_ERR_SET // _set() failed to receive the STORED response |
| 157 | +MC_ERR_LOADITEM_HEADER // _load_items failed to receive valid data header |
| 158 | +MC_ERR_LOADITEM_END // _load_items failed to receive END response |
| 159 | +MC_ERR_LOADITEM_BYTES // _load_items bytes read larger than bytes available |
| 160 | +MC_ERR_GET // failed to get value associated with key |
| 161 | + |
| 162 | +// Turns compression on or off; 0=off, 1=on |
| 163 | +MemCacheClient::set_compression($setting) |
| 164 | + |
| 165 | +EXAMPLE: |
| 166 | +<?php |
| 167 | +require("MemCachedClient.inc.php"); |
| 168 | + |
| 169 | +// set the servers, with the last one having an interger weight value of 3 |
| 170 | +$options["servers"] = array("10.0.0.15:11000","10.0.0.16:11001",array("10.0.0.17:11002", 3)); |
| 171 | +$options["debug"] = false; |
| 172 | + |
| 173 | +$memc = new MemCachedClient($options); |
| 174 | + |
| 175 | + |
| 176 | +/*********************** |
| 177 | + * STORE AN ARRAY |
| 178 | + ***********************/ |
| 179 | +$myarr = array("one","two", 3); |
| 180 | +$memc->set("key_one", $myarr); |
| 181 | +$val = $memc->get("key_one"); |
| 182 | +print $val[0]."\n"; // prints 'one' |
| 183 | +print $val[1]."\n"; // prints 'two' |
| 184 | +print $val[2]."\n"; // prints 3 |
| 185 | + |
| 186 | + |
| 187 | +print "\n"; |
| 188 | + |
| 189 | + |
| 190 | +/*********************** |
| 191 | + * STORE A CLASS |
| 192 | + ***********************/ |
| 193 | +class tester |
| 194 | +{ |
| 195 | + var $one; |
| 196 | + var $two; |
| 197 | + var $three; |
| 198 | +} |
| 199 | + |
| 200 | +$t = new tester; |
| 201 | +$t->one = "one"; |
| 202 | +$t->two = "two"; |
| 203 | +$t->three = 3; |
| 204 | +$memc->set("key_two", $t); |
| 205 | +$val = $memc->get("key_two"); |
| 206 | +print $val->one."\n"; |
| 207 | +print $val->two."\n"; |
| 208 | +print $val->three."\n"; |
| 209 | + |
| 210 | + |
| 211 | +print "\n"; |
| 212 | + |
| 213 | + |
| 214 | +/*********************** |
| 215 | + * STORE A STRING |
| 216 | + ***********************/ |
| 217 | +$memc->set("key_three", "my string"); |
| 218 | +$val = $memc->get("key_three"); |
| 219 | +print $val; // prints 'my string' |
| 220 | + |
| 221 | +$memc->delete("key_one"); |
| 222 | +$memc->delete("key_two"); |
| 223 | +$memc->delete("key_three"); |
| 224 | + |
| 225 | +$memc->disconnect_all(); |
| 226 | + |
| 227 | + |
| 228 | + |
| 229 | +print "\n"; |
| 230 | + |
| 231 | + |
| 232 | +/*********************** |
| 233 | + * STORE A BINARY FILE |
| 234 | + ***********************/ |
| 235 | + |
| 236 | + // first read the file and save it in memcache |
| 237 | +$fp = fopen( "./image.jpg", "rb" ) ; |
| 238 | +if ( !$fp ) |
| 239 | +{ |
| 240 | + print "Could not open ./file.dat!\n" ; |
| 241 | + exit ; |
| 242 | +} |
| 243 | +$data = fread( $fp, filesize( "./image.jpg" ) ) ; |
| 244 | +fclose( $fp ) ; |
| 245 | +print "Data length is " . strlen( $data ) . "\n" ; |
| 246 | +$memc->set( "key", $data ) ; |
| 247 | + |
| 248 | +// now open a file for writing and write the data |
| 249 | +// retrieved from memcache |
| 250 | +$fp = fopen("./test.jpg","wb"); |
| 251 | +$data = $memc->get( "key" ) ; |
| 252 | +print "Data length is " . strlen( $data ) . "\n" ; |
| 253 | +fwrite($fp,$data,strlen( $data )); |
| 254 | +fclose($fp); |
| 255 | + |
| 256 | + |
| 257 | +?> |
| 258 | + |
| 259 | + |
Property changes on: branches/stable/phase3/docs/php-memcached/Documentation |
___________________________________________________________________ |
Name: svn:keywords |
1 | 260 | + Author Date Id Revision |
Name: svn:eol-style |
2 | 261 | + native |
Index: branches/stable/phase3/includes/MemCachedClient.inc.php |
— | — | @@ -0,0 +1,1143 @@ |
| 2 | +<?php |
| 3 | +/* |
| 4 | + * MemCached PHP client |
| 5 | + * Copyright (c) 2003 |
| 6 | + * Ryan Gilfether <hotrodder@rocketmail.com> |
| 7 | + * http://www.gilfether.com |
| 8 | + * |
| 9 | + * Originally translated from Brad Fitzpatrick's <brad@danga.com> MemCached Perl client |
| 10 | + * See the memcached website: |
| 11 | + * http://www.danga.com/memcached/ |
| 12 | + * |
| 13 | + * This module is Copyright (c) 2003 Ryan Gilfether. |
| 14 | + * All rights reserved. |
| 15 | + * You may distribute under the terms of the GNU General Public License |
| 16 | + * This is free software. IT COMES WITHOUT WARRANTY OF ANY KIND. |
| 17 | + * |
| 18 | + */ |
| 19 | + |
| 20 | +/** |
| 21 | + * version string |
| 22 | + */ |
| 23 | +define("MC_VERSION", "1.0.10"); |
| 24 | +/** |
| 25 | + * int, buffer size used for sending and receiving |
| 26 | + * data from sockets |
| 27 | + */ |
| 28 | +define("MC_BUFFER_SZ", 1024); |
| 29 | +/** |
| 30 | + * MemCached error numbers |
| 31 | + */ |
| 32 | +define("MC_ERR_NOT_ACTIVE", 1001); // no active servers |
| 33 | +define("MC_ERR_SOCKET_WRITE", 1002); // socket_write() failed |
| 34 | +define("MC_ERR_SOCKET_READ", 1003); // socket_read() failed |
| 35 | +define("MC_ERR_SOCKET_CONNECT", 1004); // failed to connect to host |
| 36 | +define("MC_ERR_DELETE", 1005); // delete() did not recieve DELETED command |
| 37 | +define("MC_ERR_HOST_FORMAT", 1006); // sock_to_host() invalid host format |
| 38 | +define("MC_ERR_HOST_DEAD", 1007); // sock_to_host() host is dead |
| 39 | +define("MC_ERR_GET_SOCK", 1008); // get_sock() failed to find a valid socket |
| 40 | +define("MC_ERR_SET", 1009); // _set() failed to receive the STORED response |
| 41 | +define("MC_ERR_GET_KEY", 1010); // _load_items no values returned for key(s) |
| 42 | +define("MC_ERR_LOADITEM_END", 1011); // _load_items failed to receive END response |
| 43 | +define("MC_ERR_LOADITEM_BYTES", 1012); // _load_items bytes read larger than bytes available |
| 44 | + |
| 45 | + |
| 46 | +/** |
| 47 | + * MemCached PHP client Class. |
| 48 | + * |
| 49 | + * Communicates with the MemCached server, and executes the MemCached protocol |
| 50 | + * MemCached available at http://www.danga.com/memcached |
| 51 | + * |
| 52 | + * @author Ryan Gilfether <ryan@gilfether.com> |
| 53 | + * @package MemCachedClient |
| 54 | + * @access public |
| 55 | + * @version 1.0.10 |
| 56 | + */ |
| 57 | +class MemCachedClient |
| 58 | +{ |
| 59 | + /** |
| 60 | + * array of servers no long available |
| 61 | + * @var array |
| 62 | + */ |
| 63 | + var $host_dead; |
| 64 | + /** |
| 65 | + * array of open sockets |
| 66 | + * @var array |
| 67 | + */ |
| 68 | + var $cache_sock; |
| 69 | + /** |
| 70 | + * determine if debugging is either on or off |
| 71 | + * @var bool |
| 72 | + */ |
| 73 | + var $debug; |
| 74 | + /** |
| 75 | + * array of servers to attempt to use, "host:port" string format |
| 76 | + * @var array |
| 77 | + */ |
| 78 | + var $servers; |
| 79 | + /** |
| 80 | + * count of currently active connections to servers |
| 81 | + * @var int |
| 82 | + */ |
| 83 | + var $active; |
| 84 | + /** |
| 85 | + * error code if one is set |
| 86 | + * @var int |
| 87 | + */ |
| 88 | + var $errno; |
| 89 | + /** |
| 90 | + * string describing error |
| 91 | + * @var string |
| 92 | + */ |
| 93 | + var $errstr; |
| 94 | + /** |
| 95 | + * size of val to force compression; 0 turns off; defaults 1 |
| 96 | + * @ var int |
| 97 | + */ |
| 98 | + var $compress = 1; |
| 99 | + /** |
| 100 | + * temp flag to turn compression on/off; defaults on |
| 101 | + * @ var int |
| 102 | + */ |
| 103 | + var $comp_active = 1; |
| 104 | + |
| 105 | + /** |
| 106 | + * array that contains parsed out buckets |
| 107 | + * @ var array |
| 108 | + */ |
| 109 | + var $bucket; |
| 110 | + |
| 111 | + |
| 112 | + /** |
| 113 | + * Constructor |
| 114 | + * |
| 115 | + * Creates a new MemCachedClient object |
| 116 | + * Takes one parameter, a array of options. The most important key is |
| 117 | + * $options["servers"], but that can also be set later with the set_servers() |
| 118 | + * method. The servers must be an array of hosts, each of which is |
| 119 | + * either a scalar of the form <10.0.0.10:11211> or an array of the |
| 120 | + * former and an integer weight value. (the default weight if |
| 121 | + * unspecified is 1.) It's recommended that weight values be kept as low |
| 122 | + * as possible, as this module currently allocates memory for bucket |
| 123 | + * distribution proportional to the total host weights. |
| 124 | + * $options["debug"] turns the debugging on if set to true |
| 125 | + * |
| 126 | + * @access public |
| 127 | + * @param array $option an array of servers and debug status |
| 128 | + * @return object MemCachedClient the new MemCachedClient object |
| 129 | + */ |
| 130 | + function MemCachedClient($options = 0) |
| 131 | + { |
| 132 | + if(is_array($options)) |
| 133 | + { |
| 134 | + $this->set_servers($options["servers"]); |
| 135 | + $this->debug = $options["debug"]; |
| 136 | + $this->compress = $options["compress"]; |
| 137 | + $this->cache_sock = array(); |
| 138 | + } |
| 139 | + |
| 140 | + $this->errno = 0; |
| 141 | + $this->errstr = ""; |
| 142 | + } |
| 143 | + |
| 144 | + |
| 145 | + /** |
| 146 | + * sets up the list of servers and the ports to connect to |
| 147 | + * takes an array of servers in the same format as in the constructor |
| 148 | + * |
| 149 | + * @access public |
| 150 | + * @param array $servers array of servers in the format described in the constructor |
| 151 | + */ |
| 152 | + function set_servers($servers) |
| 153 | + { |
| 154 | + $this->servers = $servers; |
| 155 | + $this->active = count($this->servers); |
| 156 | + } |
| 157 | + |
| 158 | + |
| 159 | + /** |
| 160 | + * if $do_debug is set to true, will print out |
| 161 | + * debugging info, else debug is turned off |
| 162 | + * |
| 163 | + * @access public |
| 164 | + * @param bool $do_debug set to true to turn debugging on, false to turn off |
| 165 | + */ |
| 166 | + function set_debug($do_debug) |
| 167 | + { |
| 168 | + $this->debug = $do_debug; |
| 169 | + } |
| 170 | + |
| 171 | + |
| 172 | + /** |
| 173 | + * remove all cached hosts that are no longer good |
| 174 | + * |
| 175 | + * @access public |
| 176 | + */ |
| 177 | + function forget_dead_hosts() |
| 178 | + { |
| 179 | + unset($this->host_dead); |
| 180 | + } |
| 181 | + |
| 182 | + |
| 183 | + /** |
| 184 | + * disconnects from all servers |
| 185 | + * |
| 186 | + * @access public |
| 187 | + */ |
| 188 | + function disconnect_all() |
| 189 | + { |
| 190 | + foreach($this->cache_sock as $sock) |
| 191 | + socket_close($sock); |
| 192 | + |
| 193 | + unset($this->cache_sock); |
| 194 | + $this->active = 0; |
| 195 | + } |
| 196 | + |
| 197 | + |
| 198 | + /** |
| 199 | + * removes the key from the MemCache |
| 200 | + * $time is the amount of time in seconds (or Unix time) until which |
| 201 | + * the client wishes the server to refuse "add" and "replace" commands |
| 202 | + * with this key. For this amount of item, the item is put into a |
| 203 | + * delete queue, which means that it won't possible to retrieve it by |
| 204 | + * the "get" command, but "add" and "replace" command with this key |
| 205 | + * will also fail (the "set" command will succeed, however). After the |
| 206 | + * time passes, the item is finally deleted from server memory. |
| 207 | + * The parameter $time is optional, and, if absent, defaults to 0 |
| 208 | + * (which means that the item will be deleted immediately and further |
| 209 | + * storage commands with this key will succeed). |
| 210 | + * Possible errors set are: |
| 211 | + * MC_ERR_NOT_ACTIVE |
| 212 | + * MC_ERR_GET_SOCK |
| 213 | + * MC_ERR_SOCKET_WRITE |
| 214 | + * MC_ERR_SOCKET_READ |
| 215 | + * MC_ERR_DELETE |
| 216 | + * |
| 217 | + * @access public |
| 218 | + * @param string $key the key to delete |
| 219 | + * @param timestamp $time optional, the amount of time server will refuse commands on key |
| 220 | + * @return bool TRUE on success, FALSE if key does not exist |
| 221 | + */ |
| 222 | + function delete($key, $time = 0) |
| 223 | + { |
| 224 | + if(!$this->active) |
| 225 | + { |
| 226 | + $this->errno = MC_ERR_NOT_ACTIVE; |
| 227 | + $this->errstr = "No active servers are available"; |
| 228 | + |
| 229 | + if($this->debug) |
| 230 | + $this->_debug("delete(): There are no active servers available."); |
| 231 | + |
| 232 | + return FALSE; |
| 233 | + } |
| 234 | + |
| 235 | + $sock = $this->get_sock($key); |
| 236 | + |
| 237 | + if(!is_resource($sock)) |
| 238 | + { |
| 239 | + $this->errno = MC_ERR_GET_SOCK; |
| 240 | + $this->errstr = "Unable to retrieve a valid socket."; |
| 241 | + |
| 242 | + if($this->debug) |
| 243 | + $this->_debug("delete(): get_sock() returned an invalid socket."); |
| 244 | + |
| 245 | + return FALSE; |
| 246 | + } |
| 247 | + |
| 248 | + if(is_array($key)) |
| 249 | + $key = $key[1]; |
| 250 | + |
| 251 | + $cmd = "delete $key $time\r\n"; |
| 252 | + $cmd_len = strlen($cmd); |
| 253 | + $offset = 0; |
| 254 | + |
| 255 | + // now send the command |
| 256 | + while($offset < $cmd_len) |
| 257 | + { |
| 258 | + $result = socket_write($sock, substr($cmd, $offset, MC_BUFFER_SZ), MC_BUFFER_SZ); |
| 259 | + |
| 260 | + if($result !== FALSE) |
| 261 | + $offset += $result; |
| 262 | + else if($offset < $cmd_len) |
| 263 | + { |
| 264 | + $this->errno = MC_ERR_SOCKET_WRITE; |
| 265 | + $this->errstr = "Failed to write to socket."; |
| 266 | + |
| 267 | + if($this->debug) |
| 268 | + { |
| 269 | + $sockerr = socket_last_error($sock); |
| 270 | + $this->_debug("delete(): socket_write() returned FALSE. Socket Error $sockerr: ".socket_strerror($sockerr)); |
| 271 | + } |
| 272 | + |
| 273 | + return FALSE; |
| 274 | + } |
| 275 | + } |
| 276 | + |
| 277 | + // now read the server's response |
| 278 | + if(($retval = socket_read($sock, MC_BUFFER_SZ, PHP_NORMAL_READ)) === FALSE) |
| 279 | + { |
| 280 | + $this->errno = MC_ERR_SOCKET_READ; |
| 281 | + $this->errstr = "Failed to read from socket."; |
| 282 | + |
| 283 | + if($this->debug) |
| 284 | + { |
| 285 | + $sockerr = socket_last_error($sock); |
| 286 | + $this->_debug("delete(): socket_read() returned FALSE. Socket Error $sockerr: ".socket_strerror($sockerr)); |
| 287 | + } |
| 288 | + |
| 289 | + return FALSE; |
| 290 | + } |
| 291 | + |
| 292 | + // remove the \r\n from the end |
| 293 | + $retval = rtrim($retval); |
| 294 | + |
| 295 | + // now read the server's response |
| 296 | + if($retval == "DELETED") |
| 297 | + return TRUE; |
| 298 | + else |
| 299 | + { |
| 300 | + // something went wrong, create the error |
| 301 | + $this->errno = MC_ERR_DELETE; |
| 302 | + $this->errstr = "Failed to receive DELETED response from server."; |
| 303 | + |
| 304 | + if($this->debug) |
| 305 | + $this->_debug("delete(): Failed to receive DELETED response from server. Received $retval instead."); |
| 306 | + |
| 307 | + return FALSE; |
| 308 | + } |
| 309 | + } |
| 310 | + |
| 311 | + |
| 312 | + /** |
| 313 | + * Like set(), but only stores in memcache if the key doesn't already exist. |
| 314 | + * Possible errors set are: |
| 315 | + * MC_ERR_NOT_ACTIVE |
| 316 | + * MC_ERR_GET_SOCK |
| 317 | + * MC_ERR_SOCKET_WRITE |
| 318 | + * MC_ERR_SOCKET_READ |
| 319 | + * MC_ERR_SET |
| 320 | + * |
| 321 | + * @access public |
| 322 | + * @param string $key the key to set |
| 323 | + * @param mixed $val the value of the key |
| 324 | + * @param timestamp $exptime optional, the to to live of the key |
| 325 | + * @return bool TRUE on success, else FALSE |
| 326 | + */ |
| 327 | + function add($key, $val, $exptime = 0) |
| 328 | + { |
| 329 | + return $this->_set("add", $key, $val, $exptime); |
| 330 | + } |
| 331 | + |
| 332 | + |
| 333 | + /** |
| 334 | + * Like set(), but only stores in memcache if the key already exists. |
| 335 | + * returns TRUE on success else FALSE |
| 336 | + * Possible errors set are: |
| 337 | + * MC_ERR_NOT_ACTIVE |
| 338 | + * MC_ERR_GET_SOCK |
| 339 | + * MC_ERR_SOCKET_WRITE |
| 340 | + * MC_ERR_SOCKET_READ |
| 341 | + * MC_ERR_SET |
| 342 | + * |
| 343 | + * @access public |
| 344 | + * @param string $key the key to set |
| 345 | + * @param mixed $val the value of the key |
| 346 | + * @param timestamp $exptime optional, the to to live of the key |
| 347 | + * @return bool TRUE on success, else FALSE |
| 348 | + */ |
| 349 | + function replace($key, $val, $exptime = 0) |
| 350 | + { |
| 351 | + return $this->_set("replace", $key, $val, $exptime); |
| 352 | + } |
| 353 | + |
| 354 | + |
| 355 | + /** |
| 356 | + * Unconditionally sets a key to a given value in the memcache. Returns true |
| 357 | + * if it was stored successfully. |
| 358 | + * The $key can optionally be an arrayref, with the first element being the |
| 359 | + * hash value, as described above. |
| 360 | + * Possible errors set are: |
| 361 | + * MC_ERR_NOT_ACTIVE |
| 362 | + * MC_ERR_GET_SOCK |
| 363 | + * MC_ERR_SOCKET_WRITE |
| 364 | + * MC_ERR_SOCKET_READ |
| 365 | + * MC_ERR_SET |
| 366 | + * |
| 367 | + * @access public |
| 368 | + * @param string $key the key to set |
| 369 | + * @param mixed $val the value of the key |
| 370 | + * @param timestamp $exptime optional, the to to live of the key |
| 371 | + * @return bool TRUE on success, else FALSE |
| 372 | + */ |
| 373 | + function set($key, $val, $exptime = 0) |
| 374 | + { |
| 375 | + return $this->_set("set", $key, $val, $exptime); |
| 376 | + } |
| 377 | + |
| 378 | + |
| 379 | + /** |
| 380 | + * Retrieves a key from the memcache. Returns the value (automatically |
| 381 | + * unserialized, if necessary) or FALSE if it fails. |
| 382 | + * The $key can optionally be an array, with the first element being the |
| 383 | + * hash value, if you want to avoid making this module calculate a hash |
| 384 | + * value. You may prefer, for example, to keep all of a given user's |
| 385 | + * objects on the same memcache server, so you could use the user's |
| 386 | + * unique id as the hash value. |
| 387 | + * Possible errors set are: |
| 388 | + * MC_ERR_GET_KEY |
| 389 | + * |
| 390 | + * @access public |
| 391 | + * @param string $key the key to retrieve |
| 392 | + * @return mixed the value of the key, FALSE on error |
| 393 | + */ |
| 394 | + function get($key) |
| 395 | + { |
| 396 | + $val =& $this->get_multi($key); |
| 397 | + |
| 398 | + if(!$val) |
| 399 | + { |
| 400 | + $this->errno = MC_ERR_GET_KEY; |
| 401 | + $this->errstr = "No value found for key $key"; |
| 402 | + |
| 403 | + if($this->debug) |
| 404 | + $this->_debug("get(): No value found for key $key"); |
| 405 | + |
| 406 | + return FALSE; |
| 407 | + } |
| 408 | + |
| 409 | + return $val[$key]; |
| 410 | + } |
| 411 | + |
| 412 | + |
| 413 | + /** |
| 414 | + * just like get(), but takes an array of keys, returns FALSE on error |
| 415 | + * Possible errors set are: |
| 416 | + * MC_ERR_NOT_ACTIVE |
| 417 | + * |
| 418 | + * @access public |
| 419 | + * @param array $keys the keys to retrieve |
| 420 | + * @return array the value of each key, FALSE on error |
| 421 | + */ |
| 422 | + function get_multi($keys) |
| 423 | + { |
| 424 | + $sock_keys = array(); |
| 425 | + $socks = array(); |
| 426 | + $val = 0; |
| 427 | + |
| 428 | + if(!$this->active) |
| 429 | + { |
| 430 | + $this->errno = MC_ERR_NOT_ACTIVE; |
| 431 | + $this->errstr = "No active servers are available"; |
| 432 | + |
| 433 | + if($this->debug) |
| 434 | + $this->_debug("get_multi(): There are no active servers available."); |
| 435 | + |
| 436 | + return FALSE; |
| 437 | + } |
| 438 | + |
| 439 | + if(!is_array($keys)) |
| 440 | + { |
| 441 | + $arr[] = $keys; |
| 442 | + $keys = $arr; |
| 443 | + } |
| 444 | + |
| 445 | + foreach($keys as $k) |
| 446 | + { |
| 447 | + $sock = $this->get_sock($k); |
| 448 | + |
| 449 | + if($sock) |
| 450 | + { |
| 451 | + $k = is_array($k) ? $k[1] : $k; |
| 452 | + |
| 453 | + if(@!is_array($sock_keys[$sock])) |
| 454 | + $sock_keys[$sock] = array(); |
| 455 | + |
| 456 | + // if $sock_keys[$sock] doesn't exist, create it |
| 457 | + if(!$sock_keys[$sock]) |
| 458 | + $socks[] = $sock; |
| 459 | + |
| 460 | + $sock_keys[$sock][] = $k; |
| 461 | + } |
| 462 | + } |
| 463 | + |
| 464 | + if(!is_array($socks)) |
| 465 | + { |
| 466 | + $arr[] = $socks; |
| 467 | + $socks = $arr; |
| 468 | + } |
| 469 | + |
| 470 | + foreach($socks as $s) |
| 471 | + { |
| 472 | + $this->_load_items($s, $val, $sock_keys[$sock]); |
| 473 | + } |
| 474 | + |
| 475 | + if($this->debug) |
| 476 | + { |
| 477 | + while(list($k, $v) = @each($val)) |
| 478 | + $this->_debug("MemCache: got $k = $v\n"); |
| 479 | + } |
| 480 | + |
| 481 | + return $val; |
| 482 | + } |
| 483 | + |
| 484 | + |
| 485 | + /** |
| 486 | + * Sends a command to the server to atomically increment the value for |
| 487 | + * $key by $value, or by 1 if $value is undefined. Returns FALSE if $key |
| 488 | + * doesn't exist on server, otherwise it returns the new value after |
| 489 | + * incrementing. Value should be zero or greater. Overflow on server |
| 490 | + * is not checked. Be aware of values approaching 2**32. See decr. |
| 491 | + * ONLY WORKS WITH NUMERIC VALUES |
| 492 | + * Possible errors set are: |
| 493 | + * MC_ERR_NOT_ACTIVE |
| 494 | + * MC_ERR_GET_SOCK |
| 495 | + * MC_ERR_SOCKET_WRITE |
| 496 | + * MC_ERR_SOCKET_READ |
| 497 | + * |
| 498 | + * @access public |
| 499 | + * @param string $key the keys to increment |
| 500 | + * @param int $value the amount to increment the key bye |
| 501 | + * @return int the new value of the key, else FALSE |
| 502 | + */ |
| 503 | + function incr($key, $value = 1) |
| 504 | + { |
| 505 | + return $this->_incrdecr("incr", $key, $value); |
| 506 | + } |
| 507 | + |
| 508 | + |
| 509 | + /** |
| 510 | + * Like incr, but decrements. Unlike incr, underflow is checked and new |
| 511 | + * values are capped at 0. If server value is 1, a decrement of 2 |
| 512 | + * returns 0, not -1. |
| 513 | + * ONLY WORKS WITH NUMERIC VALUES |
| 514 | + * Possible errors set are: |
| 515 | + * MC_ERR_NOT_ACTIVE |
| 516 | + * MC_ERR_GET_SOCK |
| 517 | + * MC_ERR_SOCKET_WRITE |
| 518 | + * MC_ERR_SOCKET_READ |
| 519 | + * |
| 520 | + * @access public |
| 521 | + * @param string $key the keys to increment |
| 522 | + * @param int $value the amount to increment the key bye |
| 523 | + * @return int the new value of the key, else FALSE |
| 524 | + */ |
| 525 | + function decr($key, $value = 1) |
| 526 | + { |
| 527 | + return $this->_incrdecr("decr", $key, $value); |
| 528 | + } |
| 529 | + |
| 530 | + |
| 531 | + /** |
| 532 | + * When a function returns FALSE, an error code is set. |
| 533 | + * This funtion will return the error code. |
| 534 | + * See error_string() |
| 535 | + * |
| 536 | + * @access public |
| 537 | + * @return int the value of the last error code |
| 538 | + */ |
| 539 | + function error() |
| 540 | + { |
| 541 | + return $this->errno; |
| 542 | + } |
| 543 | + |
| 544 | + |
| 545 | + /** |
| 546 | + * Returns a string describing the error set in error() |
| 547 | + * See error() |
| 548 | + * |
| 549 | + * @access public |
| 550 | + * @return int a string describing the error code given |
| 551 | + */ |
| 552 | + function error_string() |
| 553 | + { |
| 554 | + return $this->errstr; |
| 555 | + } |
| 556 | + |
| 557 | + |
| 558 | + /** |
| 559 | + * Resets the error number and error string |
| 560 | + * |
| 561 | + * @access public |
| 562 | + */ |
| 563 | + function error_clear() |
| 564 | + { |
| 565 | + // reset to no error |
| 566 | + $this->errno = 0; |
| 567 | + $this->errstr = ""; |
| 568 | + } |
| 569 | + |
| 570 | + |
| 571 | + /** |
| 572 | + * temporarily sets compression on or off |
| 573 | + * turning it off, and then back on will result in the compression threshold going |
| 574 | + * back to the original setting from $options |
| 575 | + * @param int $setting setting of compression (0=off|1=on) |
| 576 | + */ |
| 577 | + |
| 578 | + function set_compression($setting=1) { |
| 579 | + if ($setting != 0) { |
| 580 | + $this->comp_active = 1; |
| 581 | + } else { |
| 582 | + $this->comp_active = 0; |
| 583 | + } |
| 584 | + } |
| 585 | + |
| 586 | + |
| 587 | + |
| 588 | + /* |
| 589 | + * PRIVATE FUNCTIONS |
| 590 | + */ |
| 591 | + |
| 592 | + |
| 593 | + /** |
| 594 | + * connects to a server |
| 595 | + * The $host may either a string int the form of host:port or an array of the |
| 596 | + * former and an integer weight value. (the default weight if |
| 597 | + * unspecified is 1.) See the constructor for details |
| 598 | + * Possible errors set are: |
| 599 | + * MC_ERR_HOST_FORMAT |
| 600 | + * MC_ERR_HOST_DEAD |
| 601 | + * MC_ERR_SOCKET_CONNECT |
| 602 | + * |
| 603 | + * @access private |
| 604 | + * @param mixed $host either an array or a string |
| 605 | + * @return resource the socket of the new connection, else FALSE |
| 606 | + */ |
| 607 | + function sock_to_host($host) |
| 608 | + { |
| 609 | + if(is_array($host)) |
| 610 | + $host = array_shift($host); |
| 611 | + |
| 612 | + $now = time(); |
| 613 | + |
| 614 | + // seperate the ip from the port, index 0 = ip, index 1 = port |
| 615 | + $conn = explode(":", $host); |
| 616 | + if(count($conn) != 2) |
| 617 | + { |
| 618 | + $this->errno = MC_ERR_HOST_FORMAT; |
| 619 | + $this->errstr = "Host address was not in the format of host:port"; |
| 620 | + |
| 621 | + if($this->debug) |
| 622 | + $this->_debug("sock_to_host(): Host address was not in the format of host:port"); |
| 623 | + |
| 624 | + return FALSE; |
| 625 | + } |
| 626 | + |
| 627 | + if(@($this->host_dead[$host] && $this->host_dead[$host] > $now) || |
| 628 | + @($this->host_dead[$conn[0]] && $this->host_dead[$conn[0]] > $now)) |
| 629 | + { |
| 630 | + $this->errno = MC_ERR_HOST_DEAD; |
| 631 | + $this->errstr = "Host $host is not available."; |
| 632 | + |
| 633 | + if($this->debug) |
| 634 | + $this->_debug("sock_to_host(): Host $host is not available."); |
| 635 | + |
| 636 | + return FALSE; |
| 637 | + } |
| 638 | + |
| 639 | + // connect to the server, if it fails, add it to the host_dead below |
| 640 | + $sock = socket_create (AF_INET, SOCK_STREAM, getprotobyname("TCP")); |
| 641 | + |
| 642 | + // we need surpress the error message if a connection fails |
| 643 | + if(!@socket_connect($sock, $conn[0], $conn[1])) |
| 644 | + { |
| 645 | + $this->host_dead[$host]=$this->host_dead[$conn[0]]=$now+60+intval(rand(0, 10)); |
| 646 | + |
| 647 | + $this->errno = MC_ERR_SOCKET_CONNECT; |
| 648 | + $this->errstr = "Failed to connect to ".$conn[0].":".$conn[1]; |
| 649 | + |
| 650 | + if($this->debug) |
| 651 | + $this->_debug("sock_to_host(): Failed to connect to ".$conn[0].":".$conn[1]); |
| 652 | + |
| 653 | + return FALSE; |
| 654 | + } |
| 655 | + |
| 656 | + // success, add to the list of sockets |
| 657 | + $cache_sock[$host] = $sock; |
| 658 | + |
| 659 | + return $sock; |
| 660 | + } |
| 661 | + |
| 662 | + |
| 663 | + /** |
| 664 | + * retrieves the socket associated with a key |
| 665 | + * Possible errors set are: |
| 666 | + * MC_ERR_NOT_ACTIVE |
| 667 | + * MC_ERR_GET_SOCK |
| 668 | + * |
| 669 | + * @access private |
| 670 | + * @param string $key the key to retrieve the socket from |
| 671 | + * @return resource the socket of the connection, else FALSE |
| 672 | + */ |
| 673 | + function get_sock($key) |
| 674 | + { |
| 675 | + if(!$this->active) |
| 676 | + { |
| 677 | + $this->errno = MC_ERR_NOT_ACTIVE; |
| 678 | + $this->errstr = "No active servers are available"; |
| 679 | + |
| 680 | + if($this->debug) |
| 681 | + $this->_debug("get_sock(): There are no active servers available."); |
| 682 | + |
| 683 | + return FALSE; |
| 684 | + } |
| 685 | + |
| 686 | + $hv = is_array($key) ? intval($key[0]) : $this->_hashfunc($key); |
| 687 | + |
| 688 | + if(!$this->buckets) |
| 689 | + { |
| 690 | + $bu = $this->buckets = array(); |
| 691 | + |
| 692 | + foreach($this->servers as $v) |
| 693 | + { |
| 694 | + if(is_array($v)) |
| 695 | + { |
| 696 | + for($i = 1; $i <= $v[1]; ++$i) |
| 697 | + $bu[] = $v[0]; |
| 698 | + } |
| 699 | + else |
| 700 | + $bu[] = $v; |
| 701 | + } |
| 702 | + |
| 703 | + $this->buckets = $bu; |
| 704 | + } |
| 705 | + |
| 706 | + $real_key = is_array($key) ? $key[1] : $key; |
| 707 | + $tries = 0; |
| 708 | + while($tries < 20) |
| 709 | + { |
| 710 | + $host = @$this->buckets[$hv % count($this->buckets)]; |
| 711 | + $sock = $this->sock_to_host($host); |
| 712 | + |
| 713 | + if(is_resource($sock)) |
| 714 | + return $sock; |
| 715 | + |
| 716 | + $hv += $this->_hashfunc($tries.$real_key); |
| 717 | + ++$tries; |
| 718 | + } |
| 719 | + |
| 720 | + $this->errno = MC_ERR_GET_SOCK; |
| 721 | + $this->errstr = "Unable to retrieve a valid socket."; |
| 722 | + |
| 723 | + if($this->debug) |
| 724 | + $this->_debug("get_sock(): Unable to retrieve a valid socket."); |
| 725 | + |
| 726 | + return FALSE; |
| 727 | + } |
| 728 | + |
| 729 | + |
| 730 | + /** |
| 731 | + * increments or decrements a numerical value in memcached. this function is |
| 732 | + * called from incr() and decr() |
| 733 | + * ONLY WORKS WITH NUMERIC VALUES |
| 734 | + * Possible errors set are: |
| 735 | + * MC_ERR_NOT_ACTIVE |
| 736 | + * MC_ERR_GET_SOCK |
| 737 | + * MC_ERR_SOCKET_WRITE |
| 738 | + * MC_ERR_SOCKET_READ |
| 739 | + * |
| 740 | + * @access private |
| 741 | + * @param string $cmdname the command to send, either incr or decr |
| 742 | + * @param string $key the key to perform the command on |
| 743 | + * @param mixed $value the value to incr or decr the key value by |
| 744 | + * @return int the new value of the key, FALSE if something went wrong |
| 745 | + */ |
| 746 | + function _incrdecr($cmdname, $key, $value) |
| 747 | + { |
| 748 | + if(!$this->active) |
| 749 | + { |
| 750 | + $this->errno = MC_ERR_NOT_ACTIVE; |
| 751 | + $this->errstr = "No active servers are available"; |
| 752 | + |
| 753 | + if($this->debug) |
| 754 | + $this->_debug("_incrdecr(): There are no active servers available."); |
| 755 | + |
| 756 | + return FALSE; |
| 757 | + } |
| 758 | + |
| 759 | + $sock = $this->get_sock($key); |
| 760 | + if(!is_resource($sock)) |
| 761 | + { |
| 762 | + $this->errno = MC_ERR_GET_SOCK; |
| 763 | + $this->errstr = "Unable to retrieve a valid socket."; |
| 764 | + |
| 765 | + if($this->debug) |
| 766 | + $this->_debug("_incrdecr(): Invalid socket returned by get_sock()."); |
| 767 | + |
| 768 | + return FALSE; |
| 769 | + } |
| 770 | + |
| 771 | + if($value == "") |
| 772 | + $value = 1; |
| 773 | + |
| 774 | + $cmd = "$cmdname $key $value\r\n"; |
| 775 | + $cmd_len = strlen($cmd); |
| 776 | + $offset = 0; |
| 777 | + |
| 778 | + // write the command to the server |
| 779 | + while($offset < $cmd_len) |
| 780 | + { |
| 781 | + $result = socket_write($sock, substr($cmd, $offset, MC_BUFFER_SZ), MC_BUFFER_SZ); |
| 782 | + |
| 783 | + if($result !== FALSE) |
| 784 | + $offset += $result; |
| 785 | + else if($offset < $cmd_len) |
| 786 | + { |
| 787 | + $this->errno = MC_ERR_SOCKET_WRITE; |
| 788 | + $this->errstr = "Failed to write to socket."; |
| 789 | + |
| 790 | + if($this->debug) |
| 791 | + { |
| 792 | + $sockerr = socket_last_error($sock); |
| 793 | + $this->_debug("_incrdecr(): socket_write() returned FALSE. Error $errno: ".socket_strerror($sockerr)); |
| 794 | + } |
| 795 | + |
| 796 | + return FALSE; |
| 797 | + } |
| 798 | + } |
| 799 | + |
| 800 | + // now read the server's response |
| 801 | + if(($retval = socket_read($sock, MC_BUFFER_SZ, PHP_NORMAL_READ)) === FALSE) |
| 802 | + { |
| 803 | + $this->errno = MC_ERR_SOCKET_READ; |
| 804 | + $this->errstr = "Failed to read from socket."; |
| 805 | + |
| 806 | + if($this->debug) |
| 807 | + { |
| 808 | + $sockerr = socket_last_error($sock); |
| 809 | + $this->_debug("_incrdecr(): socket_read() returned FALSE. Socket Error $errno: ".socket_strerror($sockerr)); |
| 810 | + } |
| 811 | + |
| 812 | + return FALSE; |
| 813 | + } |
| 814 | + |
| 815 | + // strip the /r/n from the end and return value |
| 816 | + return trim($retval); |
| 817 | + } |
| 818 | + |
| 819 | + /** |
| 820 | + * sends the command to the server |
| 821 | + * Possible errors set are: |
| 822 | + * MC_ERR_NOT_ACTIVE |
| 823 | + * MC_ERR_GET_SOCK |
| 824 | + * MC_ERR_SOCKET_WRITE |
| 825 | + * MC_ERR_SOCKET_READ |
| 826 | + * MC_ERR_SET |
| 827 | + * |
| 828 | + * @access private |
| 829 | + * @param string $cmdname the command to send, either incr or decr |
| 830 | + * @param string $key the key to perform the command on |
| 831 | + * @param mixed $value the value to set the key to |
| 832 | + * @param timestamp $exptime expiration time of the key |
| 833 | + * @return bool TRUE on success, else FALSE |
| 834 | + */ |
| 835 | + function _set($cmdname, $key, $val, $exptime = 0) |
| 836 | + { |
| 837 | + if(!$this->active) |
| 838 | + { |
| 839 | + $this->errno = MC_ERR_NOT_ACTIVE; |
| 840 | + $this->errstr = "No active servers are available"; |
| 841 | + |
| 842 | + if($this->debug) |
| 843 | + $this->_debug("_set(): No active servers are available."); |
| 844 | + |
| 845 | + return FALSE; |
| 846 | + } |
| 847 | + |
| 848 | + $sock = $this->get_sock($key); |
| 849 | + if(!is_resource($sock)) |
| 850 | + { |
| 851 | + $this->errno = MC_ERR_GET_SOCK; |
| 852 | + $this->errstr = "Unable to retrieve a valid socket."; |
| 853 | + |
| 854 | + if($this->debug) |
| 855 | + $this->_debug("_set(): Invalid socket returned by get_sock()."); |
| 856 | + |
| 857 | + return FALSE; |
| 858 | + } |
| 859 | + |
| 860 | + $flags = 0; |
| 861 | + $key = is_array($key) ? $key[1] : $key; |
| 862 | + |
| 863 | + $raw_val = $val; |
| 864 | + |
| 865 | + // if the value is not scalar, we need to serialize it |
| 866 | + if(!is_scalar($val)) |
| 867 | + { |
| 868 | + $val = serialize($val); |
| 869 | + $flags |= 1; |
| 870 | + } |
| 871 | + |
| 872 | + if (($this->compress_active) && ($this->compress > 0) && (strlen($val) > $this->compress)) { |
| 873 | + $this->_debug("_set(): compressing data. size in:".strlen($val)); |
| 874 | + $cval=gzcompress($val); |
| 875 | + $this->_debug("_set(): done compressing data. size out:".strlen($cval)); |
| 876 | + if ((strlen($cval) < strlen($val)) && (strlen($val) - strlen($cval) > 2048)){ |
| 877 | + $flags |= 2; |
| 878 | + $val=$cval; |
| 879 | + } |
| 880 | + unset($cval); |
| 881 | + } |
| 882 | + |
| 883 | + $len = strlen($val); |
| 884 | + if (!is_int($exptime)) |
| 885 | + $exptime = 0; |
| 886 | + |
| 887 | + // send off the request |
| 888 | + $cmd = "$cmdname $key $flags $exptime $len\r\n$val\r\n"; |
| 889 | + $cmd_len = strlen($cmd); |
| 890 | + $offset = 0; |
| 891 | + |
| 892 | + // write the command to the server |
| 893 | + while($offset < $cmd_len) |
| 894 | + { |
| 895 | + $result = socket_write($sock, substr($cmd, $offset, MC_BUFFER_SZ), MC_BUFFER_SZ); |
| 896 | + |
| 897 | + if($result !== FALSE) |
| 898 | + $offset += $result; |
| 899 | + else if($offset < $cmd_len) |
| 900 | + { |
| 901 | + $this->errno = MC_ERR_SOCKET_WRITE; |
| 902 | + $this->errstr = "Failed to write to socket."; |
| 903 | + |
| 904 | + if($this->debug) |
| 905 | + { |
| 906 | + $errno = socket_last_error($sock); |
| 907 | + $this->_debug("_set(): socket_write() returned FALSE. Error $errno: ".socket_strerror($errno)); |
| 908 | + } |
| 909 | + |
| 910 | + return FALSE; |
| 911 | + } |
| 912 | + } |
| 913 | + |
| 914 | + // now read the server's response |
| 915 | + if(($l_szResponse = socket_read($sock, 6, PHP_NORMAL_READ)) === FALSE) |
| 916 | + { |
| 917 | + $this->errno = MC_ERR_SOCKET_READ; |
| 918 | + $this->errstr = "Failed to read from socket."; |
| 919 | + |
| 920 | + if($this->debug) |
| 921 | + { |
| 922 | + $errno = socket_last_error($sock); |
| 923 | + $this->_debug("_set(): socket_read() returned FALSE. Error $errno: ".socket_strerror($errno)); |
| 924 | + } |
| 925 | + |
| 926 | + return FALSE; |
| 927 | + } |
| 928 | + |
| 929 | + if($l_szResponse == "STORED") |
| 930 | + { |
| 931 | + if($this->debug) |
| 932 | + $this->_debug("MemCache: $cmdname $key = $raw_val"); |
| 933 | + |
| 934 | + return TRUE; |
| 935 | + } |
| 936 | + |
| 937 | + $this->errno = MC_ERR_SET; |
| 938 | + $this->errstr = "Failed to receive the STORED response from the server."; |
| 939 | + |
| 940 | + if($this->debug) |
| 941 | + $this->_debug("_set(): Did not receive STORED as the server response! Received $l_szResponse instead."); |
| 942 | + |
| 943 | + return FALSE; |
| 944 | + } |
| 945 | + |
| 946 | + |
| 947 | + /** |
| 948 | + * retrieves the value, and returns it unserialized |
| 949 | + * Possible errors set are: |
| 950 | + * MC_ERR_SOCKET_WRITE |
| 951 | + * MC_ERR_SOCKET_READ |
| 952 | + * MC_ERR_GET_KEY |
| 953 | + * MC_ERR_LOADITEM_END |
| 954 | + * MC_ERR_LOADITEM_BYTES |
| 955 | + * |
| 956 | + * @access private |
| 957 | + * @param resource $sock the socket to connection we are retriving from |
| 958 | + * @param array $val reference to the values retrieved |
| 959 | + * @param mixed $sock_keys either a string or an array of keys to retrieve |
| 960 | + * @return array TRUE on success, else FALSE |
| 961 | + */ |
| 962 | + function _load_items($sock, &$val, $sock_keys) |
| 963 | + { |
| 964 | + $val = array(); |
| 965 | + $cmd = "get "; |
| 966 | + |
| 967 | + if(!is_array($sock_keys)) |
| 968 | + { |
| 969 | + $arr[] = $sock_keys; |
| 970 | + $sock_keys = $arr; |
| 971 | + } |
| 972 | + |
| 973 | + foreach($sock_keys as $sk) |
| 974 | + $cmd .= $sk." "; |
| 975 | + |
| 976 | + $cmd .="\r\n"; |
| 977 | + $cmd_len = strlen($cmd); |
| 978 | + $offset = 0; |
| 979 | + |
| 980 | + // write the command to the server |
| 981 | + while($offset < $cmd_len) |
| 982 | + { |
| 983 | + $result = socket_write($sock, substr($cmd, $offset, MC_BUFFER_SZ), MC_BUFFER_SZ); |
| 984 | + |
| 985 | + if($result !== FALSE) |
| 986 | + $offset += $result; |
| 987 | + else if($offset < $cmd_len) |
| 988 | + { |
| 989 | + $this->errno = MC_ERR_SOCKET_WRITE; |
| 990 | + $this->errstr = "Failed to write to socket."; |
| 991 | + |
| 992 | + if($this->debug) |
| 993 | + { |
| 994 | + $errno = socket_last_error($sock); |
| 995 | + $this->_debug("_load_items(): socket_write() returned FALSE. Error $errno: ".socket_strerror($errno)); |
| 996 | + } |
| 997 | + |
| 998 | + return FALSE; |
| 999 | + } |
| 1000 | + } |
| 1001 | + |
| 1002 | + $len = 0; |
| 1003 | + $buf = ""; |
| 1004 | + $flags_array = array(); |
| 1005 | + |
| 1006 | + // now read the response from the server |
| 1007 | + while($line = socket_read($sock, MC_BUFFER_SZ, PHP_BINARY_READ)) |
| 1008 | + { |
| 1009 | + // check for a socket_read error |
| 1010 | + if($line === FALSE) |
| 1011 | + { |
| 1012 | + $this->errno = MC_ERR_SOCKET_READ; |
| 1013 | + $this->errstr = "Failed to read from socket."; |
| 1014 | + |
| 1015 | + if($this->debug) |
| 1016 | + { |
| 1017 | + $errno = socket_last_error($sock); |
| 1018 | + $this->_debug("_load_items(): socket_read() returned FALSE. Error $errno: ".socket_strerror($errno)); |
| 1019 | + } |
| 1020 | + |
| 1021 | + return FALSE; |
| 1022 | + } |
| 1023 | + |
| 1024 | + if($len == 0) |
| 1025 | + { |
| 1026 | + $header = substr($line, 0, strpos($line, "\r\n")); |
| 1027 | + $matches = explode(" ", $header); |
| 1028 | + |
| 1029 | + if(is_string($matches[1]) && is_numeric($matches[2]) && is_numeric($matches[3])) |
| 1030 | + { |
| 1031 | + $rk = $matches[1]; |
| 1032 | + $flags = $matches[2]; |
| 1033 | + $len = $matches[3]; |
| 1034 | + |
| 1035 | + if($flags) |
| 1036 | + $flags_array[$rk] = $flags; |
| 1037 | + |
| 1038 | + $len_array[$rk] = $len; |
| 1039 | + $bytes_read = 0; |
| 1040 | + |
| 1041 | + // get the left over data after the header is read |
| 1042 | + $line = substr($line, strpos($line, "\r\n")+2, strlen($line)); |
| 1043 | + } |
| 1044 | + else |
| 1045 | + { |
| 1046 | + $this->errno = MC_ERR_GET_KEY; |
| 1047 | + $this->errstr = "Requested key(s) returned no values."; |
| 1048 | + |
| 1049 | + // something went wrong, we never recieved the header |
| 1050 | + if($this->debug) |
| 1051 | + $this->_debug("_load_items(): Requested key(s) returned no values."); |
| 1052 | + |
| 1053 | + return FALSE; |
| 1054 | + } |
| 1055 | + } |
| 1056 | + |
| 1057 | + // skip over the extra return or newline |
| 1058 | + if($line == "\r" || $line == "\n") |
| 1059 | + continue; |
| 1060 | + |
| 1061 | + $bytes_read += strlen($line); |
| 1062 | + $buf .= $line; |
| 1063 | + |
| 1064 | + // we read the all of the data, take in account |
| 1065 | + // for the /r/nEND/r/n |
| 1066 | + if($bytes_read == ($len + 7)) |
| 1067 | + { |
| 1068 | + $end = substr($buf, $len+2, 3); |
| 1069 | + if($end == "END") |
| 1070 | + { |
| 1071 | + $val[$rk] = substr($buf, 0, $len); |
| 1072 | + |
| 1073 | + foreach($sock_keys as $sk) |
| 1074 | + { |
| 1075 | + if(!isset($val[$sk])) |
| 1076 | + continue; |
| 1077 | + |
| 1078 | + if(strlen($val[$sk]) != $len_array[$sk]) |
| 1079 | + continue; |
| 1080 | + if(@$flags_array[$sk] & 2) |
| 1081 | + $val[$sk] = gzuncompress($val[$sk]); |
| 1082 | + |
| 1083 | + if(@$flags_array[$sk] & 1) |
| 1084 | + $val[$sk] = unserialize($val[$sk]); |
| 1085 | + } |
| 1086 | + |
| 1087 | + return TRUE; |
| 1088 | + } |
| 1089 | + else |
| 1090 | + { |
| 1091 | + $this->errno = MC_ERR_LOADITEM_END; |
| 1092 | + $this->errstr = "Failed to receive END response from server."; |
| 1093 | + |
| 1094 | + if($this->debug) |
| 1095 | + $this->_debug("_load_items(): Failed to receive END. Received $end instead."); |
| 1096 | + |
| 1097 | + return FALSE; |
| 1098 | + } |
| 1099 | + } |
| 1100 | + |
| 1101 | + // take in consideration for the "\r\nEND\r\n" |
| 1102 | + if($bytes_read > ($len + 7)) |
| 1103 | + { |
| 1104 | + $this->errno = MC_ERR_LOADITEM_BYTES; |
| 1105 | + $this->errstr = "Bytes read from server greater than size of data."; |
| 1106 | + |
| 1107 | + if($this->debug) |
| 1108 | + $this->_debug("_load_items(): Bytes read is greater than requested data size."); |
| 1109 | + |
| 1110 | + return FALSE; |
| 1111 | + } |
| 1112 | + |
| 1113 | + } |
| 1114 | + } |
| 1115 | + |
| 1116 | + |
| 1117 | + /** |
| 1118 | + * creates our hash |
| 1119 | + * |
| 1120 | + * @access private |
| 1121 | + * @param int $num |
| 1122 | + * @return hash |
| 1123 | + */ |
| 1124 | + function _hashfunc($num) |
| 1125 | + { |
| 1126 | + $hash = sprintf("%u",crc32($num)); |
| 1127 | + |
| 1128 | + return $hash; |
| 1129 | + } |
| 1130 | + |
| 1131 | + /** |
| 1132 | + * function that can be overridden to handle debug output |
| 1133 | + * by default debug info is print to the screen |
| 1134 | + * |
| 1135 | + * @access private |
| 1136 | + * @param $text string to output debug info |
| 1137 | + */ |
| 1138 | + function _debug($text) |
| 1139 | + { |
| 1140 | + print $text . "\r\n"; |
| 1141 | + } |
| 1142 | +} |
| 1143 | + |
| 1144 | +?> |
\ No newline at end of file |
Property changes on: branches/stable/phase3/includes/MemCachedClient.inc.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 1145 | + native |
Name: svn:keywords |
2 | 1146 | + Author Date Id Revision |
Index: branches/stable/phase3/languages/LanguageRo.php |
— | — | @@ -0,0 +1,1026 @@ |
| 2 | +<? |
| 3 | + |
| 4 | +include_once("Utf8Case.php"); |
| 5 | + |
| 6 | +# NOTE: To turn off "Current Events" in the sidebar, |
| 7 | +# set "currentevents" => "-" |
| 8 | + |
| 9 | +# The names of the namespaces can be set here, but the numbers |
| 10 | +# are magical, so don't change or move them! The Namespace class |
| 11 | +# encapsulates some of the magic-ness. |
| 12 | +# |
| 13 | +/* private */ $wgNamespaceNamesRo = array( |
| 14 | + -1 => "Special", |
| 15 | + 0 => "", |
| 16 | + 1 => "Discuţie", |
| 17 | + 2 => "Utilizator", |
| 18 | + 3 => "Discuţie_Utilizator", |
| 19 | + 4 => "Wikipedia", |
| 20 | + 5 => "Discuţie_Wikipedia", |
| 21 | + 6 => "Imagine", |
| 22 | + 7 => "Discuţie_Imagine" |
| 23 | +); |
| 24 | + |
| 25 | +/* private */ $wgQuickbarSettingsRo = array( |
| 26 | + "Fără", "Fixă, în stânga", "Fixă, în dreapta", "Liberă" |
| 27 | +); |
| 28 | + |
| 29 | +/* private */ $wgSkinNamesRo = array( |
| 30 | + "Normală", "Nostalgie", "Cologne Blue" |
| 31 | +); |
| 32 | + |
| 33 | +/* private */ $wgMathNamesRo = array( |
| 34 | + "Întotdeauna PNG", |
| 35 | + "HTML dacă e foarte simplu sau PNG altfel", |
| 36 | + "HTML dacă e posibil sau PNG altfel", |
| 37 | + "Lasă-l TeX (pentru browsere text)", |
| 38 | + "Recomandat pentru browsere moderne" |
| 39 | +); |
| 40 | + |
| 41 | +/* private */ $wgDateFormatsRo = array( |
| 42 | + "Nici o preferinţă", |
| 43 | + "Ianuarie 15, 2001", |
| 44 | + "15 Ianuarie 2001", |
| 45 | + "2001 Ianuarie 15" |
| 46 | +); |
| 47 | + |
| 48 | +/* private */ $wgUserTogglesRo = array( |
| 49 | + "hover" => "Arată info deasupra legăturilor", |
| 50 | + "underline" => "Subliniază legăturile", |
| 51 | + "highlightbroken" => "Formatează legăturile inexistente <a href=\"\" class=\"new\">în felul acesta</a> (alternativa este aşa<a href=\"\" class=\"internal\">?</a>).", |
| 52 | + "justify" => "Aliniază paragrafele", |
| 53 | + "hideminor" => "Ascunde schimbările minore în pagina de schimbări recente", |
| 54 | + "usenewrc" => "Îmbunătăţeşte structura paginii de schimbări minore<br>(nu merge în toate browserele)", |
| 55 | + "numberheadings" => "Auto-numerotează titlurile", |
| 56 | + "editondblclick" => "Editează paginile cu dublu clic (JavaScript)", |
| 57 | + "editsection" => "Permite editarea secţiunilor folosind legături [editează] pe pagină", |
| 58 | + "editsectiononrightclick"=>"Permite editarea secţiunilor la apăsarea<br>butonului din dreapta al mouse-ului pe titlu<br>(necesită JavaScript)", |
| 59 | + "showtoc" => "Arată cuprinsul paginilor<br>(pentru pagini cu cel puţin trei titluri)", |
| 60 | + "rememberpassword" => "Păstrează parola între sesiuni", |
| 61 | + "editwidth" => "Lăţime maximă pentru caseta de editare", |
| 62 | + "watchdefault" => "Urmăreşte articolele pe care le creezi sau le editezi", |
| 63 | + "minordefault" => "Marchează implicit toate editările ca minore", |
| 64 | + "previewontop" => "Arată pagina după caseta de editare, nu înainte", |
| 65 | + "nocache" => "Nu folosi cache (conexiunea merge mai greu,<br>dar sunt afişate toate modificările paginilor)" |
| 66 | + |
| 67 | +); |
| 68 | + |
| 69 | +/* private */ $wgBookstoreListRo = array( |
| 70 | + "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN", |
| 71 | + "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1", |
| 72 | + "Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1", |
| 73 | + "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1" |
| 74 | +); |
| 75 | + |
| 76 | +/* private */ $wgWeekdayNamesRo = array( |
| 77 | + "Duminică", "Luni", "Marţi", "Miercuri", "Joi", |
| 78 | + "Vineri", "Sâmbătă" |
| 79 | +); |
| 80 | + |
| 81 | +/* private */ $wgMonthNamesRo = array( |
| 82 | + "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", |
| 83 | + "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", |
| 84 | + "Decembrie" |
| 85 | +); |
| 86 | + |
| 87 | +/* private */ $wgMonthAbbreviationsRo = array( |
| 88 | + "Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", |
| 89 | + "Sep", "Oct", "Noi", "Dec" |
| 90 | +); |
| 91 | + |
| 92 | +# All special pages have to be listed here: a description of "" |
| 93 | +# will make them not show up on the "Special Pages" page, which |
| 94 | +# is the right thing for some of them (such as the "targeted" ones). |
| 95 | +# |
| 96 | +/* private */ $wgValidSpecialPagesRo = array( |
| 97 | + "Userlogin" => "", |
| 98 | + "Userlogout" => "", |
| 99 | + "Preferences" => "Preferinţele mele", |
| 100 | + "Watchlist" => "Articole urmărite", |
| 101 | + "Recentchanges" => "Pagini actualizate recent", |
| 102 | + "Upload" => "Trimite imagini", |
| 103 | + "Imagelist" => "Lista imaginilor", |
| 104 | + "Listusers" => "Utilizatori înregistraţi", |
| 105 | + "Statistics" => "Statistici pentru site", |
| 106 | + "Randompage" => "Articol aleator", |
| 107 | + |
| 108 | + "Lonelypages" => "Articole orfane", |
| 109 | + "Unusedimages" => "Imagini orfane", |
| 110 | + "Popularpages" => "Articole populare", |
| 111 | + "Wantedpages" => "Cele mai dorite articole", |
| 112 | + "Shortpages" => "Articole scurte", |
| 113 | + "Longpages" => "Articole lungi", |
| 114 | + "Newpages" => "Articole noi", |
| 115 | + "Ancientpages" => "Cele mai vechi articole", |
| 116 | + "Intl" => "Legături între limbi", |
| 117 | + "Allpages" => "Toate paginile după titlu", |
| 118 | + |
| 119 | + "Ipblocklist" => "Adrese IP blocate", |
| 120 | + "Maintenance" => "Pagina de întreţinere", |
| 121 | + "Specialpages" => "Pagini speciale", |
| 122 | + "Contributions" => "Contribuţii", |
| 123 | + "Emailuser" => "Trimite e-mail utilizatorului", |
| 124 | + "Whatlinkshere" => "Ce pagini se leagă aici", |
| 125 | + "Recentchangeslinked" => "", |
| 126 | + "Movepage" => "Mută pagina", |
| 127 | + "Booksources" => "Surse externe de cărţi", |
| 128 | + "Categories" => "Categorii de pagini" |
| 129 | +); |
| 130 | + |
| 131 | +/* private */ $wgSysopSpecialPagesRo = array( |
| 132 | + "Blockip" => "Blochează adresa IP", |
| 133 | + "Asksql" => "Efectuează un query în baza de date", |
| 134 | + "Undelete" => "Afişează şi restaurează pagini şterse" |
| 135 | +); |
| 136 | + |
| 137 | +/* private */ $wgDeveloperSpecialPagesRo = array( |
| 138 | + "Lockdb" => "Blochează baza de date la scriere", |
| 139 | + "Unlockdb" => "Deblochează baza de date", |
| 140 | + "Debug" => "Informaţie pentru debugging" |
| 141 | +); |
| 142 | + |
| 143 | +/* private */ $wgAllMessagesRo = array( |
| 144 | + |
| 145 | +# Bits of text used by many pages: |
| 146 | +# |
| 147 | +"categories" => "Categorii de pagini", |
| 148 | +"category" => "categoria", |
| 149 | +"category_header" => "Articole din categoria \"$1\"", |
| 150 | +"subcategories" => "Subcategorii", |
| 151 | +"linktrail" => "/^([a-z]+)(.*)\$/sD", |
| 152 | +"mainpage" => "Pagina principală", |
| 153 | +"mainpagetext" => "Programul Wiki a fost instalat cu succes", |
| 154 | +"about" => "Despre", |
| 155 | +"aboutwikipedia" => "Despre Wikipedia", |
| 156 | +"aboutpage" => "Wikipedia:Despre", |
| 157 | +"help" => "Ajutor", |
| 158 | +"helppage" => "Wikipedia:Ajutor", |
| 159 | +"wikititlesuffix" => "Wikipedia", |
| 160 | +"bugreports" => "Raportare probleme", |
| 161 | +"bugreportspage" => "Wikipedia:Rapoarte_probleme", |
| 162 | +"faq" => "Întrebări frecvente", |
| 163 | +"faqpage" => "Wikipedia:Întrebări_frecvente", |
| 164 | +"edithelp" => "Ajutor pentru editare", |
| 165 | +"edithelppage" => "Wikipedia:Cum_să_editezi_o_pagină", |
| 166 | +"cancel" => "Renunţă", |
| 167 | +"qbfind" => "Găseşte", |
| 168 | +"qbbrowse" => "Răsfoieşte", |
| 169 | +"qbedit" => "Editează", |
| 170 | +"qbpageoptions" => "Opţiuni ale paginii", |
| 171 | +"qbpageinfo" => "Informaţii ale paginii", |
| 172 | +"qbmyoptions" => "Opţiunile mele", |
| 173 | +"mypage" => "Pagina mea", |
| 174 | +"mytalk" => "Discuţiile mele", |
| 175 | +"currentevents" => "Evenimente curente", |
| 176 | +"errorpagetitle" => "Eroare", |
| 177 | +"returnto" => "Înapoi la $1.", |
| 178 | +"fromwikipedia" => "De la Wikipedia, enciclopedia liberă.", |
| 179 | +"whatlinkshere" => "Pagini care se leagă aici", |
| 180 | +"help" => "Ajutor", |
| 181 | +"search" => "Caută", |
| 182 | +"go" => "Du-te", |
| 183 | +"history" => "Versiuni mai vechi", |
| 184 | +"printableversion" => "Versiune tipărire", |
| 185 | +"editthispage" => "Editează această pagină", |
| 186 | +"deletethispage" => "Şterge pagina", |
| 187 | +"protectthispage" => "Protejează pagina", |
| 188 | +"unprotectthispage" => "Deprotejează pagina", |
| 189 | +"newpage" => "Pagină nouă", |
| 190 | +"talkpage" => "Discută pagina", |
| 191 | +"postcomment" => "Agaugă comentariu", |
| 192 | +"articlepage" => "Vezi articolul", |
| 193 | +"subjectpage" => "Vezi subiectul", # For compatibility |
| 194 | +"userpage" => "Vezi pagina utilizatorului", |
| 195 | +"wikipediapage" => "Vezi pagina meta", |
| 196 | +"imagepage" => "Vezi pagina imaginii", |
| 197 | +"viewtalkpage" => "Vezi discuţia", |
| 198 | +"otherlanguages" => "În alte limbi", |
| 199 | +"redirectedfrom" => "(Redirectat de la $1)", |
| 200 | +"lastmodified" => "Ultima modificare $1.", |
| 201 | +"viewcount" => "Această pagină a fost vizitată de $1 ori.", |
| 202 | +"gnunote" => "Tot textul este disponibil în termenii licenţei <a class=internal href='/wiki/GNU_FDL'>GNU Free Documentation License</a>.", |
| 203 | +"printsubtitle" => "(De la http://ro.wikipedia.org)", |
| 204 | +"protectedpage" => "Pagină protejată", |
| 205 | +"administrators" => "Wikipedia:Administratori", |
| 206 | +"sysoptitle" => "Aveţi nevoie de acces ca operator", |
| 207 | +"sysoptext" => "Acţiunea pe care aţi încercat-o necesită drepturi de operator. |
| 208 | +Vezi $1.", |
| 209 | +"developertitle" => "Aveţi nevoie de acces ca dezvoltator", |
| 210 | +"developertext" => "Acţiunea pe care aţi încercat-o necesită drepturi de dezvoltator. |
| 211 | +Vezi $1.", |
| 212 | +"nbytes" => "$1 octeţi", |
| 213 | +"go" => "Du-te", |
| 214 | +"ok" => "OK", |
| 215 | +"sitetitle" => "Wikipedia", |
| 216 | +"sitesubtitle" => "Enciclopedia liberă", |
| 217 | +"retrievedfrom" => "Adus de la \"$1\"", |
| 218 | +"newmessages" => "Aveţi $1.", |
| 219 | +"newmessageslink" => "mesaje noi", |
| 220 | +"editsection"=>"editează", |
| 221 | +"toc" => "Cuprins", |
| 222 | +"showtoc" => "arată", |
| 223 | +"hidetoc" => "ascunde", |
| 224 | + |
| 225 | +# Main script and global functions |
| 226 | +# |
| 227 | +"nosuchaction" => "Această acţiune nu există", |
| 228 | +"nosuchactiontext" => "Acţiunea specificată în adresă nu este recunoscută de Wikipedia.", |
| 229 | +"nosuchspecialpage" => "Această pagină specială nu există", |
| 230 | +"nospecialpagetext" => "Aţi cerut o pagină specială care nu este recunoscută de Wikipedia.", |
| 231 | + |
| 232 | +# General errors |
| 233 | +# |
| 234 | +"error" => "Eroare", |
| 235 | +"databaseerror" => "Eroare la baza de date", |
| 236 | +"dberrortext" => "A apărut o eroare în execuţia query-ului. |
| 237 | +Aceasta se poate datora unui query ilegal (vezi $5), |
| 238 | +sau poate indica o problemă în program. |
| 239 | +Ultimul query încercat a fost: |
| 240 | +<blockquote><tt>$1</tt></blockquote> |
| 241 | +în cadrul funcţiei \"<tt>$2</tt>\". |
| 242 | +MySQL a returnat eroarea \"<tt>$3: $4</tt>\".", |
| 243 | +"dberrortextcl" => "A aoărut o eroare de sintaxă în query. |
| 244 | +Ultimul query încercat a fost: |
| 245 | +\"$1\" |
| 246 | +din funcţia \"$2\". |
| 247 | +MySQL a returnat eroarea \"$3: $4\".\n", |
| 248 | +"noconnect" => "Nu s-a putut conecta baza de date pe $1", |
| 249 | +"nodb" => "Nu s-a putut selecta baza de date $1", |
| 250 | +"cachederror" => "Aceasta este o versiune din cache a paginii cerute şi este posibil să nu fie ultima variantă a acesteia.", |
| 251 | +"readonly" => "Baza de date este blocată la scriere", |
| 252 | +"enterlockreason" => "Introduceţi motivul pentru blocare, incluzând o estimare a termenului când veţi debloca baza de date", |
| 253 | +"readonlytext" => "Baza de date Wikipedia este momentan blocată la scriere, probabil pentru o operaţiune de rutină, după care va fi deblocată şi se va reveni la starea normală. |
| 254 | +Administratorul care a blocat-o a oferit această explicaţie: |
| 255 | +<p>$1", |
| 256 | +"missingarticle" => "Textul \"$1\" nu a putut fi găsit în baza de date, aşa cum ar fi trebuit. Aceasta nu este o problemă legată de programul care gestionează baza de date, ci probabil o problemă in programul care administrează Wikipedia. Vă rugăm să raportaţi această problemă unui administrator, incluzând şi adresa acestei pagini.", |
| 257 | +"internalerror" => "Eroare internă", |
| 258 | +"filecopyerror" => "Fisierul \"$1\" nu a putut fi copiat la \"$2\".", |
| 259 | +"filerenameerror" => "Fişierul \"$1\" nu a putut fi mutat la \"$2\".", |
| 260 | +"filedeleteerror" => "Fişierul \"$1\" nu a putut fi şters.", |
| 261 | +"filenotfound" => "Fişierul \"$1\" nu a putut fi găsit.", |
| 262 | +"unexpected" => "Valoare neaşteptată: \"$1\"=\"$2\".", |
| 263 | +"formerror" => "Eroare: datele nu au putut fi trimise", |
| 264 | +"badarticleerror" => "Această acţiune nu poate fi efectuată pe această pagină.", |
| 265 | +"cannotdelete" => "Nu s-a putut şterge pagina sau imaginea (poate a şters-o altcineva deja?)", |
| 266 | +"badtitle" => "Titlu invalid", |
| 267 | +"badtitletext" => "Titlul căutat a fost invalid, gol sau o legătură invalidă inter-linguală sau inter-wiki.", |
| 268 | +"perfdisabled" => "Ne pare rău! Această funcţionalitate a fost dezactivată temporar în timpul orelor de vârf din motive de performanţă. Vă rugăm să reveniţi la altă oră şi încercaţi din nou.", // Didn't provide any off-peak hours because they may differ on the Romanian Wikipedia. |
| 269 | +"perfdisabledsub" => "Iată o copie salvată de la $1:", |
| 270 | + |
| 271 | +# Login and logout pages |
| 272 | +# |
| 273 | +"logouttitle" => "Sesiune închisă", |
| 274 | +"logouttext" => "Sesiunea Dvs. în Wikipedia a fost închisă. |
| 275 | +Puteţi continua să folosiţi Wikipedia anonim, sau puteţi să vă reautentificaţi ca acelaşi sau ca alt utilizator.\n", |
| 276 | +"welcomecreation" => "<h2>Bun venit, $1!</h2><p>A fost creat un cont pentru Dvs. |
| 277 | +Nu uitaţi să vă personalizaţi preferinţele în Wikipedia.", |
| 278 | +"loginpagetitle" => "Autentificare utilizator", |
| 279 | +"yourname" => "Numele de utilizator", |
| 280 | +"yourpassword" => "Parola", |
| 281 | +"yourpasswordagain" => "Repetaţi parola", |
| 282 | +"newusersonly" => " (doar pentru utilizatori noi)", |
| 283 | +"remembermypassword" => "Reţine-mi parola între sesiuni.", |
| 284 | +"loginproblem" => "<b>A fost o problemă cu autentificarea Dvs.</b><br>Încercaţi din nou!", |
| 285 | +"alreadyloggedin" => "<font color=red><b>Sunteţi deja autentificat ca $1!</b></font><br>\n", |
| 286 | +"areyounew" => "Dacă sunteţi nou în Wikipedia şi doriţi un cont de utilizator, introduceţi un nume de utilizator, apoi scrieţi-vă parola în căsuţa următoare, şi repetaţi-o în a treia pentru confirmare. |
| 287 | +Adresa de mail este opţională; dacă vă pierdeţi parola o puteţi cere la adresa de mail pe care o introduceţi.<br>\n", |
| 288 | +"notloggedin" => "Nu sunteţi autentificat", |
| 289 | + |
| 290 | +"login" => "Autentificare", |
| 291 | +"userlogin" => "Autentificare", |
| 292 | +"logout" => "Închide sesiunea", |
| 293 | +"userlogout" => "Închide sesiunea", |
| 294 | +"createaccount" => "Creează cont nou", |
| 295 | +"createaccountmail" => "după e-mail", |
| 296 | +"badretype" => "Parolele pe care le-aţi introdus diferă.", |
| 297 | +"userexists" => "Numele de utilizator pe care l-aţi introdus există deja. Încercaţi cu un alt nume.", |
| 298 | +"youremail" => "Adresa de mail", |
| 299 | +"yournick" => "Versiune scurtă a numelui, pentru semnături", |
| 300 | +"emailforlost" => "Dacă vă pierdeţi parola, puteţi cere să vi se trimită una nouă la adresa de mail.", |
| 301 | +"loginerror" => "Eroare de autentificare", |
| 302 | +"noname" => "Numele de utilizator pe care l-aţi specificat este invalid.", |
| 303 | +"loginsuccesstitle" => "Autentificare reuşită", |
| 304 | +"loginsuccess" => "Aţi fost autentificat în Wikipedia ca \"$1\".", |
| 305 | +"nosuchuser" => "Nu există nici un utilizator cu numele \"$1\". |
| 306 | +Verificaţi dacă aţi scris corect sau folosiţi această pagină pentru a crea un nou utilizator.", |
| 307 | +"wrongpassword" => "Parola pe care aţi introdus-o este greşită. Vă rugăm încercaţi din nou.", |
| 308 | +"mailmypassword" => "Trimiteţi-mi parola pe mail!", |
| 309 | +"passwordremindertitle" => "Amintirea parolei pe Wikipedia", |
| 310 | +"passwordremindertext" => "Cineva (probabil Dvs., de la adresa $1) |
| 311 | +a cerut să vi se trimită o nouă parolă pentru Wikipedia. |
| 312 | +Parola pentru utilizatorul \"$2\" este acum \"$3\". |
| 313 | +Este recomandat să intraţi pe Wikipedia şi să vă schimbaţi parola cât mai curând.", |
| 314 | +"noemail" => "Nu este nici o adresă de mail înregistrată pentru utilizatorul \"$1\".", |
| 315 | +"passwordsent" => "O nouă parolă a fost trimisă la adresa de mail a utilizatorului \"$1\". |
| 316 | +Vă rugăm să vă autentificaţi pe Wikipedia după ce o primiţi.", |
| 317 | + |
| 318 | +# Edit pages |
| 319 | +# |
| 320 | +"summary" => "Sumar", |
| 321 | +"subject" => "Subiect/titlu", |
| 322 | +"minoredit" => "Aceasta este o editare minoră", |
| 323 | +"watchthis" => "Urmăreşte această pagină", |
| 324 | +"savearticle" => "Salvează pagina", |
| 325 | +"preview" => "Previzualizare", |
| 326 | +"showpreview" => "Arată previzualizare", |
| 327 | +"blockedtitle" => "Utilizatorul este blocat", |
| 328 | +"blockedtext" => "Utilizatorul sau parola Dvs. au fost blocate de $1. |
| 329 | +Motivul oferit pentru blocare a fost:<br>''$2''<p>Puteţi contacta pe $1 sau pe unul dintre ceilalţi |
| 330 | +[[Wikipedia:administratori|administratori]] pentru a discuta această blocare.", |
| 331 | +"whitelistedittitle" => "Este necesară autentificarea pentru a edita", |
| 332 | +"whitelistedittext" => "Trebuie să vă [[Special:Userlogin|autentificaţi]] pentru a edita articole.", |
| 333 | +"whitelistreadtitle" => "Este necesară autentificarea pentru a citi", |
| 334 | +"whitelistreadtext" => "Trebuie să vă [[Special:Userlogin|autentificaţi]] pentru a citi articole.", |
| 335 | +"whitelistacctitle" => "Nu aveţi dreptul de a crea conturi", |
| 336 | +"whitelistacctext" => "Trebuie să vă [[Special:Userlogin|autentificaţi]] şi să aveţi permisiunile corecte pentru a crea conturi.", |
| 337 | +"accmailtitle" => "Parola a fost trimisă.", |
| 338 | +"accmailtext" => "Parola pentru '$1' a fost trimisă la $2.", |
| 339 | +"newarticle" => "(Nou)", |
| 340 | +"newarticletext" => |
| 341 | +"Aţi ajuns la o pagină care nu există. |
| 342 | +Pentru a o crea, începeţi să scrieţi în caseta de mai jos |
| 343 | +(vezi [[Wikipedia:Ajutor|pagina de ajutor]] pentru mai multe informaţii). |
| 344 | +Dacă aţi ajuns aici din greşeală, întoarceţi-vă folosind controalele browser-ului Dvs.", |
| 345 | +"anontalkpagetext" => "---- ''Aceasta este pagina de discuţii pentru un utilizator care nu şi-a creat un cont încă, sau care nu s-a autentificat. De aceea trebuie să folosim [[adresa IP]] pentru a identifica această persoană. O adresă IP poate fi împărţită între mai mulţi utilizatori. Dacă sunteţi un astfel de utilizator şi credeţi că vi se adresează mesaje irelevante, vă rugăm să [[Special:Userlogin|vă creaţi un cont sau să vă autentificaţi]] pentru a evita confuzii cu alţi utilizatori anonimi în viitor.'' ", |
| 346 | +"noarticletext" => "(Nu există text în această pagină)", |
| 347 | +"updated" => "(Actualizat)", |
| 348 | +"note" => "<strong>Notă:</strong> ", |
| 349 | +"previewnote" => "Reţineţi că aceasta este doar o previzualizare - articolul încă nu este salvat! Trebuie să apăsaţi butonul \"Salvează pagina\" de sub caseta de editare pentru a salva. Nu uitaţi să introduceţi şi o descriere sumară a modificărilor!", |
| 350 | +"previewconflict" => "Această pre-vizualizare reflectă textul din caseta de sus, respectiv felul în care va arăta articolul dacă alegeţi să salvaţi acum.", |
| 351 | +"editing" => "Editare $1", |
| 352 | +"sectionedit" => " (secţiune)", |
| 353 | +"commentedit" => " (comentariu)", |
| 354 | +"editconflict" => "Conflict de editare: $1", |
| 355 | +"explainconflict" => "Altcineva a modificat această pagină de când aţi început s-o editaţi. |
| 356 | +Caseta de text de sus conţine pagina aşa cum este ea acum (după editarea celeilalte persoane). |
| 357 | +Pagina cu modificările Dvs. (aşa cum aţi încercat s-o salvaţi) se află în caseta de jos. |
| 358 | +Va trebui să editaţi manual caseta de sus pentru a reflecta modificările pe care tocmai le-aţi făcut în cea de jos. |
| 359 | +<b>Numai</b> textul din caseta de sus va fi salvat atunci când veţi apăsa pe \"Salvează pagina\".\n<p>", |
| 360 | +"yourtext" => "Textul Dvs.", |
| 361 | +"storedversion" => "Versiunea curentă", |
| 362 | +"editingold" => "<strong>ATENŢIE! Editaţi o variantă mai veche a acestei pagini! Orice modificări care s-au făcut de la această versiune şi până la cea curentă se vor pierde!</strong>\n", |
| 363 | +"yourdiff" => "Diferenţe", |
| 364 | +"copyrightwarning" => "Reţineţi că toate contribuţiile la Wikipedia sunt considerate ca respectând licenţa GNU Free Documentation License |
| 365 | +(vezi $1 pentru detalii). |
| 366 | +Dacă nu doriţi ca ceea ce scrieţi să fie editat fără milă şi redistribuit în voie, atunci nu trimiteţi materialele respective aici.<br> |
| 367 | +De asemenea, trimiţând aceste materiale aici vă angajaţi că le-aţi scris Dvs. sau că sunt copiate dintr-o sursă care permite includerea materialelor sub această licenţă. |
| 368 | +<strong>NU TRIMITEŢI MATERIALE PROTEJATE DE DREPTURI DE AUTOR FĂRĂ PERMISIUNE!</strong>", |
| 369 | +"longpagewarning" => "ATENŢIE! Conţinutul acestei pagini are $1 KB; unele browsere au probleme la editarea paginilor în jur de 32 KB sau mai mari. |
| 370 | +Vă rugăm să luaţi în considerare posibilitatea de a împărţi pagina în mai multe secţiuni.", |
| 371 | +"readonlywarning" => "ATENŢIE! Baza de date a fost blocată pentru întreţinere, |
| 372 | +deci vă nu veţi putea salva editările în acest moment. Puteţi copia textul |
| 373 | +într-un fişier text local pentru a modifica conţinutul în Wikipedia când va fi posibil.", |
| 374 | +"protectedpagewarning" => "ATENŢIE! Această pagină a fost blocată şi numai utilizatorii |
| 375 | +cu privilegii de administrator o pot edita. Vă rugăm urmaţi sugestiile |
| 376 | +<a href='Wikipedia:Despre_pagini_protejate'>despre pagini protejate</a> când editaţi.", |
| 377 | + |
| 378 | +# History pages |
| 379 | +# |
| 380 | +"revhistory" => "Istoria versiunilor", |
| 381 | +"nohistory" => "Nu există istorie pentru această pagină.", |
| 382 | +"revnotfound" => "Versiunea nu a fost găsită", |
| 383 | +"revnotfoundtext" => "Versiunea mai veche a paginii pe care aţi cerut-o nu a fost găsită. Vă rugăm să verificaţi legătura pe care aţi folosit-o pentru a accesa această pagină.\n", |
| 384 | +"loadhist" => "Încarc istoria versiunilor", |
| 385 | +"currentrev" => "Versiunea curentă", |
| 386 | +"revisionasof" => "Versiunea de la data $1", |
| 387 | +"cur" => "actuală", |
| 388 | +"next" => "următoarea", |
| 389 | +"last" => "prec", |
| 390 | +"orig" => "orig", |
| 391 | +"histlegend" => "Legendă: (actuală) = diferenţe faţă de versiunea curentă, |
| 392 | +(prec) = diferenţe faţă de versiunea precedentă, M = editare minoră", |
| 393 | + |
| 394 | +# Diffs |
| 395 | +# |
| 396 | +"difference" => "(Diferenţa dintre versiuni)", |
| 397 | +"loadingrev" => "se încarcă diferenţa dintre versiuni", |
| 398 | +"lineno" => "Linia $1:", |
| 399 | +"editcurrent" => "Editarea versiunii curente a acestei pagini", |
| 400 | + |
| 401 | +# Search results |
| 402 | +# |
| 403 | +"searchresults" => "Rezultatele căutării", |
| 404 | +"searchhelppage" => "Wikipedia:Searching", |
| 405 | +"searchingwikipedia" => "Căutare în Wikipedia", |
| 406 | +"searchresulttext" => "Pentru mai multe detalii despre căutarea în Wikipedia, vezi $1.", |
| 407 | +"searchquery" => "Pentru căutarea \"$1\"", |
| 408 | +"badquery" => "Căutare invalidă", |
| 409 | +"badquerytext" => "Căutarea Dvs. nu a putut fi procesată. |
| 410 | +Asta se întâmplă probabil din cauză că aţi încercat să căutaţi un cuvânt cu mai puţin de trei litere. |
| 411 | +E posibil şi să fi scris greşit o expresie sau un nume, cum ar fi \"Mircea cel cel Bătrân\". |
| 412 | +Vă rugăm să încercaţi o altă căutare.", |
| 413 | +"matchtotals" => "Căutarea \"$1\" a produs $2 rezultate în titluri de articole şi $3 rezultate în texte de articole.", |
| 414 | +"nogomatch" => "Nici o pagină cu acest titlu nu a fost găsită, încercaţi să căutaţi textul şi în pagini. ", |
| 415 | +"titlematches" => "Rezultate în titluri de articole", |
| 416 | +"notitlematches" => "Nici un rezultat în titlurile articolelor", |
| 417 | +"textmatches" => "Rezultate în textele articolelor", |
| 418 | +"notextmatches" => "Nici un rezultat în textele articolelor", |
| 419 | +"prevn" => "anterioarele $1", |
| 420 | +"nextn" => "următoarele $1", |
| 421 | +"viewprevnext" => "Vezi ($1) ($2) ($3).", |
| 422 | +"showingresults" => "Mai jos apar <b>$1</b> rezultate începând cu numărul <b>$2</b>.", |
| 423 | +"showingresultsnum" => "Mai jos apar <b>$3</b> rezultate începând cu numărul <b>$2</b>.", |
| 424 | +"nonefound" => "<strong>Notă</strong>: căutările nereuşite sunt în general datorate căutării unor cuvinte prea comune care nu sunt indexate, sau cautărilor a mai multe cuvinte (numai articolele care conţin ''toate'' cuvintele specificate apar ca rezultate).", |
| 425 | +"powersearch" => "Caută", |
| 426 | +"powersearchtext" => " |
| 427 | +Caută în secţiunile:<br> |
| 428 | +$1<br> |
| 429 | +$2 Redirecţionări Căutări după $3 $9", |
| 430 | +"blanknamespace" => "(Principală)", |
| 431 | + |
| 432 | + |
| 433 | +# Preferences page |
| 434 | +# |
| 435 | +"preferences" => "Preferinţe", |
| 436 | +"prefsnologin" => "Neautentificat", |
| 437 | +"prefsnologintext" => "Trebuie să fiţi <a href=\"" . |
| 438 | + wfLocalUrl( "Special:Userlogin" ) . "\">autentificat</a> |
| 439 | +pentru a vă putea salva preferinţele.", |
| 440 | +"prefslogintext" => "Sunteţi autentificat ca \"$1\". |
| 441 | +Numărul intern de identificare este $2 (nu trebuie să-l reţineţi decât dacă aveţi probleme).", |
| 442 | +"prefsreset" => "Preferinţele au fost resetate.", |
| 443 | +"qbsettings" => "Setări pentru quickbar", |
| 444 | +"changepassword" => "Schimbă parola", |
| 445 | +"skin" => "Aparenţă", |
| 446 | + |
| 447 | +"math" => "Apareţă formule", |
| 448 | +"dateformat" => "Formatul datelor", |
| 449 | +"math_failure" => "Nu s-a putut interpreta", |
| 450 | +"math_unknown_error" => "eroare necunoscută", |
| 451 | +"math_unknown_function" => "funcţie necunoscută ", |
| 452 | +"math_lexing_error" => "eroare lexicală", |
| 453 | +"math_syntax_error" => "eroare de sintaxă", |
| 454 | +"saveprefs" => "Salvează preferinţele", |
| 455 | + |
| 456 | +"resetprefs" => "Resetează preferinţele", |
| 457 | +"oldpassword" => "Parola veche", |
| 458 | +"newpassword" => "Parola nouă", |
| 459 | +"retypenew" => "Repetă parola nouă", |
| 460 | +"textboxsize" => "Dimensiunile casetei de text", |
| 461 | +"rows" => "Rânduri", |
| 462 | +"columns" => "Coloane", |
| 463 | +"searchresultshead" => "Setări de căutare", |
| 464 | +"resultsperpage" => "Numărul de rezultate per pagină", |
| 465 | +"contextlines" => "Numărul de linii per rezultat", |
| 466 | +"contextchars" => "Numărul de caractere per linie", |
| 467 | +"stubthreshold" => "Limita de caractere pentru un ciot", |
| 468 | +"recentchangescount" => "Numărul de articole pentru schimbări recente", |
| 469 | +"savedprefs" => "Preferinţele Dvs. au fost salvate.", |
| 470 | +"timezonetext" => "Introduceţi numărul de ore diferenţă între ora locală şi ora serverului (UTC, timp universal - pentru România, cifra este 3).", |
| 471 | +"localtime" => "Ora locală", |
| 472 | +"timezoneoffset" => "Diferenţa", |
| 473 | +"servertime" => "Ora serverului (UTC)", |
| 474 | +"guesstimezone" => "Încearcă determinarea automată a diferenţei", |
| 475 | +"emailflag" => "Dezactivează serviciul de e-mail de la alţi utilizatori", |
| 476 | +"defaultns" => "Caută în aceste secţiuni implicit:", |
| 477 | + |
| 478 | +# Recent changes |
| 479 | +# |
| 480 | +"changes" => "schimbări", |
| 481 | +"recentchanges" => "Schimbări recente", |
| 482 | +"recentchangestext" => "Aceată pagină permite vizualizarea ultimelor modificări ale paginilor Wikipedia în română. |
| 483 | + |
| 484 | +[[Wikipedia:bun venit|Bun venit pe Wikipedia]]! Nu ezitaţi să vizitaţi secţiunile de [[Wikipedia:întrebări frecvente|întrebări frecvente]], [[Wikipedia:politica|politica Wikipedia]] (în special [[Wikipedia:convenţii pentru denumiri|convenţii pentru denumiri]] şi [[Wikipedia:punct de vedere neutru|punct de vedere neutru]]), şi cele mai comune [[Wikipedia:greşeli frecvente|greşeli în Wikipedia]]. |
| 485 | + |
| 486 | +Este foarte important să nu adăugaţi în Wikipedia materiale protejate de [[drepturi de autor]]. Problemele legale rezultate ar putea prejudicia în mod serios proiectul în întregime, aşa că vă rugăm insistent să aveţi grijă să nu faceţi asta.", |
| 487 | +"rcloaderr" => "Încarc ultimele modificări", |
| 488 | +"rcnote" => "Dedesubt găsiţi ultimele <strong>$1</strong> modificări din ultimele <strong>$2</strong> zile.", |
| 489 | +"rcnotefrom" => "Dedesubt sunt modificările de la <b>$2</b> (maxim <b>$1</b> de modificări sunt afişate - schimbaţi numărul maxim de linii alegând altă valoare mai jos).", |
| 490 | +"rclistfrom" => "Arată modificările începând de la $1", |
| 491 | +# "rclinks" => "Arată ultimele $1 modificări din ultimele $2 ore / ultimele $3 zile", |
| 492 | +"rclinks" => "Arată ultimele $1 modificări din ultimele $2 zile.", |
| 493 | + |
| 494 | +"rchide" => "în in $4 form; $1 minor edits; $2 secondary namespaces; $3 multiple edits.", |
| 495 | +"rcliu" => "; $1 editări operate de utilizatori autentificaţi", |
| 496 | +"diff" => "diferenţă", |
| 497 | +"hist" => "istorie", |
| 498 | +"hide" => "ascunde", |
| 499 | +"show" => "arată", |
| 500 | +"tableform" => "tabel", |
| 501 | +"listform" => "listă", |
| 502 | +"nchanges" => "$1 modificări", |
| 503 | +"minoreditletter" => "M", |
| 504 | +"newpageletter" => "N", |
| 505 | + |
| 506 | +# Upload |
| 507 | +# |
| 508 | +"upload" => "Trimite fişier", |
| 509 | +"uploadbtn" => "Trimite fişier", |
| 510 | +"uploadlink" => "Trimite imagine", |
| 511 | +"reupload" => "Re-trimite", |
| 512 | +"reuploaddesc" => "Întoarcere la formularul de trimitere.", |
| 513 | +"uploadnologin" => "Nu sunteţi autentificat", |
| 514 | +"uploadnologintext" => "Trebuie să foţi <a href=\"" . |
| 515 | + wfLocalUrl( "Special:Userlogin" ) . "\">autentificat</a> |
| 516 | +ca să trimiteţi fişiere.", |
| 517 | +"uploadfile" => "Trimite fişier", |
| 518 | +"uploaderror" => "Eroare la trimitere fişier", |
| 519 | +"uploadtext" => "<strong>STOP!</strong> Înainte de a trimite un fişier aici, |
| 520 | +vă rugăm să citiţi şi să respectaţi <a href=\"" . |
| 521 | +wfLocalUrlE("Wikipedia:Politica_de_utilizare_a_imaginilor" ) . "\">politica de utilizare a imaginilor</a>. |
| 522 | +<p>Pentru a vizualiza sau căuta imagini deja trimise, mergeţi la <a href=\"" . wfLocalUrlE( "Special:Imagelist" ) . |
| 523 | +"\">lista de imagini</a>. |
| 524 | +Fişierele noi şi cele şterse sunt contorizate pe paginile de <a href=\"" . |
| 525 | +wfLocalUrlE( "Wikipedia:Upload_log" ) . "\">raport de trimiteri</a>. |
| 526 | +<p>Folosiţi formularul de mai jos pentru a trimite imagini noi |
| 527 | +pe care le veţi putea folosi pentru a vă ilustra articolele. |
| 528 | +În majoritatea browserelor veţi vedea un buton \"Browse...\" |
| 529 | +care vă va deschide fereastra standard dialog a sistemului Dvs. de operare |
| 530 | +pentru alegerea de fişiere. |
| 531 | +Când alegeţi un fişier în acest fel, caseta de dialog se va completa cu calea locală către acesta. |
| 532 | +Este de asemenea necesar să bifaţi căsuţa asociată textului |
| 533 | +în care confirmaţi că nu violaţi nici un drept de autor trimiţând această imagine. |
| 534 | +În final, apăsaţi pe butonul \"Trimite\" petru a trimite efectiv fişierul. |
| 535 | +Această operaţiune poate dura, mai ales dacă aveţi o legătură lentă la Internet. |
| 536 | +<p>Formatele preferate sunt JPEG pentru imagini fotografice, |
| 537 | +PNG pentru desene şi alte imagini cu contururi clare şi OGG pentru fişiere de sunet. |
| 538 | + |
| 539 | +Vă rugăm să folosiţi nume explicite pentru fişiere ca să evitaţi confuziile. |
| 540 | +Pentru a include o imagine într-un articol, folosiţi o legătură de forma <b>[[image:fişier.jpg]]</b> sau <b>[[image:fişier.png|text alternativ]]</b> |
| 541 | +sau <b>[[media:fişier.ogg]]</b> pentru fişiere de sunet. |
| 542 | +<p>Vă rugăm să reţineţi că, la fel ca şi în cazul celorlalte secţiuni din Wikipedia, alte persoane pot edita sau şterge fişierele pe care le trimiteţi dacă e în interesul enciclopediei, şi vi se poate chiar bloca accesul la trimiterea de fişiere dacă abuzaţi de sistem.", |
| 543 | +"uploadlog" => "raport de trimitere fişiere", |
| 544 | +"uploadlogpage" => "Raport de trimitere fişiere", |
| 545 | +"uploadlogpagetext" => "Găsiţi mai jos lista ultimelor fişiere trimise. |
| 546 | +Toate datele/orele sunt afişate ca timp universal (UTC). |
| 547 | +<ul> |
| 548 | +</ul> |
| 549 | +", |
| 550 | +"filename" => "Nume fişier", |
| 551 | +"filedesc" => "Sumar", |
| 552 | +"affirmation" => "Afirm că persoana care deţine drepturile de autor asupra acestui fişier este de acord cu termenii licenţei $1.", |
| 553 | +"copyrightpage" => "Wikipedia:Drepturi_de_autor", |
| 554 | +"copyrightpagename" => "Drepturi de autor în Wikipedia", |
| 555 | +"uploadedfiles" => "Fişiere trimise", |
| 556 | +"noaffirmation" => "Trebuie să afirmaţi că fişierul pe care în trimiteţi nu violează drepturi de autor (trebuie să bifaţi căsuţa aferentă de pe pagina anterioară).", |
| 557 | +"ignorewarning" => "Ignoră atenţionarea şi salvează.", |
| 558 | +"minlength" => "Numele imaginilor trebuie să aibă cel puţin trei litere.", |
| 559 | +"badfilename" => "Numele imaginii a fost schimbat; noul nume este \"$1\".", |
| 560 | +"badfiletype" => "\".$1\" nu este un format recomandat pentru imagini.", |
| 561 | +"largefile" => "Este recomandat ca imaginile să nu depăşească 100 KB ca mărime.", |
| 562 | +"successfulupload" => "Fişierul a fost trimis", |
| 563 | +"fileuploaded" => "Fişierul \"$1\" a fost trimis. |
| 564 | +Vă rugăm să vizitaţi această legătură: ($2) pentru a descrie fişierul şi pentru a completa informaţii despre acesta, ca de exemplu de unde provine, când a fost creat şi de către cine şi orice alte informaţii doriţi să adăugaţi.", |
| 565 | +"uploadwarning" => "Avertizare la trimiterea fişierului", |
| 566 | +"savefile" => "Salvează fiţierul", |
| 567 | +"uploadedimage" => "trimis \"$1\"", |
| 568 | + |
| 569 | +# Image list |
| 570 | +# |
| 571 | +"imagelist" => "Lista imaginilor", |
| 572 | +"imagelisttext" => "Dedesubt găsiţi lista a $1 imagini ordonate $2.", |
| 573 | +"getimagelist" => "încarc lista de imagini", |
| 574 | +"ilshowmatch" => "Arată imaginile ale căror nume includ", |
| 575 | +"ilsubmit" => "Caută", |
| 576 | +"showlast" => "Arată ultimele $1 imagini ordonate $2.", |
| 577 | +"all" => "toate", |
| 578 | +"byname" => "după nume", |
| 579 | +"bydate" => "după dată", |
| 580 | +"bysize" => "după mărime", |
| 581 | +"imgdelete" => "şterge", |
| 582 | +"imgdesc" => "desc", |
| 583 | +"imglegend" => "Legendă: (desc) = arată/editează descrierea imaginii.", |
| 584 | +"imghistory" => "Istoria imaginii", |
| 585 | +"revertimg" => "rev", |
| 586 | +"deleteimg" => "şterg", |
| 587 | +"imghistlegend" => "Legend: (actuală) = versiunea curentă a imaginii, (şterg) = şterge această versiune veche, (rev) = revino la această versiune veche. |
| 588 | +<br><i>Apăsaţi pe dată pentru a vedea versiunea trimisă la data respectivă</i>.", |
| 589 | +"imagelinks" => "Legăturile imaginii", |
| 590 | +"linkstoimage" => "Următoarele pagini leagă la această imagine:", |
| 591 | +"nolinkstoimage" => "Nici o pagină nu se leagă la această imagine.", |
| 592 | + |
| 593 | +# Statistics |
| 594 | +# |
| 595 | +"statistics" => "Statistici", |
| 596 | +"sitestats" => "Statisticile sitului", |
| 597 | +"userstats" => "Statistici legate de utilizatori", |
| 598 | +"sitestatstext" => "Există un număr total de <b>$1</b> pagini în baza de date. |
| 599 | +Acest număr include paginile de \"discuţii\", paginile despre Wikipedia, pagini minimale (\"cioturi\"), pagini de redirecţionare şi altele care probabil că nu intră de fapt în categoria articolelor reale. |
| 600 | +În afară de acestea, există <b>$2</b> pagini care sunt probabil articole (numărate automat, în funcţie strict de mărime).<p> |
| 601 | +În total au fost <b>$3</b> vizite (accesări) şi <b>$4</b> editări |
| 602 | +de la ultima actualizare a programului (July 20, 2002). |
| 603 | +În medie rezultă <b>$5</b> editări la fiecare vizionare sau <b>$6</b> vizualizări la fiecare editare.", |
| 604 | +"userstatstext" => "Există un număr de <b>$1</b> utilizatori înregistraţi. |
| 605 | +Dintre aceştia <b>$2</b> sunt administratori (vezi $3).", |
| 606 | + |
| 607 | +# Maintenance Page |
| 608 | +# |
| 609 | +"maintenance" => "Pagina administrativă", |
| 610 | +"maintnancepagetext" => "Această pagină conţine diverse unelte create pentru administrare cotidiană. Unele dintre acestea solicită în mod deosebit baza de date, aşa că vă rugăm să evitaţi suprasolicitarea lor.", |
| 611 | +"maintenancebacklink" => "Înapoi la pagina administrativă", |
| 612 | +"disambiguations" => "Pagini de dezambiguizare", |
| 613 | +"disambiguationspage" => "Wikipedia:Legături_către_paginile_de_dezambiguizare", |
| 614 | +"disambiguationstext" => "Următoarele articole conţin legături către cel puţin o <i>pagină de dezambiguizare</i>. Legăturile respective ar trebui făcute către paginile specifice.<br>O pagină este considerată ca fiind de dezambiguizare dacă există o legătură în ea dinspre $1.<br>Legăturile dinspre alte secţiuni Wikipedia <i>nu sunt</i> luate în considerare aici.", |
| 615 | +"doubleredirects" => "Redirectări duble", |
| 616 | +"doubleredirectstext" => "<b>Atenţie:</b> Această listă poate conţine articole care nu sunt în fapt duble redirectări. Asta înseamnă de obicei că există text adiţional sub primul #REDIRECT.<br>\nFiecare rând care conţine legături către prima sau a doua redirectare, ca şi prima linie din textul celei de-a doua redirectări, de obicei conţinând numele \"real\" al articolului ţintă, către care ar trebui să arate prima redirectare.", |
| 617 | +"brokenredirects" => "Redirectări greşite", |
| 618 | +"brokenredirectstext" => "Următoarele redirectări arată către articole inexistente.", |
| 619 | +"selflinks" => "Pagini cu legături ciclice", |
| 620 | +"selflinkstext" => "Următoarele pagini conţin legături către ele însele, ceea ce n-ar trebui să se întâmple.", |
| 621 | +"mispeelings" => "Pagini conţinând greşeli comune", |
| 622 | +"mispeelingstext" => "Următoarele pagini conţin unele dintre greşelile obişnuite de scriere care apar la $1. Forma corectă poate fi dată (în acest fel).", |
| 623 | +"mispeelingspage" => "Lista de greţeli comune", |
| 624 | +"missinglanguagelinks" => "Legături care inexistente către alte limbi", |
| 625 | +"missinglanguagelinksbutton" => "Caută limbi inexistente pentru", |
| 626 | +"missinglanguagelinkstext" => "Aceste articole nu se leagă către perechile lor din $1. Redirectările şi sub-paginile <i>nu apar</i> aici.", |
| 627 | + |
| 628 | + |
| 629 | +# Miscellaneous special pages |
| 630 | +# |
| 631 | +"orphans" => "Pagini orfane", |
| 632 | +"lonelypages" => "Pagini orfane", |
| 633 | +"unusedimages" => "Pagini neutilizate", |
| 634 | +"popularpages" => "Pagini populare", |
| 635 | +"nviews" => "$1 accesări", |
| 636 | +"wantedpages" => "Pagini dorite", |
| 637 | +"nlinks" => "$1 legături", |
| 638 | +"allpages" => "Toate paginile", |
| 639 | +"randompage" => "Pagină aleatoare", |
| 640 | +"shortpages" => "Pagini scurte", |
| 641 | +"longpages" => "Pagini lungi", |
| 642 | +"listusers" => "Lista de utilizatori", |
| 643 | +"specialpages" => "Pagini speciale", |
| 644 | +"spheading" => "Pagini speciale", |
| 645 | +"sysopspheading" => "Pegini speciale pentru operatori", |
| 646 | +"developerspheading" => "Pagini speciale pentru dezvoltatori", |
| 647 | +"protectpage" => "Protejează pagina", |
| 648 | +"recentchangeslinked" => "Modificări corelate", |
| 649 | +"rclsub" => "(cu pagini legate de la \"$1\")", |
| 650 | +"debug" => "Debug", |
| 651 | +"newpages" => "Pagini noi", |
| 652 | +"ancientpages" => "Cele mai vechi articole", |
| 653 | +"intl" => "Legături între limbi", |
| 654 | +"movethispage" => "Mută această pagină", |
| 655 | +"unusedimagestext" => "<p>Vă rugăm să ţineţi cont de faptul că alte situri, inclusiv Wikipedii în alte limbi pot să aibă legături aici fără ca aceste pagini să fie listate aici - această listă se referă strict la Wikipedia în română.", |
| 656 | +"booksources" => "Surse de cărţi", |
| 657 | +"booksourcetext" => "Dedesubt găsiţi o listă de surse de cărţi noi şi vechi, şi e posibil să găsiţi şi informaţii adiţionale legate de titlurile pe care le căutaţi. |
| 658 | +Wikipedia nu este afiliată niciuneia dintre aceste afaceri, |
| 659 | +iar lista de mai jos nu constituie nici un fel de garanţie sau validare a serviciilor respective din partea Wikipedia.", |
| 660 | +"alphaindexline" => "$1 către $2", |
| 661 | + |
| 662 | +# Email this user |
| 663 | +# |
| 664 | +"mailnologin" => "Nu există adresă de trimitere", |
| 665 | +"mailnologintext" => "Trebuie să fiţi <a href=\"" . |
| 666 | + wfLocalUrl( "Special:Userlogin" ) . "\">autentificat</a> |
| 667 | +şi să aveţi o adresă validă de mail în <a href=\"" . |
| 668 | + wfLocalUrl( "Special:Preferences" ) . "\">preferinţe</a> |
| 669 | +pentru a trimite mail altor utilizatori.", |
| 670 | +"emailuser" => "Trimite e-mail acestui utilizator", |
| 671 | +"emailpage" => "E-mail către utilizator", |
| 672 | +"emailpagetext" => "Dacă acest utilizator a introdus o adresă de mail validă în pagina de preferinţe atunci formularul de mai jos poate fi folosit pentru a-i trimte un mesaj prin e-mail. |
| 673 | +Adresa pe care aţi introdus-o în pagina Dvs. de preferinţe va apărea ca adresa |
| 674 | +de origine a mesajului, astfel încât destinatarul să vă poată răspunde direct.", |
| 675 | +"noemailtitle" => "Fără adresă de e-mail", |
| 676 | +"noemailtext" => "Utilizatorul nu a specificat o adresă validă de e-mail, |
| 677 | +sau a ales să nu primească e-mail de la alţi utilizatori.", |
| 678 | +"emailfrom" => "De la", |
| 679 | +"emailto" => "Către", |
| 680 | +"emailsubject" => "Subiect", |
| 681 | +"emailmessage" => "Mesaj", |
| 682 | +"emailsend" => "Trimite", |
| 683 | +"emailsent" => "E-mail trimis", |
| 684 | +"emailsenttext" => "E-mailul Dvs. a fost trimis.", |
| 685 | + |
| 686 | +# Watchlist |
| 687 | +# |
| 688 | +"watchlist" => "Articole urmărite", |
| 689 | +"watchlistsub" => "(pentru utilizatorul \"$1\")", |
| 690 | +"nowatchlist" => "Nu aţi ales să urmăriţi nici un articol.", |
| 691 | +"watchnologin" => "Nu sunteţi autentificat", |
| 692 | +"watchnologintext" => "Trebuie să fiţi <a href=\"" . |
| 693 | + wfLocalUrl( "Special:Userlogin" ) . "\">autentificat</a> |
| 694 | +pentru a vă modifica lista de articole urmărite.", |
| 695 | +"addedwatch" => "Adăugată la lista de pagini urmărite", |
| 696 | +"addedwatchtext" => "Pagina \"$1\" a fost adăugată la lista Dvs. de <a href=\"" . wfLocalUrl( "Special:Watchlist" ) . "\">articole urmărite</a>. |
| 697 | +Modificările viitoare ale acestei pagini şi a paginii asociate de discuţii |
| 698 | +vor fi listate aici, şi în plus ele vor apărea cu <b>caractere îngroşate</b> în pagina de <a href=\"" . |
| 699 | + wfLocalUrl( "Special:Recentchanges" ) . "\">modificări recente</a> pentru evidenţiere.</p> |
| 700 | + |
| 701 | +<p>Dacă doriţi să eliminaţi această pagină din lista Dvs. de pagini urmărite |
| 702 | +în viitor, apăsaţi pe \"Nu mai urmări\" în bara de comenzi în timp ce această pagină este vizibilă.", |
| 703 | +"removedwatch" => "Ştearsă din lista de pagini urmărite", |
| 704 | +"removedwatchtext" => "Pagina \"$1\" a fost eliminată din lista de pagini urmărite.", |
| 705 | +"watchthispage" => "Urmăreşte pagina", |
| 706 | +"unwatchthispage" => "Nu mai urmări", |
| 707 | +"notanarticle" => "Nu este un articol", |
| 708 | +"watchnochange" => "Nici unul dintre articolele pe care le urmăriţi nu a fost modificat în perioada de timp afişată.", |
| 709 | +"watchdetails" => "($1 pagini urmărite în afară de paginile de discuţie; |
| 710 | +$2 pagini editate în total; |
| 711 | +$3... |
| 712 | +<a href='$4'>lista completă</a>.)", |
| 713 | +"watchmethod-recent" => "căutarea schimbărilor recente pentru paginile urmărite", |
| 714 | +"watchmethod-list" => "căutarea paginilor urmărite pentru schimbări recente", |
| 715 | +"removechecked" => "Elimină elementele bifate din lista de pagini urmărite", |
| 716 | +"watchlistcontains" => "Lista de articole urmărite conţine $1 pagini", |
| 717 | +"watcheditlist" => "Aceasta este lista alfabetică a tuturor paginilor pe care le urmăriţi. |
| 718 | +Bifaţi căsuţele corespunzătoare paginilor pe care doriţi să le eliminaţi din lista de |
| 719 | +pagini urmărite şi apăsaţi pe butonul corespunzător din partea de jos a paginii.", |
| 720 | +"removingchecked" => "Se elimină elementele cerute din lista de articole urmărite...", |
| 721 | +"couldntremove" => "Elementul '$1' nu a putut fi şters...", |
| 722 | +"iteminvalidname" => "E o problemă cu elementul '$1', numele este invalid...", |
| 723 | +"wlnote" => "Dedesubt găsiţi ultimele $1 schimbări din ultimele <b>$2</b> ore.", |
| 724 | + |
| 725 | +# Delete/protect/revert |
| 726 | +# |
| 727 | +"deletepage" => "Şterge pagina", |
| 728 | +"confirm" => "Confirmă", |
| 729 | +"excontent" => "conţinutul era:", |
| 730 | +"exbeforeblank" => "conţinutul înainte de golire era:", |
| 731 | +"exblank" => "pagina era goală", |
| 732 | +"confirmdelete" => "Confirmă ştergere", |
| 733 | +"deletesub" => "(Şterg \"$1\")", |
| 734 | +"confirmdeletetext" => "Sunteţi pe cale să ştergeţi permanent o pagină |
| 735 | +sau imagine din baza de date, împreună cu istoria asociată. |
| 736 | +Vă rugăm să vă confirmaţi intenţia de a face asta, faptul că |
| 737 | +înţelegeţi consecinţele acestei acţiuni şi faptul că o faceţi |
| 738 | +în conformitate cu [[Wikipedia:Politica]].", |
| 739 | +"confirmcheck" => "Da, chiar vreau să şterg.", |
| 740 | +"actioncomplete" => "Acţiune finalizată", |
| 741 | +"deletedtext" => "\"$1\" a fost ştearsă. |
| 742 | +Vezi $2 pentru o listă a elementelor şterse recent.", |
| 743 | +"deletedarticle" => "\"$1\" a fost şters", |
| 744 | +"dellogpage" => "Raport_ştergeri", |
| 745 | +"dellogpagetext" => "Găsiţi dedesubt o listă a celor mai recente elemente şterse. Toate datele/orele sunt listate în timp universal (UTC). |
| 746 | +<ul> |
| 747 | +</ul> |
| 748 | +", |
| 749 | +"deletionlog" => "raport de ştergeri", |
| 750 | +"reverted" => "Revenit la o versiune mai veche", |
| 751 | +"deletecomment" => "Motiv pentru ştergere", |
| 752 | +"imagereverted" => "S-a revenit la o versiune veche.", |
| 753 | +"rollback" => "Editări de revenire", |
| 754 | +"rollbacklink" => "revenire", |
| 755 | +"rollbackfailed" => "Revenirea nu s-a putut face", |
| 756 | +"cantrollback" => "Nu se poate reveni; ultimul contribuitor este autorul acestui articol.", |
| 757 | +"alreadyrolled" => "Nu se poate reveni peste ultima editare a [[$1]] |
| 758 | +făcută de către [[Utilizator:$2|$2]] ([[Discuţie utilizator:$2|Discuţie]]); altcineva a editat articolul sau a revenit deja. |
| 759 | + |
| 760 | +Ultima editare a fost făcută de către [[Utilizator:$3|$3]] ([[Discuţie utilizator:$3|Discuţie]]).", |
| 761 | +# only shown if there is an edit comment |
| 762 | +"editcomment" => "Comentariul de editare a fost: \"<i>$1</i>\".", |
| 763 | +"revertpage" => "Revenit la ultima editare de către $1", |
| 764 | +"historywarning" => "Atenţie! Pagina pe care o ştergeţi are istorie: ", |
| 765 | + |
| 766 | +# Undelete |
| 767 | +"undelete" => "Recuperează pagina ştearsă", |
| 768 | +"undeletepage" => "Vizualizează şi recuperează pagini şterse", |
| 769 | +"undeletepagetext" => "Următoarele pagini au fost şterse dar încă se află în |
| 770 | +arhivă şi pot fi recuperate. Reţineţi că arhiva se poate şterge din timp în timp.", |
| 771 | +"undeletearticle" => "Recuperează articol şters", |
| 772 | +"undeleterevisions" => "$1 versiuni arhivate", |
| 773 | +"undeletehistory" => "Dacă recuperaţi pagina, toate versiunile asociate |
| 774 | +vor fi adăugate retroactiv în istorie. Dacă o pagină nouă cu acelaşi nume |
| 775 | +a fost creată de la momentul ştergerii acesteia, versiunile recuperate |
| 776 | +vor apărea în istoria paginii, iar versiunea curentă a paginii nu va |
| 777 | +fi înlocuită automat de către versiunea recuperată.", |
| 778 | +"undeleterevision" => "Versiunea ştearsă la $1", |
| 779 | +"undeletebtn" => "Recuperează!", |
| 780 | +"undeletedarticle" => "\"$1\" a fost recuperat", |
| 781 | +"undeletedtext" => "Articolul [[$1]] a fost recuperat. |
| 782 | +Vezi [[Wikipedia:Raport_ştergeri]] pentru o listă a ştergerilor şi recuperărilor recente.", |
| 783 | + |
| 784 | +# Contributions |
| 785 | +# |
| 786 | +"contributions" => "Contribuţii ale utilizatorului", |
| 787 | +"mycontris" => "Contribuţiile mele", |
| 788 | +"contribsub" => "Pentru $1", |
| 789 | +"nocontribs" => "Nu a fost găsită nici o modificare să satisfacă acest criteriu.", |
| 790 | +"ucnote" => "Găsiţi dedesubt ultimele <b>$1</b> modificări ale utilizatorului din ultimele <b>$2</b> zile.", |
| 791 | +"uclinks" => "Vezi ultimele $1 modificări; vezi ultimele $2 zile.", |
| 792 | +"uctop" => " (sus)" , |
| 793 | + |
| 794 | +# What links here |
| 795 | +# |
| 796 | +"whatlinkshere" => "Ce se leagă aici", |
| 797 | +"notargettitle" => "Lipsă ţintă", |
| 798 | +"notargettext" => "Nu aţi specificat nici un pagină sau utilizator ţintă pentru care să se efectueze această funcţie.", |
| 799 | +"linklistsub" => "(Lista de legături)", |
| 800 | +"linkshere" => "Următoarele pagini conţin legături către aceasta:", |
| 801 | +"nolinkshere" => "Nici o pagină nu se leagă aici.", |
| 802 | +"isredirect" => "pagină de redirectare", |
| 803 | + |
| 804 | +# Block/unblock IP |
| 805 | +# |
| 806 | +"blockip" => "Blocheză adresa IP", |
| 807 | +"blockiptext" => "Folosiţi chestionarul de mai jos pentru a bloca |
| 808 | +la scriere o adresă IP. Această funţie trebuie folosită numai pentru |
| 809 | +a preveni vandalismul conform [[Wikipedia:Politica|politicii Wikipedia]]. |
| 810 | +Includeţi un motiv specific mai jos (de exemplu citând paginile care |
| 811 | +au fost vandalizate de acest utilizator).", |
| 812 | +"ipaddress" => "Adresa IP", |
| 813 | +"ipbreason" => "Motiv", |
| 814 | +"ipbsubmit" => "Blochează această adresă", |
| 815 | +"badipaddress" => "Adresa IP este invalidă.", |
| 816 | +"noblockreason" => "Trebuie să includeţi un motiv pentru blocare.", |
| 817 | +"blockipsuccesssub" => "Utilizatorul a fost blocat", |
| 818 | +"blockipsuccesstext" => "Adresa IP \"$1\" a fost blocată. |
| 819 | +<br>Vezi [[Special:Ipblocklist|lista de adrese IP blocate]] pentru a revizui adresele blocate.", |
| 820 | +"unblockip" => "Deblochează adresă IP", |
| 821 | +"unblockiptext" => "Folosiţi chestionarul de mai jos pentru a restaura |
| 822 | +drepturile de scriere pentru o adresă IP blocată anterior..", |
| 823 | +"ipusubmit" => "Deblochează adresa", |
| 824 | +"ipusuccess" => "Adresa IP \"$1\" a fost deblocată", |
| 825 | +"ipblocklist" => "Lista de adrese IP blocate", |
| 826 | +"blocklistline" => "$1, $2 a blocat $3", |
| 827 | +"blocklink" => "blochează", |
| 828 | +"unblocklink" => "deblochează", |
| 829 | +"contribslink" => "contribuţii", |
| 830 | + |
| 831 | +# Developer tools |
| 832 | +# |
| 833 | +"lockdb" => "Blochează baza de date", |
| 834 | +"unlockdb" => "Deblochează baza de date", |
| 835 | +"lockdbtext" => "Blocarea bazei de date va împiedica pe toţi utilizatorii |
| 836 | +să editeze pagini, să-şi schimbe preferinţele, să-şi editeze listele de |
| 837 | +pagini urmărite şi orice alte operaţiuni care ar necesita schimări |
| 838 | +în baza de date. |
| 839 | +Vă rugăm să confirmaţi că intenţionaţi acest lucru şi faptul că veţi debloca |
| 840 | +baza de date atunci când veţi încheia operaţiunile de întreţinere.", |
| 841 | +"unlockdbtext" => "Deblocarea bazei de date va permite tuturor utilizatorilor |
| 842 | +să editeze pagini, să-şi schimbe preferinţele, să-şi editeze listele de |
| 843 | +pagini urmărite şi orice alte operaţiuni care ar necesita schimări |
| 844 | +în baza de date. |
| 845 | +Vă rugăm să confirmaţi că intenţionaţi acest lucru.", |
| 846 | +"lockconfirm" => "Da, chiar vreau să blochez baza de date.", |
| 847 | +"unlockconfirm" => "Da, chiar vreau să deblochez baza de date.", |
| 848 | +"lockbtn" => "Blochează naza de date", |
| 849 | +"unlockbtn" => "Deblochează baza de date", |
| 850 | +"locknoconfirm" => "Nu aţi confirmat căsuţa de confirmare.", |
| 851 | +"lockdbsuccesssub" => "Baza de date a fost blocată", |
| 852 | +"unlockdbsuccesssub" => "Baza de date a fost deblocată", |
| 853 | +"lockdbsuccesstext" => "Baza de date Wikipedia a fost blocată la scriere. |
| 854 | +<br>Nu uitaţi să o deblocaţi după ce terminaţi operaţiunile administrative pentru care aţi blocat-o.", |
| 855 | +"unlockdbsuccesstext" => "Baza de date Wikipedia a fost deblocată.", |
| 856 | + |
| 857 | +# SQL query |
| 858 | +# |
| 859 | +"asksql" => "Query SQL", |
| 860 | +"asksqltext" => "Folosiţi chestionarul de mai jos pentru a efectua un query direct către baza de date Wikipedia (MySQL). |
| 861 | +Folosiţi apostrofuri ('în felul acesta') pentru a delimita şiruri de text. |
| 862 | +Această funcţionalitate poate solicita în mod deosebit server-ul, |
| 863 | +aşa că vă rugăm să nu o folosiţi în exces.", |
| 864 | +"sqlislogged" => "Vă rugăm reţineţi că toate query-urile sunt reţinute în server (logged).", |
| 865 | +"sqlquery" => "Introduceţi query", |
| 866 | +"querybtn" => "Trimiteţi query", |
| 867 | +"selectonly" => "Alte query-uri în afară de \"SELECT\" sunt accesibile numai pentru dezvoltatorii Wikipedia.", |
| 868 | +"querysuccessful" => "Query efectuat", |
| 869 | + |
| 870 | +# Move page |
| 871 | +# |
| 872 | +"movepage" => "Mută pagina", |
| 873 | +"movepagetext" => "Puteţi folosi formularul de mai jos pentru a redenumi |
| 874 | +o pagină, mutându-i toată istoria sub noul nume. |
| 875 | +Pagina veche va deveni o pagină de redirectare către pagina nouă. |
| 876 | +Legăturile către pagina veche nu vor fi redirectate către cea nouă; |
| 877 | +aveţi grijă să [[Special:Maintenance|verificaţi]] dacă nu există redirectări duble sau invalide. |
| 878 | + |
| 879 | +Vă rugăm să reţineţi că Dvs. sunteţi responsabil(ă) pentru a face legăturile vechi să rămână valide. |
| 880 | + |
| 881 | +Reţineţi că pagina '''nu va fi mutată''' dacă există deja o |
| 882 | +pagină cu noul titlu, afară de cazul că este complet goală sau este |
| 883 | +o redirectare şi în plus nu are nici o istorie de editare. |
| 884 | +Cu alte cuvinte, veţi putea muta înapoi o pagină pe care aţi mutat-o |
| 885 | +greşit, dar nu veţi putea suprascrie o pagină validă existentă prin |
| 886 | +mutarea alteia. |
| 887 | + |
| 888 | +<b>ATENŢIE!</b> |
| 889 | +Aceasta poate fi o schimbare drastică şi neaşteptată pentru o pagină populară; |
| 890 | +vă rugăm să vă asiguraţi că înţelegeţi toate consecinţele înainte de a continua.", |
| 891 | +"movepagetalktext" => "Pagina asociată de discuţii, dacă există, va fi mutată |
| 892 | +automat odată cu aceasta '''afară de cazul că''': |
| 893 | +* Mutaţi pagina în altă secţiune a Wikipedia |
| 894 | +* Există deja o pagină de discuţii cu conţinut (care nu este goală), sau |
| 895 | +* Deifaţi căsuţa de mai jos. |
| 896 | + |
| 897 | +În oricare din cazurile de mai sus va trebui să mutaţi sau să unificaţi |
| 898 | +manual paginile de discuţii, dacă doriţi acest lucru.", |
| 899 | +"movearticle" => "Mută pagina", |
| 900 | +"movenologin" => "Nu sunteţi autentificat", |
| 901 | +"movenologintext" => "Trebuie să fiţi un utilizator înregistrat şi să vă <a href=\"" . |
| 902 | + wfLocalUrl( "Special:Userlogin" ) . "\">autentificaţi</a> |
| 903 | +pentru a muta o pagină.", |
| 904 | +"newtitle" => "Titlul nou", |
| 905 | +"movepagebtn" => "Mută pagina", |
| 906 | +"pagemovedsub" => "Pagina a fost mutată", |
| 907 | +"pagemovedtext" => "Pagina \"[[$1]]\" a fost mutată la \"[[$2]]\".", |
| 908 | +"articleexists" => "O pagină cu acelaşi nume există deja, |
| 909 | +sau numele pe care l-aţi ales este invalid. Vă rugăm să alegeţi un alt nume.", |
| 910 | +"talkexists" => "Pagina în sine a fost mutată, dar pagina de discuţii |
| 911 | +nu a putut fi mutată deoarece deja există o alta cu acelaşi nume. Vă rugăm |
| 912 | +să unificaţi manual cele două pagini de discuţii.", |
| 913 | +"movedto" => "mutată la", |
| 914 | +"movetalk" => "Mută şi pagina de \"discuţii\" dacă se poate.", |
| 915 | +"talkpagemoved" => "Şi pagina de discuţii asociată a fost mutată.", |
| 916 | +"talkpagenotmoved" => "Pagina asociată de discuţii <strong>nu</strong> a fost mutată.", |
| 917 | + |
| 918 | +); |
| 919 | + |
| 920 | +class LanguageRo extends LanguageUtf8 { |
| 921 | + |
| 922 | + function getBookstoreList () { |
| 923 | + global $wgBookstoreListRo ; |
| 924 | + return $wgBookstoreListRo ; |
| 925 | + } |
| 926 | + |
| 927 | + function getNamespaces() { |
| 928 | + global $wgNamespaceNamesRo; |
| 929 | + return $wgNamespaceNamesRo; |
| 930 | + } |
| 931 | + |
| 932 | + function getNsText( $index ) { |
| 933 | + global $wgNamespaceNamesRo; |
| 934 | + return $wgNamespaceNamesRo[$index]; |
| 935 | + } |
| 936 | + |
| 937 | + function getNsIndex( $text ) { |
| 938 | + global $wgNamespaceNamesRo; |
| 939 | + |
| 940 | + foreach ( $wgNamespaceNamesRo as $i => $n ) { |
| 941 | + if ( 0 == strcasecmp( $n, $text ) ) { return $i; } |
| 942 | + } |
| 943 | + return false; |
| 944 | + } |
| 945 | + |
| 946 | + function getQuickbarSettings() { |
| 947 | + global $wgQuickbarSettingsRo; |
| 948 | + |
| 949 | + return $wgQuickbarSettingsRo; |
| 950 | + } |
| 951 | + |
| 952 | + function getSkinNames() { |
| 953 | + global $wgSkinNamesRo; |
| 954 | + return $wgSkinNamesRo; |
| 955 | + } |
| 956 | + |
| 957 | + function getMathNames() { |
| 958 | + global $wgMathNamesRo; |
| 959 | + return $wgMathNamesRo; |
| 960 | + } |
| 961 | + |
| 962 | + function getDateFormats() { |
| 963 | + global $wgDateFormatsRo; |
| 964 | + return $wgDateFormatsRo; |
| 965 | + } |
| 966 | + |
| 967 | + function getUserToggles() { |
| 968 | + global $wgUserTogglesRo; |
| 969 | + return $wgUserTogglesRo; |
| 970 | + } |
| 971 | + |
| 972 | + function getMonthName( $key ) |
| 973 | + { |
| 974 | + global $wgMonthNamesRo; |
| 975 | + return $wgMonthNamesRo[$key-1]; |
| 976 | + } |
| 977 | + |
| 978 | + function getMonthAbbreviation( $key ) |
| 979 | + { |
| 980 | + global $wgMonthAbbreviationsRo; |
| 981 | + return $wgMonthAbbreviationsRo[$key-1]; |
| 982 | + } |
| 983 | + |
| 984 | + function getWeekdayName( $key ) |
| 985 | + { |
| 986 | + global $wgWeekdayNamesRo; |
| 987 | + return $wgWeekdayNamesRo[$key-1]; |
| 988 | + } |
| 989 | + |
| 990 | + function timeanddate( $ts, $adj = false ) |
| 991 | + { |
| 992 | + return $this->date( $ts, $adj ) . " " . $this->time( $ts, $adj ); |
| 993 | + } |
| 994 | + |
| 995 | + function getValidSpecialPages() |
| 996 | + { |
| 997 | + global $wgValidSpecialPagesRo; |
| 998 | + return $wgValidSpecialPagesRo; |
| 999 | + } |
| 1000 | + |
| 1001 | + function getSysopSpecialPages() |
| 1002 | + { |
| 1003 | + global $wgSysopSpecialPagesRo; |
| 1004 | + return $wgSysopSpecialPagesRo; |
| 1005 | + } |
| 1006 | + |
| 1007 | + function getDeveloperSpecialPages() |
| 1008 | + { |
| 1009 | + global $wgDeveloperSpecialPagesRo; |
| 1010 | + return $wgDeveloperSpecialPagesRo; |
| 1011 | + } |
| 1012 | + |
| 1013 | + function getMessage( $key ) |
| 1014 | + { |
| 1015 | + global $wgAllMessagesRo; |
| 1016 | + if($wgAllMessagesRo[$key]) |
| 1017 | + return $wgAllMessagesRo[$key]; |
| 1018 | + else |
| 1019 | + return Language::getMessage( $key ); |
| 1020 | + } |
| 1021 | + |
| 1022 | + function fallback8bitEncoding() { |
| 1023 | + return "iso8859-2"; |
| 1024 | + } |
| 1025 | +} |
| 1026 | + |
| 1027 | +?> |
\ No newline at end of file |
Property changes on: branches/stable/phase3/languages/LanguageRo.php |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 1028 | + native |
Name: svn:keywords |
2 | 1029 | + Author Date Id Revision |