diff options
author | Brion Vibber <brion@pobox.com> | 2010-10-04 12:54:36 -0700 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-10-04 12:54:36 -0700 |
commit | 59119482ca34540bd7f0a2a1aa994de1d5328ea2 (patch) | |
tree | 864fdc9dda3da54a78d868339c32479b5296b6d0 /plugins/Memcache | |
parent | 2db8aa3ec3f6804f8f16efe754aafb149f4035c9 (diff) | |
parent | 1652ded48c9c62c40157a5142e5231adbc574ddb (diff) |
Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 1.0.x
Conflicts:
actions/hostmeta.php
actions/imsettings.php
classes/User.php
lib/adminpanelaction.php
lib/channel.php
lib/default.php
lib/router.php
lib/util.php
Diffstat (limited to 'plugins/Memcache')
-rw-r--r-- | plugins/Memcache/MemcachePlugin.php | 249 | ||||
-rw-r--r-- | plugins/Memcache/locale/Memcache.pot | 22 | ||||
-rw-r--r-- | plugins/Memcache/locale/es/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/fr/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/ia/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/mk/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/nb/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/nl/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/ru/LC_MESSAGES/Memcache.po | 30 | ||||
-rw-r--r-- | plugins/Memcache/locale/tl/LC_MESSAGES/Memcache.po | 29 | ||||
-rw-r--r-- | plugins/Memcache/locale/uk/LC_MESSAGES/Memcache.po | 30 |
11 files changed, 534 insertions, 0 deletions
diff --git a/plugins/Memcache/MemcachePlugin.php b/plugins/Memcache/MemcachePlugin.php new file mode 100644 index 000000000..f0c473c31 --- /dev/null +++ b/plugins/Memcache/MemcachePlugin.php @@ -0,0 +1,249 @@ +<?php +/** + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. + * + * Plugin to implement cache interface for memcache + * + * PHP version 5 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Cache + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * A plugin to use memcache for the cache interface + * + * This used to be encoded as config-variable options in the core code; + * it's now broken out to a separate plugin. The same interface can be + * implemented by other plugins. + * + * @category Cache + * @package StatusNet + * @author Evan Prodromou <evan@status.net> + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class MemcachePlugin extends Plugin +{ + static $cacheInitialized = false; + + private $_conn = null; + public $servers = array('127.0.0.1;11211'); + + public $compressThreshold = 20480; + public $compressMinSaving = 0.2; + + public $persistent = null; + + public $defaultExpiry = 86400; // 24h + + /** + * Initialize the plugin + * + * Note that onStartCacheGet() may have been called before this! + * + * @return boolean flag value + */ + function onInitializePlugin() + { + if (self::$cacheInitialized) { + $this->persistent = true; + } else { + // If we're a parent command-line process we need + // to be able to close out the connection after + // forking, so disable persistence. + // + // We'll turn it back on again the second time + // through which will either be in a child process, + // or a single-process script which is switching + // configurations. + $this->persistent = (php_sapi_name() == 'cli') ? false : true; + } + $this->_ensureConn(); + self::$cacheInitialized = true; + return true; + } + + /** + * Get a value associated with a key + * + * The value should have been set previously. + * + * @param string &$key in; Lookup key + * @param mixed &$value out; value associated with key + * + * @return boolean hook success + */ + function onStartCacheGet(&$key, &$value) + { + $this->_ensureConn(); + $value = $this->_conn->get($key); + Event::handle('EndCacheGet', array($key, &$value)); + return false; + } + + /** + * Associate a value with a key + * + * @param string &$key in; Key to use for lookups + * @param mixed &$value in; Value to associate + * @param integer &$flag in; Flag empty or Cache::COMPRESSED + * @param integer &$expiry in; Expiry (passed through to Memcache) + * @param boolean &$success out; Whether the set was successful + * + * @return boolean hook success + */ + function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success) + { + $this->_ensureConn(); + if ($expiry === null) { + $expiry = $this->defaultExpiry; + } + $success = $this->_conn->set($key, $value, $this->flag(intval($flag)), $expiry); + Event::handle('EndCacheSet', array($key, $value, $flag, + $expiry)); + return false; + } + + /** + * Atomically increment an existing numeric key value. + * Existing expiration time will not be changed. + * + * @param string &$key in; Key to use for lookups + * @param int &$step in; Amount to increment (default 1) + * @param mixed &$value out; Incremented value, or false if key not set. + * + * @return boolean hook success + */ + function onStartCacheIncrement(&$key, &$step, &$value) + { + $this->_ensureConn(); + $value = $this->_conn->increment($key, $step); + Event::handle('EndCacheIncrement', array($key, $step, $value)); + return false; + } + + /** + * Delete a value associated with a key + * + * @param string &$key in; Key to lookup + * @param boolean &$success out; whether it worked + * + * @return boolean hook success + */ + function onStartCacheDelete(&$key, &$success) + { + $this->_ensureConn(); + $success = $this->_conn->delete($key); + Event::handle('EndCacheDelete', array($key)); + return false; + } + + function onStartCacheReconnect(&$success) + { + if (empty($this->_conn)) { + // nothing to do + return true; + } + if ($this->persistent) { + common_log(LOG_ERR, "Cannot close persistent memcached connection"); + $success = false; + } else { + common_log(LOG_INFO, "Closing memcached connection"); + $success = $this->_conn->close(); + $this->_conn = null; + } + return false; + } + + /** + * Ensure that a connection exists + * + * Checks the instance $_conn variable and connects + * if it is empty. + * + * @return void + */ + private function _ensureConn() + { + if (empty($this->_conn)) { + $this->_conn = new Memcache(); + + if (is_array($this->servers)) { + $servers = $this->servers; + } else { + $servers = array($this->servers); + } + foreach ($servers as $server) { + if (strpos($server, ';') !== false) { + list($host, $port) = explode(';', $server); + } else { + $host = $server; + $port = 11211; + } + + $this->_conn->addServer($host, $port, $this->persistent); + } + + // Compress items stored in the cache if they're over threshold in size + // (default 2KiB) and the compression would save more than min savings + // ratio (default 0.2). + + // Allows the cache to store objects larger than 1MB (if they + // compress to less than 1MB), and improves cache memory efficiency. + + $this->_conn->setCompressThreshold($this->compressThreshold, + $this->compressMinSaving); + } + } + + /** + * Translate general flags to Memcached-specific flags + * @param int $flag + * @return int + */ + protected function flag($flag) + { + $out = 0; + if ($flag & Cache::COMPRESSED == Cache::COMPRESSED) { + $out |= MEMCACHE_COMPRESSED; + } + return $out; + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'Memcache', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou, Craig Andrews', + 'homepage' => 'http://status.net/wiki/Plugin:Memcache', + 'rawdescription' => + _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.')); + return true; + } +} diff --git a/plugins/Memcache/locale/Memcache.pot b/plugins/Memcache/locale/Memcache.pot new file mode 100644 index 000000000..53b0536d5 --- /dev/null +++ b/plugins/Memcache/locale/Memcache.pot @@ -0,0 +1,22 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" diff --git a/plugins/Memcache/locale/es/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/es/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..21dc68690 --- /dev/null +++ b/plugins/Memcache/locale/es/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Spanish (Español) +# Expored from translatewiki.net +# +# Author: Translationista +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: es\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Utilizar <a href=\"http://memcached.org/\">Memcached</a> para cachear " +"resultados de consulta." diff --git a/plugins/Memcache/locale/fr/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/fr/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..b3c4d8bd3 --- /dev/null +++ b/plugins/Memcache/locale/fr/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to French (Français) +# Expored from translatewiki.net +# +# Author: Verdy p +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: fr\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Utiliser <a href=\"http://memcached.org/\">Memcached</a> pour mettre en " +"cache les résultats de requêtes." diff --git a/plugins/Memcache/locale/ia/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/ia/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..8035bdb46 --- /dev/null +++ b/plugins/Memcache/locale/ia/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Interlingua (Interlingua) +# Expored from translatewiki.net +# +# Author: McDutchie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ia\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Usar <a href=\"http://memcached.org/\">Memcached</a> pro immagazinar " +"resultatos de consultas in cache." diff --git a/plugins/Memcache/locale/mk/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/mk/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..489434f78 --- /dev/null +++ b/plugins/Memcache/locale/mk/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Macedonian (Македонски) +# Expored from translatewiki.net +# +# Author: Bjankuloski06 +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: mk\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Користи <a href=\"http://memcached.org/\">Memcached</a> за кеширање на " +"резултати од барања." diff --git a/plugins/Memcache/locale/nb/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/nb/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..8cb0896c9 --- /dev/null +++ b/plugins/Memcache/locale/nb/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Norwegian (bokmål) (Norsk (bokmål)) +# Expored from translatewiki.net +# +# Author: Nghtwlkr +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Norwegian (bokmål) <http://translatewiki.net/wiki/Portal:no>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: no\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Bruk <a href=\"http://memcached.org/\">Memcached</a> for å hurtiglagre " +"søkeresultat." diff --git a/plugins/Memcache/locale/nl/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/nl/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..2f0ddbffc --- /dev/null +++ b/plugins/Memcache/locale/nl/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Dutch (Nederlands) +# Expored from translatewiki.net +# +# Author: Siebrand +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: nl\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"<a href=\"http://memcached.org/\">Memcached</a> gebruiken om zoekresultaten " +"te cachen." diff --git a/plugins/Memcache/locale/ru/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/ru/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..94d0d27a7 --- /dev/null +++ b/plugins/Memcache/locale/ru/LC_MESSAGES/Memcache.po @@ -0,0 +1,30 @@ +# Translation of StatusNet - Memcache to Russian (Русский) +# Expored from translatewiki.net +# +# Author: Lockal +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ru\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Использование <a href=\"http://memcached.org/\">Memcached</a> для " +"кеширования результатов запросов." diff --git a/plugins/Memcache/locale/tl/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/tl/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..bd9a9417a --- /dev/null +++ b/plugins/Memcache/locale/tl/LC_MESSAGES/Memcache.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Memcache to Tagalog (Tagalog) +# Expored from translatewiki.net +# +# Author: AnakngAraw +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: tl\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Gamitin ang <a href=\"http://memcached.org/\">Memcached</a> upang itago ang " +"mga resulta ng pagtatanong." diff --git a/plugins/Memcache/locale/uk/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/uk/LC_MESSAGES/Memcache.po new file mode 100644 index 000000000..afaef9b2c --- /dev/null +++ b/plugins/Memcache/locale/uk/LC_MESSAGES/Memcache.po @@ -0,0 +1,30 @@ +# Translation of StatusNet - Memcache to Ukrainian (Українська) +# Expored from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Memcache\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-03 19:53+0000\n" +"PO-Revision-Date: 2010-10-03 19:56:55+0000\n" +"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2010-10-01 20:38:59+0000\n" +"X-Generator: MediaWiki 1.17alpha (r74231); Translate extension (2010-09-17)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-memcache\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#: MemcachePlugin.php:246 +msgid "" +"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results." +msgstr "" +"Використання <a href=\"http://memcached.org/\">Memcached</a> для кешування " +"результатів запитів." |