From c20b44263a89d8bf1a78bfa632daaae3cb4f1da2 Mon Sep 17 00:00:00 2001 From: Marcus Campbell Date: Tue, 5 Dec 2006 07:58:42 +0000 Subject: [PATCH] Restructure repository --- .cvsignore | 4 + .htaccess | 7 + AUTHORS | 18 + about.php | 27 + ajaxDelete.php | 40 + ajaxGetTitle.php | 66 ++ ajaxIsAvailable.php | 37 + alltags.php | 85 ++ api/.htaccess | 10 + api/httpauth.inc.php | 22 + api/posts_add.php | 83 ++ api/posts_all.php | 50 + api/posts_dates.php | 42 + api/posts_delete.php | 33 + api/posts_get.php | 62 ++ api/posts_recent.php | 63 ++ api/posts_update.php | 26 + api/tags_get.php | 25 + api/tags_rename.php | 37 + bg_bar.png | Bin 0 -> 873 bytes bg_header.png | Bin 0 -> 684 bytes bg_sidebar.png | Bin 0 -> 726 bytes bookmarks.php | 228 +++++ cache/.cvsignore | 1 + cache/.htaccess | 2 + config.inc.php.example | 120 +++ debug.inc.php | 16 + edit.php | 93 ++ functions.inc.php | 160 ++++ header.inc.php | 34 + history.php | 90 ++ icon.png | Bin 0 -> 771 bytes import.php | 109 +++ importNetscape.php | 85 ++ includes/db/db2.php | 417 +++++++++ includes/db/firebird.php | 527 +++++++++++ includes/db/index.htm | 10 + includes/db/mssql-odbc.php | 576 ++++++++++++ includes/db/mssql.php | 551 +++++++++++ includes/db/mysql.php | 552 ++++++++++++ includes/db/mysql4.php | 552 ++++++++++++ includes/db/mysqli.php | 566 ++++++++++++ includes/db/oracle.php | 468 ++++++++++ includes/db/postgres.php | 597 ++++++++++++ includes/db/sqlite.php | 387 ++++++++ includes/php-gettext/AUTHORS | 3 + includes/php-gettext/COPYING | 340 +++++++ includes/php-gettext/ChangeLog | 144 +++ includes/php-gettext/Makefile | 32 + includes/php-gettext/README | 189 ++++ includes/php-gettext/bin/gettexts.bat | 20 + includes/php-gettext/examples/index.php | 27 + .../locale/de_CH/LC_MESSAGES/messages.mo | Bin 0 -> 585 bytes .../locale/de_CH/LC_MESSAGES/messages.po | 30 + .../locale/sr_CS/LC_MESSAGES/messages.mo | Bin 0 -> 834 bytes .../locale/sr_CS/LC_MESSAGES/messages.po | 29 + includes/php-gettext/examples/pigs_dropin.php | 87 ++ .../php-gettext/examples/pigs_fallback.php | 86 ++ includes/php-gettext/examples/update | 14 + includes/php-gettext/gettext.inc | 318 +++++++ includes/php-gettext/gettext.php | 358 ++++++++ includes/php-gettext/streams.php | 166 ++++ includes/player/error.swf | Bin 0 -> 90 bytes includes/player/license.txt | 10 + includes/player/load.swf | Bin 0 -> 311 bytes includes/player/musicplayer_f6.swf | Bin 0 -> 6463 bytes includes/player/play.swf | Bin 0 -> 73 bytes includes/player/stop.swf | Bin 0 -> 77 bytes includes/utf8.php | 478 ++++++++++ index.php | 87 ++ jsScuttle.php | 141 +++ licence.txt | 340 +++++++ loading.gif | Bin 0 -> 1582 bytes locales/de_DE/LC_MESSAGES/messages.mo | Bin 0 -> 16513 bytes locales/de_DE/LC_MESSAGES/messages.po | 808 +++++++++++++++++ locales/dk_DK/LC_MESSAGES/messages.mo | Bin 0 -> 16304 bytes locales/dk_DK/LC_MESSAGES/messages.po | 808 +++++++++++++++++ locales/en_GB/LC_MESSAGES/messages.mo | Bin 0 -> 493 bytes locales/en_GB/LC_MESSAGES/messages.po | 808 +++++++++++++++++ locales/es_ES/LC_MESSAGES/messages.mo | Bin 0 -> 14307 bytes locales/es_ES/LC_MESSAGES/messages.po | 826 +++++++++++++++++ locales/fr_FR/LC_MESSAGES/messages.mo | Bin 0 -> 13738 bytes locales/fr_FR/LC_MESSAGES/messages.po | 835 +++++++++++++++++ locales/hi_IN/LC_MESSAGES/messages.mo | Bin 0 -> 24889 bytes locales/hi_IN/LC_MESSAGES/messages.po | 812 +++++++++++++++++ locales/it_IT/LC_MESSAGES/messages.mo | Bin 0 -> 9206 bytes locales/it_IT/LC_MESSAGES/messages.po | 853 ++++++++++++++++++ locales/ja_JP/LC_MESSAGES/messages.mo | Bin 0 -> 18216 bytes locales/ja_JP/LC_MESSAGES/messages.po | 808 +++++++++++++++++ locales/lt_LT/LC_MESSAGES/messages.mo | Bin 0 -> 16466 bytes locales/lt_LT/LC_MESSAGES/messages.po | 808 +++++++++++++++++ locales/messages.po | 825 +++++++++++++++++ locales/nl_NL/LC_MESSAGES/messages.mo | Bin 0 -> 6030 bytes locales/nl_NL/LC_MESSAGES/messages.po | 851 +++++++++++++++++ locales/pt_BR/LC_MESSAGES/messages.mo | Bin 0 -> 17153 bytes locales/pt_BR/LC_MESSAGES/messages.po | 814 +++++++++++++++++ locales/zh_CN/LC_MESSAGES/messages.mo | Bin 0 -> 10939 bytes locales/zh_CN/LC_MESSAGES/messages.po | 827 +++++++++++++++++ login.php | 53 ++ logo.png | Bin 0 -> 2973 bytes logo_24.png | Bin 0 -> 1729 bytes password.php | 72 ++ populartags.php | 86 ++ profile.php | 107 +++ readme.txt | 86 ++ register.php | 64 ++ rss.gif | Bin 0 -> 401 bytes rss.php | 115 +++ scuttle.css | 436 +++++++++ search.inc.php | 44 + search.php | 113 +++ services/bookmarkservice.php | 416 +++++++++ services/cacheservice.php | 38 + services/servicefactory.php | 33 + services/tagservice.php | 363 ++++++++ services/templateservice.php | 46 + services/userservice.php | 362 ++++++++ tables.sql | 68 ++ tagdelete.php | 48 + tags.php | 88 ++ templates/about.tpl.php | 20 + templates/bookmarks.tpl.php | 166 ++++ templates/bottom.inc.php | 2 + templates/dynamictags.inc.php | 120 +++ templates/editbookmark.tpl.php | 120 +++ templates/editprofile.tpl.php | 56 ++ templates/error.404.tpl.php | 9 + templates/error.500.tpl.php | 9 + templates/importDelicious.tpl.php | 42 + templates/importNetscape.tpl.php | 50 + templates/login.tpl.php | 35 + templates/password.tpl.php | 26 + templates/profile.tpl.php | 67 ++ templates/register.tpl.php | 40 + templates/rss.tpl.php | 28 + templates/sidebar.block.common.php | 25 + templates/sidebar.block.popular.php | 31 + templates/sidebar.block.profile.php | 16 + templates/sidebar.block.recent.php | 30 + templates/sidebar.block.related.php | 29 + templates/sidebar.block.tagactions.php | 27 + templates/sidebar.block.watchlist.php | 19 + templates/sidebar.block.watchstatus.php | 27 + templates/sidebar.tpl.php | 13 + templates/tagdelete.tpl.php | 20 + templates/tags.tpl.php | 27 + templates/toolbar.inc.php | 27 + templates/top.inc.php | 47 + watch.php | 56 ++ watchlist.php | 125 +++ 150 files changed, 24407 insertions(+) create mode 100644 .cvsignore create mode 100644 .htaccess create mode 100644 AUTHORS create mode 100644 about.php create mode 100644 ajaxDelete.php create mode 100644 ajaxGetTitle.php create mode 100644 ajaxIsAvailable.php create mode 100644 alltags.php create mode 100644 api/.htaccess create mode 100644 api/httpauth.inc.php create mode 100644 api/posts_add.php create mode 100644 api/posts_all.php create mode 100644 api/posts_dates.php create mode 100644 api/posts_delete.php create mode 100644 api/posts_get.php create mode 100644 api/posts_recent.php create mode 100644 api/posts_update.php create mode 100644 api/tags_get.php create mode 100644 api/tags_rename.php create mode 100644 bg_bar.png create mode 100644 bg_header.png create mode 100644 bg_sidebar.png create mode 100644 bookmarks.php create mode 100644 cache/.cvsignore create mode 100644 cache/.htaccess create mode 100644 config.inc.php.example create mode 100644 debug.inc.php create mode 100644 edit.php create mode 100644 functions.inc.php create mode 100644 header.inc.php create mode 100644 history.php create mode 100644 icon.png create mode 100644 import.php create mode 100644 importNetscape.php create mode 100644 includes/db/db2.php create mode 100644 includes/db/firebird.php create mode 100644 includes/db/index.htm create mode 100644 includes/db/mssql-odbc.php create mode 100644 includes/db/mssql.php create mode 100644 includes/db/mysql.php create mode 100644 includes/db/mysql4.php create mode 100644 includes/db/mysqli.php create mode 100644 includes/db/oracle.php create mode 100644 includes/db/postgres.php create mode 100644 includes/db/sqlite.php create mode 100644 includes/php-gettext/AUTHORS create mode 100644 includes/php-gettext/COPYING create mode 100644 includes/php-gettext/ChangeLog create mode 100644 includes/php-gettext/Makefile create mode 100644 includes/php-gettext/README create mode 100644 includes/php-gettext/bin/gettexts.bat create mode 100644 includes/php-gettext/examples/index.php create mode 100644 includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.mo create mode 100644 includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.po create mode 100644 includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.mo create mode 100644 includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.po create mode 100644 includes/php-gettext/examples/pigs_dropin.php create mode 100644 includes/php-gettext/examples/pigs_fallback.php create mode 100644 includes/php-gettext/examples/update create mode 100644 includes/php-gettext/gettext.inc create mode 100644 includes/php-gettext/gettext.php create mode 100644 includes/php-gettext/streams.php create mode 100644 includes/player/error.swf create mode 100644 includes/player/license.txt create mode 100644 includes/player/load.swf create mode 100644 includes/player/musicplayer_f6.swf create mode 100644 includes/player/play.swf create mode 100644 includes/player/stop.swf create mode 100644 includes/utf8.php create mode 100644 index.php create mode 100644 jsScuttle.php create mode 100644 licence.txt create mode 100644 loading.gif create mode 100644 locales/de_DE/LC_MESSAGES/messages.mo create mode 100644 locales/de_DE/LC_MESSAGES/messages.po create mode 100644 locales/dk_DK/LC_MESSAGES/messages.mo create mode 100644 locales/dk_DK/LC_MESSAGES/messages.po create mode 100644 locales/en_GB/LC_MESSAGES/messages.mo create mode 100644 locales/en_GB/LC_MESSAGES/messages.po create mode 100644 locales/es_ES/LC_MESSAGES/messages.mo create mode 100644 locales/es_ES/LC_MESSAGES/messages.po create mode 100644 locales/fr_FR/LC_MESSAGES/messages.mo create mode 100644 locales/fr_FR/LC_MESSAGES/messages.po create mode 100644 locales/hi_IN/LC_MESSAGES/messages.mo create mode 100644 locales/hi_IN/LC_MESSAGES/messages.po create mode 100644 locales/it_IT/LC_MESSAGES/messages.mo create mode 100644 locales/it_IT/LC_MESSAGES/messages.po create mode 100644 locales/ja_JP/LC_MESSAGES/messages.mo create mode 100644 locales/ja_JP/LC_MESSAGES/messages.po create mode 100644 locales/lt_LT/LC_MESSAGES/messages.mo create mode 100644 locales/lt_LT/LC_MESSAGES/messages.po create mode 100644 locales/messages.po create mode 100644 locales/nl_NL/LC_MESSAGES/messages.mo create mode 100644 locales/nl_NL/LC_MESSAGES/messages.po create mode 100644 locales/pt_BR/LC_MESSAGES/messages.mo create mode 100644 locales/pt_BR/LC_MESSAGES/messages.po create mode 100644 locales/zh_CN/LC_MESSAGES/messages.mo create mode 100644 locales/zh_CN/LC_MESSAGES/messages.po create mode 100644 login.php create mode 100644 logo.png create mode 100644 logo_24.png create mode 100644 password.php create mode 100644 populartags.php create mode 100644 profile.php create mode 100644 readme.txt create mode 100644 register.php create mode 100644 rss.gif create mode 100644 rss.php create mode 100644 scuttle.css create mode 100644 search.inc.php create mode 100644 search.php create mode 100644 services/bookmarkservice.php create mode 100644 services/cacheservice.php create mode 100644 services/servicefactory.php create mode 100644 services/tagservice.php create mode 100644 services/templateservice.php create mode 100644 services/userservice.php create mode 100644 tables.sql create mode 100644 tagdelete.php create mode 100644 tags.php create mode 100644 templates/about.tpl.php create mode 100644 templates/bookmarks.tpl.php create mode 100644 templates/bottom.inc.php create mode 100644 templates/dynamictags.inc.php create mode 100644 templates/editbookmark.tpl.php create mode 100644 templates/editprofile.tpl.php create mode 100644 templates/error.404.tpl.php create mode 100644 templates/error.500.tpl.php create mode 100644 templates/importDelicious.tpl.php create mode 100644 templates/importNetscape.tpl.php create mode 100644 templates/login.tpl.php create mode 100644 templates/password.tpl.php create mode 100644 templates/profile.tpl.php create mode 100644 templates/register.tpl.php create mode 100644 templates/rss.tpl.php create mode 100644 templates/sidebar.block.common.php create mode 100644 templates/sidebar.block.popular.php create mode 100644 templates/sidebar.block.profile.php create mode 100644 templates/sidebar.block.recent.php create mode 100644 templates/sidebar.block.related.php create mode 100644 templates/sidebar.block.tagactions.php create mode 100644 templates/sidebar.block.watchlist.php create mode 100644 templates/sidebar.block.watchstatus.php create mode 100644 templates/sidebar.tpl.php create mode 100644 templates/tagdelete.tpl.php create mode 100644 templates/tags.tpl.php create mode 100644 templates/toolbar.inc.php create mode 100644 templates/top.inc.php create mode 100644 watch.php create mode 100644 watchlist.php diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..a60a7b9 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,4 @@ +*.~*~ +#*# +*.project +config.inc.php diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..c129f69 --- /dev/null +++ b/.htaccess @@ -0,0 +1,7 @@ +Options +FollowSymlinks +AcceptPathInfo On +RewriteEngine On +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^([^/]+)/?(.*) $1.php/$2 [L] diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..a45e1e7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,18 @@ +Scuttle contains code from the following applications: + +------------ +GPL Licenced +------------ + +phpBB2 (database abstraction layer) +http://www.phpbb.com/ + +php-gettext +Danilo Segan +http://savannah.nongnu.org/projects/php-gettext/ + +UTF8 Helper Functions +Andreas Gohr + +XSPF Web Music Player (Flash) +http://musicplayer.sourceforge.net/ \ No newline at end of file diff --git a/about.php b/about.php new file mode 100644 index 0000000..020a351 --- /dev/null +++ b/about.php @@ -0,0 +1,27 @@ +loadTemplate('about.tpl', $tplVars); +?> \ No newline at end of file diff --git a/ajaxDelete.php b/ajaxDelete.php new file mode 100644 index 0000000..ad3efc8 --- /dev/null +++ b/ajaxDelete.php @@ -0,0 +1,40 @@ +editAllowed($bookmark)) { + $result = T_('You are not allowed to delete this bookmark'); +} elseif ($bookmarkservice->deleteBookmark($bookmark)) { + $result = 'true'; +} else { + $result = T_('Failed to delete bookmark'); +} +?> + + deleteConfirmed + + \ No newline at end of file diff --git a/ajaxGetTitle.php b/ajaxGetTitle.php new file mode 100644 index 0000000..0bc142d --- /dev/null +++ b/ajaxGetTitle.php @@ -0,0 +1,66 @@ +(.*)<\/title>/si', $html, $matches); + $title = $matches[1][0]; + + // Get encoding from charset attribute + preg_match_all('//i', $html, $matches); + $encoding = strtoupper($matches[1][0]); + + // Convert to UTF-8 from the original encoding + if (function_exists('mb_convert_encoding') { + $title = @mb_convert_encoding($title, 'UTF-8', $encoding); + } + + if (utf8_strlen($title) > 0) { + return $title; + } else { + // No title, so return filename + $uriparts = explode('/', $url); + $filename = end($uriparts); + unset($uriparts); + + return $filename; + } + } else { + return false; + } +} +echo ''; +?> + + getTitle + + \ No newline at end of file diff --git a/ajaxIsAvailable.php b/ajaxIsAvailable.php new file mode 100644 index 0000000..80883c6 --- /dev/null +++ b/ajaxIsAvailable.php @@ -0,0 +1,37 @@ +isReserved($_GET['username'])) { + $result = 'false'; +} else { + $result = $userservice->getUserByUsername($_GET['username']) ? 'false' : 'true'; +} +?> + + isAvailable + + \ No newline at end of file diff --git a/alltags.php b/alltags.php new file mode 100644 index 0000000..b784414 --- /dev/null +++ b/alltags.php @@ -0,0 +1,85 @@ +isLoggedOn()) { + $hashtext .= $userservice->getCurrentUserID(); + } + $hash = md5($hashtext); + + // Cache for an hour + $cacheservice->Start($hash, 3600); +} + +// Header variables +$tplvars = array(); +$pagetitle = T_('All Tags'); + +if (isset($user) && $user != '') { + if (is_int($user)) { + $userid = intval($user); + } else { + if ($userinfo = $userservice->getUserByUsername($user)) { + $userid =& $userinfo[$userservice->getFieldName('primary')]; + } else { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + //throw a 404 error + exit(); + } + } + $pagetitle .= ': '. ucfirst($user); +} else { + $userid = NULL; +} + +$tags =& $tagservice->getTags($userid); +$tplVars['tags'] =& $tagservice->tagCloud($tags, 5, 90, 225, getSortOrder()); +$tplVars['user'] = $user; + +if (isset($userid)) { + $tplVars['cat_url'] = createURL('bookmarks', '%s/%s'); +} else { + $tplVars['cat_url'] = createURL('tags', '%2$s'); +} + +$tplVars['subtitle'] = $pagetitle; +$templateservice->loadTemplate('tags.tpl', $tplVars); + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> diff --git a/api/.htaccess b/api/.htaccess new file mode 100644 index 0000000..8c48221 --- /dev/null +++ b/api/.htaccess @@ -0,0 +1,10 @@ +RewriteEngine On +RewriteRule ^tags/get tags_get.php +RewriteRule ^posts/dates posts_dates.php +RewriteRule ^posts/get posts_get.php +RewriteRule ^posts/recent posts_recent.php +RewriteRule ^posts/all posts_all.php +RewriteRule ^posts/update posts_update.php +RewriteRule ^posts/add posts_add.php +RewriteRule ^posts/delete posts_delete.php +RewriteRule ^tags/rename tags_rename.php \ No newline at end of file diff --git a/api/httpauth.inc.php b/api/httpauth.inc.php new file mode 100644 index 0000000..bc26582 --- /dev/null +++ b/api/httpauth.inc.php @@ -0,0 +1,22 @@ +login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); + if (!$login) { + authenticate(); + } +} +?> \ No newline at end of file diff --git a/api/posts_add.php b/api/posts_add.php new file mode 100644 index 0000000..77c3288 --- /dev/null +++ b/api/posts_add.php @@ -0,0 +1,83 @@ + 2) { + $status = 0; + } + } else { + switch ($status_str) { + case 'private': + $status = 2; + break; + case 'shared': + $status = 1; + break; + default: + $status = 0; + break; + } + } +} + +// Error out if there's no address or description +if (is_null($url) || is_null($description)) { + $added = false; +} else { +// We're good with info; now insert it! + if ($bookmarkservice->bookmarkExists($url, $userservice->getCurrentUserId())) + $added = false; + else + $added = $bookmarkservice->addBookmark($url, $description, $extended, $status, $tags, $dt, true); +} + +// Set up the XML file and output the result. +header('Content-Type: text/xml'); +echo '\r\n"; +echo ''; +?> \ No newline at end of file diff --git a/api/posts_all.php b/api/posts_all.php new file mode 100644 index 0000000..03026c4 --- /dev/null +++ b/api/posts_all.php @@ -0,0 +1,50 @@ +getBookmarks(0, NULL, $userservice->getCurrentUserId(), $tag); + +$currentuser = $userservice->getCurrentUser(); +$currentusername = $currentuser[$userservice->getFieldName('username')]; + +// Set up the XML file and output all the posts. +header('Content-Type: text/xml'); +echo '\r\n"; +echo '\r\n"; + +foreach($bookmarks['bookmarks'] as $row) { + if (is_null($row['bDescription']) || (trim($row['bDescription']) == '')) + $description = ''; + else + $description = 'extended="'. filter($row['bDescription'], 'xml') .'" '; + + $taglist = ''; + if (count($row['tags']) > 0) { + foreach($row['tags'] as $tag) + $taglist .= convertTag($tag) .' '; + $taglist = substr($taglist, 0, -1); + } else { + $taglist = 'system:unfiled'; + } + + echo "\t\r\n"; +} + +echo ''; +?> \ No newline at end of file diff --git a/api/posts_dates.php b/api/posts_dates.php new file mode 100644 index 0000000..7098756 --- /dev/null +++ b/api/posts_dates.php @@ -0,0 +1,42 @@ +getBookmarks(0, NULL, $userservice->getCurrentUserId(), $tag); + +$currentuser = $userservice->getCurrentUser(); +$currentusername = $currentuser[$userservice->getFieldName('username')]; + +// Set up the XML file and output all the tags. +header('Content-Type: text/xml'); +echo '\r\n"; +echo '\r\n"; + +$lastdate = NULL; +foreach($bookmarks['bookmarks'] as $row) { + $thisdate = gmdate('Y-m-d', strtotime($row['bDatetime'])); + if ($thisdate != $lastdate && $lastdate != NULL) { + echo "\t\r\n"; + $count = 1; + } else { + $count = $count + 1; + } + $lastdate = $thisdate; +} + +echo ""; +?> \ No newline at end of file diff --git a/api/posts_delete.php b/api/posts_delete.php new file mode 100644 index 0000000..737a4fb --- /dev/null +++ b/api/posts_delete.php @@ -0,0 +1,33 @@ +getBookmarkByAddress($_REQUEST['url']); + $bid = $bookmark['bId']; + $delete = $bookmarkservice->deleteBookmark($bid); + $deleted = true; +} + +// Set up the XML file and output the result. +header('Content-Type: text/xml'); +echo '\r\n"; +echo ''; +?> \ No newline at end of file diff --git a/api/posts_get.php b/api/posts_get.php new file mode 100644 index 0000000..8be067b --- /dev/null +++ b/api/posts_get.php @@ -0,0 +1,62 @@ +getBookmarks(0, NULL, $userservice->getCurrentUserId(), $tag, NULL, NULL, NULL, $dtstart, $dtend); + +$currentuser = $userservice->getCurrentUser(); +$currentusername = $currentuser[$userservice->getFieldName('username')]; + +// Set up the XML file and output all the tags. +header('Content-Type: text/xml'); +echo '\r\n"; +echo '\r\n"; + +foreach($bookmarks['bookmarks'] as $row) { + if (is_null($row['bDescription']) || (trim($row['bDescription']) == '')) + $description = ''; + else + $description = 'extended="'. filter($row['bDescription'], 'xml') .'" '; + + $taglist = ''; + if (count($row['tags']) > 0) { + foreach($row['tags'] as $tag) + $taglist .= convertTag($tag) .' '; + $taglist = substr($taglist, 0, -1); + } else { + $taglist = 'system:unfiled'; + } + + echo "\t\r\n"; +} + +echo ''; +?> \ No newline at end of file diff --git a/api/posts_recent.php b/api/posts_recent.php new file mode 100644 index 0000000..22fc2bd --- /dev/null +++ b/api/posts_recent.php @@ -0,0 +1,63 @@ + $countMax) + $count = $countMax; + elseif ($count < 0) + $count = 0; +} else { + $count = $countDefault; +} + +// Get the posts relevant to the passed-in variables. +$bookmarks =& $bookmarkservice->getBookmarks(0, $count, $userservice->getCurrentUserId(), $tag); + +$currentuser = $userservice->getCurrentUser(); +$currentusername = $currentuser[$userservice->getFieldName('username')]; + +// Set up the XML file and output all the tags. +header('Content-Type: text/xml'); +echo '\r\n"; +echo '\r\n"; + +foreach($bookmarks['bookmarks'] as $row) { + if (is_null($row['bDescription']) || (trim($row['bDescription']) == '')) + $description = ''; + else + $description = 'extended="'. filter($row['bDescription'], 'xml') .'" '; + + $taglist = ''; + if (count($row['tags']) > 0) { + foreach($row['tags'] as $tag) + $taglist .= convertTag($tag) .' '; + $taglist = substr($taglist, 0, -1); + } else { + $taglist = 'system:unfiled'; + } + + echo "\t\r\n"; +} + +echo ''; +?> \ No newline at end of file diff --git a/api/posts_update.php b/api/posts_update.php new file mode 100644 index 0000000..de379d2 --- /dev/null +++ b/api/posts_update.php @@ -0,0 +1,26 @@ +getBookmarks(0, 1, $userservice->getCurrentUserId()); + +$currentuser = $userservice->getCurrentUser(); +$currentusername = $currentuser[$userservice->getFieldName('username')]; + +// Set up the XML file and output all the tags. +header('Content-Type: text/xml'); +echo '\r\n"; +foreach($bookmarks['bookmarks'] as $row) { + echo ''; +} +?> \ No newline at end of file diff --git a/api/tags_get.php b/api/tags_get.php new file mode 100644 index 0000000..2584566 --- /dev/null +++ b/api/tags_get.php @@ -0,0 +1,25 @@ +getTags($userservice->getCurrentUserId()); + +// Set up the XML file and output all the tags. +header('Content-Type: text/xml'); +echo '\r\n"; +echo "\r\n"; +foreach($tags as $row) { + echo "\t\r\n"; +} +echo ""; +?> \ No newline at end of file diff --git a/api/tags_rename.php b/api/tags_rename.php new file mode 100644 index 0000000..20831e7 --- /dev/null +++ b/api/tags_rename.php @@ -0,0 +1,37 @@ +) than the other API calls. + +// Force HTTP authentication first! +require_once('httpauth.inc.php'); +require_once('../header.inc.php'); + +$tagservice =& ServiceFactory::getServiceInstance('TagService'); +$userservice =& ServiceFactory::getServiceInstance('UserService'); + +// Get the tag info. +if (isset($_REQUEST['old']) && (trim($_REQUEST['old']) != '')) + $old = trim($_REQUEST['old']); +else + $old = NULL; + +if (isset($_REQUEST['new']) && (trim($_REQUEST['new']) != '')) + $new = trim($_REQUEST['new']); +else + $new = NULL; + +if (is_null($old) || is_null($new)) { + $renamed = false; +} else { + // Rename the tag. + $result = $tagservice->renameTag($userservice->getCurrentUserId(), $old, $new, true); + $renamed = $result; +} + +// Set up the XML file and output the result. +header('Content-Type: text/xml'); +echo '\r\n"; +echo ''. ($renamed ? 'done' : 'something went wrong') .''; +?> diff --git a/bg_bar.png b/bg_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..7152ba1c9fb01128122d27c66e22be74416767ea GIT binary patch literal 873 zcmV-v1D5=WP)}kg0000PbVXQnLvL+uWo~o;Lvm$dbY)~9 zcWHEJAV*0}P*;Ht7XSbP<4Ht8R7l6|mO-*3IS52wDse0A})MXN>vlDO;C24;PNjl&x>po$DdnF{9pgSp(j-?e{7Ti!W z&%%nDmAfk3pa^@Mk4tYT_1AUw1A}>edq9%VS0rSo1AWk;VdFvV<+5yFh|XVq+V_^d zR;59k5CK*Z$#svZ+#{2+^bY2s*%vz`3zto@(5!WtC9pn^EY!nF5LdZ2G9(;uB$bFP zfDFjuqRFu)^e{KcRmrfd@)^ec+aLoZy7Qvv2cCQ!!^5n6f&3EQFybLac7yIsb_w?b zoP-P>^-73OSq};zm-rm;*Q;`(z?nDL(rTtj z0tC+AYi zq6^j^OtbwN+$#bs>ALy;IX@$-2sMaLimvhcOn0#YNg#x!L=AqXs%92oOH_yJSkn~5 z2O2^GNscQ=+6L^y3%2#tBzPPISR{=}?3m3AHabhLDHXYt@5oT)7^p2Im0EjL ze+Z!0$_Zo2MmC(RmvTIjJ>sAnRR$#V77}^%aT?YM7%7s`3thNbGKov9dStv79lC4t zz3)`2nr_d?BjAi6ox;}Iwz3@8&zf8#lpnTqTSk^+DuL`aLQ&#n$v&?}j+Lg>`WcTx zmt921jLz4)y8`NO_KPH~)!aOB+s0CY+l1O6(*#hjY%PqCS)rrTQYXga2aVs36*UGe zv3z95IAXQmEUjFu*I(&T_^ne!>f*6QH0*y`s~Z&tzp8AvRE|H%Tu)--VziJOUN#_4 zCK%!TYgAUB@(8sN;j&sCuq~83D6*VfQJ SNXYg80000N5GLt=9(&tn>yd+p( z(aVBrG;bgJ8s8g_eS@g#|P2Fw2G#Q)Pq&Pds|&6bWg%a9jGS|GAQ$ zYJaGT+JiXJu27QWfTy95EAs3s!(O1g1VB+#k`WXIYeQiqS5Xc3EO9z~XxwLi&S-*F z$B?)9b;iDUNu^!bY{tt{5=a~PS~S-IXCJ;%pd2}kMPJyrcN0@33%@~D53G-s1ydv1 zj*=5ic*SRvKUaBUPh$K8!?ozLHQZ>1pM1PENwX&dy9rhc+@9BF$aTEU(rwU)XW&;& z#7+ZRA+;HUH^w8L6H}jPn%h2r{GrOj`^#MBJ{XRh+nz@kzUqkSw-!3^s9Dc%4<~;x;X{DUr zw?#bx$&dd+evY4c?Zzq+>c#h-k^XF3(x5*FviIA!+JzmJ-!2Aq{T9EJ<^TWy07*qo IM6N<$f>ifENB{r; literal 0 HcmV?d00001 diff --git a/bookmarks.php b/bookmarks.php new file mode 100644 index 0000000..cc5eba4 --- /dev/null +++ b/bookmarks.php @@ -0,0 +1,228 @@ +isLoggedOn()) { + $loginqry = str_replace("'", '%27', stripslashes($_SERVER['QUERY_STRING'])); + header('Location: '. createURL('login', '?'. $loginqry)); + exit(); +} + +@list($url, $user, $cat) = isset($_SERVER['PATH_INFO']) ? explode('/', $_SERVER['PATH_INFO']) : NULL; + +$loggedon = false; +if ($userservice->isLoggedOn()) { + $loggedon = true; + $currentUser = $userservice->getCurrentUser(); + $currentUserID = $userservice->getCurrentUserId(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; +} + +$endcache = false; +if ($usecache) { + // Generate hash for caching on + $hash = md5($_SERVER['REQUEST_URI'] . $user); + + // Don't cache if its users' own bookmarks + if ($loggedon) { + if ($currentUsername != $user) { + // Cache for 5 minutes + $cacheservice->Start($hash); + $endcache = true; + } + } else { + // Cache for 30 minutes + $cacheservice->Start($hash, 1800); + $endcache = true; + } +} + +$pagetitle = $rssCat = $catTitle = ''; +if ($user) { + if (is_int($user)) { + $userid = intval($user); + } else { + if (!($userinfo = $userservice->getUserByUsername($user))) { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); + } else { + $userid =& $userinfo['uId']; + } + } + $pagetitle .= ': '. $user; +} +if ($cat) { + $catTitle = ': '. str_replace('+', ' + ', $cat); + $pagetitle .= $catTitle; +} +$pagetitle = substr($pagetitle, 2); + +// Header variables +$tplVars['loadjs'] = true; + +// ADD A BOOKMARK +$saved = false; +$templatename = 'bookmarks.tpl'; +if ($loggedon && isset($_POST['submitted'])) { + if (!$_POST['title'] || !$_POST['address']) { + $tplVars['error'] = T_('Your bookmark must have a title and an address'); + $templatename = 'editbookmark.tpl'; + } else { + $address = trim($_POST['address']); + // If the bookmark exists already, edit the original + if ($bookmarkservice->bookmarkExists($address, $currentUserID)) { + $bookmark =& $bookmarkservice->getBookmarkByAddress($address); + header('Location: '. createURL('edit', $bookmark['bId'])); + exit(); + // If it's new, save it + } else { + $title = trim($_POST['title']); + $description = trim($_POST['description']); + $status = intval($_POST['status']); + $categories = trim($_POST['tags']); + $saved = true; + if ($bookmarkservice->addBookmark($address, $title, $description, $status, $categories)) { + if (isset($_POST['popup'])) { + $tplVars['msg'] = ''; + } else { + $tplVars['msg'] = T_('Bookmark saved'); + // Redirection option + if ($GLOBALS['useredir']) { + $address = $GLOBALS['url_redir'] . $address; + } + header('Location: '. $address); + } + } else { + $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.'); + $templatename = 'editbookmark.tpl'; + $saved = false; + } + } + } +} + +if (isset($_GET['action']) && ($_GET['action'] == "add")) { + // If the bookmark exists already, edit the original + if ($bookmarkservice->bookmarkExists(stripslashes($_GET['address']), $currentUserID)) { + $bookmark =& $bookmarkservice->getBookmarkByAddress(stripslashes($_GET['address'])); + $popup = (isset($_GET['popup'])) ? '?popup=1' : ''; + header('Location: '. createURL('edit', $bookmark['bId'] . $popup)); + exit(); + } + $templatename = 'editbookmark.tpl'; +} + +if ($templatename == 'editbookmark.tpl') { + if ($loggedon) { + $tplVars['formaction'] = createURL('bookmarks', $currentUsername); + if (isset($_POST['submitted'])) { + $tplVars['row'] = array( + 'bTitle' => stripslashes($_POST['title']), + 'bAddress' => stripslashes($_POST['address']), + 'bDescription' => stripslashes($_POST['description']), + 'tags' => ($_POST['tags'] ? explode(',', stripslashes($_POST['tags'])) : array()) + ); + $tplVars['tags'] = $_POST['tags']; + } else { + $tplVars['row'] = array( + 'bTitle' => stripslashes($_GET['title']), + 'bAddress' => stripslashes($_GET['address']), + 'bDescription' => stripslashes($_GET['description']), + 'tags' => ($_GET['tags'] ? explode(',', stripslashes($_GET['tags'])) : array()) + ); + } + $title = T_('Add a Bookmark'); + $tplVars['pagetitle'] = $title; + $tplVars['subtitle'] = $title; + $tplVars['btnsubmit'] = T_('Add Bookmark'); + $tplVars['popup'] = (isset($_GET['popup'])) ? $_GET['popup'] : null; + } else { + $tplVars['error'] = T_('You must be logged in before you can add bookmarks.'); + } +} else if ($user && !isset($_GET['popup'])) { + + $tplVars['sidebar_blocks'] = array('profile', 'watchstatus'); + + if (!$cat) { + $cat = NULL; + $tplVars['currenttag'] = NULL; + } else { + $rssCat = '/'. filter($cat, 'url'); + $tplVars['currenttag'] = $cat; + $tplVars['sidebar_blocks'][] = 'related'; + $tplVars['sidebar_blocks'][] = 'tagactions'; + } + $tplVars['popCount'] = 30; + $tplVars['sidebar_blocks'][] = 'popular'; + + $tplVars['userid'] = $userid; + $tplVars['userinfo'] =& $userinfo; + $tplVars['user'] = $user; + $tplVars['range'] = 'user'; + + // Pagination + $perpage = getPerPageCount(); + if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; + } else { + $page = 0; + $start = 0; + } + + // Set template vars + $tplVars['rsschannels'] = array( + array(filter($sitename .': '. $pagetitle), createURL('rss', filter($user, 'url') . $rssCat)) + ); + + $tplVars['page'] = $page; + $tplVars['start'] = $start; + $tplVars['bookmarkCount'] = $start + 1; + + $bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, $userid, $cat, $terms, getSortOrder()); + $tplVars['total'] = $bookmarks['total']; + $tplVars['bookmarks'] =& $bookmarks['bookmarks']; + $tplVars['cat_url'] = createURL('bookmarks', '%s/%s'); + $tplVars['nav_url'] = createURL('bookmarks', '%s/%s%s'); + if ($user == $currentUsername) { + $title = T_('My Bookmarks') . filter($catTitle); + } else { + $title = filter($pagetitle); + } + $tplVars['pagetitle'] = $title; + $tplVars['subtitle'] = $title; +} +$templateservice->loadTemplate($templatename, $tplVars); + +if ($usecache && $endcache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> diff --git a/cache/.cvsignore b/cache/.cvsignore new file mode 100644 index 0000000..f05fcdc --- /dev/null +++ b/cache/.cvsignore @@ -0,0 +1 @@ +*.cache \ No newline at end of file diff --git a/cache/.htaccess b/cache/.htaccess new file mode 100644 index 0000000..baa56e5 --- /dev/null +++ b/cache/.htaccess @@ -0,0 +1,2 @@ +order allow,deny +deny from all \ No newline at end of file diff --git a/config.inc.php.example b/config.inc.php.example new file mode 100644 index 0000000..c78f361 --- /dev/null +++ b/config.inc.php.example @@ -0,0 +1,120 @@ + array('mp3', 'ogg', 'wav'), + 'document' => array('doc', 'odt', 'pdf'), + 'image' => array('gif', 'jpeg', 'jpg', 'png'), + 'video' => array('avi', 'mov', 'mp4', 'mpeg', 'mpg', 'wmv') + ); +$reservedusers = array('all', 'watchlist'); + +include_once('debug.inc.php'); +?> diff --git a/debug.inc.php b/debug.inc.php new file mode 100644 index 0000000..8bd7f33 --- /dev/null +++ b/debug.inc.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/edit.php b/edit.php new file mode 100644 index 0000000..028e8ba --- /dev/null +++ b/edit.php @@ -0,0 +1,93 @@ +getBookmark(intval($bookmark), true))) { + $tplVars['error'] = sprintf(T_('Bookmark with id %s not was not found'), $bookmark); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); +} else { + if (!$bookmarkservice->editAllowed($row)) { + $tplVars['error'] = T_('You are not allowed to edit this bookmark'); + $templateservice->loadTemplate('error.500.tpl', $tplVars); + exit(); + } else if ($_POST['submitted']) { + if (!$_POST['title'] || !$_POST['address']) { + $tplVars['error'] = T_('Your bookmark must have a title and an address'); + } else { + // Update bookmark + $bId = intval($bookmark); + $address = trim($_POST['address']); + $title = trim($_POST['title']); + $description = trim($_POST['description']); + $status = intval($_POST['status']); + $tags = trim($_POST['tags']); + $logged_on_user = $userservice->getCurrentUser(); + if (!$bookmarkservice->updateBookmark($bId, $address, $title, $description, $status, $tags)) { + $tplvars['error'] = T_('Error while saving your bookmark'); + } else { + if (isset($_POST['popup'])) { + $tplVars['msg'] = (isset($_POST['popup'])) ? '' : T_('Bookmark saved'); + } elseif (isset($_POST['referrer'])) { + header('Location: '. $_POST['referrer']); + } else { + header('Location: '. createURL('bookmarks', $logged_on_user[$userservice->getFieldName('username')])); + } + } + } + } else { + if ($_POST['delete']) { + // Delete bookmark + if ($bookmarkservice->deleteBookmark($bookmark)) { + $logged_on_user = $userservice->getCurrentUser(); + if (isset($_POST['referrer'])) { + header('Location: '. $_POST['referrer']); + } else { + header('Location: '. createURL('bookmarks', $logged_on_user[$userservice->getFieldName('username')])); + } + exit(); + } else { + $tplVars['error'] = T_('Failed to delete the bookmark'); + $templateservice->loadTemplate('error.500.tpl', $tplVars); + exit(); + } + } + } + + $tplVars['popup'] = (isset($_GET['popup'])) ? $_GET['popup'] : null; + $tplVars['row'] =& $row; + $tplVars['formaction'] = createURL('edit', $bookmark); + $tplVars['btnsubmit'] = T_('Save Changes'); + $tplVars['showdelete'] = true; + $tplVars['referrer'] = $_SERVER['HTTP_REFERER']; + $templateservice->loadTemplate('editbookmark.tpl', $tplVars); +} +?> diff --git a/functions.inc.php b/functions.inc.php new file mode 100644 index 0000000..63b789a --- /dev/null +++ b/functions.inc.php @@ -0,0 +1,160 @@ +sql_error(); + $debug_text = ''; + + if ($sql_error['message'] != '') + $debug_text .= '

'. T_('SQL Error') .' : '. $sql_error['code'] .' '. $sql_error['message']; + + if ($sql_store != '') + $debug_text .= '

'. $sql_store; + + if ($err_line != '' && $err_file != '') + $debug_text .= '

'. T_('Line') .' : '. $err_line .'
'. T_('File') .' :'. $err_file; + } + + switch($msg_code) { + case GENERAL_MESSAGE: + if ($msg_title == '') + $msg_title = T_('Information'); + break; + + case CRITICAL_MESSAGE: + if ($msg_title == '') + $msg_title = T_('Critical Information'); + break; + + case GENERAL_ERROR: + if ($msg_text == '') + $msg_text = T_('An error occured'); + + if ($msg_title == '') + $msg_title = T_('General Error'); + break; + + case CRITICAL_ERROR: + // Critical errors mean we cannot rely on _ANY_ DB information being + // available so we're going to dump out a simple echo'd statement + + if ($msg_text == '') + $msg_text = T_('An critical error occured'); + + if ($msg_title == '') + $msg_title = T_('Critical Error'); + break; + } + + // Add on DEBUG info if we've enabled debug mode and this is an error. This + // prevents debug info being output for general messages should DEBUG be + // set TRUE by accident (preventing confusion for the end user!) + if (DEBUG && ($msg_code == GENERAL_ERROR || $msg_code == CRITICAL_ERROR)) { + if ($debug_text != '') + $msg_text = $msg_text . '

'. T_('DEBUG MODE') .''. $debug_text; + } + + echo "\n\n". $msg_title ."\n

\n". $msg_text ."\n"; + exit; +} +?> diff --git a/header.inc.php b/header.inc.php new file mode 100644 index 0000000..751e4e8 --- /dev/null +++ b/header.inc.php @@ -0,0 +1,34 @@ + \ No newline at end of file diff --git a/history.php b/history.php new file mode 100644 index 0000000..568a8b6 --- /dev/null +++ b/history.php @@ -0,0 +1,90 @@ +isLoggedOn()) { + $loggedon = true; + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; +} + +if ($usecache) { + // Generate hash for caching on + $hashtext = $_SERVER['REQUEST_URI']; + if ($userservice->isLoggedOn()) { + $hashtext .= $currentUsername; + } + $cachehash = md5($hashtext); + + // Cache for 30 minutes + $cacheservice->Start($cachehash, 1800); +} + +// Pagination +$perpage = getPerPageCount(); +if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; +} else { + $page = 0; + $start = 0; +} + +if ($bookmark =& $bookmarkservice->getBookmarkByHash($hash)) { + // Template variables + $bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, NULL, NULL, NULL, getSortOrder(), NULL, NULL, NULL, $hash); + $tplVars['pagetitle'] = T_('History') .': '. $bookmark['bAddress']; + $tplVars['subtitle'] = sprintf(T_('History for %s'), $bookmark['bAddress']); + $tplVars['loadjs'] = true; + $tplVars['page'] = $page; + $tplVars['start'] = $start; + $tplVars['bookmarkCount'] = $start + 1; + $tplVars['total'] = $bookmarks['total']; + $tplVars['bookmarks'] =& $bookmarks['bookmarks']; + $tplVars['hash'] = $hash; + $tplVars['popCount'] = 50; + $tplVars['sidebar_blocks'] = array('common'); + $tplVars['cat_url'] = createURL('tags', '%2$s'); + $tplVars['nav_url'] = createURL('history', $hash .'/%3$s'); + $templateservice->loadTemplate('bookmarks.tpl', $tplVars); +} else { + // Throw a 404 error + $tplVars['error'] = T_('Address was not found'); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); +} + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($cachehash); +} +?> \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..be864a79530e0d6d6ed8d555938147c3e147a739 GIT binary patch literal 771 zcmV+e1N{7nP){7K zf`S$WeNbAMqRr$-W(|!pPC88Uap!)Vx5XVrbAk@MocA1_=Xc(7&I=+!xrh!z`!>`$ z5xeH?`lD{$HGeV7Ko38FO$w@u8I$dNhkdcAz7;pN@}GK zOmqW+x-D!j!O#Wd)45_UKF)LBUv|3;i>&H8Rj%2sNI)L2IKa1?A*c`q6>hf*Ns*Pz zLczHA4ppL8rqOVn=e*W>Ms`&n2Gl0UV5|T<3y=knu`v@jk(`+`$KSsh=^NtD#kaGR zd2sX6a>K5cQ=ZU%QIIr14gyNOW6~G5Kz=PI?4Q$Pi#^wi1GK?#<0+8zfa}CAx5|YtR`o%lB{&XIniKr+501?>%xADj>tZ{JN0Z`F7 z735Uo>ju0Bz$GpHdKNJvN&H-(D@?5LNlX-Mfa?Ge0Ep!P88f@e*5a@;iFqr(^0g41TY4O-@q`1_ z{(}{P8e8?qs%064%^kcMFqQc7YVt=S9UYygu`ACo1;7BZ+0MpnV{cddXt-WFmdfxs z0M?dP-dHf!3ZSxd#}pA|OZy^#U@5!+CW%M~fInV{PzisLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['size'] > 0) { + $userinfo = $userservice->getCurrentUser(); + + if (isset($_POST['status']) && is_numeric($_POST['status'])) { + $status = intval($_POST['status']); + } else { + $status = 2; + } + + $depth = array(); + $xml_parser = xml_parser_create(); + xml_set_element_handler($xml_parser, "startElement", "endElement"); + + if (!($fp = fopen($_FILES['userfile']['tmp_name'], "r"))) + die(T_("Could not open XML input")); + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf(T_("XML error: %s at line %d"), + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } + } + xml_parser_free($xml_parser); + header('Location: '. createURL('bookmarks', $userinfo[$userservice->getFieldName('username')])); +} else { + $templatename = 'importDelicious.tpl'; + $tplVars['subtitle'] = T_('Import Bookmarks from del.icio.us'); + $tplVars['formaction'] = createURL('import'); + $templateservice->loadTemplate($templatename, $tplVars); +} + +function startElement($parser, $name, $attrs) { + global $depth, $status, $tplVars, $userservice; + + $bookmarkservice =& ServiceFactory::getServiceInstance('BookmarkService'); + $userservice =& ServiceFactory::getServiceInstance('UserService'); + + if ($name == 'POST') { + while(list($attrTitle, $attrVal) = each($attrs)) { + switch ($attrTitle) { + case 'HREF': + $bAddress = $attrVal; + break; + case 'DESCRIPTION': + $bTitle = $attrVal; + break; + case 'EXTENDED': + $bDescription = $attrVal; + break; + case 'TIME': + $bDatetime = $attrVal; + break; + case 'TAG': + $tags = strtolower($attrVal); + break; + } + } + if ($bookmarkservice->bookmarkExists($bAddress, $userservice->getCurrentUserId())) { + $tplVars['error'] = T_('You have already submitted this bookmark.'); + } else { + // Strangely, PHP can't work out full ISO 8601 dates, so we have to chop off the Z. + $bDatetime = substr($bDatetime, 0, -1); + + // If bookmark claims to be from the future, set it to be now instead + if (strtotime($bDatetime) > time()) { + $bDatetime = gmdate('Y-m-d H:i:s'); + } + + if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, $status, $tags, $bDatetime, true, true)) + $tplVars['msg'] = T_('Bookmark imported.'); + else + $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.'); + } + } + $depth[$parser]++; +} + +function endElement($parser, $name) { + global $depth; + $depth[$parser]--; +} +?> diff --git a/importNetscape.php b/importNetscape.php new file mode 100644 index 0000000..6682ec0 --- /dev/null +++ b/importNetscape.php @@ -0,0 +1,85 @@ +isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['size'] > 0) { + $userinfo = $userservice->getCurrentUser(); + + if (isset($_POST['status']) && is_numeric($_POST['status'])) { + $status = intval($_POST['status']); + } else { + $status = 2; + } + + // File handle + $html = file_get_contents($_FILES['userfile']['tmp_name']); + + // Create link array + preg_match_all('/([^<]*)/si', $html, $matches); + $links = $matches[1]; + $titles = $matches[2]; + + $size = count($links); + for ($i = 0; $i < $size; $i++) { + $attributes = preg_split('/\s+/s', $links[$i]); + foreach ($attributes as $attribute) { + $att = preg_split('/\s*=\s*/s', $attribute, 2); + $attrTitle = $att[0]; + $attrVal = eregi_replace('"', '"', preg_replace('/([\'"]?)(.*)\1/', '$2', $att[1])); + switch ($attrTitle) { + case "HREF": + $bAddress = $attrVal; + break; + case "ADD_DATE": + $bDatetime = gmdate('Y-m-d H:i:s', $attrVal); + break; + } + } + $bTitle = eregi_replace('"', '"', trim($titles[$i])); + + if ($bookmarkservice->bookmarkExists($bAddress, $userservice->getCurrentUserId())) { + $tplVars['error'] = T_('You have already submitted this bookmark.'); + } else { + // If bookmark claims to be from the future, set it to be now instead + if (strtotime($bDatetime) > time()) { + $bDatetime = gmdate('Y-m-d H:i:s'); + } + + if ($bookmarkservice->addBookmark($bAddress, $bTitle, NULL, $status, NULL, $bDatetime, false, true)) { + $tplVars['msg'] = T_('Bookmark imported.'); + } else { + $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.'); + } + } + } + header('Location: '. createURL('bookmarks', $userinfo[$userservice->getFieldName('username')])); +} else { + $templatename = 'importNetscape.tpl'; + $tplVars['subtitle'] = T_('Import Bookmarks from Browser File'); + $tplVars['formaction'] = createURL('importNetscape'); + $templateservice->loadTemplate($templatename, $tplVars); +} +?> diff --git a/includes/db/db2.php b/includes/db/db2.php new file mode 100644 index 0000000..b1abf1a --- /dev/null +++ b/includes/db/db2.php @@ -0,0 +1,417 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->password = $sqlpassword; + $this->dbname = $database; + + $this->server = $sqlserver; + + if($this->persistency) + { + $this->db_connect_id = odbc_pconnect($this->server, "", ""); + } + else + { + $this->db_connect_id = odbc_connect($this->server, "", ""); + } + + if($this->db_connect_id) + { + @odbc_autocommit($this->db_connect_id, off); + + return $this->db_connect_id; + } + else + { + return false; + } + } + // + // Other base methods + // + function sql_close() + { + if($this->db_connect_id) + { + if($this->query_result) + { + @odbc_free_result($this->query_result); + } + $result = @odbc_close($this->db_connect_id); + return $result; + } + else + { + return false; + } + } + + + // + // Query method + // + function sql_query($query = "", $transaction = FALSE) + { + // + // Remove any pre-existing queries + // + unset($this->query_result); + unset($this->row); + if($query != "") + { + $this->num_queries++; + + if(!eregi("^INSERT ",$query)) + { + if(eregi("LIMIT", $query)) + { + preg_match("/^(.*)LIMIT ([0-9]+)[, ]*([0-9]+)*/s", $query, $limits); + + $query = $limits[1]; + if($limits[3]) + { + $row_offset = $limits[2]; + $num_rows = $limits[3]; + } + else + { + $row_offset = 0; + $num_rows = $limits[2]; + } + + $query .= " FETCH FIRST ".($row_offset+$num_rows)." ROWS ONLY OPTIMIZE FOR ".($row_offset+$num_rows)." ROWS"; + + $this->query_result = odbc_exec($this->db_connect_id, $query); + + $query_limit_offset = $row_offset; + $this->result_numrows[$this->query_result] = $num_rows; + } + else + { + $this->query_result = odbc_exec($this->db_connect_id, $query); + + $row_offset = 0; + $this->result_numrows[$this->query_result] = 5E6; + } + + $result_id = $this->query_result; + if($this->query_result && eregi("^SELECT", $query)) + { + + for($i = 1; $i < odbc_num_fields($result_id)+1; $i++) + { + $this->result_field_names[$result_id][] = odbc_field_name($result_id, $i); + } + + $i = $row_offset + 1; + $k = 0; + while(odbc_fetch_row($result_id, $i) && $k < $this->result_numrows[$result_id]) + { + + for($j = 1; $j < count($this->result_field_names[$result_id])+1; $j++) + { + $this->result_rowset[$result_id][$k][$this->result_field_names[$result_id][$j-1]] = odbc_result($result_id, $j); + } + $i++; + $k++; + } + + $this->result_numrows[$result_id] = $k; + $this->row_index[$result_id] = 0; + } + else + { + $this->result_numrows[$result_id] = @odbc_num_rows($result_id); + $this->row_index[$result_id] = 0; + } + } + else + { + if(eregi("^(INSERT|UPDATE) ", $query)) + { + $query = preg_replace("/\\\'/s", "''", $query); + } + + $this->query_result = odbc_exec($this->db_connect_id, $query); + + if($this->query_result) + { + $sql_id = "VALUES(IDENTITY_VAL_LOCAL())"; + + $id_result = odbc_exec($this->db_connect_id, $sql_id); + if($id_result) + { + $row_result = odbc_fetch_row($id_result); + if($row_result) + { + $this->next_id[$this->query_result] = odbc_result($id_result, 1); + } + } + } + + odbc_commit($this->db_connect_id); + + $this->query_limit_offset[$this->query_result] = 0; + $this->result_numrows[$this->query_result] = 0; + } + + return $this->query_result; + } + else + { + return false; + } + } + + // + // Other query methods + // + function sql_numrows($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + return $this->result_numrows[$query_id]; + } + else + { + return false; + } + } + function sql_affectedrows($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + return $this->result_numrows[$query_id]; + } + else + { + return false; + } + } + function sql_numfields($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = count($this->result_field_names[$query_id]); + return $result; + } + else + { + return false; + } + } + function sql_fieldname($offset, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = $this->result_field_names[$query_id][$offset]; + return $result; + } + else + { + return false; + } + } + function sql_fieldtype($offset, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @odbc_field_type($query_id, $offset); + return $result; + } + else + { + return false; + } + } + function sql_fetchrow($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + if($this->row_index[$query_id] < $this->result_numrows[$query_id]) + { + $result = $this->result_rowset[$query_id][$this->row_index[$query_id]]; + $this->row_index[$query_id]++; + return $result; + } + else + { + return false; + } + } + else + { + return false; + } + } + function sql_fetchrowset($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $this->row_index[$query_id] = $this->result_numrows[$query_id]; + return $this->result_rowset[$query_id]; + } + else + { + return false; + } + } + function sql_fetchfield($field, $row = -1, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + if($row < $this->result_numrows[$query_id]) + { + if($row == -1) + { + $getrow = $this->row_index[$query_id]-1; + } + else + { + $getrow = $row; + } + + return $this->result_rowset[$query_id][$getrow][$this->result_field_names[$query_id][$field]]; + + } + else + { + return false; + } + } + else + { + return false; + } + } + function sql_rowseek($offset, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $this->row_index[$query_id] = 0; + return true; + } + else + { + return false; + } + } + function sql_nextid($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + return $this->next_id[$query_id]; + } + else + { + return false; + } + } + function sql_freeresult($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @odbc_free_result($query_id); + return $result; + } + else + { + return false; + } + } + function sql_error($query_id = 0) + { +// $result['code'] = @odbc_error($this->db_connect_id); +// $result['message'] = @odbc_errormsg($this->db_connect_id); + + return ""; + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/firebird.php b/includes/db/firebird.php new file mode 100644 index 0000000..58a7d07 --- /dev/null +++ b/includes/db/firebird.php @@ -0,0 +1,527 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @ibase_pconnect($this->server . ':' . $this->dbname, $this->user, $sqlpassword, false, false, 3) : @ibase_connect($this->server . ':' . $this->dbname, $this->user, $sqlpassword, false, false, 3); + + return ($this->db_connect_id) ? $this->db_connect_id : $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if ($this->transaction) + { + @ibase_commit($this->db_connect_id); + } + + if (sizeof($this->open_queries)) + { + foreach ($this->open_queries as $i_query_id => $query_id) + { + @ibase_free_query($query_id); + } + } + + return @ibase_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $this->transaction = true; + break; + + case 'commit': + $result = @ibase_commit(); + $this->transaction = false; + + if (!$result) + { + @ibase_rollback(); + } + break; + + case 'rollback': + $result = @ibase_rollback(); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + $this->last_query_text = $query; + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = @ibase_query($this->db_connect_id, $query)) === false) + { + $this->sql_error($query); + } + + // TODO: have to debug the commit states in firebird + if (!$this->transaction) + { + @ibase_commit_ret(); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $cache->sql_save($query, $this->query_result, $cache_ttl); + } + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) + { + if ($query != '') + { + $this->query_result = false; + + $query = 'SELECT FIRST ' . $total . ((!empty($offset)) ? ' SKIP ' . $offset : '') . substr($query, 6); + + return $this->sql_query($query, $cache_ttl); + } + else + { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + return FALSE; + } + + function sql_affectedrows() + { + // TODO: hmm, maybe doing something similar as in mssql-odbc.php? + return ($this->query_result) ? true : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + $row = array(); + $cur_row = @ibase_fetch_object($query_id, IBASE_TEXT); + + if (!$cur_row) + { + return false; + } + + foreach (get_object_vars($cur_row) as $key => $value) + { + $row[strtolower($key)] = trim(str_replace("\\0", "\0", str_replace("\\n", "\n", $value))); + } + return ($query_id) ? $row : false; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + + $result = array(); + while ($this->rowset[$query_id] = get_object_vars(@ibase_fetch_object($query_id, IBASE_TEXT))) + { + $result[] = $this->rowset[$query_id]; + } + + return $result; + } + else + { + return false; + } + } + + function sql_fetchfield($field, $rownum = -1, $query_id = 0) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { + // erm... ok, my bad, we always use zero. :/ + for ($i = 0; $i <= $rownum; $i++) + { + $row = $this->sql_fetchrow($query_id); + } + + return $row[$field]; + } + else + { + if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) + { + if ($this->sql_fetchrow($query_id)) + { + $result = $this->row[$query_id][$field]; + } + } + else + { + if ($this->rowset[$query_id]) + { + $result = $this->rowset[$query_id][$field]; + } + else if ($this->row[$query_id]) + { + $result = $this->row[$query_id][$field]; + } + } + } + return $result; + } + else + { + return false; + } + } + + function sql_rowseek($rownum, $query_id = 0) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + for($i = 1; $i < $rownum; $i++) + { + if (!$this->sql_fetchrow($query_id)) + { + return false; + } + } + + return true; + } + + function sql_nextid() + { + if ($this->query_result && preg_match('#^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)#is', $this->last_query_text, $tablename)) + { + $query = "SELECT GEN_ID('" . $tablename[1] . "_gen', 0) AS new_id + FROM RDB\$DATABASE"; + if (!($temp_q_id = @ibase_query($this->db_connect_id, $query))) + { + return false; + } + + $temp_result = @ibase_fetch_object($temp_q_id); + $this->sql_freeresult($temp_q_id); + + return ($temp_result) ? $temp_result->last_value : false; + } + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (!$this->transaction && $query_id) + { + @ibase_commit(); + } + + return ($query_id) ? @ibase_free_result($query_id) : false; + } + + function sql_escape($msg) + { + return (@ini_get('magic_quotes_sybase') || strtolower(@ini_get('magic_quotes_sybase')) == 'on') ? str_replace('\\\'', '\'', addslashes($msg)) : str_replace('\'', '\'\'', stripslashes($msg)); + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page =(!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' .((!empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : $_ENV['QUERY_STRING']); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @ibase_errmsg() . '

CALLING PAGE

' . $this_page .(($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result['message'] = @ibase_errmsg(); + $result['code'] = ''; + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $this->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = @ibase_query($this->db_connect_id, $query); + while ($void = @ibase_fetch_object($result, IBASE_TEXT)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + @ibase_freeresult($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - ' . SQL_LAYER . ' Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/index.htm b/includes/db/index.htm new file mode 100644 index 0000000..ee1f723 --- /dev/null +++ b/includes/db/index.htm @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/includes/db/mssql-odbc.php b/includes/db/mssql-odbc.php new file mode 100644 index 0000000..a2d3d02 --- /dev/null +++ b/includes/db/mssql-odbc.php @@ -0,0 +1,576 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @odbc_pconnect($this->server, $this->user, $sqlpassword) : @odbc_connect($this->server, $this->user, $sqlpassword); + + return ($this->db_connect_id) ? $this->db_connect_id : $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if ($this->transaction) + { + @odbc_commit($this->db_connect_id); + } + + if (sizeof($this->result_rowset)) + { + unset($this->result_rowset); + unset($this->field_names); + unset($this->field_types); + unset($this->num_rows); + unset($this->current_row); + } + + if (sizeof($this->open_queries)) + { + foreach ($this->open_queries as $i_query_id => $query_id) + { + @odbc_free_result($query_id); + } + } + + return @odbc_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @odbc_autocommit($this->db_connect_id, false); + $this->transaction = true; + break; + + case 'commit': + $result = @odbc_commit($this->db_connect_id); + @odbc_autocommit($this->db_connect_id, true); + $this->transaction = false; + + if (!$result) + { + @odbc_rollback($this->db_connect_id); + @odbc_autocommit($this->db_connect_id, true); + } + break; + + case 'rollback': + $result = @odbc_rollback($this->db_connect_id); + @odbc_autocommit($this->db_connect_id, true); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = $this->_odbc_execute_query($query)) === false) + { + $this->sql_error($query); + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + $cache->sql_save($query, $this->query_result, $cache_ttl); + // odbc_free_result called within sql_save() + } + else if (strpos($query, 'SELECT') !== false && $this->query_result) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function _odbc_execute_query($query) + { + $result = false; + + if (eregi("^SELECT ", $query)) + { + $result = @odbc_exec($this->db_connect_id, $query); + + if ($result) + { + if (empty($this->field_names[$result])) + { + for ($i = 1, $j = @odbc_num_fields($result) + 1; $i < $j; $i++) + { + $this->field_names[$result][] = @odbc_field_name($result, $i); + $this->field_types[$result][] = @odbc_field_type($result, $i); + } + } + + $this->current_row[$result] = 0; + $this->result_rowset[$result] = array(); + + $row_outer = (isset($row_offset)) ? $row_offset + 1 : 1; + $row_outer_max = (isset($num_rows)) ? $row_offset + $num_rows + 1 : 1E9; + $row_inner = 0; + + while (@odbc_fetch_row($result, $row_outer) && $row_outer < $row_outer_max) + { + for ($i = 0, $j = sizeof($this->field_names[$result]); $i < $j; $i++) + { + $this->result_rowset[$result][$row_inner][$this->field_names[$result][$i]] = stripslashes(@odbc_result($result, $i + 1)); + } + + $row_outer++; + $row_inner++; + } + + $this->num_rows[$result] = sizeof($this->result_rowset[$result]); + } + } + else if (eregi("^INSERT ", $query)) + { + $result = @odbc_exec($this->db_connect_id, $query); + + if ($result) + { + $result_id = @odbc_exec($this->db_connect_id, 'SELECT @@IDENTITY'); + if ($result_id) + { + if (@odbc_fetch_row($result_id)) + { + $this->next_id[$this->db_connect_id] = @odbc_result($result_id, 1); + $this->affected_rows[$this->db_connect_id] = @odbc_num_rows($result); + } + } + } + } + else + { + $result = @odbc_exec($this->db_connect_id, $query); + + if ($result) + { + $this->affected_rows[$this->db_connect_id] = @odbc_num_rows($result); + } + } + + return $result; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) + { + if ($query != '') + { + $this->query_result = false; + + // if $total is set to 0 we do not want to limit the number of rows + if ($total == 0) + { + $total = -1; + } + + $row_offset = ($total) ? $offset : ''; + $num_rows = ($total) ? $total : $offset; + + $query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6); + + return $this->sql_query($query, $cache_ttl); + } + else + { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @$this->num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->affected_rows[$this->db_connect_id]) ? $this->affected_rows[$this->db_connect_id] : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + return ($this->num_rows[$query_id] && $this->current_row[$query_id] < $this->num_rows[$query_id]) ? $this->result_rowset[$query_id][$this->current_row[$query_id]++] : false; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($this->num_rows[$query_id]) ? $this->result_rowset[$query_id] : false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum < $this->num_rows[$query_id]) + { + $getrow = ($rownum == -1) ? $this->current_row[$query_id] - 1 : $rownum; + + return $this->result_rowset[$query_id][$getrow][$this->field_names[$query_id][$field]]; + } + } + + return false; + } + + function sql_rowseek($rownum, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->current_row[$query_id])) + { + $this->current_row[$query_id] = $rownum; + return true; + } + + return false; + } + + function sql_nextid() + { + return ($this->next_id[$this->db_connect_id]) ? $this->next_id[$this->db_connect_id] : false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->open_queries[(int) $query_id])) + { + unset($this->open_queries[(int) $query_id]); + unset($this->num_rows[$query_id]); + unset($this->current_row[$query_id]); + unset($this->result_rowset[$query_id]); + unset($this->field_names[$query_id]); + unset($this->field_types[$query_id]); + + return @odbc_free_result($query_id); + } + + return false; + } + + function sql_escape($msg) + { + return str_replace("'", "''", str_replace('\\', '\\\\', $msg)); + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @odbc_errormsg() . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @odbc_errormsg(), + 'code' => @odbc_error() + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $this->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = $this->_odbc_execute_query($query); + + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + @odbc_free_result($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - ' . SQL_LAYER . ' Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/mssql.php b/includes/db/mssql.php new file mode 100644 index 0000000..2b17b9e --- /dev/null +++ b/includes/db/mssql.php @@ -0,0 +1,551 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @mssql_pconnect($this->server, $this->user, $sqlpassword) : @mssql_connect($this->server, $this->user, $sqlpassword); + + if ($this->db_connect_id && $this->dbname != '') + { + if (!@mssql_select_db($this->dbname, $this->db_connect_id)) + { + @mssql_close($this->db_connect_id); + return false; + } + } + + return ($this->db_connect_id) ? $this->db_connect_id : $this->sql_error(''); + } + + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if ($this->transaction) + { + @mssql_query('COMMIT', $this->db_connect_id); + } + + if (sizeof($this->open_queries)) + { + foreach ($this->open_queries as $i_query_id => $query_id) + { + @mssql_free_result($query_id); + } + } + + return @mssql_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @mssql_query('BEGIN TRANSACTION', $this->db_connect_id); + $this->transaction = true; + break; + + case 'commit': + $result = @mssql_query('commit', $this->db_connect_id); + $this->transaction = false; + + if (!$result) + { + @mssql_query('ROLLBACK', $this->db_connect_id); + } + break; + + case 'rollback': + $result = @mssql_query('ROLLBACK', $this->db_connect_id); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = @mssql_query($query, $this->db_connect_id)) === false) + { + $this->sql_error($query); + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + $cache->sql_save($query, $this->query_result, $cache_ttl); + // sql_freeresult called within sql_save() + } + else if (strpos($query, 'SELECT') !== false && $this->query_result) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) + { + if ($query != '') + { + $this->query_result = false; + + // if $total is set to 0 we do not want to limit the number of rows + if ($total == 0) + { + $total = -1; + } + + $row_offset = ($total) ? $offset : ''; + $num_rows = ($total) ? $total : $offset; + + $query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6); + + return $this->sql_query($query, $cache_ttl); + } + else + { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + +// return (isset($this->limit_offset[$query_id])) ? @mssql_num_rows($query_id) - $this->limit_offset[$query_id] : @mssql_num_rows($query_id); + return ($query_id) ? @mssql_num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->db_connect_id) ? @mssql_rows_affected($this->db_connect_id) : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + $row = @mssql_fetch_array($query_id, MSSQL_ASSOC); + + if ($row) + { + foreach ($row as $key => $value) + { + $row[$key] = ($value === ' ') ? trim($value) : $value; + } + } + + return $row; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + + $result = array(); + while ($this->rowset[$query_id] = $this->sql_fetchrow($query_id)) + { + $result[] = $this->rowset[$query_id]; + } + return $result; + } + + return false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { +// (!empty($this->limit_offset[$query_id])) ? @mssql_data_seek($query_id, ($this->limit_offset[$query_id] + $rownum)) : @mssql_data_seek($query_id, $rownum); + @mssql_data_seek($query_id, $rownum); + $row = @mssql_fetch_array($query_id, MSSQL_ASSOC); + $result = isset($row[$field]) ? $row[$field] : false; + } + else + { + if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) + { + if ($this->sql_fetchrow($query_id)) + { + $result = $this->row[$query_id][$field]; + } + } + else + { + if ($this->rowset[$query_id]) + { + $result = $this->rowset[$query_id][$field]; + } + elseif ($this->row[$query_id]) + { + $result = $this->row[$query_id][$field]; + } + } + } + + return $result; + } + + return false; + } + + function sql_rowseek($rownum, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->current_row[$query_id])) + { +// (!empty($this->limit_offset[$query_id])) ? @mssql_data_seek($query_id, ($this->limit_offset[$query_id] + $rownum)) : @mssql_data_seek($query_id, $rownum); + @mssql_data_seek($query_id, $rownum); + return true; + } + + return false; + } + + function sql_nextid() + { + $result_id = @mssql_query('SELECT @@IDENTITY', $this->db_connect_id); + if ($result_id) + { + if (@mssql_fetch_array($result_id, MSSQL_ASSOC)) + { + return @mssql_result($result_id, 1); + } + } + + return false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->open_queries[$query_id])) + { + unset($this->open_queries[$query_id]); + unset($this->result_rowset[$query_id]); + + return @mssql_free_result($query_id); + } + + return false; + } + + function sql_escape($msg) + { + return str_replace("'", "''", str_replace('\\', '\\\\', $msg)); + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @mssql_get_last_message() . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @mssql_get_last_message($this->db_connect_id), + 'code' => '' + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $this->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = @mssql_query($query, $this->db_connect_id); + while ($void = @mssql_fetch_array($result, MSSQL_ASSOC)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + @mssql_free_result($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - ' . SQL_LAYER . ' Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/mysql.php b/includes/db/mysql.php new file mode 100644 index 0000000..a646e0d --- /dev/null +++ b/includes/db/mysql.php @@ -0,0 +1,552 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @mysql_pconnect($this->server, $this->user, $sqlpassword) : @mysql_connect($this->server, $this->user, $sqlpassword); + + if ($this->db_connect_id && $this->dbname != '') + { + if (@mysql_select_db($this->dbname)) + { + return $this->db_connect_id; + } + } + + return $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if (sizeof($this->open_queries)) + { + foreach ($this->open_queries as $i_query_id => $query_id) + { + @mysql_free_result($query_id); + } + } + + return @mysql_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @mysql_query('BEGIN', $this->db_connect_id); + $this->transaction = true; + break; + + case 'commit': + $result = @mysql_query('COMMIT', $this->db_connect_id); + $this->transaction = false; + + if (!$result) + { + @mysql_query('ROLLBACK', $this->db_connect_id); + } + break; + + case 'rollback': + $result = @mysql_query('ROLLBACK', $this->db_connect_id); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false) + { + $this->sql_error($query); + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + $cache->sql_save($query, $this->query_result, $cache_ttl); + // mysql_free_result called within sql_save() + } + else if (strpos($query, 'SELECT') !== false && $this->query_result) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) { + if ($query != '') { + $this->query_result = false; + + // only limit the number of rows if $total is greater than 0 + if ($total > 0) + $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); + + return $this->sql_query($query, $cache_ttl); + } else { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysql_num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->db_connect_id) ? @mysql_affected_rows($this->db_connect_id) : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + return ($query_id) ? @mysql_fetch_assoc($query_id) : false; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + + $result = array(); + while ($this->rowset[$query_id] = $this->sql_fetchrow($query_id)) + { + $result[] = $this->rowset[$query_id]; + } + return $result; + } + + return false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { + $result = @mysql_result($query_id, $rownum, $field); + } + else + { + if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) + { + if ($this->sql_fetchrow($query_id)) + { + $result = $this->row[$query_id][$field]; + } + } + else + { + if ($this->rowset[$query_id]) + { + $result = $this->rowset[$query_id][$field]; + } + elseif ($this->row[$query_id]) + { + $result = $this->row[$query_id][$field]; + } + } + } + return $result; + } + return false; + } + + function sql_rowseek($rownum, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysql_data_seek($query_id, $rownum) : false; + } + + function sql_nextid() + { + return ($this->db_connect_id) ? @mysql_insert_id($this->db_connect_id) : false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->open_queries[(int) $query_id])) + { + unset($this->open_queries[(int) $query_id]); + return @mysql_free_result($query_id); + } + + return false; + } + + function sql_escape($msg) { + if (function_exists('mysql_real_escape_string')) { + return @mysql_real_escape_string($msg, $this->db_connect_id); + } else { + return mysql_escape_string($msg); + } + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @mysql_error() . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @mysql_error(), + 'code' => @mysql_errno() + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $db, $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $db->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $explain_query = $query; + if (preg_match('/UPDATE ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + elseif (preg_match('/DELETE FROM ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + + if (preg_match('/^SELECT/', $explain_query)) + { + $html_table = FALSE; + + if ($result = mysql_query("EXPLAIN $explain_query", $this->db_connect_id)) + { + while ($row = mysql_fetch_assoc($result)) + { + if (!$html_table && sizeof($row)) + { + $html_table = TRUE; + $html_hold .= ''; + + foreach (array_keys($row) as $val) + { + $html_hold .= ''; + } + $html_hold .= ''; + } + $html_hold .= ''; + + $class = 'row1'; + foreach (array_values($row) as $val) + { + $class = ($class == 'row1') ? 'row2' : 'row1'; + $html_hold .= ''; + } + $html_hold .= ''; + } + } + + if ($html_table) + { + $html_hold .= '
' . (($val) ? ucwords(str_replace('_', ' ', $val)) : ' ') . '
' . (($val) ? $val : ' ') . '
'; + } + } + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = mysql_query($query, $this->db_connect_id); + while ($void = mysql_fetch_assoc($result)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + mysql_free_result($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - MySQL Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/mysql4.php b/includes/db/mysql4.php new file mode 100644 index 0000000..0639518 --- /dev/null +++ b/includes/db/mysql4.php @@ -0,0 +1,552 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @mysql_pconnect($this->server, $this->user, $sqlpassword) : @mysql_connect($this->server, $this->user, $sqlpassword); + + if ($this->db_connect_id && $this->dbname != '') + { + if (@mysql_select_db($this->dbname)) + { + return $this->db_connect_id; + } + } + + return $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if (sizeof($this->open_queries)) + { + foreach ($this->open_queries as $i_query_id => $query_id) + { + @mysql_free_result($query_id); + } + } + + return @mysql_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @mysql_query('BEGIN', $this->db_connect_id); + $this->transaction = true; + break; + + case 'commit': + $result = @mysql_query('COMMIT', $this->db_connect_id); + $this->transaction = false; + + if (!$result) + { + @mysql_query('ROLLBACK', $this->db_connect_id); + } + break; + + case 'rollback': + $result = @mysql_query('ROLLBACK', $this->db_connect_id); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false) + { + $this->sql_error($query); + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + $cache->sql_save($query, $this->query_result, $cache_ttl); + // mysql_free_result called within sql_save() + } + else if (strpos($query, 'SELECT') !== false && $this->query_result) + { + $this->open_queries[(int) $this->query_result] = $this->query_result; + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) { + if ($query != '') { + $this->query_result = false; + + // only limit the number of rows if $total is greater than 0 + if ($total > 0) + $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); + + return $this->sql_query($query, $cache_ttl); + } else { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysql_num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->db_connect_id) ? @mysql_affected_rows($this->db_connect_id) : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + return ($query_id) ? @mysql_fetch_assoc($query_id) : false; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + + $result = array(); + while ($this->rowset[$query_id] = $this->sql_fetchrow($query_id)) + { + $result[] = $this->rowset[$query_id]; + } + return $result; + } + + return false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { + $result = @mysql_result($query_id, $rownum, $field); + } + else + { + if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) + { + if ($this->sql_fetchrow($query_id)) + { + $result = $this->row[$query_id][$field]; + } + } + else + { + if ($this->rowset[$query_id]) + { + $result = $this->rowset[$query_id][$field]; + } + elseif ($this->row[$query_id]) + { + $result = $this->row[$query_id][$field]; + } + } + } + return $result; + } + return false; + } + + function sql_rowseek($rownum, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysql_data_seek($query_id, $rownum) : false; + } + + function sql_nextid() + { + return ($this->db_connect_id) ? @mysql_insert_id($this->db_connect_id) : false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (isset($this->open_queries[(int) $query_id])) + { + unset($this->open_queries[(int) $query_id]); + return @mysql_free_result($query_id); + } + + return false; + } + + function sql_escape($msg) { + if (function_exists('mysql_real_escape_string')) { + return @mysql_real_escape_string($msg, $this->db_connect_id); + } else { + return mysql_escape_string($msg); + } + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @mysql_error() . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @mysql_error(), + 'code' => @mysql_errno() + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $db, $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $db->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $explain_query = $query; + if (preg_match('/UPDATE ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + elseif (preg_match('/DELETE FROM ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + + if (preg_match('/^SELECT/', $explain_query)) + { + $html_table = FALSE; + + if ($result = mysql_query("EXPLAIN $explain_query", $this->db_connect_id)) + { + while ($row = mysql_fetch_assoc($result)) + { + if (!$html_table && sizeof($row)) + { + $html_table = TRUE; + $html_hold .= ''; + + foreach (array_keys($row) as $val) + { + $html_hold .= ''; + } + $html_hold .= ''; + } + $html_hold .= ''; + + $class = 'row1'; + foreach (array_values($row) as $val) + { + $class = ($class == 'row1') ? 'row2' : 'row1'; + $html_hold .= ''; + } + $html_hold .= ''; + } + } + + if ($html_table) + { + $html_hold .= '
' . (($val) ? ucwords(str_replace('_', ' ', $val)) : ' ') . '
' . (($val) ? $val : ' ') . '
'; + } + } + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = mysql_query($query, $this->db_connect_id); + while ($void = mysql_fetch_assoc($result)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + mysql_free_result($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - MySQL Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/mysqli.php b/includes/db/mysqli.php new file mode 100644 index 0000000..fa643c2 --- /dev/null +++ b/includes/db/mysqli.php @@ -0,0 +1,566 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @mysqli_pconnect($this->server, $this->user, $sqlpassword) : @mysqli_connect($this->server, $this->user, $sqlpassword); + + if ($this->db_connect_id && $this->dbname != '') + { + if (@mysqli_select_db($this->db_connect_id, $this->dbname)) + { + return $this->db_connect_id; + } + } + + return $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if ($this->transaction) + { + @mysqli_commit($this->db_connect_id); + } + + return @mysqli_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @mysqli_autocommit($this->db_connect_id, false); + $this->transaction = true; + break; + + case 'commit': + $result = @mysqli_commit($this->db_connect_id); + @mysqli_autocommit($this->db_connect_id, true); + $this->transaction = false; + + if (!$result) + { + @mysqli_rollback($this->db_connect_id); + @mysqli_autocommit($this->db_connect_id, true); + } + break; + + case 'rollback': + $result = @mysqli_rollback($this->db_connect_id); + @mysqli_autocommit($this->db_connect_id, true); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + + if (($this->query_result = @mysqli_query($this->db_connect_id, $query)) === false) + { + $this->sql_error($query); + } + + if (is_object($this->query_result)) + { + $this->query_result->cur_index = $this->indexed++; + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $cache->sql_save($query, $this->query_result, $cache_ttl); + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) { + if ($query != '') { + $this->query_result = false; + + // only limit the number of rows if $total is greater than 0 + if ($total > 0) + $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); + + return $this->sql_query($query, $cache_ttl); + } else { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysqli_num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->db_connect_id) ? @mysqli_affected_rows($this->db_connect_id) : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (!is_object($query_id) && isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + return ($query_id) ? @mysqli_fetch_assoc($query_id) : false; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + $cur_index = (is_object($query_id)) ? $query_id->cur_index : $query_id; + + unset($this->rowset[$cur_index]); + unset($this->row[$cur_index]); + + $result = array(); + while ($this->rowset[$cur_index] = $this->sql_fetchrow($query_id)) + { + $result[] = $this->rowset[$cur_index]; + } + return $result; + } + + return false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { + @mysqli_data_seek($query_id, $rownum); + $row = @mysqli_fetch_assoc($query_id); + $result = isset($row[$field]) ? $row[$field] : false; + } + else + { + $cur_index = (is_object($query_id)) ? $query_id->cur_index : $query_id; + + if (empty($this->row[$cur_index]) && empty($this->rowset[$cur_index])) + { + if ($this->row[$cur_index] = $this->sql_fetchrow($query_id)) + { + $result = $this->row[$cur_index][$field]; + } + } + else + { + if ($this->rowset[$cur_index]) + { + $result = $this->rowset[$cur_index][$field]; + } + elseif ($this->row[$cur_index]) + { + $result = $this->row[$cur_index][$field]; + } + } + } + return $result; + } + return false; + } + + function sql_rowseek($rownum, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @mysqli_data_seek($query_id, $rownum) : false; + } + + function sql_nextid() + { + return ($this->db_connect_id) ? @mysqli_insert_id($this->db_connect_id) : false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + $cur_index = (is_object($query_id)) ? $query_id->cur_index : $query_id; + + unset($this->rowset[$cur_index]); + unset($this->row[$cur_index]); + + if (is_object($query_id)) + { + $this->indexed--; + return @mysqli_free_result($query_id); + } + else + { + return false; + } + } + + function sql_escape($msg) { + if (function_exists('mysql_real_escape_string')) { + return @mysql_real_escape_string($msg, $this->db_connect_id); + } else { + return mysql_escape_string($msg); + } + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @mysqli_error($this->db_connect_id) . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @mysqli_error($this->db_connect_id), + 'code' => @mysqli_errno($this->db_connect_id) + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $db, $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $db->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $explain_query = $query; + if (preg_match('/UPDATE ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + elseif (preg_match('/DELETE FROM ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m)) + { + $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2]; + } + + if (preg_match('/^SELECT/', $explain_query)) + { + $html_table = FALSE; + + if ($result = @mysqli_query($this->db_connect_id, "EXPLAIN $explain_query")) + { + while ($row = @mysqli_fetch_assoc($result)) + { + if (!$html_table && sizeof($row)) + { + $html_table = TRUE; + $html_hold .= ''; + + foreach (array_keys($row) as $val) + { + $html_hold .= ''; + } + $html_hold .= ''; + } + $html_hold .= ''; + + $class = 'row1'; + foreach (array_values($row) as $val) + { + $class = ($class == 'row1') ? 'row2' : 'row1'; + $html_hold .= ''; + } + $html_hold .= ''; + } + } + + if ($html_table) + { + $html_hold .= '
' . (($val) ? ucwords(str_replace('_', ' ', $val)) : ' ') . '
' . (($val) ? $val : ' ') . '
'; + } + } + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = @mysqli_query($this->db_connect_id, $query); + while ($void = @mysqli_fetch_assoc($result)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + @mysqli_free_result($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - MySQL Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/oracle.php b/includes/db/oracle.php new file mode 100644 index 0000000..7ef10e5 --- /dev/null +++ b/includes/db/oracle.php @@ -0,0 +1,468 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->password = $sqlpassword; + $this->server = $sqlserver; + $this->dbname = $database; + + if($this->persistency) + { + $this->db_connect_id = @OCIPLogon($this->user, $this->password, $this->server); + } + else + { + $this->db_connect_id = @OCINLogon($this->user, $this->password, $this->server); + } + if($this->db_connect_id) + { + return $this->db_connect_id; + } + else + { + return false; + } + } + + // + // Other base methods + // + function sql_close() + { + if($this->db_connect_id) + { + // Commit outstanding transactions + if($this->in_transaction) + { + OCICommit($this->db_connect_id); + } + + if($this->query_result) + { + @OCIFreeStatement($this->query_result); + } + $result = @OCILogoff($this->db_connect_id); + return $result; + } + else + { + return false; + } + } + + // + // Base query method + // + function sql_query($query = "", $transaction = FALSE) + { + // Remove any pre-existing queries + unset($this->query_result); + + // Put us in transaction mode because with Oracle as soon as you make a query you're in a transaction + $this->in_transaction = TRUE; + + if($query != "") + { + $this->last_query = $query; + $this->num_queries++; + + if(eregi("LIMIT", $query)) + { + preg_match("/^(.*)LIMIT ([0-9]+)[, ]*([0-9]+)*/s", $query, $limits); + + $query = $limits[1]; + if($limits[3]) + { + $row_offset = $limits[2]; + $num_rows = $limits[3]; + } + else + { + $row_offset = 0; + $num_rows = $limits[2]; + } + } + + if(eregi("^(INSERT|UPDATE) ", $query)) + { + $query = preg_replace("/\\\'/s", "''", $query); + } + + $this->query_result = @OCIParse($this->db_connect_id, $query); + $success = @OCIExecute($this->query_result, OCI_DEFAULT); + } + if($success) + { + if($transaction == END_TRANSACTION) + { + OCICommit($this->db_connect_id); + $this->in_transaction = FALSE; + } + + unset($this->row[$this->query_result]); + unset($this->rowset[$this->query_result]); + $this->last_query_text[$this->query_result] = $query; + + return $this->query_result; + } + else + { + if($this->in_transaction) + { + OCIRollback($this->db_connect_id); + } + return false; + } + } + + // + // Other query methods + // + function sql_numrows($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @OCIFetchStatement($query_id, $this->rowset); + // OCIFetchStatment kills our query result so we have to execute the statment again + // if we ever want to use the query_id again. + @OCIExecute($query_id, OCI_DEFAULT); + return $result; + } + else + { + return false; + } + } + function sql_affectedrows($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @OCIRowCount($query_id); + return $result; + } + else + { + return false; + } + } + function sql_numfields($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @OCINumCols($query_id); + return $result; + } + else + { + return false; + } + } + function sql_fieldname($offset, $query_id = 0) + { + // OCIColumnName uses a 1 based array so we have to up the offset by 1 in here to maintain + // full abstraction compatibitly + $offset += 1; + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = strtolower(@OCIColumnName($query_id, $offset)); + return $result; + } + else + { + return false; + } + } + function sql_fieldtype($offset, $query_id = 0) + { + // This situation is the same as fieldname + $offset += 1; + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @OCIColumnType($query_id, $offset); + return $result; + } + else + { + return false; + } + } + function sql_fetchrow($query_id = 0, $debug = FALSE) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result_row = ""; + $result = @OCIFetchInto($query_id, $result_row, OCI_ASSOC+OCI_RETURN_NULLS); + if($debug) + { + echo "Query was: ".$this->last_query . "
"; + echo "Result: $result
"; + echo "Query ID: $query_id
"; + echo "
";
+				var_dump($result_row);
+				echo "
"; + } + if($result_row == "") + { + return false; + } + + for($i = 0; $i < count($result_row); $i++) + { + list($key, $val) = each($result_row); + $return_arr[strtolower($key)] = $val; + } + $this->row[$query_id] = $return_arr; + + return $this->row[$query_id]; + } + else + { + return false; + } + } + // This function probably isn't as efficant is it could be but any other way I do it + // I end up losing 1 row... + function sql_fetchrowset($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $rows = @OCIFetchStatement($query_id, $results); + @OCIExecute($query_id, OCI_DEFAULT); + for($i = 0; $i <= $rows; $i++) + { + @OCIFetchInto($query_id, $tmp_result, OCI_ASSOC+OCI_RETURN_NULLS); + + for($j = 0; $j < count($tmp_result); $j++) + { + list($key, $val) = each($tmp_result); + $return_arr[strtolower($key)] = $val; + } + $result[] = $return_arr; + } + return $result; + } + else + { + return false; + } + } + function sql_fetchfield($field, $rownum = -1, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + if($rownum > -1) + { + // Reset the internal rownum pointer. + @OCIExecute($query_id, OCI_DEFAULT); + for($i = 0; $i < $rownum; $i++) + { + // Move the interal pointer to the row we want + @OCIFetch($query_id); + } + // Get the field data. + $result = @OCIResult($query_id, strtoupper($field)); + } + else + { + // The internal pointer should be where we want it + // so we just grab the field out of the current row. + $result = @OCIResult($query_id, strtoupper($field)); + } + return $result; + } + else + { + return false; + } + } + function sql_rowseek($rownum, $query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + @OCIExecute($query_id, OCI_DEFAULT); + for($i = 0; $i < $rownum; $i++) + { + @OCIFetch($query_id); + } + $result = @OCIFetch($query_id); + return $result; + } + else + { + return false; + } + } + function sql_nextid($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id && $this->last_query_text[$query_id] != "") + { + if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename)) + { + $query = "SELECT ".$tablename[2]."_id_seq.currval FROM DUAL"; + $stmt = @OCIParse($this->db_connect_id, $query); + @OCIExecute($stmt,OCI_DEFAULT ); + $temp_result = @OCIFetchInto($stmt, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS); + if($temp_result) + { + return $temp_result['CURRVAL']; + } + else + { + return false; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + function sql_nextid($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id && $this->last_query_text[$query_id] != "") + { + if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename)) + { + $query = "SELECT ".$tablename[2]."_id_seq.CURRVAL FROM DUAL"; + $temp_q_id = @OCIParse($this->db_connect_id, $query); + @OCIExecute($temp_q_id, OCI_DEFAULT); + @OCIFetchInto($temp_q_id, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS); + + if($temp_result) + { + return $temp_result['CURRVAL']; + } + else + { + return false; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + + + function sql_freeresult($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + if($query_id) + { + $result = @OCIFreeStatement($query_id); + return $result; + } + else + { + return false; + } + } + function sql_error($query_id = 0) + { + if(!$query_id) + { + $query_id = $this->query_result; + } + $result = @OCIError($query_id); + return $result; + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/db/postgres.php b/includes/db/postgres.php new file mode 100644 index 0000000..b5bad20 --- /dev/null +++ b/includes/db/postgres.php @@ -0,0 +1,597 @@ +connect_string = ''; + + if ($sqluser) + { + $this->connect_string .= "user=$sqluser "; + } + + if ($sqlpassword) + { + $this->connect_string .= "password=$sqlpassword "; + } + + if ($sqlserver) + { + if (ereg(":", $sqlserver)) + { + list($sqlserver, $sqlport) = split(":", $sqlserver); + $this->connect_string .= "host=$sqlserver port=$sqlport "; + } + else + { + if ($sqlserver != "localhost") + { + $this->connect_string .= "host=$sqlserver "; + } + + if ($port) + { + $this->connect_string .= "port=$port "; + } + } + } + + if ($database) + { + $this->dbname = $database; + $this->connect_string .= "dbname=$database"; + } + + $this->persistency = $persistency; + + $this->db_connect_id = ($this->persistency) ? @pg_pconnect($this->connect_string) : @pg_connect($this->connect_string); + + return ($this->db_connect_id) ? $this->db_connect_id : $this->sql_error(''); + } + + // + // Other base methods + // + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + if ($this->transaction) + { + @pg_exec($this->db_connect_id, 'COMMIT'); + } + + return @pg_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $result = @pg_exec($this->db_connect_id, 'BEGIN'); + $this->transaction = true; + break; + + case 'commit': + $result = @pg_exec($this->db_connect_id, 'COMMIT'); + $this->transaction = false; + + if (!$result) + { + @pg_exec($this->db_connect_id, 'ROLLBACK'); + } + break; + + case 'rollback': + $result = @pg_exec($this->db_connect_id, 'ROLLBACK'); + $this->transaction = false; + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $cache_ttl = 0) + { + if ($query != '') + { + global $cache; + + // EXPLAIN only in extra debug mode + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('start', $query); + } + + $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + + if (!$this->query_result) + { + $this->num_queries++; + $this->last_query_text = $query; + + if (($this->query_result = @pg_exec($this->db_connect_id, $query)) === false) + { + $this->sql_error($query); + } + + if (defined('DEBUG_EXTRA')) + { + $this->sql_report('stop', $query); + } + + if ($cache_ttl && method_exists($cache, 'sql_save')) + { + $cache->sql_save($query, $this->query_result, $cache_ttl); + } + } + else if (defined('DEBUG_EXTRA')) + { + $this->sql_report('fromcache', $query); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) + { + if ($query != '') + { + $this->query_result = false; + + // if $total is set to 0 we do not want to limit the number of rows + if ($total == 0) + { + $total = -1; + } + + $query .= "\n LIMIT $total OFFSET $offset"; + + return $this->sql_query($query, $cache_ttl); + } + else + { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE' || $query == 'SELECT') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(($query == 'UPDATE') ? ', ' : ' AND ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @pg_numrows($query_id) : false; + } + + function sql_affectedrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @pg_cmdtuples($query_id) : false; + } + + function sql_fetchrow($query_id = false) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if (!isset($this->rownum[$query_id])) + { + $this->rownum[$query_id] = 0; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_fetchrow($query_id); + } + + $result = @pg_fetch_array($query_id, NULL, PGSQL_ASSOC); + + if ($result) + { + $this->rownum[$query_id]++; + } + + return $result; + } + + function sql_fetchrowset($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + $result = array(); + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + + $result = array(); + while ($this->rowset[$query_id] = $this->sql_fetchrow($query_id)) + { + $result[] = $this->rowset[$query_id]; + } + return $result; + } + + return false; + } + + function sql_fetchfield($field, $rownum = -1, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($rownum > -1) + { + if (@function_exists('pg_result_seek')) + { + @pg_result_seek($query_id, $rownum); + $row = @pg_fetch_assoc($query_id); + $result = isset($row[$field]) ? $row[$field] : false; + } + else + { + $this->sql_rowseek($offset, $query_id); + $row = $this->sql_fetchrow($query_id); + $result = isset($row[$field]) ? $row[$field] : false; + } + } + else + { + if (empty($this->row[$query_id]) && empty($this->rowset[$query_id])) + { + if ($this->sql_fetchrow($query_id)) + { + $result = $this->row[$query_id][$field]; + } + } + else + { + if ($this->rowset[$query_id]) + { + $result = $this->rowset[$query_id][$field]; + } + elseif ($this->row[$query_id]) + { + $result = $this->row[$query_id][$field]; + } + } + } + return $result; + } + return false; + } + + function sql_rowseek($offset, $query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + if ($offset > -1) + { + if (@function_exists('pg_result_seek')) + { + @pg_result_seek($query_id, $rownum); + } + else + { + for ($i = $this->rownum[$query_id]; $i < $offset; $i++) + { + $this->sql_fetchrow($query_id); + } + } + return true; + } + else + { + return false; + } + } + + return false; + } + + function sql_nextid() + { + $query_id = $this->query_result; + + if ($query_id && $this->last_query_text != '') + { + if (preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is", $this->last_query_text, $tablename)) + { + $query = "SELECT currval('" . $tablename[1] . "_id_seq') AS last_value"; + $temp_q_id = @pg_exec($this->db_connect_id, $query); + if (!$temp_q_id) + { + return false; + } + + $temp_result = @pg_fetch_array($temp_q_id, NULL, PGSQL_ASSOC); + + return ($temp_result) ? $temp_result['last_value'] : false; + } + } + + return false; + } + + function sql_freeresult($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return (is_resource($query_id)) ? @pg_freeresult($query_id) : false; + } + + function sql_escape($msg) + { + return str_replace("'", "''", str_replace('\\', '\\\\', $msg)); + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (isset($_SERVER['PHP_SELF']) && !empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : (isset($_ENV['QUERY_STRING']) ? $_ENV['QUERY_STRING'] : '')); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @pg_errormessage() . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @pg_errormessage(), + 'code' => '' + ); + + return $result; + } + + function sql_report($mode, $query = '') + { + if (empty($_GET['explain'])) + { + return; + } + + global $cache, $starttime, $phpbb_root_path; + static $curtime, $query_hold, $html_hold; + static $sql_report = ''; + static $cache_num_queries = 0; + + if (!$query && !empty($query_hold)) + { + $query = $query_hold; + } + + switch ($mode) + { + case 'display': + if (!empty($cache)) + { + $cache->unload(); + } + $this->sql_close(); + + $mtime = explode(' ', microtime()); + $totaltime = $mtime[0] + $mtime[1] - $starttime; + + echo '' . $msg_title . ''; + echo '
phpBB LogoSQL Report      

Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($cache_num_queries) ? " + $cache_num_queries " . (($cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '
Time spent on MySQL queries: ' . round($this->sql_time, 5) . 's | Time spent on PHP: ' . round($totaltime - $this->sql_time, 5) . 's
'; + echo $sql_report; + echo '

'; + exit; + break; + + case 'start': + $query_hold = $query; + $html_hold = ''; + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1]; + break; + + case 'fromcache': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $result = @pg_exec($this->db_connect_id, $query); + while ($void = @pg_fetch_array($result, NULL, PGSQL_ASSOC)) + { + // Take the time spent on parsing rows into account + } + $splittime = explode(' ', microtime()); + $splittime = $splittime[0] + $splittime[1]; + + $time_cache = $endtime - $curtime; + $time_db = $splittime - $endtime; + $color = ($time_db > $time_cache) ? 'green' : 'red'; + + $sql_report .= '

Query results obtained from the cache

'; + + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: ' . sprintf('%.5f', ($time_cache)) . 's | Elapsed [db]: ' . sprintf('%.5f', $time_db) . 's

'; + + // Pad the start time to not interfere with page timing + $starttime += $time_db; + + @pg_freeresult($result); + $cache_num_queries++; + break; + + case 'stop': + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1]; + + $sql_report .= '

Query #' . $this->num_queries . '
' . $html_hold . '

'; + + if ($this->query_result) + { + if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query)) + { + $sql_report .= "Affected rows: " . $this->sql_affectedrows($this->query_result) . ' | '; + } + $sql_report .= 'Before: ' . sprintf('%.5f', $curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: ' . sprintf('%.5f', $endtime - $curtime) . 's'; + } + else + { + $error = $this->sql_error(); + $sql_report .= 'FAILED - ' . SQL_LAYER . ' Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']); + } + + $sql_report .= '

'; + + $this->sql_time += $endtime - $curtime; + break; + } + } + +} // class ... db_sql + +} // if ... defined + +?> \ No newline at end of file diff --git a/includes/db/sqlite.php b/includes/db/sqlite.php new file mode 100644 index 0000000..1591396 --- /dev/null +++ b/includes/db/sqlite.php @@ -0,0 +1,387 @@ +persistency = $persistency; + $this->user = $sqluser; + $this->server = $sqlserver . (($port) ? ':' . $port : ''); + $this->dbname = $database; + + $this->db_connect_id = ($this->persistency) ? @sqlite_popen($this->server, 0, $error) : @sqlite_open($this->server, 0, $error); + + return ($this->db_connect_id) ? true : $error; + } + + // Other base methods + function sql_close() + { + if (!$this->db_connect_id) + { + return false; + } + + return @sqlite_close($this->db_connect_id); + } + + function sql_return_on_error($fail = false) + { + $this->return_on_error = $fail; + } + + function sql_num_queries() + { + return $this->num_queries; + } + + function sql_transaction($status = 'begin') + { + switch ($status) + { + case 'begin': + $this->transaction = true; + $result = @sqlite_query('BEGIN', $this->db_connect_id); + break; + + case 'commit': + $this->transaction = false; + $result = @sqlite_query('COMMIT', $this->db_connect_id); + break; + + case 'rollback': + $this->transaction = false; + $result = @sqlite_query('ROLLBACK', $this->db_connect_id); + break; + + default: + $result = true; + } + + return $result; + } + + // Base query method + function sql_query($query = '', $expire_time = 0) + { + if ($query != '') + { + global $cache; + + $query = preg_replace('#FROM \((.*?)\)(,|[\n\t ]+?WHERE) #s', 'FROM \1\2 ', $query); + + if (!$expire_time || !$cache->sql_load($query, $expire_time)) + { + if ($expire_time) + { + $cache_result = true; + } + + $this->query_result = false; + $this->num_queries++; + + if (!empty($_GET['explain'])) + { + global $starttime; + + $curtime = explode(' ', microtime()); + $curtime = $curtime[0] + $curtime[1] - $starttime; + } + + if (!($this->query_result = @sqlite_query($query, $this->db_connect_id))) + { + $this->sql_error($query); + } + + if (!empty($_GET['explain'])) + { + $endtime = explode(' ', microtime()); + $endtime = $endtime[0] + $endtime[1] - $starttime; + + $this->sql_report .= "
Query:\t" . htmlspecialchars(preg_replace('/[\s]*[\n\r\t]+[\n\r\s\t]*/', "\n\t", $query)) . "\n\n";
+
+					if ($this->query_result)
+					{
+						$this->sql_report .= "Time before:  $curtime\nTime after:   $endtime\nElapsed time: " . ($endtime - $curtime) . "\n
"; + } + else + { + $error = $this->sql_error(); + $this->sql_report .= 'FAILED - SQLite ' . $error['code'] . ': ' . htmlspecialchars($error['message']) . '

';
+					}
+
+					$this->sql_time += $endtime - $curtime;
+
+					if (preg_match('#^SELECT#', $query))
+					{
+						$html_table = FALSE;
+						if ($result = @sqlite_query("EXPLAIN $query", $this->db_connect_id))
+						{
+							while ($row = @sqlite_fetch_array($result, @sqlite_ASSOC))
+							{
+								if (!$html_table && sizeof($row))
+								{
+									$html_table = TRUE;
+									$this->sql_report .= "\n";
+									$this->sql_report .= "\n\n\n\n";
+								}
+								$this->sql_report .= "\n\n\n\n";
+							}
+						}
+
+						if ($html_table)
+						{
+							$this->sql_report .= '
" . implode("", array_keys($row)) . "
" . implode(" ", array_values($row)) . " 

'; + } + } + + $this->sql_report .= "
\n"; + } + + if (preg_match('#^SELECT#', $query)) + { + $this->open_queries[] = $this->query_result; + } + } + + if (!empty($cache_result)) + { + $cache->sql_save($query, $this->query_result); + } + } + else + { + return false; + } + + return ($this->query_result) ? $this->query_result : false; + } + + function sql_query_limit($query, $total, $offset = 0, $expire_time = 0) + { + if ($query != '') + { + $this->query_result = false; + + $query .= ' LIMIT ' . ((!empty($offset)) ? $total . ' OFFSET ' . $offset : $total); + + return $this->sql_query($query, $expire_time); + } + else + { + return false; + } + } + + // Idea for this from Ikonboard + function sql_build_array($query, $assoc_ary = false) + { + if (!is_array($assoc_ary)) + { + return false; + } + + $fields = array(); + $values = array(); + if ($query == 'INSERT') + { + foreach ($assoc_ary as $key => $var) + { + $fields[] = $key; + + if (is_null($var)) + { + $values[] = 'NULL'; + } + elseif (is_string($var)) + { + $values[] = "'" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? intval($var) : $var; + } + } + + $query = ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'; + } + else if ($query == 'UPDATE') + { + $values = array(); + foreach ($assoc_ary as $key => $var) + { + if (is_null($var)) + { + $values[] = "$key = NULL"; + } + elseif (is_string($var)) + { + $values[] = "$key = '" . $this->sql_escape($var) . "'"; + } + else + { + $values[] = (is_bool($var)) ? "$key = " . intval($var) : "$key = $var"; + } + } + $query = implode(', ', $values); + } + + return $query; + } + + // Other query methods + // + // NOTE :: Want to remove _ALL_ reliance on sql_numrows from core code ... + // don't want this here by a middle Milestone + function sql_numrows($query_id = false) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @sqlite_num_rows($query_id) : false; + } + + function sql_affectedrows() + { + return ($this->db_connect_id) ? @sqlite_changes($this->db_connect_id) : false; + } + + function sql_fetchrow($query_id = 0) + { + global $cache; + + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($cache->sql_exists($query_id)) + { + return $cache->sql_fetchrow($query_id); + } + + return ($query_id) ? @sqlite_fetch_array($query_id, @sqlite_ASSOC) : false; + } + + function sql_fetchrowset($query_id = 0) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + unset($this->rowset[$query_id]); + unset($this->row[$query_id]); + while ($this->rowset[$query_id] = @sqlite_fetch_array($query_id, @sqlite_ASSOC)) + { + $result[] = $this->rowset[$query_id]; + } + return $result; + } + else + { + return false; + } + } + + function sql_fetchfield($field, $rownum = -1, $query_id = 0) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + if ($query_id) + { + return ($rownum > -1) ? ((@sqlite_seek($query_id, $rownum)) ? @sqlite_column($query_id, $field) : false) : @sqlite_column($query_id, $field); + } + } + + function sql_rowseek($rownum, $query_id = 0) + { + if (!$query_id) + { + $query_id = $this->query_result; + } + + return ($query_id) ? @sqlite_seek($query_id, $rownum) : false; + } + + function sql_nextid() + { + return ($this->db_connect_id) ? @sqlite_last_insert_rowid($this->db_connect_id) : false; + } + + function sql_freeresult($query_id = false) + { + return true; + } + + function sql_escape($msg) + { + return @sqlite_escape_string(stripslashes($msg)); + } + + function sql_error($sql = '') + { + if (!$this->return_on_error) + { + $this_page = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF']; + $this_page .= '&' . ((!empty($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : $_ENV['QUERY_STRING']); + + $message = 'SQL ERROR [ ' . SQL_LAYER . ' ]

' . @sqlite_error_string(@sqlite_last_error($this->db_connect_id)) . '

CALLING PAGE

' . htmlspecialchars($this_page) . (($sql != '') ? '

SQL

' . $sql : '') . '
'; + + if ($this->transaction) + { + $this->sql_transaction('rollback'); + } + + trigger_error($message, E_USER_ERROR); + } + + $result = array( + 'message' => @sqlite_error_string(@sqlite_last_error($this->db_connect_id)), + 'code' => @sqlite_last_error($this->db_connect_id) + ); + + return $result; + } + +} // class sql_db + +} // if ... define + +?> \ No newline at end of file diff --git a/includes/php-gettext/AUTHORS b/includes/php-gettext/AUTHORS new file mode 100644 index 0000000..da6ade7 --- /dev/null +++ b/includes/php-gettext/AUTHORS @@ -0,0 +1,3 @@ +Danilo Segan +Nico Kaiser (contributed most changes between 1.0.2 and 1.0.3, bugfix for 1.0.5) +Steven Armstrong (gettext.inc, leading to 1.0.6) diff --git a/includes/php-gettext/COPYING b/includes/php-gettext/COPYING new file mode 100644 index 0000000..5b6e7c6 --- /dev/null +++ b/includes/php-gettext/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/includes/php-gettext/ChangeLog b/includes/php-gettext/ChangeLog new file mode 100644 index 0000000..5e0949d --- /dev/null +++ b/includes/php-gettext/ChangeLog @@ -0,0 +1,144 @@ +2006-02-07 Danilo Šegan + + * examples/pigs_dropin.php: comment-out bind_textdomain_codeset + + * gettext.inc (T_bind_textdomain_codeset): bind_textdomain_codeset + is available only in PHP 4.2.0+ (thanks to Jens A. Tkotz). + + * Makefile: Include gettext.inc in DIST_FILES, VERSION up to + 1.0.7. + +2006-02-03 Danilo Šegan + + Added setlocale() emulation as well. + + * examples/pigs_dropin.php: Use T_setlocale() and locale_emulation(). + * examples/pigs_fallback.php: Use T_setlocale() and locale_emulation(). + + * gettext.inc: Added globals $EMULATEGETTEXT and $CURRENTLOCALE. + (locale_emulation): Whether emulation is active. + (_check_locale): Rewrite. + (_setlocale): Added emulated setlocale function. + (T_setlocale): Wrapper around _setlocale. + (_get_reader): Use variables and _setlocale. + +2006-02-02 Danilo Šegan + + Fix bug #12192. + + * examples/locale/sr_CS/LC_MESSAGES/messages.po: Correct grammar. + * examples/locale/sr_CS/LC_MESSAGES/messages.mo: Rebuild. + +2006-02-02 Danilo Šegan + + Fix bug #15419. + + * streams.php: Support for PHP 5.1.1 fread() which reads most 8kb. + (Fix by Piotr Szotkowski ) + +2006-02-02 Danilo Šegan + + Merge Steven Armstrong's changes, supporting standard gettext + interfaces: + + * examples/*: Restructured examples. + * gettext.inc: Added. + * AUTHORS: Added Steven. + * Makefile (VERSION): Up to 1.0.6. + +2006-01-28 Nico Kaiser + + * gettext.php (select_string): Fix "true" <-> 1 difference of PHP + +2005-07-29 Danilo Šegan + + * Makefile (VERSION): Up to 1.0.5. + +2005-07-29 Danilo Šegan + + Fixes bug #13850. + + * gettext.php (gettext_reader): check $Reader->error as well. + +2005-07-29 Danilo Šegan + + * Makefile (VERSION): Up to 1.0.4. + +2005-07-29 Danilo Šegan + + Fixes bug #13771. + + * gettext.php (gettext_reader->get_plural_forms): Plural forms + header extraction regex change. Reported by Edgar Gonzales. + +2005-02-28 Danilo Šegan + + * AUTHORS: Added Nico to the list. + + * Makefile (VERSION): Up to 1.0.3. + + * README: Updated. + +2005-02-28 Danilo Šegan + + * gettext.php: Added pre-loading, code documentation, and many + code clean-ups by Nico Kaiser . + +2005-02-28 Danilo Šegan + + * streams.php (FileReader.read): Handle read($bytes = 0). + + * examples/pigs.php: Prefix gettext function names with T or T_. + + * examples/update: Use the same keywords T_ and T_ngettext. + + * streams.php: Added CachedFileReader. + +2003-11-11 Danilo Šegan + + * gettext.php: Added hashing to find_string. + +2003-11-01 Danilo Šegan + + * Makefile (DIST_FILES): Replaced LICENSE with COPYING. + (VERSION): Up to 1.0.2. + + * AUTHORS: Minor edits. + + * README: Minor edits. + + * COPYING: Removed LICENSE, added this file. + + * gettext.php: Added copyright notice and disclaimer. + * streams.php: Same. + * examples/pigs.php: Same. + +2003-10-23 Danilo Šegan + + * Makefile: Upped version to 1.0.1. + + * gettext.php (gettext_reader): Remove a call to set_total_plurals. + (set_total_plurals): Removed unused function for some better days. + +2003-10-23 Danilo Šegan + + * Makefile: Added, version 1.0.0. + + * examples/*: Added an example of usage. + + * README: Described all the crap. + +2003-10-22 Danilo Šegan + + * gettext.php: Plural forms implemented too. + + * streams.php: Added FileReader for direct access to files (no + need to keep file in memory). + + * gettext.php: It works, except for plural forms. + + * streams.php: Created abstract class StreamReader. + Added StringReader class. + + * gettext.php: Started writing gettext_reader. + diff --git a/includes/php-gettext/Makefile b/includes/php-gettext/Makefile new file mode 100644 index 0000000..2dba911 --- /dev/null +++ b/includes/php-gettext/Makefile @@ -0,0 +1,32 @@ +PACKAGE = php-gettext-$(VERSION) +VERSION = 1.0.7 + +DIST_FILES = \ + gettext.php \ + gettext.inc \ + streams.php \ + AUTHORS \ + ChangeLog \ + README \ + COPYING \ + Makefile \ + examples/index.php \ + examples/pigs_dropin.php \ + examples/pigs_fallback.php \ + examples/locale/sr_CS/LC_MESSAGES/messages.po \ + examples/locale/sr_CS/LC_MESSAGES/messages.mo \ + examples/locale/de_CH/LC_MESSAGES/messages.po \ + examples/locale/de_CH/LC_MESSAGES/messages.mo \ + examples/update + +dist: + if [ -d $(PACKAGE) ]; then \ + rm -rf $(PACKAGE); \ + fi; \ + mkdir $(PACKAGE); \ + if [ -d $(PACKAGE) ]; then \ + cp -rp --parents $(DIST_FILES) $(PACKAGE); \ + tar cvzf $(PACKAGE).tar.gz $(PACKAGE); \ + rm -rf $(PACKAGE); \ + fi; + diff --git a/includes/php-gettext/README b/includes/php-gettext/README new file mode 100644 index 0000000..c7525e2 --- /dev/null +++ b/includes/php-gettext/README @@ -0,0 +1,189 @@ +PHP-gettext 1.0 + +Copyright 2003, 2006 -- Danilo "angry with PHP[1]" Segan +Licensed under GPLv2 (or any later version, see COPYING) + +[1] PHP is actually cyrillic, and translates roughly to + "works-doesn't-work" (UTF-8: Ради-Не-Ради) + + +Introduction + + How many times did you look for a good translation tool, and + found out that gettext is best for the job? Many times. + + How many times did you try to use gettext in PHP, but failed + miserably, because either your hosting provider didn't support + it, or the server didn't have adequate locale? Many times. + + Well, this is a solution to your needs. It allows using gettext + tools for managing translations, yet it doesn't require gettext + library at all. It parses generated MO files directly, and thus + might be a bit slower than the (maybe provided) gettext library. + + PHP-gettext is a simple reader for GNU gettext MO files. Those + are binary containers for translations, produced by GNU msgfmt. + +Why? + + I got used to having gettext work even without gettext + library. It's there in my favourite language Python, so I was + surprised that I couldn't find it in PHP. I even Googled for it, + but to no avail. + + So, I said, what the heck, I'm going to write it for this + disguisting language of PHP, because I'm often constrained to it. + +Features + + o Support for simple translations + Just define a simple alias for translate() function (suggested + use of _() or gettext(); see provided example). + + o Support for ngettext calls (plural forms, see a note under bugs) + You may also use plural forms. Translations in MO files need to + provide this, and they must also provide "plural-forms" header. + Please see 'info gettext' for more details. + + o Support for reading straight files, or strings (!!!) + Since I can imagine many different backends for reading in the MO + file data, I used imaginary abstract class StreamReader to do all + the input (check streams.php). For your convenience, I've already + provided two classes for reading files: FileReader and + StringReader (CachedFileReader is a combination of the two: it + loads entire file contents into a string, and then works on that). + See example below for usage. You can for instance use StringReader + when you read in data from a database, or you can create your own + derivative of StreamReader for anything you like. + + +Bugs + + Plural-forms field in MO header (translation for empty string, + i.e. "") is treated according to PHP syntactic rules (it's + eval()ed). Since these should actually follow C syntax, there are + some problems. + + For instance, I'm used to using this: + 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; + but it fails with PHP (it sets $plural=2 instead of 0 for $n==1). + + The fix is usually simple, but I'm lazy to go into the details of + PHP operator precedence, and maybe try to fix it. In here, I had + to put everything after the first ':' in parenthesis: + 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); + That works, and I'm satisfied. + + Besides this one, there are probably a bunch of other bugs, since + I hate PHP (did I mention it already? no? strange), and don't + know it very well. So, feel free to fix any of those and report + them back to me at . + +Usage + + Put files streams.php and gettext.php somewhere you can load them + from, and require 'em in where you want to use them. + + Then, create one 'stream reader' (a class that provides functions + like read(), seekto(), currentpos() and length()) which will + provide data for the 'gettext_reader', with eg. + $streamer = new FileStream('data.mo'); + + Then, use that as a parameter to gettext_reader constructor: + $wohoo = new gettext_reader($streamer); + + If you want to disable pre-loading of entire message catalog in + memory (if, for example, you have a multi-thousand message catalog + which you'll use only occasionally), use "false" for second + parameter to gettext_reader constructor: + $wohoo = new gettext_reader($streamer, false); + + From now on, you have all the benefits of gettext data at your + disposal, so may run: + print $wohoo->translate("This is a test"); + print $wohoo->ngettext("%d bird", "%d birds", $birds); + + You might need to pass parameter "-k" to xgettext to make it + extract all the strings. In above example, try with + xgettext -ktranslate -kngettext:1,2 file.php + what should create messages.po which contains two messages for + translation. + + I suggest creating simple aliases for these functions (see + example/pigs.php for how do I do it, which means it's probably a + bad way). + + +Usage with gettext.inc (standard gettext interfaces emulation) + + Check example in examples/pig_dropin.php, basically you include + gettext.inc and use all the standard gettext interfaces as + documented on: + + http://www.php.net/gettext + + The only catch is that you can check return value of setlocale() + to see if your locale is system supported or not. + + +Example + + See in examples/ subdirectory. There are a couple of files. + pigs.php is an example, serbian.po is a translation to Serbian + language, and serbian.mo is generated with + msgfmt -o serbian.mo serbian.po + There is also simple "update" script that can be used to generate + POT file and to update the translation using msgmerge. + +Interesting TODO: + + o Try to parse "plural-forms" header field, and to follow C syntax + rules. This won't be easy. + +Boring TODO: + + o Learn PHP and fix bugs, slowness and other stuff resulting from + my lack of knowledge (but *maybe*, it's not my knowledge that is + bad, but PHP itself ;-). + + (This is mostly done thanks to Nico Kaiser.) + + o Try to use hash tables in MO files: with pre-loading, would it + be useful at all? + +Never-asked-questions: + + o Why did you mark this as version 1.0 when this is the first code + release? + + Well, it's quite simple. I consider that the first released thing + should be labeled "version 1" (first, right?). Zero is there to + indicate that there's zero improvement and/or change compared to + "version 1". + + I plan to use version numbers 1.0.* for small bugfixes, and to + release 1.1 as "first stable release of version 1". + + This may trick someone that this is actually useful software, but + as with any other free software, I take NO RESPONSIBILITY for + creating such a masterpiece that will smoke crack, trash your + hard disk, and make lasers in your CD device dance to the tune of + Mozart's 40th Symphony (there is one like that, right?). + + o Can I...? + + Yes, you can. This is free software (as in freedom, free speech), + and you might do whatever you wish with it, provided you do not + limit freedom of others (GPL). + + I'm considering licensing this under LGPL, but I *do* want + *every* PHP-gettext user to contribute and respect ideas of free + software, so don't count on it happening anytime soon. + + I'm sorry that I'm taking away your freedom of taking others' + freedom away, but I believe that's neglible as compared to what + freedoms you could take away. ;-) + + Uhm, whatever. diff --git a/includes/php-gettext/bin/gettexts.bat b/includes/php-gettext/bin/gettexts.bat new file mode 100644 index 0000000..212ffce --- /dev/null +++ b/includes/php-gettext/bin/gettexts.bat @@ -0,0 +1,20 @@ +@echo off +xgettext -kT_ngettext:1,2 -kT_ -L PHP -o ..\..\..\locales\messages.po ..\..\..\*.php ..\..\..\services\*.php ..\..\..\templates\*.php +if /i "%1" == "-p" goto stats +if exist "..\..\..\locales\%1.po" goto merge +echo "Usage: $0 [-p|]" +goto end + +:stats +msgfmt --statistics ..\..\..\locales\messages.po +goto end + +:merge +msgmerge -o ..\..\..\locales\tmp%1.po ..\..\..\locales\%1.po ..\..\..\locales\messages.po +if exist "..\..\..\locales\%1.po" rename ..\..\..\locales\%1.po %1.po.bak +rename ..\..\..\locales\tmp%1.po %1.po +if exist "..\..\..\locales\%1.po.bak" del ..\..\..\locales\%1.po.bak +msgfmt --statistics "..\..\..\locales\%1.po" + +:end +echo Finished \ No newline at end of file diff --git a/includes/php-gettext/examples/index.php b/includes/php-gettext/examples/index.php new file mode 100644 index 0000000..263cd3d --- /dev/null +++ b/includes/php-gettext/examples/index.php @@ -0,0 +1,27 @@ + + +PHP-gettext examples + + +

PHP-gettext

+ +

Introduction

+

PHP-gettext provides a simple gettext replacement that works independently from the system's gettext abilities. +It can read MO files and use them for translating strings.

+

This version has the ability to cache all strings and translations to speed up the string lookup. +While the cache is enabled by default, it can be switched off with the second parameter in the constructor (e.g. when using very large MO files +that you don't want to keep in memory)

+ + +

Examples

+ + +
+

Copyright (c) 2003-2006 Danilo Segan

+

Copyright (c) 2005-2006 Steven Armstrong

+ + + diff --git a/includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.mo b/includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..91930376c54ef58d1650467fc5b15d9d1b03116d GIT binary patch literal 585 zcmZvZ+e!m55Qf*&&0cz~FgJoCsk?2JvK|oYfkKO7w_cm>j@f9Nlw@kv_Yiy%AIFFA z37lPpDmdgLv-AH+W|NQA<=22?iCJTs%nH+G%D83r7|E)9>)VS# zz-bknR#EO5Y~(P}3T9{s$O07zW9c4{!XL^1tEGkZz@xCUYKoV~}4 zL?;(F=)ATjDNpg?HBPJ}(ep~@;$*74NNob))nzK$4kfWuoJzt3>QU4XaU|*uh?>c6 zv>kDUjp7;~b-CjoUo4^+>W!qyzL~llS&Q0&O{ThGZ{&3_8}{z z^GJt-^jx&&zOuPHbmGipHrGZa&>HIRTkmJZ47CBpWq6s6p~o-sN5V=&^IIL59J~dE S1wpP6F3@L%&I-cvNxlF~0Hja= literal 0 HcmV?d00001 diff --git a/includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.po b/includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.po new file mode 100644 index 0000000..6e4886b --- /dev/null +++ b/includes/php-gettext/examples/locale/de_CH/LC_MESSAGES/messages.po @@ -0,0 +1,30 @@ +# Sample translation for PHP-gettext 1.0 +# Copyright (c) 2003 Danilo Segan +# +msgid "" +msgstr "" +"Project-Id-Version: pigs\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2003-10-23 04:50+0200\n" +"PO-Revision-Date: 2003-11-01 23:40+0100\n" +"Last-Translator: Danilo Segan \n" +"Language-Team: Serbian (sr) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +#"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: pigs.php:19 +msgid "" +"This is how the story goes.\n" +"\n" +msgstr "" +"Und so geht die Geschichte.\n" +"\n" + +#: pigs.php:21 +#, php-format +msgid "%d pig went to the market\n" +msgid_plural "%d pigs went to the market\n" +msgstr[0] "%d Schwein ging zum Markt\n" +msgstr[1] "%d Schweine gingen zum Markt\n" diff --git a/includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.mo b/includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..6ffccfd52d91a1db0870a94d12472e104f9c6b2b GIT binary patch literal 834 zcmah{%We}f6dhihS#}NLg4C)}<=~lwsG4L7q7SK3Bcd{}#!bv*+Qg1*r=?OC6vX2P zkRl=R4H3_XNBITM5AZEqPpHyG5m!EA-+Rxo&v@qd+~v0(#wEm6L=|xbv4wE)7*Rto z#5KeS@$rJ^eZl!FV)vrwUB~$*Zh++?uvCQG)0^+WAWPwZ3j;=i>2l~Zwa1PBx24bR zCEZK|j;=f?G}=gY2&v?{?E79z$z9$yWV1saaiudUB6o`RxA{OSLz+6xI^^Ck)g+M- z_^ta1Syh}FWRf*zcmyG(6%tSqR)AKc+jNOy1&L&v?`Lku8LviYhy%hPqO~O&Aa9Fl zLlVV=?lE*0!5R};Pr?J9G69WFk=@5!$IB%Jjl939arjrG0kEzAJ8}sU||8=lHQ1e0PX;V2o_yoB@Rz}jkxNT zMVU4N3P(p%4RUA+MFEP!QoZ=v_Jr%F_eAwSMvoK+*?-|9*Ja;Bf;@0|Ysr`z}T1KR%PY)|Yb=hk_c=G literal 0 HcmV?d00001 diff --git a/includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.po b/includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.po new file mode 100644 index 0000000..7e620cc --- /dev/null +++ b/includes/php-gettext/examples/locale/sr_CS/LC_MESSAGES/messages.po @@ -0,0 +1,29 @@ +# Sample translation for PHP-gettext 1.0 +# Copyright (c) 2003,2006 Danilo Segan +# +msgid "" +msgstr "" +"Project-Id-Version: pigs\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2003-10-23 04:50+0200\n" +"PO-Revision-Date: 2006-02-02 21:06+0100\n" +"Last-Translator: Danilo Segan \n" +"Language-Team: Serbian (sr) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\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" + +#: pigs.php:19 +msgid "" +"This is how the story goes.\n" +"\n" +msgstr "Овако иде прича.\n\n" + +#: pigs.php:21 +#, php-format +msgid "%d pig went to the market\n" +msgid_plural "%d pigs went to the market\n" +msgstr[0] "%d мало прасе је отишло на пијац\n" +msgstr[1] "%d мала прасета су отишла на пијац\n" +msgstr[2] "%d малих прасића је отишло на пијац\n" diff --git a/includes/php-gettext/examples/pigs_dropin.php b/includes/php-gettext/examples/pigs_dropin.php new file mode 100644 index 0000000..edd2b0d --- /dev/null +++ b/includes/php-gettext/examples/pigs_dropin.php @@ -0,0 +1,87 @@ +. + Copyright (c) 2005,2006 Steven Armstrong + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +// define constants +define(PROJECT_DIR, realpath('./')); +define(LOCALE_DIR, PROJECT_DIR .'/locale'); +define(DEFAULT_LOCALE, 'en_US'); + +require_once('../gettext.inc'); + +$supported_locales = array('en_US', 'sr_CS', 'de_CH'); +$encoding = 'UTF-8'; + +$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE; + +// gettext setup +T_setlocale(LC_MESSAGES, $locale); +// Set the text domain as 'messages' +$domain = 'messages'; +bindtextdomain($domain, LOCALE_DIR); +// bind_textdomain_codeset is supported only in PHP 4.2.0+ +if (function_exists('bind_textdomain_codeset')) + bind_textdomain_codeset($domain, $encoding); +textdomain($domain); + +header("Content-type: text/html; charset=$encoding"); +?> + + +PHP-gettext dropin example + + +

PHP-gettext as a dropin replacement

+

Example showing how to use PHP-gettext as a dropin replacement for the native gettext library.

+"; +foreach($supported_locales as $l) { + print "[$l] "; +} +print "

\n"; + +if (!locale_emulation()) { + print "

locale '$locale' is supported by your system, using native gettext implementation.

\n"; +} +else { + print "

locale '$locale' is _not_ supported on your system, using the default locale '". DEFAULT_LOCALE ."'.

\n"; +} +?> + +
+ +"; +print _("This is how the story goes.\n\n"); +for ($number=6; $number>=0; $number--) { + print sprintf(T_ngettext("%d pig went to the market\n", + "%d pigs went to the market\n", $number), + $number ); +} +print "
\n"; +?> + +
+

« back

+ + diff --git a/includes/php-gettext/examples/pigs_fallback.php b/includes/php-gettext/examples/pigs_fallback.php new file mode 100644 index 0000000..b50f752 --- /dev/null +++ b/includes/php-gettext/examples/pigs_fallback.php @@ -0,0 +1,86 @@ +. + Copyright (c) 2005,2006 Steven Armstrong + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +// define constants +define(PROJECT_DIR, realpath('./')); +define(LOCALE_DIR, PROJECT_DIR .'/locale'); +define(DEFAULT_LOCALE, 'en_US'); + +require_once('../gettext.inc'); + +$supported_locales = array('en_US', 'sr_CS', 'de_CH'); +$encoding = 'UTF-8'; + +$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE; + +// gettext setup +T_setlocale(LC_MESSAGES, $locale); +// Set the text domain as 'messages' +$domain = 'messages'; +T_bindtextdomain($domain, LOCALE_DIR); +T_bind_textdomain_codeset($domain, $encoding); +T_textdomain($domain); + +header("Content-type: text/html; charset=$encoding"); +?> + + +PHP-gettext fallback example + + +

PHP-gettext as a fallback solution

+

Example showing how to use PHP-gettext as a fallback solution if the native gettext library is not available or the system does not support the requested locale.

+ +"; +foreach($supported_locales as $l) { + print "[$l] "; +} +print "

\n"; + +if (!locale_emulation()) { + print "

locale '$locale' is supported by your system, using native gettext implementation.

\n"; +} +else { + print "

locale '$locale' is not supported on your system, using custom gettext implementation.

\n"; +} +?> + +
+ +"; +print T_("This is how the story goes.\n\n"); +for ($number=6; $number>=0; $number--) { + print sprintf( T_ngettext("%d pig went to the market\n", + "%d pigs went to the market\n", $number), + $number ); +} +print "\n"; +?> + +
+

« back

+ + diff --git a/includes/php-gettext/examples/update b/includes/php-gettext/examples/update new file mode 100644 index 0000000..c8d8b61 --- /dev/null +++ b/includes/php-gettext/examples/update @@ -0,0 +1,14 @@ +#!/bin/sh +TEMPLATE=pigs.pot +xgettext -kT_ngettext:1,2 -kT_ -L PHP -o $TEMPLATE pigs.php +if [ x$1 == 'x-p' ]; then + msgfmt --statistics $TEMPLATE +else + if [ -f $1.po ]; then + msgmerge -o .tmp$1.po $1.po $TEMPLATE + mv .tmp$1.po $1.po + msgfmt --statistics $1.po + else + echo "Usage: $0 [-p|]" + fi +fi diff --git a/includes/php-gettext/gettext.inc b/includes/php-gettext/gettext.inc new file mode 100644 index 0000000..eb94b25 --- /dev/null +++ b/includes/php-gettext/gettext.inc @@ -0,0 +1,318 @@ + + + Drop in replacement for native gettext. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +/* +LC_CTYPE 0 +LC_NUMERIC 1 +LC_TIME 2 +LC_COLLATE 3 +LC_MONETARY 4 +LC_MESSAGES 5 +LC_ALL 6 +*/ + +require('streams.php'); +require('gettext.php'); + + +// Variables + +global $text_domains, $default_domain, $LC_CATEGORIES, $EMULATEGETTEXT, $CURRENTLOCALE; +$text_domains = array(); +$default_domain = 'messages'; +$LC_CATEGORIES = array('LC_CTYPE', 'LC_NUMERIC', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_MESSAGES', 'LC_ALL'); +$EMULATEGETTEXT = 0; +$CURRENTLOCALE = ''; + + +// Utility functions + +/** + * Utility function to get a StreamReader for the given text domain. + */ +function _get_reader($domain=null, $category=5, $enable_cache=true) { + global $text_domains, $default_domain, $LC_CATEGORIES; + if (!isset($domain)) $domain = $default_domain; + if (!isset($text_domains[$domain]->l10n)) { + // get the current locale + $locale = _setlocale(LC_MESSAGES, 0); + $p = isset($text_domains[$domain]->path) ? $text_domains[$domain]->path : './'; + $path = $p . "$locale/". $LC_CATEGORIES[$category] ."/$domain.mo"; + if (file_exists($path)) { + $input = new FileReader($path); + } + else { + $input = null; + } + $text_domains[$domain]->l10n = new gettext_reader($input, $enable_cache); + } + return $text_domains[$domain]->l10n; +} + +/** + * Returns whether we are using our emulated gettext API or PHP built-in one. + */ +function locale_emulation() { + global $EMULATEGETTEXT; + return $EMULATEGETTEXT; +} + +/** + * Checks if the current locale is supported on this system. + */ +function _check_locale() { + global $EMULATEGETTEXT; + return !$EMULATEGETTEXT; +} + +/** + * Get the codeset for the given domain. + */ +function _get_codeset($domain=null) { + global $text_domains, $default_domain, $LC_CATEGORIES; + if (!isset($domain)) $domain = $default_domain; + return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('mbstring.internal_encoding'); +} + +/** + * Convert the given string to the encoding set by bind_textdomain_codeset. + */ +function _encode($text) { + $source_encoding = mb_detect_encoding($text); + $target_encoding = _get_codeset(); + if ($source_encoding != $target_encoding) { + return mb_convert_encoding($text, $target_encoding, $source_encoding); + } + else { + return $text; + } +} + + + + +// Custom implementation of the standard gettext related functions + +/** + * Sets a requested locale, if needed emulates it. + */ +function _setlocale($category, $locale) { + global $CURRENTLOCALE, $EMULATEGETTEXT; + if ($locale === 0) { // use === to differentiate between string "0" + if ($CURRENTLOCALE != '') + return $CURRENTLOCALE; + else + // obey LANG variable, maybe extend to support all of LC_* vars + // even if we tried to read locale without setting it first + return _setlocale($category, $CURRENTLOCALE); + } else { + $ret = 0; + if (function_exists('setlocale')) // I don't know if this ever happens ;) + $ret = setlocale($category, $locale); + if (($ret and $locale == '') or ($ret == $locale)) { + $EMULATEGETTEXT = 0; + $CURRENTLOCALE = $ret; + } else { + if ($locale == '') // emulate variable support + $CURRENTLOCALE = getenv('LANG'); + else + $CURRENTLOCALE = $locale; + $EMULATEGETTEXT = 1; + } + return $CURRENTLOCALE; + } +} + +/** + * Sets the path for a domain. + */ +function _bindtextdomain($domain, $path) { + global $text_domains; + // ensure $path ends with a slash + if ($path[strlen($path) - 1] != '/') $path .= '/'; + elseif ($path[strlen($path) - 1] != '\\') $path .= '\\'; + $text_domains[$domain]->path = $path; +} + +/** + * Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. + */ +function _bind_textdomain_codeset($domain, $codeset) { + global $text_domains; + $text_domains[$domain]->codeset = $codeset; +} + +/** + * Sets the default domain. + */ +function _textdomain($domain) { + global $default_domain; + $default_domain = $domain; +} + +/** + * Lookup a message in the current domain. + */ +function _gettext($msgid) { + $l10n = _get_reader(); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Alias for gettext. + */ +function __($msgid) { + return _gettext($msgid); +} +/** + * Plural version of gettext. + */ +function _ngettext($single, $plural, $number) { + $l10n = _get_reader(); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + +/** + * Override the current domain. + */ +function _dgettext($domain, $msgid) { + $l10n = _get_reader($domain); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Plural version of dgettext. + */ +function _dngettext($domain, $single, $plural, $number) { + $l10n = _get_reader($domain); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + +/** + * Overrides the domain and category for a single lookup. + */ +function _dcgettext($domain, $msgid, $category) { + $l10n = _get_reader($domain, $category); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Plural version of dcgettext. + */ +function _dcngettext($domain, $single, $plural, $number, $category) { + $l10n = _get_reader($domain, $category); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + + + +// Wrappers to use if the standard gettext functions are available, but the current locale is not supported by the system. +// Use the standard impl if the current locale is supported, use the custom impl otherwise. + +function T_setlocale($category, $locale) { + return _setlocale($category, $locale); +} + +function T_bindtextdomain($domain, $path) { + if (_check_locale()) return bindtextdomain($domain, $path); + else return _bindtextdomain($domain, $path); +} +function T_bind_textdomain_codeset($domain, $codeset) { + // bind_textdomain_codeset is available only in PHP 4.2.0+ + if (_check_locale() and function_exists('bind_textdomain_codeset')) return bind_textdomain_codeset($domain, $codeset); + else return _bind_textdomain_codeset($domain, $codeset); +} +function T_textdomain($domain) { + if (_check_locale()) return textdomain($domain); + else return _textdomain($domain); +} +function T_gettext($msgid) { + if (_check_locale()) return gettext($msgid); + else return _gettext($msgid); +} +function T_($msgid) { + if (_check_locale()) return _($msgid); + return __($msgid); +} +function T_ngettext($single, $plural, $number) { + if (_check_locale()) return ngettext($single, $plural, $number); + else return _ngettext($single, $plural, $number); +} +function T_dgettext($domain, $msgid) { + if (_check_locale()) return dgettext($domain, $msgid); + else return _dgettext($domain, $msgid); +} +function T_dngettext($domain, $single, $plural, $number) { + if (_check_locale()) return dngettext($domain, $single, $plural, $number); + else return _dngettext($domain, $single, $plural, $number); +} +function T_dcgettext($domain, $msgid, $category) { + if (_check_locale()) return dcgettext($domain, $msgid, $category); + else return _dcgettext($domain, $msgid, $category); +} +function T_dcngettext($domain, $single, $plural, $number, $category) { + if (_check_locale()) return dcngettext($domain, $single, $plural, $number, $category); + else return _dcngettext($domain, $single, $plural, $number, $category); +} + + + +// Wrappers used as a drop in replacement for the standard gettext functions + +if (!function_exists('gettext')) { + function bindtextdomain($domain, $path) { + return _bindtextdomain($domain, $path); + } + function bind_textdomain_codeset($domain, $codeset) { + return _bind_textdomain_codeset($domain, $codeset); + } + function textdomain($domain) { + return _textdomain($domain); + } + function gettext($msgid) { + return _gettext($msgid); + } + function _($msgid) { + return __($msgid); + } + function ngettext($single, $plural, $number) { + return _ngettext($single, $plural, $number); + } + function dgettext($domain, $msgid) { + return _dgettext($domain, $msgid); + } + function dngettext($domain, $single, $plural, $number) { + return _dngettext($domain, $single, $plural, $number); + } + function dcgettext($domain, $msgid, $category) { + return _dcgettext($domain, $msgid, $category); + } + function dcngettext($domain, $single, $plural, $number, $category) { + return _dcngettext($domain, $single, $plural, $number, $category); + } +} + +?> \ No newline at end of file diff --git a/includes/php-gettext/gettext.php b/includes/php-gettext/gettext.php new file mode 100644 index 0000000..ad94a98 --- /dev/null +++ b/includes/php-gettext/gettext.php @@ -0,0 +1,358 @@ +. + Copyright (c) 2005 Nico Kaiser + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/** + * Provides a simple gettext replacement that works independently from + * the system's gettext abilities. + * It can read MO files and use them for translating strings. + * The files are passed to gettext_reader as a Stream (see streams.php) + * + * This version has the ability to cache all strings and translations to + * speed up the string lookup. + * While the cache is enabled by default, it can be switched off with the + * second parameter in the constructor (e.g. whenusing very large MO files + * that you don't want to keep in memory) + */ +class gettext_reader { + //public: + var $error = 0; // public variable that holds error code (0 if no error) + + //private: + var $BYTEORDER = 0; // 0: low endian, 1: big endian + var $STREAM = NULL; + var $short_circuit = false; + var $enable_cache = false; + var $originals = NULL; // offset of original table + var $translations = NULL; // offset of translation table + var $pluralheader = NULL; // cache header field for plural forms + var $total = 0; // total string count + var $table_originals = NULL; // table for original strings (offsets) + var $table_translations = NULL; // table for translated strings (offsets) + var $cache_translations = NULL; // original -> translation mapping + + + /* Methods */ + + + /** + * Reads a 32bit Integer from the Stream + * + * @access private + * @return Integer from the Stream + */ + function readint() { + if ($this->BYTEORDER == 0) { + // low endian + return array_shift(unpack('V', $this->STREAM->read(4))); + } else { + // big endian + return array_shift(unpack('N', $this->STREAM->read(4))); + } + } + + /** + * Reads an array of Integers from the Stream + * + * @param int count How many elements should be read + * @return Array of Integers + */ + function readintarray($count) { + if ($this->BYTEORDER == 0) { + // low endian + return unpack('V'.$count, $this->STREAM->read(4 * $count)); + } else { + // big endian + return unpack('N'.$count, $this->STREAM->read(4 * $count)); + } + } + + /** + * Constructor + * + * @param object Reader the StreamReader object + * @param boolean enable_cache Enable or disable caching of strings (default on) + */ + function gettext_reader($Reader, $enable_cache = true) { + // If there isn't a StreamReader, turn on short circuit mode. + if (! $Reader || isset($Reader->error) ) { + $this->short_circuit = true; + return; + } + + // Caching can be turned off + $this->enable_cache = $enable_cache; + + // $MAGIC1 = (int)0x950412de; //bug in PHP 5 + $MAGIC1 = (int) - 1794895138; + // $MAGIC2 = (int)0xde120495; //bug + $MAGIC2 = (int) - 569244523; + + $this->STREAM = $Reader; + $magic = $this->readint(); + if ($magic == $MAGIC1) { + $this->BYTEORDER = 0; + } elseif ($magic == $MAGIC2) { + $this->BYTEORDER = 1; + } else { + $this->error = 1; // not MO file + return false; + } + + // FIXME: Do we care about revision? We should. + $revision = $this->readint(); + + $this->total = $this->readint(); + $this->originals = $this->readint(); + $this->translations = $this->readint(); + } + + /** + * Loads the translation tables from the MO file into the cache + * If caching is enabled, also loads all strings into a cache + * to speed up translation lookups + * + * @access private + */ + function load_tables() { + if (is_array($this->cache_translations) && + is_array($this->table_originals) && + is_array($this->table_translations)) + return; + + /* get original and translations tables */ + $this->STREAM->seekto($this->originals); + $this->table_originals = $this->readintarray($this->total * 2); + $this->STREAM->seekto($this->translations); + $this->table_translations = $this->readintarray($this->total * 2); + + if ($this->enable_cache) { + $this->cache_translations = array (); + /* read all strings in the cache */ + for ($i = 0; $i < $this->total; $i++) { + $this->STREAM->seekto($this->table_originals[$i * 2 + 2]); + $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]); + $this->STREAM->seekto($this->table_translations[$i * 2 + 2]); + $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]); + $this->cache_translations[$original] = $translation; + } + } + } + + /** + * Returns a string from the "originals" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_original_string($num) { + $length = $this->table_originals[$num * 2 + 1]; + $offset = $this->table_originals[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Returns a string from the "translations" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_translation_string($num) { + $length = $this->table_translations[$num * 2 + 1]; + $offset = $this->table_translations[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Binary search for string + * + * @access private + * @param string string + * @param int start (internally used in recursive function) + * @param int end (internally used in recursive function) + * @return int string number (offset in originals table) + */ + function find_string($string, $start = -1, $end = -1) { + if (($start == -1) or ($end == -1)) { + // find_string is called with only one parameter, set start end end + $start = 0; + $end = $this->total; + } + if (abs($start - $end) <= 1) { + // We're done, now we either found the string, or it doesn't exist + $txt = $this->get_original_string($start); + if ($string == $txt) + return $start; + else + return -1; + } else if ($start > $end) { + // start > end -> turn around and start over + return $this->find_string($string, $end, $start); + } else { + // Divide table in two parts + $half = (int)(($start + $end) / 2); + $cmp = strcmp($string, $this->get_original_string($half)); + if ($cmp == 0) + // string is exactly in the middle => return it + return $half; + else if ($cmp < 0) + // The string is in the upper half + return $this->find_string($string, $start, $half); + else + // The string is in the lower half + return $this->find_string($string, $half, $end); + } + } + + /** + * Translates a string + * + * @access public + * @param string string to be translated + * @return string translated string (or original, if not found) + */ + function translate($string) { + if ($this->short_circuit) + return $string; + $this->load_tables(); + + if ($this->enable_cache) { + // Caching enabled, get translated string from cache + if (array_key_exists($string, $this->cache_translations)) + return $this->cache_translations[$string]; + else + return $string; + } else { + // Caching not enabled, try to find string + $num = $this->find_string($string); + if ($num == -1) + return $string; + else + return $this->get_translation_string($num); + } + } + + /** + * Get possible plural forms from MO header + * + * @access private + * @return string plural form header + */ + function get_plural_forms() { + // lets assume message number 0 is header + // this is true, right? + $this->load_tables(); + + // cache header field for plural forms + if (! is_string($this->pluralheader)) { + if ($this->enable_cache) { + $header = $this->cache_translations[""]; + } else { + $header = $this->get_translation_string(0); + } + if (eregi("plural-forms: ([^\n]*)\n", $header, $regs)) + $expr = $regs[1]; + else + $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; + $this->pluralheader = $expr; + } + return $this->pluralheader; + } + + /** + * Detects which plural form to take + * + * @access private + * @param n count + * @return int array index of the right plural form + */ + function select_string($n) { + $string = $this->get_plural_forms(); + $string = str_replace('nplurals',"\$total",$string); + $string = str_replace("n",$n,$string); + $string = str_replace('plural',"\$plural",$string); + + $total = 0; + $plural = 0; + + eval("$string"); + if ($plural >= $total) $plural = $total - 1; + return $plural; + } + + /** + * Plural version of gettext + * + * @access public + * @param string single + * @param string plural + * @param string number + * @return translated plural form + */ + function ngettext($single, $plural, $number) { + if ($this->short_circuit) { + if ($number != 1) + return $plural; + else + return $single; + } + + // find out the appropriate form + $select = $this->select_string($number); + + // this should contains all strings separated by NULLs + $key = $single.chr(0).$plural; + + + if ($this->enable_cache) { + if (! array_key_exists($key, $this->cache_translations)) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->cache_translations[$key]; + $list = explode(chr(0), $result); + return $list[$select]; + } + } else { + $num = $this->find_string($key); + if ($num == -1) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->get_translation_string($num); + $list = explode(chr(0), $result); + return $list[$select]; + } + } + } + +} + +?> diff --git a/includes/php-gettext/streams.php b/includes/php-gettext/streams.php new file mode 100644 index 0000000..d57aac6 --- /dev/null +++ b/includes/php-gettext/streams.php @@ -0,0 +1,166 @@ +. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +// Simple class to wrap file streams, string streams, etc. +// seek is essential, and it should be byte stream +class StreamReader { + // should return a string [FIXME: perhaps return array of bytes?] + function read($bytes) { + return false; + } + + // should return new position + function seekto($position) { + return false; + } + + // returns current position + function currentpos() { + return false; + } + + // returns length of entire stream (limit for seekto()s) + function length() { + return false; + } +} + +class StringReader { + var $_pos; + var $_str; + + function StringReader($str='') { + $this->_str = $str; + $this->_pos = 0; + } + + function read($bytes) { + $data = substr($this->_str, $this->_pos, $bytes); + $this->_pos += $bytes; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + + return $data; + } + + function seekto($pos) { + $this->_pos = $pos; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return strlen($this->_str); + } + +} + + +class FileReader { + var $_pos; + var $_fd; + var $_length; + + function FileReader($filename) { + if (file_exists($filename)) { + + $this->_length=filesize($filename); + $this->_pos = 0; + $this->_fd = fopen($filename,'rb'); + if (!$this->_fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + } else { + $this->error = 2; // File doesn't exist + return false; + } + } + + function read($bytes) { + if ($bytes) { + fseek($this->_fd, $this->_pos); + + // PHP 5.1.1 does not read more than 8192 bytes in one fread() + // the discussions at PHP Bugs suggest it's the intended behaviour + while ($bytes > 0) { + $chunk = fread($this->_fd, $bytes); + $data .= $chunk; + $bytes -= strlen($chunk); + } + $this->_pos = ftell($this->_fd); + + return $data; + } else return ''; + } + + function seekto($pos) { + fseek($this->_fd, $pos); + $this->_pos = ftell($this->_fd); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return $this->_length; + } + + function close() { + fclose($this->_fd); + } + +} + +// Preloads entire file in memory first, then creates a StringReader +// over it (it assumes knowledge of StringReader internals) +class CachedFileReader extends StringReader { + function CachedFileReader($filename) { + if (file_exists($filename)) { + + $length=filesize($filename); + $fd = fopen($filename,'rb'); + + if (!$fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + $this->_str = fread($fd, $length); + fclose($fd); + + } else { + $this->error = 2; // File doesn't exist + return false; + } + } +} + + +?> \ No newline at end of file diff --git a/includes/player/error.swf b/includes/player/error.swf new file mode 100644 index 0000000000000000000000000000000000000000..fc440f3dd5ee8ea698f9c720d69fce2dfe354a38 GIT binary patch literal 90 zcmZ<@4`z#EU|^_VV2x*B;9tPNz{AMk%=G{N|NRVlKygL}uf`0U3I=9|nZ^tZGl3!u r|Nk>6h-$mJu3GGLHd=~{Y3hQ{sgIq`&gf-jXk%kz1ZrV$04f6j-B%W? literal 0 HcmV?d00001 diff --git a/includes/player/license.txt b/includes/player/license.txt new file mode 100644 index 0000000..2111a50 --- /dev/null +++ b/includes/player/license.txt @@ -0,0 +1,10 @@ +Copyright (c) 2005, Fabricio Zuardi +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/includes/player/load.swf b/includes/player/load.swf new file mode 100644 index 0000000000000000000000000000000000000000..6da4ce67c72b05e3f85a1f6ef0ef6dd18d947d95 GIT binary patch literal 311 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
}cmX(9SD_*6cuQ&PQuu{6OtCeTMBh&zH_c z!B&Y!?r6x>A?6Fs^tC13sWPK7+%;@VT-U@>F`e@wToi(ot#@awWq`E;8d}XBd!v?G zm{I}q*yqf^OxZ1A`dnc7=bRk$l)@Cwt$v+2$ea(o02x`2FQ7LJ@W=1@Xl=|#+j+Az z%!Gj22cR1*sN?M`wH-w%GYe>rw+YKO-X#!VzRzIDY&~1O&e*;g4Rn#6;frx#J)?OEHnvy=`K6uoRS$bSdRZrZ zOTofs0oJy9h=(3@xmkVDXd+6^4o_$sE1RAr`DcN#zccJ~)e7^aa=;4w%-?oXUIV_3 zY_*mUsq6n5xwf4IVj$Y>u38lFhL`9@Q3+nY0dyk|zUXd5Up3Kaj0q1$dGQbU0Au_m zzsN_O&UAVa6&@ftvt`@DboMZvQ~r1ooGud;ewPxtC1(oXDrL-OfoV4=^C-G|;!QFS1<4usf&Mw>+5 zzS#R;LHv17(@NBkpAuaqJ^6JPn6)^$FliOHl{Ik4gMU`TZ^^b{%;{EoCXaJS?>Q`O zExrqzaVx}0MlOs0>&L*i#`1!|xb}Yr6X^Q|?>9<_90gYuNL6AmsS_UzrT|PaC<7=n znAS{%K?OjC!3=;IUdyvyQRx-tdgmsLq+k}^dA>t20%_Dj;+SAwU|>%KmaN%>^h6@q9Iz&`1brbPc7h;6- zPtvzl5jZl%k99>#>U17RKef?R0sf9M-Q6- literal 0 HcmV?d00001 diff --git a/includes/player/stop.swf b/includes/player/stop.swf new file mode 100644 index 0000000000000000000000000000000000000000..e66556d79157cb3f51ac94add3786b2a231cbaed GIT binary patch literal 77 zcmZ<@4`%aaU|^_VV2x*B;9tPNz{AMk%=G{N|NRV#KygL}Psax~6%0%aGiT0Zm + */ + +/** + * URL-Encode a filename to allow unicodecharacters + * + * Slashes are not encoded + * + * When the second parameter is true the string will + * be encoded only if non ASCII characters are detected - + * This makes it safe to run it multiple times on the + * same string (default is true) + * + * @author Andreas Gohr + * @see urlencode + */ +function utf8_encodeFN($file,$safe=true){ + if($safe && preg_match('#^[a-zA-Z0-9/_\-.%]+$#',$file)){ + return $file; + } + $file = urlencode($file); + $file = str_replace('%2F','/',$file); + return $file; +} + +/** + * URL-Decode a filename + * + * This is just a wrapper around urldecode + * + * @author Andreas Gohr + * @see urldecode + */ +function utf8_decodeFN($file){ + $file = urldecode($file); + return $file; +} + +/** + * Checks if a string contains 7bit ASCII only + * + * @author Andreas Gohr + */ +function utf8_isASCII($str){ + for($i=0; $i127) return false; + } + return true; +} + +/** + * Tries to detect if a string is in Unicode encoding + * + * @author + * @link http://www.php.net/manual/en/function.utf8-encode.php + */ +function utf8_check($Str) { + for ($i=0; $i + * @see strlen() + */ +function utf8_strlen($string){ + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strlen')) + return mb_strlen($string,'utf-8'); + + $uni = utf8_to_unicode($string); + return count($uni); +} + +/** + * This is a unicode aware replacement for substr() + * + * Uses mb_string extension if available + * + * @author Andreas Gohr + * @see substr() + */ +function utf8_substr($str, $start, $length=null){ + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_substr')) + return mb_substr($str,$start,$length,'utf-8'); + + $uni = utf8_to_unicode($str); + return unicode_to_utf8(array_slice($uni,$start,$length)); +} + +/** + * This is a unicode aware replacement for strtolower() + * + * Uses mb_string extension if available + * + * @author Andreas Gohr + * @see strtolower() + * @see utf8_strtoupper() + */ +function utf8_strtolower($string){ + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strtolower')) + return mb_strtolower($string,'utf-8'); + + global $UTF8_UPPER_TO_LOWER; + $uni = utf8_to_unicode($string); + for ($i=0; $i < count($uni); $i++){ + if($UTF8_UPPER_TO_LOWER[$uni[$i]]){ + $uni[$i] = $UTF8_UPPER_TO_LOWER[$uni[$i]]; + } + } + return unicode_to_utf8($uni); +} + +/** + * This is a unicode aware replacement for strtoupper() + * + * Uses mb_string extension if available + * + * @author Andreas Gohr + * @see strtoupper() + * @see utf8_strtoupper() + */ +function utf8_strtoupper($string){ + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strtolower')) + return mb_strtolower($string,'utf-8'); + + global $UTF8_LOWER_TO_UPPER; + $uni = utf8_to_unicode($string); + for ($i=0; $i < count($uni); $i++){ + if($UTF8_LOWER_TO_UPPER[$uni[$i]]){ + $uni[$i] = $UTF8_LOWER_TO_UPPER[$uni[$i]]; + } + } + return unicode_to_utf8($uni); +} + +/** + * Replace accented UTF-8 characters by unaccented ASCII-7 equivalents + * + * Use the optional parameter to just deaccent lower ($case = -1) or upper ($case = 1) + * letters. Default is to deaccent both cases ($case = 0) + * + * @author Andreas Gohr + */ +function utf8_deaccent($string,$case=0){ + if($case <= 0){ + global $UTF8_LOWER_ACCENTS; + $string = str_replace(array_keys($UTF8_LOWER_ACCENTS),array_values($UTF8_LOWER_ACCENTS),$string); + } + if($case >= 0){ + global $UTF8_UPPER_ACCENTS; + $string = str_replace(array_keys($UTF8_UPPER_ACCENTS),array_values($UTF8_UPPER_ACCENTS),$string); + } + return $string; +} + +/** + * Removes special characters (nonalphanumeric) from a UTF-8 string + * + * Be sure to specify all specialchars you give in $repl in $keep, too + * or it won't work. + * + * This function adds the controlchars 0x00 to 0x19 to the array of + * stripped chars (they are not included in $UTF8_SPECIAL_CHARS) + * + * @author Andreas Gohr + * @param string $string The UTF8 string to strip of special chars + * @param string $repl Replace special with this string + * @param string $keep Special chars to keep (in UTF8) + */ +function utf8_stripspecials($string,$repl='',$keep=''){ + global $UTF8_SPECIAL_CHARS; + if($keep != ''){ + $specials = array_diff($UTF8_SPECIAL_CHARS, utf8_to_unicode($keep)); + }else{ + $specials = $UTF8_SPECIAL_CHARS; + } + + $specials = unicode_to_utf8($specials); + $specials = preg_quote($specials, '/'); + + return preg_replace('/[\x00-\x19'.$specials.']/u',$repl,$string); +} + +/** + * This is an Unicode aware replacement for strpos + * + * Uses mb_string extension if available + * + * @author Scott Michael Reynen + * @author Andreas Gohr + * @link http://www.randomchaos.com/document.php?source=php_and_unicode + * @see strpos() + */ +function utf8_strpos($haystack, $needle,$offset=0) { + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strpos')) + return mb_strpos($haystack,$needle,$offset,'utf-8'); + + $haystack = utf8_to_unicode($haystack); + $needle = utf8_to_unicode($needle); + $position = $offset; + $found = false; + + while( (! $found ) && ( $position < count( $haystack ) ) ) { + if ( $needle[0] == $haystack[$position] ) { + for ($i = 1; $i < count( $needle ); $i++ ) { + if ( $needle[$i] != $haystack[ $position + $i ] ) break; + } + if ( $i == count( $needle ) ) { + $found = true; + $position--; + } + } + $position++; + } + return ( $found == true ) ? $position : false; +} + +/** + * This function will any UTF-8 encoded text and return it as + * a list of Unicode values: + * + * @author Scott Michael Reynen + * @link http://www.randomchaos.com/document.php?source=php_and_unicode + * @see unicode_to_utf8() + */ +function utf8_to_unicode( $str ) { + $unicode = array(); + $values = array(); + $lookingFor = 1; + + for ($i = 0; $i < strlen( $str ); $i++ ) { + $thisValue = ord( $str[ $i ] ); + if ( $thisValue < 128 ) $unicode[] = $thisValue; + else { + if ( count( $values ) == 0 ) $lookingFor = ( $thisValue < 224 ) ? 2 : 3; + $values[] = $thisValue; + if ( count( $values ) == $lookingFor ) { + $number = ( $lookingFor == 3 ) ? + ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ): + ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 ); + $unicode[] = $number; + $values = array(); + $lookingFor = 1; + } + } + } + return $unicode; +} + +/** + * This function will convert a Unicode array back to its UTF-8 representation + * + * @author Scott Michael Reynen + * @link http://www.randomchaos.com/document.php?source=php_and_unicode + * @see utf8_to_unicode() + */ +function unicode_to_utf8( $str ) { + $utf8 = ''; + foreach( $str as $unicode ) { + if ( $unicode < 128 ) { + $utf8.= chr( $unicode ); + } elseif ( $unicode < 2048 ) { + $utf8.= chr( 192 + ( ( $unicode - ( $unicode % 64 ) ) / 64 ) ); + $utf8.= chr( 128 + ( $unicode % 64 ) ); + } else { + $utf8.= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) ); + $utf8.= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) / 64 ) ); + $utf8.= chr( 128 + ( $unicode % 64 ) ); + } + } + return $utf8; +} + +/** + * UTF-8 Case lookup table + * + * This lookuptable defines the upper case letters to their correspponding + * lower case letter in UTF-8 + * + * @author Andreas Gohr + */ +$UTF8_LOWER_TO_UPPER = array( + 0x0061=>0x0041, 0x03C6=>0x03A6, 0x0163=>0x0162, 0x00E5=>0x00C5, 0x0062=>0x0042, + 0x013A=>0x0139, 0x00E1=>0x00C1, 0x0142=>0x0141, 0x03CD=>0x038E, 0x0101=>0x0100, + 0x0491=>0x0490, 0x03B4=>0x0394, 0x015B=>0x015A, 0x0064=>0x0044, 0x03B3=>0x0393, + 0x00F4=>0x00D4, 0x044A=>0x042A, 0x0439=>0x0419, 0x0113=>0x0112, 0x043C=>0x041C, + 0x015F=>0x015E, 0x0144=>0x0143, 0x00EE=>0x00CE, 0x045E=>0x040E, 0x044F=>0x042F, + 0x03BA=>0x039A, 0x0155=>0x0154, 0x0069=>0x0049, 0x0073=>0x0053, 0x1E1F=>0x1E1E, + 0x0135=>0x0134, 0x0447=>0x0427, 0x03C0=>0x03A0, 0x0438=>0x0418, 0x00F3=>0x00D3, + 0x0440=>0x0420, 0x0454=>0x0404, 0x0435=>0x0415, 0x0449=>0x0429, 0x014B=>0x014A, + 0x0431=>0x0411, 0x0459=>0x0409, 0x1E03=>0x1E02, 0x00F6=>0x00D6, 0x00F9=>0x00D9, + 0x006E=>0x004E, 0x0451=>0x0401, 0x03C4=>0x03A4, 0x0443=>0x0423, 0x015D=>0x015C, + 0x0453=>0x0403, 0x03C8=>0x03A8, 0x0159=>0x0158, 0x0067=>0x0047, 0x00E4=>0x00C4, + 0x03AC=>0x0386, 0x03AE=>0x0389, 0x0167=>0x0166, 0x03BE=>0x039E, 0x0165=>0x0164, + 0x0117=>0x0116, 0x0109=>0x0108, 0x0076=>0x0056, 0x00FE=>0x00DE, 0x0157=>0x0156, + 0x00FA=>0x00DA, 0x1E61=>0x1E60, 0x1E83=>0x1E82, 0x00E2=>0x00C2, 0x0119=>0x0118, + 0x0146=>0x0145, 0x0070=>0x0050, 0x0151=>0x0150, 0x044E=>0x042E, 0x0129=>0x0128, + 0x03C7=>0x03A7, 0x013E=>0x013D, 0x0442=>0x0422, 0x007A=>0x005A, 0x0448=>0x0428, + 0x03C1=>0x03A1, 0x1E81=>0x1E80, 0x016D=>0x016C, 0x00F5=>0x00D5, 0x0075=>0x0055, + 0x0177=>0x0176, 0x00FC=>0x00DC, 0x1E57=>0x1E56, 0x03C3=>0x03A3, 0x043A=>0x041A, + 0x006D=>0x004D, 0x016B=>0x016A, 0x0171=>0x0170, 0x0444=>0x0424, 0x00EC=>0x00CC, + 0x0169=>0x0168, 0x03BF=>0x039F, 0x006B=>0x004B, 0x00F2=>0x00D2, 0x00E0=>0x00C0, + 0x0434=>0x0414, 0x03C9=>0x03A9, 0x1E6B=>0x1E6A, 0x00E3=>0x00C3, 0x044D=>0x042D, + 0x0436=>0x0416, 0x01A1=>0x01A0, 0x010D=>0x010C, 0x011D=>0x011C, 0x00F0=>0x00D0, + 0x013C=>0x013B, 0x045F=>0x040F, 0x045A=>0x040A, 0x00E8=>0x00C8, 0x03C5=>0x03A5, + 0x0066=>0x0046, 0x00FD=>0x00DD, 0x0063=>0x0043, 0x021B=>0x021A, 0x00EA=>0x00CA, + 0x03B9=>0x0399, 0x017A=>0x0179, 0x00EF=>0x00CF, 0x01B0=>0x01AF, 0x0065=>0x0045, + 0x03BB=>0x039B, 0x03B8=>0x0398, 0x03BC=>0x039C, 0x045C=>0x040C, 0x043F=>0x041F, + 0x044C=>0x042C, 0x00FE=>0x00DE, 0x00F0=>0x00D0, 0x1EF3=>0x1EF2, 0x0068=>0x0048, + 0x00EB=>0x00CB, 0x0111=>0x0110, 0x0433=>0x0413, 0x012F=>0x012E, 0x00E6=>0x00C6, + 0x0078=>0x0058, 0x0161=>0x0160, 0x016F=>0x016E, 0x03B1=>0x0391, 0x0457=>0x0407, + 0x0173=>0x0172, 0x00FF=>0x0178, 0x006F=>0x004F, 0x043B=>0x041B, 0x03B5=>0x0395, + 0x0445=>0x0425, 0x0121=>0x0120, 0x017E=>0x017D, 0x017C=>0x017B, 0x03B6=>0x0396, + 0x03B2=>0x0392, 0x03AD=>0x0388, 0x1E85=>0x1E84, 0x0175=>0x0174, 0x0071=>0x0051, + 0x0437=>0x0417, 0x1E0B=>0x1E0A, 0x0148=>0x0147, 0x0105=>0x0104, 0x0458=>0x0408, + 0x014D=>0x014C, 0x00ED=>0x00CD, 0x0079=>0x0059, 0x010B=>0x010A, 0x03CE=>0x038F, + 0x0072=>0x0052, 0x0430=>0x0410, 0x0455=>0x0405, 0x0452=>0x0402, 0x0127=>0x0126, + 0x0137=>0x0136, 0x012B=>0x012A, 0x03AF=>0x038A, 0x044B=>0x042B, 0x006C=>0x004C, + 0x03B7=>0x0397, 0x0125=>0x0124, 0x0219=>0x0218, 0x00FB=>0x00DB, 0x011F=>0x011E, + 0x043E=>0x041E, 0x1E41=>0x1E40, 0x03BD=>0x039D, 0x0107=>0x0106, 0x03CB=>0x03AB, + 0x0446=>0x0426, 0x00FE=>0x00DE, 0x00E7=>0x00C7, 0x03CA=>0x03AA, 0x0441=>0x0421, + 0x0432=>0x0412, 0x010F=>0x010E, 0x00F8=>0x00D8, 0x0077=>0x0057, 0x011B=>0x011A, + 0x0074=>0x0054, 0x006A=>0x004A, 0x045B=>0x040B, 0x0456=>0x0406, 0x0103=>0x0102, + 0x03BB=>0x039B, 0x00F1=>0x00D1, 0x043D=>0x041D, 0x03CC=>0x038C, 0x00E9=>0x00C9, + 0x00F0=>0x00D0, 0x0457=>0x0407, 0x0123=>0x0122, +); + +/** + * UTF-8 Case lookup table + * + * This lookuptable defines the lower case letters to their correspponding + * upper case letter in UTF-8 (it does so by flipping $UTF8_LOWER_TO_UPPER) + * + * @author Andreas Gohr + */ +$UTF8_UPPER_TO_LOWER = @array_flip($UTF8_LOWER_TO_UPPER); + +/** + * UTF-8 lookup table for lower case accented letters + * + * This lookuptable defines replacements for accented characters from the ASCII-7 + * range. This are lower case letters only. + * + * @author Andreas Gohr + * @see utf8_deaccent() + */ +$UTF8_LOWER_ACCENTS = array( + 'à ' => 'a', 'ô' => 'o', 'ď' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'Å¡' => 's', 'Æ¡' => 'o', + 'ß' => 'ss', 'ă' => 'a', 'ř' => 'r', 'ț' => 't', 'ň' => 'n', 'ā' => 'a', 'Ä·' => 'k', + 'ŝ' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'ṗ' => 'p', 'ó' => 'o', + 'ú' => 'u', 'ě' => 'e', 'é' => 'e', 'ç' => 'c', 'ẁ' => 'w', 'ċ' => 'c', 'õ' => 'o', + 'ṡ' => 's', 'ø' => 'o', 'Ä£' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c', + 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't', + 'Å«' => 'u', 'č' => 'c', 'ö' => 'oe', 'è' => 'e', 'Å·' => 'y', 'ą' => 'a', 'ł' => 'l', + 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z', + 'ẃ' => 'w', 'ḃ' => 'b', 'Ã¥' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'Å¥' => 't', + 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o', + 'ē' => 'e', 'ñ' => 'n', 'ń' => 'n', 'Ä¥' => 'h', 'ĝ' => 'g', 'đ' => 'd', 'ĵ' => 'j', + 'ÿ' => 'y', 'Å©' => 'u', 'Å­' => 'u', 'Æ°' => 'u', 'Å£' => 't', 'ý' => 'y', 'ő' => 'o', + 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'Ä«' => 'i', 'ã' => 'a', 'Ä¡' => 'g', + 'ṁ' => 'm', 'ō' => 'o', 'Ä©' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a', + 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', +); + +/** + * UTF-8 lookup table for upper case accented letters + * + * This lookuptable defines replacements for accented characters from the ASCII-7 + * range. This are upper case letters only. + * + * @author Andreas Gohr + * @see utf8_deaccent() + */ +$UTF8_UPPER_ACCENTS = array( + 'à ' => 'A', 'ô' => 'O', 'ď' => 'D', 'ḟ' => 'F', 'ë' => 'E', 'Å¡' => 'S', 'Æ¡' => 'O', + 'ß' => 'Ss', 'ă' => 'A', 'ř' => 'R', 'ț' => 'T', 'ň' => 'N', 'ā' => 'A', 'Ä·' => 'K', + 'ŝ' => 'S', 'ỳ' => 'Y', 'ņ' => 'N', 'ĺ' => 'L', 'ħ' => 'H', 'ṗ' => 'P', 'ó' => 'O', + 'ú' => 'U', 'ě' => 'E', 'é' => 'E', 'ç' => 'C', 'ẁ' => 'W', 'ċ' => 'C', 'õ' => 'O', + 'ṡ' => 'S', 'ø' => 'O', 'Ä£' => 'G', 'ŧ' => 'T', 'ș' => 'S', 'ė' => 'E', 'ĉ' => 'C', + 'ś' => 'S', 'î' => 'I', 'ű' => 'U', 'ć' => 'C', 'ę' => 'E', 'ŵ' => 'W', 'ṫ' => 'T', + 'Å«' => 'U', 'č' => 'C', 'ö' => 'Oe', 'è' => 'E', 'Å·' => 'Y', 'ą' => 'A', 'ł' => 'L', + 'ų' => 'U', 'ů' => 'U', 'ş' => 'S', 'ğ' => 'G', 'ļ' => 'L', 'ƒ' => 'F', 'ž' => 'Z', + 'ẃ' => 'W', 'ḃ' => 'B', 'Ã¥' => 'A', 'ì' => 'I', 'ï' => 'I', 'ḋ' => 'D', 'Å¥' => 'T', + 'ŗ' => 'R', 'ä' => 'Ae', 'í' => 'I', 'ŕ' => 'R', 'ê' => 'E', 'ü' => 'Ue', 'ò' => 'O', + 'ē' => 'E', 'ñ' => 'N', 'ń' => 'N', 'Ä¥' => 'H', 'ĝ' => 'G', 'đ' => 'D', 'ĵ' => 'J', + 'ÿ' => 'Y', 'Å©' => 'U', 'Å­' => 'U', 'Æ°' => 'U', 'Å£' => 'T', 'ý' => 'Y', 'ő' => 'O', + 'â' => 'A', 'ľ' => 'L', 'ẅ' => 'W', 'ż' => 'Z', 'Ä«' => 'I', 'ã' => 'A', 'Ä¡' => 'G', + 'ṁ' => 'M', 'ō' => 'O', 'Ä©' => 'I', 'ù' => 'U', 'į' => 'I', 'ź' => 'Z', 'á' => 'A', + 'û' => 'U', 'Þ' => 'Th', 'Ð' => 'Dh', 'Æ' => 'Ae', +); + +/** + * UTF-8 array of common special characters + * + * This array should contain all special characters (not a letter or digit) + * defined in the various local charsets - it's not a complete list of non-alphanum + * characters in UTF-8. It's not perfect but should match most cases of special + * chars. + * + * The controlchars 0x00 to 0x19 are _not_ included in this array. The space 0x20 is! + * + * @author Andreas Gohr + * @see utf8_stripspecials() + */ +$UTF8_SPECIAL_CHARS = array( + 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, + 0x002e, 0x002f, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0142, 0x007b, 0x007c, 0x007d, 0x007e, + 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, + 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, + 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, + 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, + 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, + 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, + 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00d7, 0x00f7, 0x02c7, 0x02d8, 0x02d9, + 0x02da, 0x02db, 0x02dc, 0x02dd, 0x0300, 0x0301, 0x0303, 0x0309, 0x0323, 0x0384, + 0x0385, 0x0387, 0x03b2, 0x03c6, 0x03d1, 0x03d2, 0x03d5, 0x03d6, 0x05b0, 0x05b1, + 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0x05bb, 0x05bc, + 0x05bd, 0x05be, 0x05bf, 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f3, 0x05f4, 0x060c, + 0x061b, 0x061f, 0x0640, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651, + 0x0652, 0x066a, 0x0e3f, 0x200c, 0x200d, 0x200e, 0x200f, 0x2013, 0x2014, 0x2015, + 0x2017, 0x2018, 0x2019, 0x201a, 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2022, + 0x2026, 0x2030, 0x2032, 0x2033, 0x2039, 0x203a, 0x2044, 0x20a7, 0x20aa, 0x20ab, + 0x20ac, 0x2116, 0x2118, 0x2122, 0x2126, 0x2135, 0x2190, 0x2191, 0x2192, 0x2193, + 0x2194, 0x2195, 0x21b5, 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x2200, 0x2202, + 0x2203, 0x2205, 0x2206, 0x2207, 0x2208, 0x2209, 0x220b, 0x220f, 0x2211, 0x2212, + 0x2215, 0x2217, 0x2219, 0x221a, 0x221d, 0x221e, 0x2220, 0x2227, 0x2228, 0x2229, + 0x222a, 0x222b, 0x2234, 0x223c, 0x2245, 0x2248, 0x2260, 0x2261, 0x2264, 0x2265, + 0x2282, 0x2283, 0x2284, 0x2286, 0x2287, 0x2295, 0x2297, 0x22a5, 0x22c5, 0x2310, + 0x2320, 0x2321, 0x2329, 0x232a, 0x2469, 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, + 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2550, 0x2551, 0x2552, 0x2553, + 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, + 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, + 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + 0x2591, 0x2592, 0x2593, 0x25a0, 0x25b2, 0x25bc, 0x25c6, 0x25ca, 0x25cf, 0x25d7, + 0x2605, 0x260e, 0x261b, 0x261e, 0x2660, 0x2663, 0x2665, 0x2666, 0x2701, 0x2702, + 0x2703, 0x2704, 0x2706, 0x2707, 0x2708, 0x2709, 0x270c, 0x270d, 0x270e, 0x270f, + 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719, + 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f, 0x2720, 0x2721, 0x2722, 0x2723, + 0x2724, 0x2725, 0x2726, 0x2727, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, + 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, + 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2742, + 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x274d, + 0x274f, 0x2750, 0x2751, 0x2752, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, + 0x275d, 0x275e, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x277f, + 0x2789, 0x2793, 0x2794, 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e, + 0x279f, 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7, 0x27a8, + 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af, 0x27b1, 0x27b2, 0x27b3, + 0x27b4, 0x27b5, 0x27b6, 0x27b7, 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd, + 0x27be, 0xf6d9, 0xf6da, 0xf6db, 0xf8d7, 0xf8d8, 0xf8d9, 0xf8da, 0xf8db, 0xf8dc, + 0xf8dd, 0xf8de, 0xf8df, 0xf8e0, 0xf8e1, 0xf8e2, 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e6, + 0xf8e7, 0xf8e8, 0xf8e9, 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0, + 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4, 0xf8f5, 0xf8f6, 0xf8f7, 0xf8f8, 0xf8f9, 0xf8fa, + 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0xfe7c, 0xfe7d, +); +?> diff --git a/index.php b/index.php new file mode 100644 index 0000000..b760bd7 --- /dev/null +++ b/index.php @@ -0,0 +1,87 @@ +logout(); + $tplvars['msg'] = T_('You have now logged out'); + } +} + +// Header variables +$tplVars['loadjs'] = true; +$tplVars['rsschannels'] = array( + array(sprintf(T_('%s: Recent bookmarks'), $sitename), createURL('rss')) +); + +if ($usecache) { + // Generate hash for caching on + $hashtext = $_SERVER['REQUEST_URI']; + if ($userservice->isLoggedOn()) { + $hashtext .= $userservice->getCurrentUserID(); + } + $hash = md5($hashtext); + + // Cache for 15 minutes + $cacheservice->Start($hash, 900); +} + +// Pagination +$perpage = getPerPageCount(); +if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; +} else { + $page = 0; + $start = 0; +} + +$dtend = date('Y-m-d H:i:s', strtotime('tomorrow')); +$dtstart = date('Y-m-d H:i:s', strtotime($dtend .' -'. $defaultRecentDays .' days')); + +$tplVars['page'] = $page; +$tplVars['start'] = $start; +$tplVars['popCount'] = 30; +$tplVars['sidebar_blocks'] = array('recent'); +$tplVars['range'] = 'all'; +$tplVars['pagetitle'] = T_('Store, share and tag your favourite links'); +$tplVars['subtitle'] = T_('Recent Bookmarks'); +$tplVars['bookmarkCount'] = $start + 1; +$bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, NULL, NULL, NULL, getSortOrder(), NULL, $dtstart, $dtend); +$tplVars['total'] = $bookmarks['total']; +$tplVars['bookmarks'] =& $bookmarks['bookmarks']; +$tplVars['cat_url'] = createURL('tags', '%2$s'); +$tplVars['nav_url'] = createURL('index', '%3$s'); + +$templateservice->loadTemplate('bookmarks.tpl', $tplVars); + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> \ No newline at end of file diff --git a/jsScuttle.php b/jsScuttle.php new file mode 100644 index 0000000..fbe1e20 --- /dev/null +++ b/jsScuttle.php @@ -0,0 +1,141 @@ + + +function _playerAdd(anchor) { + var url = anchor.href; + var code = ''; + var code = code + ''; + var code = code + ''; + anchor.parentNode.innerHTML = code +' '+ anchor.parentNode.innerHTML; +} + +String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g, ''); +}; + +var deleted = false; +function deleteBookmark(ele, input){ + var confirmDelete = " - "; + ele.style.display = 'none'; + ele.parentNode.innerHTML = ele.parentNode.innerHTML + confirmDelete; +} + +function deleteCancelled(ele) { + var del = previousElement(ele.parentNode); + del.style.display = 'inline'; + ele.parentNode.parentNode.removeChild(ele.parentNode); + return false; +} + +function deleteConfirmed(ele, input, response) { + if (deleted == false) { + deleted = ele.parentNode.parentNode.parentNode; + } + var post = deleted; + post.className = 'xfolkentry deleted'; + if (response != '') { + post.style.display = 'none'; + deleted = false; + } else { + loadXMLDoc('ajaxDelete.php?id=' + input); + } +} + +function previousElement(ele) { + ele = ele.previousSibling; + while (ele.nodeType != 1) { + ele = ele.previousSibling; + } + return ele; +} + +function isAvailable(input, response){ + var usernameField = document.getElementById("username"); + var username = usernameField.value; + username = username.toLowerCase(); + username = username.trim(); + var availability = document.getElementById("availability"); + if (username != '') { + usernameField.style.backgroundImage = 'url(loading.gif)'; + if (response != '') { + usernameField.style.backgroundImage = 'none'; + if (response == 'true') { + availability.className = 'available'; + availability.innerHTML = ''; + } else { + availability.className = 'not-available'; + availability.innerHTML = ''; + } + } else { + loadXMLDoc('ajaxIsAvailable.php?username=' + username); + } + } +} + +function useAddress(ele) { + var address = ele.value; + if (address != '') { + if (address.indexOf(':') < 0) { + address = 'http:\/\/' + address; + } + getTitle(address, null); + ele.value = address; + } +} + +function getTitle(input, response){ + var title = document.getElementById('titleField'); + if (title.value == '') { + title.style.backgroundImage = 'url(loading.gif)'; + if (response != null) { + title.style.backgroundImage = 'none'; + title.value = response; + } else if (input.indexOf('http') > -1) { + loadXMLDoc('ajaxGetTitle.php?url=' + input); + } else { + return false; + } + } +} + +var xmlhttp; +function loadXMLDoc(url) { + // Native + if (window.XMLHttpRequest) { + xmlhttp = new XMLHttpRequest(); + xmlhttp.onreadystatechange = processStateChange; + xmlhttp.open("GET", url, true); + xmlhttp.send(null); + // ActiveX + } else if (window.ActiveXObject) { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + if (xmlhttp) { + xmlhttp.onreadystatechange = processStateChange; + xmlhttp.open("GET", url, true); + xmlhttp.send(); + } + } +} + +function processStateChange() { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + response = xmlhttp.responseXML.documentElement; + method = response.getElementsByTagName('method')[0].firstChild.data; + result = response.getElementsByTagName('result')[0].firstChild.data; + eval(method + '(\'\', result)'); + } +} + +function playerLoad() { + var anchors = document.getElementsByTagName('a'); + var anchors_length = anchors.length; + for (var i = 0; i < anchors_length; i++) { + if (anchors[i].className == 'taggedlink' && anchors[i].href.match(/\.mp3$/i)) { + _playerAdd(anchors[i]); + } + } +} \ No newline at end of file diff --git a/licence.txt b/licence.txt new file mode 100644 index 0000000..72188c3 --- /dev/null +++ b/licence.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. \ No newline at end of file diff --git a/loading.gif b/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..859126e69bb2e3d8b7ccced596b4c47eef5c5bba GIT binary patch literal 1582 zcmZ{j`9Bj59LDFKIc6j0TyxFb_my+*b4I6Il1hal$`K>xHb-;hCd$=PgfJ~fxk8Sj zoFPOdA-3=8``h>B`}qT&=k+|F_hVsYuC3$61>gcKQvtN2qobpzr)OYbU}R)uVq#)u zW@cew0Rn-ntgIjqh>eYnot>S7gM*Wk6AT7(adAN)5GWMN&CSij!*lG|F@_CMGT}4u``fBqSsyC8eaKq@|^0WMmKsgsiMA z5{Zs3rxW2x=fq{Xcp`nqHk+HF{iHQjcg)%iYH8V3aH#fJiu&}hWw6e0Ywzjshv9Yza zwX?Icx3_n2a6qHcj*gBP493aH$=TWY#EBCpPo6w=>eT7er_Y=@bN1|67Z(>-S64ST zH+Oe;4-XGdPfsr|FK=(}bLYetv!zFJ8QK>C)xPm;L?yuUxru z_3G7Y*RBNw1Ox^K1_cFOzkdD3jT^zi!66|bH*eky4Gj$o3%hme*6rK3!^6WPA|fIq zBcr0C?%cT(9UUDL6NANKV`F3E;^OY!y&E4NpOBD%!{HJW6O)pXl9Q8DQc_Y=Q`6GY z($mv3GBWUZd}d~5R#sMac6Lrq&b@p02n0fIZf;&)UVeUlK|#U&`}YeA3yX@1ii?X& zN=iygOUug2%FD|uDk>@~D<3>~P*qh`U0wa~;loFd9@W&;)YjJ4)z#J4*EcjYJbwI` zNF+Xa@}#k`@#)j2&z?PNYHDh3Zhrp!c}q)6Yiny;Tic5lFWTGNJ32Z#J3C1vQdd{k z%a~P0*xug$ z`Sa(_&d#r2zjk+b_xASo_xFGQ{(W$8aCmq~p-`w)syLO+-pttvWsEjcRa9o6qwPU_ zkC6!kpaA6mjN{Kt06=3vE9-jqdJzdrWk$*;3>SArvkMvU@I&TIV>pD}`w3g#W+~i; zA?&%|;O00Hn@UqF{1Pfdf-lH*6*_MlO-FZ>sy*Ov@7zv(F)3;WiiCyIRO1u8JILm|s8k0vY-%qvMyF6oTpfPl6wGQ7!Hu-ty@$k0m(9GSua zaLBqn@vns}EOg7$B#z3cslLkvC*fw0CS(Gn)FN3>ixb9=@gikVtSM^Rm?dMph*rC; zz^D%@Ps4cJ6&EPegEy2&W#3m4JE|!(?HOz44PwT=RH!t}uR+Wtj#WrEwhHat6wlMj zI=upxFpYufVUmGCWj%>ZcBuyw=vgZ~vsr56F23SbHm}lP`JR%`U_2}eIgN1kGCIn{ zfyNOGkv`Rd1yUg}Kjk^nRSMkNe+6AkPT=9@Y$HI#NjOf?$n6Q*JMbXB5L7kBvo{NA z^UQT`v$P|ZLuuX=5hyd1ub@YtBB1&=2;F~JwWXB>>;21WORx}v76c38gN6fDXjDOt zX_ga|7fj;8`bb6`y4)mHx;3K)K@>wp$qK6`hXsfY|?6dS$m>B_j{{T@h BuAl$_ literal 0 HcmV?d00001 diff --git a/locales/de_DE/LC_MESSAGES/messages.mo b/locales/de_DE/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c78acb13eeef7068bc426992039c3696e9dabb0 GIT binary patch literal 16513 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 literal 0 HcmV?d00001 diff --git a/locales/de_DE/LC_MESSAGES/messages.po b/locales/de_DE/LC_MESSAGES/messages.po new file mode 100644 index 0000000..208f26f --- /dev/null +++ b/locales/de_DE/LC_MESSAGES/messages.po @@ -0,0 +1,808 @@ +# Scuttle de-DE Translation +# Copyright (C) 2005 - 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# Ogee +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-03-27 01:41-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: de-DE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: German\n" +"X-Poedit-Country: Germany\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Über" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "Du hast keine Rechte diesen Favoriten zu löschen" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "Favorit löschen ist fehlgeschlagen" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Alle Tags" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "Mitglied %s wurde nicht gefunden" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "Mitglied %s wurde nicht gefunden" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Favoriten Titel und Adresse fehlt" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Favorit gespeichert" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Favorit konnte nicht gespeichert werden. Bitte versuche es erneut oder kontaktiere den Administrator" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Favorit hinzufügen" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Favorit hinzufügen" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Um Favoriten hinzuzufügen must Du Dich zuerst einloggen" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "Meine Favoriten" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Favorit bearbeiten" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Favorit mit der id %s wurde nicht gefunden" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "Du hast keine Rechte diesen Favoriten zu bearbeiten" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Fehler beim Speichern Deines Favoriten" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "Fehler beim Löschen dieses Favoriten" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Änderungen speichern" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() wurde öfters aufgerufen." + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "SQL Fehler" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Linie" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Verzeichnis" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "Information" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Kritische Information" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "Ein Fehler ist aufgetreten" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "Genereller Fehler" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "Ein kritischer Fehler ist aufgetreten" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Kritischer Fehler" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "Prüfungs Modus" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "Verlauf" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "Verlauf von %s" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "Addresse wurde nicht gefunden" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "Kann XML Input nicht öffnen" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XML Fehler: %s in Linie %d" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importiere Favoriten von del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "Du hast diesen Favoriten schon eingetragen" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "Favorit importiert" + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "Importiere Favoriten eines Browsers" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Du bist jetzt ausgeloggt" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: neue Favoriten" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "Speicher, Teile und Tagge Deine Favoriten" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Neue Favoriten" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "Bist Du sicher?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "Ja" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "Nein" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "Vorhanden" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "Nicht Vorhanden " + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "Die Details die Du eingetragen hast sind nicht korrekt. Bitte versuche es erneut." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Login" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Du must Deinen Mitgliedsnamen eingeben" + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "Du musst Deine E-Mail Addresse angeben." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "Keine Resultate zu diesem Mitgliedsnamen gefunden" + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "Keine Resultate gefunden für den Mitgliedsnamen und diese e-mail Addresse." + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "Fehler beim generieren des Passwortes. Bitte versuche es erneut." + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "Dein neues Passwort:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "Um Deine Favoriten sicher zu bewahren, solltest Du Dein Passwort beim nächsten Login in Deinem Profil ändern." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "%s Account Information" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Neues Passwort wurde generiert und an %s gesendet" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "Vergessenes Passwort" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Populäre Tags" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Mitgliedsname wurde nicht spezifiziert" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "Mein Profil" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profil" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "Passwort und Bestätigung passen nicht zusammen." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "Passwort muss mindestens 6 Zeichen lang sein." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "E-Mail Adresse ist unzulässig." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "Eine Fehler trat beim Speichern Deiner Änderungen auf." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "Änderungen gespeichert." + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "Du musst einen Mitgliedsnamen, Passwort und eine E-Mail Addresse angeben." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Dieser Mitgliedsname existiert schon. Bitte versuche einen anderen." + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "E-Mail Adresse ist unzulässig. Bitte versuche es erneut." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "Du hast Dich erfolgreich registriert. Viel Spass!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Registrierung fehlgeschlagen. Bitte versuche es erneut." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registrieren" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "Suche in" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "Favoriten dieses Benutzers" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "Meine Favoriten" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "Meine Beobachtungsliste" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "Alle Favoriten" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "nach" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Suche Favoriten" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "Suche Resultate" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Tags" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s Favoriten" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Mitglied wurde von Deiner Beobachtungsliste entfernt" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Mitglied wurde zu Deiner Favoritenliste hinzugefügt" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "Meine Beobachtungsliste" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "Beobachtungsliste" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Speicher alle Deine Webseiten-Favoriten an einem Ort, von überall erreichbar." + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Teile Deine Webseiten-Favoriten mit Anderen, Deinen Freunden oder speichere sie für Dich privat." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Tagge Deine Webseiten-Favoriten mit so vielen Schlagwörtern wie Du möchtest, ansatt sie in unübersichtlichen Verzeichnissen zu speichern." + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "Registriere Dich jetzt und verwende %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Geek Stuff" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s basiert auf einem Open-Source Projekt lizensiert unter der GNU General Public Lizenz. Das bedeutet, Du kannst es kostenlos auf Deinem Server im Internet verwenden, einem privaten Netzwerk oder auf Deinem eigenen Computer." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s unterstützt die del.icio.us API. Fast alle del.icio.us Tools können so modifiziert werden das %1$s sie verwenden kann. Findest Du ein inkompatibles Tool, so Frage beim entsprechenden Service nach. Du weisst nie - vielleicht wird Dir geholfen." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "Sortieren nach:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Datum" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Titel" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Bearbeiten" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Löschen" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "von" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "und %s1 andere%s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "und %2$s%1$s andere%3$s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Kopieren" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "Erste" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Neuer" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Älter" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "Letzte" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Seite %d von %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Keine Favoriten verfügbar" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "Favorit" +msgstr[1] "Favoriten" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Adresse" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Erforderlich" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Beschreibung" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Mit Komma trennen" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Status" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Öffentlich" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Zur Beobachtungsliste hinzufügen" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Privat" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Favorit löschen" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Ziehe einen der folgenden Bookmarklets in Deine Browser Favoriten und klicke es an wann immer Du eine Seite zu %s hinzufügen möchtest" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Hinzufügen zu %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Hinzufügen zu %s (Pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importieren" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importiere Favoriten aus einer Datei" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox und Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importiere Favoriten aus del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "Account Details" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Mitgliedsname" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Neues Passwort" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "E-Mail" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "Persönliche Details" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Name" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Homepage" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "Nicht gefunden" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "Die URL konnte auf diesem Server nicht gefunden werden" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Genereller Server Fehler" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "Die URL konnte nicht fortgeführt werden" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Logge Dich ein auf die del.icio.us Export Seite" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Speicher die resultierende XML Datei auf Deinem Computer" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Klicke Browse... um die Datei auf Deinem Computer zu finden. Dateigröße darf nicht größer sein als 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Wähle den Status für Deine importierten Favoriten" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Klicke Importieren um Deine Favoriten zu importieren; das kann eine Weile dauern" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Anleitung" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Exportiere Deine Browser Bookmarks in eine Datei" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: Datei > Importieren und Exportieren... > Exportiere Favoriten" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Favoriten > Manage Favoriten... > Datei > Exportieren..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Favoriten > Manage Favoriten... > Tools > Exportieren..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Klicke Browse... um die gespeicherte Favoriten Datei auf Deinem Computer zu finden. Dateigröße darf nicht größer sein als 1MB" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Passwort" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr " 2 Wochen lang nicht nach meinem Passwort fragen" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "Passwort vergessen?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Du hast Dein Passwort vergessen? Kein Problem - %s kann ein Neues für Dich generieren. Gebe Deine Email Adresse und Mitgliedsnamen ein und Dir wird ein neues Passwort zugesendet." + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "Neues Passwort erstellen" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Mitglied seit" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "Beobachten" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "Beobachtet von" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Hier kannst Du Dich kostenlos für einen %s Account registrieren. Fülle dafür die folgenden Formularfelder vollständig aus." + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Neue Favoriten in %s hinzugefügt" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Keine Favoriten gefunden" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "Neueste Tags" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Verwandte Tags" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Aus Beobachtungsliste entfernen" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Zur Beobachtungsliste hinzufügen" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "Aktionen" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "Alphabet" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "Popularität" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "Favoriten" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Logout" + diff --git a/locales/dk_DK/LC_MESSAGES/messages.mo b/locales/dk_DK/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..a46c7152148ef5f8e417eed18cebb09c6e62b49a GIT binary patch literal 16304 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 Co)s +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-04-16 22:04-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: dk-DK \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Danish\n" +"X-Poedit-Country: DENMARK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Om programmet" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "Du har ikke tilladelse til at slette dette bogmærke" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "Kunne ikke slette bogmærket" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Alle mærker" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "Bruger med brugernavn %s kunne ikke findes" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "Bruger med brugernavn %s kunne ikke findes" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Dit bogmærke skal have bÃ¥de en titel og en adresse" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Bogmærke gemt" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Der opstod en fejl, ved forsøg pÃ¥ at gemme dit bogmærke. Prøv venligst igen eller kontakt Administrator" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Tilføj et bogmærke" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Tilføj bogmærke" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Du skal være logget ind før du kan tilføje bogmærker" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "Mine bogmærker" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Rediger bogmærker" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Bogmærke med id %s kunne ikke findes" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "Du har ikke tilladelse til at redigere dette bogmærke" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Der opstod en fejl, ved forsøg pÃ¥ at gemme dit bogmærke." + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "Kunne ikke slette bogmærket" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Gem ændringer" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() blev kaldt flere gange" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "SQL fejl" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Line" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Filer" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "Information" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Kritisk information" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "En fejl opstod" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "General fejl" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "En kritisk fejl opstod" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Kritisk fejl" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "DEBUG MODE" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "Historie" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "Historie for %s" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "Adressen kunne ikke findes" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "Kunne ikke Ã¥bne XML input" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XLM fejl: %s i line %d" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importere bogmærker fra del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "Du har allerede tilføjet dette bogmærke" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "Bogmærke importeret" + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "Importere bogmærker fra browser" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Du er nu logget ud" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Seneste bogmærker" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "Gem, del og mærk dine favorit links" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Seneste bogmærker" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "Er du sikker?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "Ja" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "Nej" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "Tilgængelig" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "Ikke tilgængelig" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "Detaljerne du har indtastet er forkerte. Prøv venligst igen." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Log ind" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Du skal indtaste dit brugernavn" + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "Du skal indtaste din E-mail adresse." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "Søgning gav igen resultat pÃ¥ det brugernavn." + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "Søgning gav igen resultat pÃ¥ den kombination af brugernavn og e-mail adresse." + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "Der opstod en fejl under genereringen af dit nye kodeord. Prøv venligst igen." + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "Dit nye kodeord er:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "FFor at bevare dine bogmærker sikrere, bør du skifte dette kodeord i din profil næste gang du logger ind." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "%s Konto oplysninger" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Nyt kodeord er blevet genereret og sendt til %s" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "Glemt kodeord" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Populære mærkater" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Brugernavn var ikke specificerede" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "Min profil" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profil" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "Kodeord og bekræftelse matcher ikke." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "Kodeordet skal mindst være pÃ¥ 6 karakterer." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "E-mail adressen er ikke gyldig." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "En fejl opstod ved forsøg pÃ¥ at gemme dine ændringer." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "Ændringer gemt." + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "Du skal indtaste et brugernavn, kodeord og e-mail adresse." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Brugernavnet eksistere allerede, vælg venligst et andet." + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "E-mail addressen er ikke gyldig. Prøv venligst igen." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "Du er nu succesfuldt registeret. God fornøjelse!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Registreringen fejlede. Prøv venligst igen." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registrere" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "Søg" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "denne brugers bogmærker" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "mine bogmærker" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "Min OvervÃ¥gningsliste" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "alle bogmærkerne" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "for" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Søge i bogmærker" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "Søge resultat" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Mærkater" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s Bogmærker" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Bruger fjernet fra din overvÃ¥gningsliste" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Bruger tilføjet til din overvÃ¥gningsliste " + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "Min OvervÃ¥gningsliste " + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "OvervÃ¥gningsliste" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Gem alle dine favorit links et sted, tilgængelig fra hvor som helst" + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Del dine bogmærker med alle, med vennerne pÃ¥ din overvÃ¥gningsliste eller behold dem private." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Marker dine bogmærker med sÃ¥ mange mærkater som du ønsker, i stedet for at kæmpe med mapper." + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "Register nu for at starte med at bruge %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Nørd Ting" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s er baseret pÃ¥ et Ã¥bent-kode projekt licenseret under GNU General Public License. Dette betyder at du kan hoste systemet pÃ¥ din egen server gratis, lige meget om det er pÃ¥ Internet, et privat netværk eller bare pÃ¥ din egen computer." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s understøtter de fleste del.icio.us API. Næsten alle de værktøjer udviklet til det system kan modificeres til at fungere med %1$s i stedet for. Hvis du finder et værktøj som ikke tillader at du fortager ændringer i API adresse, kunne du jo spørge udviklerne. Man ved aldrig det kunne jo være de ville." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "Sortere efter:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Dato" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Titel" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Redigere" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Slet" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "af" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "og %s1 andre%s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " og %2$s%1$s andre%3$s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Kopi" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "Første" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Forrige" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Næste" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "Sidste" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Side %d af %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Igen bogmærker tilgængelig" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "bogmærke" +msgstr[1] "bogmærker" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Adresse" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "PÃ¥krævet" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Beskrivelse" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Komma adskillelse" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Privat" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Offentligt" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Del med OvervÃ¥gningslisten" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Private" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Slet bogmærker" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bogmærkelet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Træk en af de følgende bogmærkeletter til din browsers bogmærker, og tryk pÃ¥ den hver gang du ønsker at tilføje den side du er pÃ¥ til %s" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Send til %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Send til %s (Pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importere" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importere bogmærker fra bogmærke fil" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox og Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importere bogmærker fra del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "Konto oplysninger" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Brugernavn" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Nyt kodeord" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "bekræft kodeord" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "Personlige detaljer" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Navn" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Hjemmeside" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "Ikke fundet" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "Den forespurgte adresse kunne ikke findes pÃ¥ denne server" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "General server fejl" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "Den forespurgte adresse kunne ikke afvikles" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Log ind pÃ¥ del.icio.us' eksport side" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Gem XML fillen pÃ¥ din computer" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Tryk Gennemse... for at finde denne fil pÃ¥ din computer. Filstørrelsen mÃ¥ maksimum være pÃ¥ 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Vælg den ønskede standart privatindstilling for dine importerede bogmærker" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Tryk Import for at starte med at importere dine bogmærker; dette kan tage et par minutter." + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Instruktioner" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Eksportere dine bogmærker fra din browser til en fil" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: Filer > Importer og eksporter... > Eksporter foretrukne emner" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Bogmærker > Arranger bogmærker... > Filer > Eksporter..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Bogmærker > Arranger bogmærker... > Værktøjer > Eksporter..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Tryk Gennemse... for at finde den gemte bogmærke fil pÃ¥ din computer. Filstørrelsen mÃ¥ maksimum være pÃ¥ 1MB" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Kodeord" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Søg ikke efter mit kodeord i 2 uger" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "Glemt dit kodeord?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Hvis du har glemte dit kodeord, kan %s generere et nyt et. Skriv brugernavnet og e-mail adressen pÃ¥ din konto i formularen nedenfor og vi vil sende dit nye kodeord til dig via e-mail." + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "Generere kodeord" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Medlem siden" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "OvervÃ¥ger" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "OvervÃ¥gede af" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Tilmeld dig her for at oprette en gratis %s konto. Alle forspurgte informationerne neden for er pÃ¥krævet." + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Seneste bogmærker sendt til %s" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Igen bogmærker fundet" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "Nylig mærker" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Lignede mærker" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Fjern fra OvervÃ¥gningslisten" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Tilføj til OvervÃ¥gningslisten" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "Aktion" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "Alfabet" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "Popularitet" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "Bogmærker" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Log ud" + diff --git a/locales/en_GB/LC_MESSAGES/messages.mo b/locales/en_GB/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..117308896ebc5e33468dda80f764918e2311716d GIT binary patch literal 493 zcmaKnO-{ow5QU3il_hHygTw*^Q<733btyvqp^6}FR03k_rfzEF*pclZdJs;+eK-ql z`RR_4o@~GQ#(ML)yYpUiwdJ(ubl|k@bmFwC(CNc9Tkc#jf0bzU!ZM4|44;@bTuA~C zS!JzY-h`D(TZ~Q4XV|TBgQ+6mCF2x(no;Xu>{H7KG<^RY{U$bA5CkN+JocUAK%B5w zzWQ{-U7&x4K?se2Gz0WQ$K6w7G1XKWL9NmRVyd&sK#vyXlnDV>#oDN6KgLa7P%i43 zDz4qI%qyBROc^Z*Fp0zNzXNd;4>r37b>HhLX_<5pmZjUpvNwBL3d&_0vIW(K*-mBW z7;d;#)H%~QkeQlsnG*=7+ +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-03-18 21:41-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: en-GB \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: English\n" +"X-Poedit-Country: UNITED KINGDOM\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "" + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "" + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "" + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "" + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "" + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "" + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "" + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "" + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "" + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "" + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "" + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "" + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "" + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "" + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "" + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "" + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "" +msgstr[1] "" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "" + diff --git a/locales/es_ES/LC_MESSAGES/messages.mo b/locales/es_ES/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..7812d2223935864bec1777830d418a1db0ded4cc GIT binary patch literal 14307 zcmchddyHIHeaBB}LcoM)!lMl>#}0PlvO8-#!8L1p6MMaW5U;&>*CeKC!=0Hsv)8_J z@8sS)yB<@ZOd$__tzS8?@t)> z36Otg?~{z_bA1%Np6d@j*_h{np9b#$zXxXE;injLC-^Yf1)um-W3C1VAXCiCK&^K_ z$WrEQAXCkI!E3+|fKLZM20jk_T);1bKgIReLCt^6(~Ow{uLGY5-VTcN6CnT0UHqr@ z&w*RP3*ZyLcZK^8ffd&u0z2T2>v$J@D=0c20TGG$4)`qazd@~cJis>S_}C9x@D6Y%n1bT_o#4-a9{@G~ zbD-qxn9Dm3o}MekpMvV$*ylEc?Q@%tU{Ch!N~6nN85 zdplYIwNDI6eg%lC&C5Z(_W&sR-yZPY0Urd#-(P^T#}9&%&p&|9ZozF_e;L&JkG;X$ z^>v`0ZwE!^E>O?+fp>$)K&|^8Q0x9ND7}3IoC7}vitlSNo-^Q$pw@dixE*{IC^`KZ zxF38Nyczr!*Z`l65lIhsfG+@lACw(^5nKho3jQQ`{Aay=E`gTo9w_;}9@KvC2Vu>8 z6qMY)0HQ+k@1WlQKKMNFG0*XIH3HrRVk+i7P;|W=yaoI?$kyh&py+(M_4+#mO5dkI zt$P~OduKq&?LKfoTzUg|n2A?o#JYd{xyF>-KLg?t=2IAv==m!6Lh#8bX8^tgyc_&1 zSb@_pDZRWKlpQ<-O8y@MuK_;;YQ4{c($6(_yj+q*#R^GBfe`6!48%%{WiZ-RRNzrg#!Yf*9mz734PC$OmK?SZnJbx`lW0+ju~ z6BHc}fr?9i2a3+mgPQ+EQ1ku`)IR?SVq)fMg!M{rGpKpL2kQCz!u5whz4zDP6!=+C zdix(x?@w_PS2IV!Yrtl}v!LWwfR6)z4b(cX1x4rELGkl2D0)8%N}itq9|FGu>b=)b zd%JuqD1JWxVshr6!5hKvf}-~Zhir`GJH2-rd;<7~pycu}coO_@xPR>qAGe1>XQ_y}tqF z*PjKo|JOjp|8Ib(#5{)!$>D|I_2Av0=)M<}J-z~zT;3G$9iaGm4=DQo1bh24qR|bx{1=@O)!_5!?D2`ST!Q$?^CLpyui$naMu%ImnoG-+at^ z72jXR*u%Ik+!u&n#O3(wfIUY2$@o$*EaNa^jUhYI=P8W0FwQZCjFRy?41Io+@pShM z-wgO$;IA^Izsb+^uum~FkZ=s7%yd9%V;u|82Vhrcr)X*j2AQN&-3|mU%2>f za1-MVj9VEwL!YyZz3!W@8K1%Tgc0lB)}7BSZ8_-o^P(zkFE1;bcWkv9+kKH;E#l7p zEvr@4pPiX$$7v&JC3#~|&b0H^Ow>=d%uU?ng=Vv`RZ^w#{w)Xk{WNJsRg!0RsmQxU z)axZ#*B;BNxadT!c+1>@rDOYM^v)bG*RTgtw|$hRH3?Z9Rkq6W6w0D@Y&$vYuX3*( zmQ~!dtthk27^>SzCyCokwd;9t&aNlbs&$+t855&+!yfC{VLq^(Bx~Eqt?5@<&$F8< zo5q!U+**yYZtU2HIvcgyMO>CsHY(4#o2>$hL`1G<+)5B$Tvc$^uxD65i`U}9p3Cy} zDZMbXy`;NZ*|P)W+RklKHO$u19?bJ|y{I@>>VhSjQ3>@(>SCFf`JiaUu-%OtSzOKZ zi~MZds>+$NHK>sD%$7MskoV(k+E2A%h9qiHK%8miLDq(<%PDnzeZA4m1`T$YY32Q4 z8h5IhZa;0TR=sq~+`gz)Im&L|)m`S#o~M9M|mR=giq7aTXU*YL^C0 zwzkLp_FlOw5>+pbveFA0vR7qn3HFxhR$=q?%&x~x1X@UlQg)|^<0-qo8bf=bxh%qT zapDXKnV=k)PS&C-M*5Z0KW{pTkCtuaz5W2hlk{ipsTjFbwmH(m2FqPYkuY4tK`%-W z!osu=He{-1U#W*(L=)Vjh`R|!Ry6vn{Vj8+!j;7Y#QDCNFkd!PR#8#eK`BSrT5cY# zwY(Y?@pz^qdqkbLX4%y+&m;{Qcc)0=tnGy1X0Jz8Yc+)qTl0P{j{6c+ua-_@yd5Sy zv7H>wEz*hB&_jYC(WI9&w^-N0*}V!ma=9BAf)${c95@&W2Q6j!LFGzW0R z+M(P1t=6E3 znVUW84W?kX3BoF)HL>C(?Bk1ADPqTa$y&FW18Z;+Az4#1Vw0XCa@=l=Z?O>jj%GMJ zNZJ^Z<6t8v^(+FLnRh{rK&AH^W**->XZM|Jw&xBO`Fa^Q8jXE3x|E5!04e`+vqwI{ zeOReIb>vQVg_*tRe9{~AY?)l}q0`L`u^ETmxp?r(Hf8RQZ<}LIfMdqI?|HFGAL6lD zM}WPGExl-HtLR)zKp|BTF3f!1>qXOL+>Z*vOPlNdkpBj0+lgFp*WR^w9NQ(jnEBdJ z7Gx;n%VQa#tmjgpIka%_^bxyw^3Z}g#FFMvjD~6$+wGya#O(UYp5~CtP|84xh`pih zM`cNvYrE@Rgv^*ka;S*9&RawF?&N8juZz)|Nj55_VP}XdG3b?#KemV>QDX@c=Bw3EvHH|Etz>oUGl6J{39 z%M}9MwZ?o5n&ib1=nTjl#+~p#n58~Jz9S|teKKhV<}k1EUr|=(Fc~qgDirMYsAYbe zIfA(Day965`0DeW*LQst(wB=C<|rXKFNQTbl_9F5c@LxN#wL^{tGK3~U2e-MdAPi( z>$ZcNh(xz8WjE}C$|+~d1NP0L9#2tY>{8Z92iSz;f)MUPXObZraW2E8g2GbVYwIx) zmlzmcckgJcn)_fr4db0Fz(|$2uM&fgDus2@^fND>GEp|xi`424i`181p<$K!W|*^K zl?f+1M$uOcTJoOK)OCWzj8gJmF=ZF?3vd}hAoXp2-m!iH?`TDRG$M&oNQ~ys`dBG$ z?6z*T*9KxFXK$JWQ2!)Y>S6Mz(r9UpN0`#_B#X`QT(z%*lf(*Ll3s%vMzzFcN^Q#Q znLd?LIYXY_G8cPia2`k@JRt&A8)h-?H8F_gBx}XyB0d8n2S+aCxLJ%cdGqM*h?z0N zBQDM2a6HkRz}ieLw;yrw6<5?d0>-PKz|@vPaAV;KyQ@u~+8wEvs@@PCj&veEUzrm* z|3*GeARDFA4Yz%c=N7TJwHjkYO8U+v-JzoPpa!c|_OPo6mL!|4)aD)jHzVTeFOHm6 zo^_HC;8o-++_^0pqZe#X2LO&Ls4R^!3cK4<3lvccV=HY+LCIvk<{5=XUD+(<{XrTP zz9d;vwd|Q5f3-I=XL``zZkCF8Ey)KZU#Nv!Lyx2u4qqLGHD8pQQ2UP5UEgqJPhGrn zQ#CC~Psg{8i>3{`B+AL~#n49GD9IX3OO+Qrfv4hLt|+DuFfO=G#rFBi&Z9GRVoF@kRs&kPO)1YsUb3_}UmMwFn-cXhMx&i69kX4r_ zW;u?E)@pzW%k}r|DYs?GbCvuqAhzR91R1_&ZVl_hoih@*b`t8cvAG#ny;JR}E_aM` z^1#@TDQ}#5R}gdCSIwGbUDm;uAP~o538F?`6v*Oo%GTRss!pFe zZb>Gg62h`Mc@VyEra^j2H zlx^N@b545h#98~ajZ%*8?V*j&GlLU--y3t!)q8lX&X=v#oFgl5s)b=za_i1ePM$Rt zI_|6fpK<~$SDgfWRSyj)sb3doM0fWla*_Wz3NxY=M`@C@#Gkqx&@hP7oF;oKU89KF zibqE}|FCfGMYxiGxs@-P;OuY2FZQK4v_bN2A=L<@FQeyWKW@1mig6YU83%_(rL9xQ ztTR_a7nw|P@Jw8qGok#`E@Y;B-IE>)E+>mxXg_RjOfl%Cwqd3-%UWOMpxH~P!$PyA zp4f0}x|tlbCCV;SbUYMY?tVFN2iDFYO@|n+KcsU2qGmdq4>!AsbyyDXqqC;EEnYvW zxzy#U_vF~7#oas3YrGn2k-MkGXttl{dGYNN=b?U0cLqgjquHft4h=h-9zH~HyQiJR zH*a_9;pnMiwx{Tb)jIou6b=F-!W87y7n(lSo_;Y|gs44hmwk(9)2UeH^YmibP1@53 z2i#WJDxwibJz6F-FC|vg2o#~Z=4i8BoFJ>+Ax-}^6eAMd`!&1ACmKQe~t#IS^ zuKFqsqV*gv`=CC(5=XsR8<*1y%XVMKoq>z|cD$pRWKlu)(M?}Gwzx3nbZ2A7rg;JZ zN||06_Ti+$(PrpdB-vh2YdzwkLX(=7h!kRuz zVN9ne>$}Tx|E|463_aO@b7nX1w>!7*-Q;_x1nEc(yok)tX@Rox(W<#o<8(vI=|^ss z62`A=n~C~xV_yA{w``DjbwtjKZApY_#d{-BkrKCwowRppNL5@6sw7P=L~Xw6*sKVx zYCI`WDrc9H@Ei9c!l>;J;x-cV-P;y*j+;-_(TvV=#fz?o+n}1IXQmJkXRQIdu<9VA z{Wjh5Q)bk5Ztcy&(+^>F$yPhzfL)NS&$6&TSG(nS|G|(q;k~PQTF7 zNxJC2m2AsB_gTZ97-TKSNlCAW<;0H_4MTT#H3I!IvW?Qo;?iZzLZ$|r2&14SZeL_k z7n{=+^n?eQ((#appc62XY$shh*3Bd?s$Ay;-x_WuGFqgaUt&!EZ++nf&d10M$|Qjn zW+DN4b$fxTF&I$>r_R61fmrJ&bo$4wVrMvmGKa0Eax+#X15sJyTEp$gZg^RmP(v8@ zi^%tcy%JPpwPeU7xD6h9NmF=Ug_2}>zl`lg3Uy zgAxXl+#KlQ`_S#xUSHNokv>n@3c@poeDD}~KF9hxpp5P*?zq}gg(Ja_7IG(Q)&i%2 zoSUPBEPN1`!#{nY>wC+Wdvv+kgeguwMH{-MJ{MZhp23HRh%Q2wM6@Em4U)?~KVhh) zTwAt3xyTxL!-t$QO4qny7HIkSJCbAFQ??!A8zD0?%H;ADykcHqk!NS+?Il$~)m2lQ4v(SDza_k$Vfpq8w;aD}na-HbEsNVUe22n<>g z(1$wxJfxW^X$cv-E_9B}Q3}gM`qn2WsoUZ5CoT{*3t}c2&gDfMkfPlzxL+!KKRTzQ zr8eJW>aw9#ZD>TFw1*a!PM3KfzkskLEfi8aFIe8jyUD6R0eu$Qj|jU8LxJAhcH6Nqof~6%t_)N33?(O zC;-54@LX7?35Kz`87^n8={GU*obsrT&jH2<+uXOH;ZB`sNcZ+g3jp6#W@!&v8$1-B zb6z4#t0${trBY@hDw6Og`A~sU+gH#A3pJfwCnZ8Znxm8IkMIn$3=|#k)~P;Dk6%^I z$#hMGv5gZoKN?Zn5iW6Xr|r;w4p+WmmLg#2=l4`zEkYAIiPG^mX#i<0ZHs(nZ~`T> z(!H?x#vNTB+S{pG83jiXCE08cuSNX6PFaTVE~p?H)X@>UWqsFEAUe9=RYw7nh#1t5 z19L)#Z>Ffx!bwLl8Vl%B7pOi{ABMgeQ`RtlU;Vj#y(~ft8Ku?^7=-9Uer8Y926ovA z6E(7)7x~yO>IFim7{5Mg)v&l>iA&rK4|EM_1ye%kB^~BVJJLg2_f;>Q9XhSSJ|T=a09)H~O&UG(is~wNe0YZe!cS;-Ph^_CD1L%{kVx~P2!HKB*@j{2@! zjZ`Cpre>+gDS|M?DPM3Xt%QTd##}x+;fz(t?{(OyqYG8nRRTqd%4OWq**%5z|6vli zh5F{4-S|T~+4aU+cI4Pm@b++{&Y9wG7PS za$G-)+59Sp3^#KGKv5$BxQe*e&(IkXC4an)>HNJG-9hKU{ak-~=xM8~ZC3)-Mnl~3 z`AC`x%bDf6*5>9YflyLcleUHbssIhGz1m4KLnt8jW1((rY^c{E!3Cf-m6;qiTalXE LN=AgRkuLrhX8BWY literal 0 HcmV?d00001 diff --git a/locales/es_ES/LC_MESSAGES/messages.po b/locales/es_ES/LC_MESSAGES/messages.po new file mode 100644 index 0000000..73567fb --- /dev/null +++ b/locales/es_ES/LC_MESSAGES/messages.po @@ -0,0 +1,826 @@ +# Scuttle es-ES Translation +# Copyright (C) 2005 - 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# Francisco Portero +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-12-16 06:31+0200\n" +"PO-Revision-Date: 2006-03-26 14:28-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: es-ES \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Acerca de" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "No puede borrar estos enlaces" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "Error al borrar los enlaces" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Todas" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "No se encontro el usuario %s" + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "No se encontro el usuario %s" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Su enlace debe tener un título y una dirección" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Enlace salvado" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Hay un error al salvar su enlace. Por favor intentelo de nuevo o contacte con el administrador." + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Agregar" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Agregar Enlace" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Debe introducir su usuario y contraseña para poder agregar enlaces" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "Mis Enlaces" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Editar enlace" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "El enlace con id %s no funciona" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "Usted no tiene permisos para editar este enlace" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Se ha producido un error al salvar su enlace" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "Fallo al borrar el enlace" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Guardar Cambios" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() requerido en varios ocasiones." + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "Error de SQL" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Línea" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Archivo" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "Información" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Información Critica" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "Ha habido un error" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "Error General" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "Ha habido un error critico" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Error Critico" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "MODO DEPURACION" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "Historial" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "Historial de %s" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "La dirección no existe" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "No se pude abrir la entrada XML" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "Errores: %s en la linea %d del XML" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importar enlaces de del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "Usted ya ha agregado este enlace" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "Enlaces importados." + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "Importar enlaces de un Navegador" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Usted esta ahora desconectado" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Enlaces recientes" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "Almacene, navege y etiquete sus enlaces favoritos" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Enlaces Recientes" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "Esta usted seguro?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "Si" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "No" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "Disponible" + +#: ..\..\..\jsScuttle.php:71 +#, fuzzy +msgid "Not Available" +msgstr "No hay enlaces disponibles" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "Los datos introducidos son incorrectos. Por favor intentelo de nuevo." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Acceder" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Introduzca su nombre de usuario" + +#: ..\..\..\password.php:35 +#, fuzzy +msgid "You must enter your e-mail address." +msgstr "Debe especificar usuario, clave, nombre y correo electrónico." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "No se encuentra ningún usuario con ese nombre" + +#: ..\..\..\password.php:45 +#, fuzzy +msgid "No matches found for that combination of username and e-mail address." +msgstr "Debe especificar usuario, clave, nombre y correolectrónico." + +#: ..\..\..\password.php:53 +#, fuzzy +msgid "There was an error while generating your new password. Please try again." +msgstr "Hay un error al salvar su enlace. Por favor intentelo de nuevo o contacte con el administrador." + +#: ..\..\..\password.php:57 +#, fuzzy +msgid "Your new password is:" +msgstr "Confirmar la nueva clave" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "Para que sean seguros sus enlaces, debe cambiar la clave de su usuario en el siguiente acceso" + +#: ..\..\..\password.php:60 +#, fuzzy, php-format +msgid "%s Account Information" +msgstr "Información" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Se ha creado una nueva clave y se ha enviado a %s" + +#: ..\..\..\password.php:69 +#, fuzzy +msgid "Forgotten Password" +msgstr "Nueva clave" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Más visitadas" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Usuario no introducido" + +#: ..\..\..\profile.php:60 +#, fuzzy +msgid "My Profile" +msgstr "Mi Pérfil" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Pérfil" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "La clave y su confirmación no es correcta." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "La clave debe tener al menos 6 acracteres." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "Correo incorrecto." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "Ha habido un error al guardar los cambios." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "Cambios guardados." + +#: ..\..\..\register.php:33 +#, fuzzy +msgid "You must enter a username, password and e-mail address." +msgstr "Debe especificar usuario, clave, nombre y correo electrónico." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Este usuario ya existe, por favor introduzca otro." + +#: ..\..\..\register.php:41 +#, fuzzy +msgid "E-mail address is not valid. Please try again." +msgstr "Correo incorrecto." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "El registro ha sido correcto. Puede continuar!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Registro erroneo. Por favor intentelo de nuevo." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registrarse" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "Buscar" + +#: ..\..\..\search.inc.php:35 +#, fuzzy +msgid "this user's bookmarks" +msgstr "enlaces de %s" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "mis enlaces" + +#: ..\..\..\search.inc.php:41 +#, fuzzy +msgid "my watchlist" +msgstr "mis consultados" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "todos" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "por" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Buscar Enlaces" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "Buscar Resultados" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Etiquetas" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "Enlace de %s" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Usuario borrado de consultados" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Usuario agregado a consultados" + +#: ..\..\..\watched.php:105 +#, fuzzy +msgid "My Watchlist" +msgstr "Mis Consultados" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "Consultados" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Guarde todos sus enlaces favoritos en un lugar y acceda desde donde quiera." + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Comparte tus enlaces, solo con los amigos de la lista de consultados o manténgalos privados.." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Etiquete sus enlaces con tantas etiquetas como usted desea, en lugar de pellearse con las carpetas." + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "Registrese ahora para usar %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Adelante" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s esta basado en un proyecto de codigo abierto licenciado bajo GNU General Public License. Esto quiere decir que usted puede instalarlo en su propio web server para uso libre, en una red privada o en su propia computadora." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s esta basado en la API de del.icio.us API. La mayoría de las herramientas utilizadas para construir este sistema se pueden modificar para trabajar con %1$s. Si usted encuentra una herramienta en la que no puede modificar la direccion de la API, pregunte al creador si puede cambiar esta configuración. Nunca se sabe, puede que ya se haya cambiado esa configuración." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "Por:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Fecha" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Título" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Editar" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Borrar" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "por" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, fuzzy, php-format +msgid " and %s1 other%s" +msgstr " y %s mas" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, fuzzy, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " y %s mas" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Copiar" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "Primera" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Anterior" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Siguiente" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "Última" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Página %d de %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "No hay enlaces disponibles" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +#, fuzzy +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "enlace" +msgstr[1] "enlaces" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Dirección" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Requerido" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Descripción" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Con comas" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Permisos" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Público" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Compartido en Consultados" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Privado" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Borrar enlace" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Marcadores" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Arrastre los enlaces a los marcadores de su navegador y pulselos siempre que usted desee agregar la pagina que esta viendo a %s" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Agregar a %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Agregar a %s (Pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importar" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Improtar enlaces de un archivo" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox y Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importar los enlaces de del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "Detalles de usuario" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Usuario" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Nueva clave" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "Confirmar la clave" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "Correo" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "Datos del usuario" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Nombre" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Página web" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "No funciona" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "No se encontró la URL solicitada" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Error general del servidor" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "La URL solicitada no puede ser encontrada" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Registrese para exportar la pagina a del.icio.us" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Guardar los resultados en un archivo XML de su ordenador" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Pulse Examinar... para buscar el archivo en su ordenador. El tamaño maximo no puede ser superior a 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Elija los permisos para los enlaces importados" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Pulse Importar para comenzar a importar los enlaces, esto puede tartar algunos minutos" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Instrucciones" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Expote sus enlaces a su navegador a un archivo" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: Archivo > Importar y Exportar... > Exportar Favoritos" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Enlaces > Manejar Enlaces... > Archivo > Exportar..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Enlaces > Manejar Enlaces... > Utilidades > Exportar..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Pulse Examinar... para buscar los enlaces guardados en un archivo de us ordenador. El tamaño maximo no puede ser superior a 1MB" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Clave" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Recordar mi clave 2 semanas" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "Olvido su clave?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Si olvido su clave, %s puede crearle una nueva. Introduzca su direccion de correo electrónico de su perfil en el formulario siguiente y se le enviara una nueva clave" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "Correo" + +#: ..\..\..\templates\password.tpl.php:19 +#, fuzzy +msgid "Generate Password" +msgstr "Nueva clave" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Miembro desde" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +#, fuzzy +msgid "Watching" +msgstr "Consultados" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "Consultado de" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Inserte los datos para crear una cuenta gratis en %s. Es cesaria toda la informacion requerida" + +#: ..\..\..\templates\rss.tpl.php:9 +#, fuzzy, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Enlaces recientes agregados a %s" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "No se han encontrado enlaces" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "Recientes" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Etiquetas mencionadas" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Borrar de Consultados" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Agregar a Consultados" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "Instrucciones" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "Alfabético" + +#: ..\..\..\templates\tags.tpl.php:9 +#, fuzzy +msgid "Popularity" +msgstr "Mas visitadas" + +#: ..\..\..\templates\toolbar.inc.php:11 +#, fuzzy +msgid "Bookmarks" +msgstr "Enlaces" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Salir" + diff --git a/locales/fr_FR/LC_MESSAGES/messages.mo b/locales/fr_FR/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..d91e8451f450508cd57a7684c95acc36aa87e73b GIT binary patch literal 13738 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 RrPd6rAz>x!wgWP0{s+(}5yb!i literal 0 HcmV?d00001 diff --git a/locales/fr_FR/LC_MESSAGES/messages.po b/locales/fr_FR/LC_MESSAGES/messages.po new file mode 100644 index 0000000..96572aa --- /dev/null +++ b/locales/fr_FR/LC_MESSAGES/messages.po @@ -0,0 +1,835 @@ +# Scuttle fr-FR Translation +# Copyright (C) 2005 - 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# +# nitram +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-11-10 16:58+0100\n" +"PO-Revision-Date: 2006-03-26 14:29-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: fr-FR \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: French\n" +"X-Poedit-Country: FRANCE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "À propos" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "Vous ne pouvez pas supprimer ce signet." + +#: ..\..\..\ajaxDelete.php:33 +#, fuzzy +msgid "Failed to delete bookmark" +msgstr "Erreur de suppression du signet" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Tous les labels" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "L'utilisateur %s n'a pas été trouvé." + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "L'utilisateur %s n'a pas été trouvé." + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Votre signet doit avoir un titre et une adresse." + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Signet enregistré." + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou contacter votre administrateur." + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Ajouter un signet" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Ajouter signet" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Vous devez être authentifié avant de pouvoir ajouter des signets." + +#: ..\..\..\bookmarks.php:213 +#, fuzzy +msgid "My Bookmarks" +msgstr "Mes signets" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Editer le signet" + +#: ..\..\..\edit.php:34 +#, fuzzy, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Signet non trouvé" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "Vous n'êtes pas autorisé à éditer ce signet." + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Erreur pendant l'enregistrement de votre signet." + +#: ..\..\..\edit.php:78 +#, fuzzy +msgid "Failed to delete the bookmark" +msgstr "Vous ne pouvez pas supprimer ce signet." + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Enregister les modifications" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() was called multiple times. ?" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "Erreur SQL" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Ligne" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Fichier" + +#: ..\..\..\functions.inc.php:116 +#, fuzzy +msgid "Information" +msgstr "Instructions" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Information critique." + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "Une erreur s'est produite." + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "Erreur générale." + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "Une erreur critique s'est produite." + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Erreur critique." + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "Mode de débogage." + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "Historique" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "Historique de %s" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "L'adresse n'a pas été trouvée." + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "Impossible d'ouvrir le flux XML." + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "Erreur XML: %s à la ligne %d" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importer les signet depuis del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +#, fuzzy +msgid "You have already submitted this bookmark." +msgstr "Vous avez déjà enregistré ce signet" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +#, fuzzy +msgid "Bookmark imported." +msgstr "Signets importés." + +#: ..\..\..\importNetscape.php:81 +#, fuzzy +msgid "Import Bookmarks from Browser File" +msgstr "Importer les signets depuis un fichier" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Vous êtes maintenant déconnecté." + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Signets récents" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "Conservez, partagez et taggez vos liens favoris" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Signets récents" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "Etes-vous sûr ?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "Oui" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "Non" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "Disponible" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "Non Disponible" + +#: ..\..\..\login.php:38 +#, fuzzy +msgid "The details you have entered are incorrect. Please try again." +msgstr "Les informations que vous avez entrées sont incorrectes. Veuillez recommencer." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Se connecter" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Vous devez entrer votre nom d'utilisateur." + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "Vous devez saisir une E-mail." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "Rien de trouvé pour ce nom d'utilisateur." + +#: ..\..\..\password.php:45 +#, fuzzy +msgid "No matches found for that combination of username and e-mail address." +msgstr "Nous n'avons rien trouvé pour cette combinaison de nom d'utilisateur et d'e-mail." + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou contacter votre administrateur." + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "Votre nouveau mot de passe est:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "Pour garder vos signets sûrs, vous devriez changer ce mot de passe dans votre profil lors de votre prochaine authentification." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "Informations du compte de %s" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Nouveau mot de passe généré et envoyé à l'adresse %s" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "Mot de passe oublié" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Labels populaires" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Le nom d'utilisateur n'a pas été spécifié." + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "Mon Profil" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profil" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "Le mot de passe et sa vérification ne correspondent pas." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "Le mot de passe doit avoir au moins 6 caractères." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "Adresse de courrier électronique invalide." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "Une erreur s'est produite pendant l'enregistrement de vos modifications." + +#: ..\..\..\profile.php:94 +#, fuzzy +msgid "Changes saved." +msgstr "Modifications enregistrées." + +#: ..\..\..\register.php:33 +#, fuzzy +msgid "You must enter a username, password and e-mail address." +msgstr "Vous devez saisir un nom d'utilisateur, un mot de passe, un nom et un E-mail" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Ce nom d'utilisateur existe déjà, veuillez en choisir un autre." + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "Adresse de courrier électronique invalide. Veuilez réessayer." + +#: ..\..\..\register.php:50 +#, fuzzy +msgid "You have successfully registered. Enjoy!" +msgstr "Votre inscription a bien été prise en compte !" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Enregistrement raté. Veuillez rééssayer." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "S'enregistrer" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "Chercher" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "les signets de cet utilisateur" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "mes signets" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "ma liste des consultés" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "tous les signets" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "pour" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Recherche de signets" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "Résulats de recherche" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Labels" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "Signets de %s" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Utilisateur enlevé de votre liste des consultés" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Utilisateur ajouté à la liste des consultés." + +#: ..\..\..\watched.php:105 +#, fuzzy +msgid "My Watchlist" +msgstr "Liste des signets vus" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "Liste des signets vus" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Gardez tous vos signets au même endroit, accessible partout. " + +#: ..\..\..\templates\about.tpl.php:7 +#, fuzzy +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Partagez vos signets avec tout le monde, les utilisateurs autorisés ou uniquement pour vous." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Taggez vos signets avec autant de labels que vous le souhaitez au lieu de les hierarchiser avec des dossiers." + +#: ..\..\..\templates\about.tpl.php:9 +#, fuzzy, php-format +msgid "Register now to start using %s!" +msgstr "Enregistrez-vous maintenant pour poster vos propres signets !" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "(Geek Stuff)" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s est basé sur un projet open-source, sous la license GNU General Public License. Vous pouvez donc héberger Scuttle sur votre propre serveur gratuitement, qu'il soit relié à Internet, dans un réseau privé ou juste sur votre ordinateur personnel." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s supporte la plupart de l'del.icio.us API." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "Classer par :" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Date" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Titre" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Editer" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Supprimer" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "par" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, fuzzy, php-format +msgid " and %s1 other%s" +msgstr " et les autres %s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, fuzzy, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " et les autres %s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Copier" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "Première" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Précédent" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Suivant" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "Dernière" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Page %d de %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Pas de signets disponibles." + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +#, fuzzy +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "Signet" +msgstr[1] "Signets" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Adresse" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Requis" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Description" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Séparés par des virgules" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Vision" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Publique" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Partagé avec liste d'accès" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Privée" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Supprimer le signet" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Déplacez l'un des 'bookmarklet' suivants dans les marques-pages de votre navigateur et cliquez dessus chaque fois que vous souhaitez ajouter un signet pour la page courante dans %s " + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Ajouter à %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Ajouter à %s (Pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importer" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importer les signets depuis un fichier" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox et Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importer les signets depuis del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "Détail du compte" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Nouveau mot de passe" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "Confirmer le nouveau mot de passe" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "Détails personnels" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Nom" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Page personnelle" + +#: ..\..\..\templates\error.404.tpl.php:5 +#, fuzzy +msgid "Not Found" +msgstr "Utilisateur inconnu" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "L'URL demandée n'a pas été trouvée sur ce serveur." + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Erreur généralisée du serveur." + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "L'URL demandée n'a pas été trouvée." + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Se connecter à la page d'export de del.icio.us" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Enregistrer le fichier XML résultant sur votre ordinateur" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Cliquez sur Parcourir... pour trouver le fichier sur votre ordinateur. La taille maximale du fichier ne peut excèder 1Mo" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Selectionnez la vision par défaut à appliquer à vos signets importés" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Cliquez sur Importer pour débuter l'import des signets; cette opération peut prendre quelques minutes" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Instructions" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Exporter vos signets dans un fichier depuis votre navigateur" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: Ficher > Importer et Exporter... > Exporter les favoris" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Marques-pages > Gérer les marques-pages... > Fichier > Exporter..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Marques-pages > Gérer les marques-pages... > Outils > Exporter..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Cliquez sur Parcourir... pour trouver le fichier sur votre ordinateur. La taille maximale du fichier ne peut excèder 1Mo" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Mot de passe" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Ne pas me demander le mot de passe pendant 2 semaines" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "Avez-vous oublié votre mot de passe ?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Si vous avez oublié votre mot de passe, %s peut en générer un nouveau. Entrez le nom d'utilisateur et l'adresse email de votre compte dans le formulaire ci-dessous et nous vous enverrons un nouveau mot de passe." + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +#, fuzzy +msgid "Generate Password" +msgstr "Nouveau mot de passe" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Membre depuis" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +#, fuzzy +msgid "Watching" +msgstr "Liste des signets vus" + +#: ..\..\..\templates\profile.tpl.php:50 +#, fuzzy +msgid "Watched By" +msgstr "Consultés" + +#: ..\..\..\templates\register.tpl.php:11 +#, fuzzy, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Enregistrez-vous ici pour vous créer un compte Scuttle gratuit. Toutes les inforamtions demandées ci-dessous sont nécessaires." + +#: ..\..\..\templates\rss.tpl.php:9 +#, fuzzy, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Signets ajoutés à Scuttle récement" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Pas de signets trouvés" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +#, fuzzy +msgid "Recent Tags" +msgstr "Labels en relation" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Labels en relation" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Enlever de la liste des consultés" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Ajouter à la liste des consultés" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "Instructions" + +#: ..\..\..\templates\tags.tpl.php:8 +#, fuzzy +msgid "Alphabet" +msgstr "Alphabet" + +#: ..\..\..\templates\tags.tpl.php:9 +#, fuzzy +msgid "Popularity" +msgstr "Labels populaires" + +#: ..\..\..\templates\toolbar.inc.php:11 +#, fuzzy +msgid "Bookmarks" +msgstr "Signets de %s" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Quitter" + diff --git a/locales/hi_IN/LC_MESSAGES/messages.mo b/locales/hi_IN/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..77f7c1e76aa438f112a68917c51fab6aec633eee GIT binary patch literal 24889 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 d{oEENqG_lv+^F)3f`vjFT+~BX=ukNe{}-VG57+ +# Ravishankar Shrivastava +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-04-16 21:56-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: hi-IN Debashish Chakrabarty \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Hindi\n" +"X-Poedit-Country: India\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "के बारे में" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "आपको इस पृष्ठ-स्मृति को मिटाने की अनुमति नहीं है." + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "पृष्ठ-स्मृति मिटाने में असफल" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "सभी टैग" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "%s नाम का कोई भी उपयोक्ता नहीं मिला" + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "%s नाम का कोई भी उपयोक्ता नहीं मिला" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "आपकी पृष्ठ-स्मृति के लिए एक शीर्षक तथा एक पता होना आवश्यक है" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "पृष्ठ-स्मृति सहेजी गई" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "आपकी पृष्ठ-स्मृति को सहेजने के दौरान एक त्रुटि हुई. कृपया फिर से कोशिश करें या प्रशासक से सम्पर्क साधें." + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "एक पृष्ठ-स्मृति जोड़ें" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "पृष्ठ-स्मृति जोड़ें" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "पृष्ठ-स्मृति जोड़ने से पहले आपका लॉगइन होना आवश्यक है." + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "मेरी पृष्ठ-स्मृतियाँ" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "पृष्ठ-स्मृति संपादन" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "पहचान चिह्न %s युक्त पृष्ठ-स्मृति नहीं मिला" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "आप इस पृष्ठ-स्मृति को संपादित नही कर सकते" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "पृष्ठ-स्मृति सहेजने के दौरान त्रुटि हुई" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "पृष्ठ-स्मृति मिटाने में असफल" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "परिवर्तन सहेजें" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() को कई मर्तबा काल किया गया." + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "एसक्यूएल त्रुटि" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "पंक्ति" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "फ़ाइल" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "जानकारी" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "जरूरी जानकारी" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "एक त्रुटि हुई" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "सामान्य त्रुटि" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "एक गंभीर त्रुटि हुई" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "गंभीर त्रुटि" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "डिबग मोड" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "इतिहास" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "%s का इतिहास" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "पता नहीं मिला" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "एक्सएमएल इनपुट खोल नहीं सकता" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "एक्सएमएल त्रुटि: %s में पंक्ति %d पर" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "del.icio.us से पृष्ठ-स्मृति आयात करें" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "आप इस पृष्ठ-स्मृति को पहले ही पेश कर चुके हैं" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "पृष्ठ-स्मृति आयातित." + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "ब्राउज़र फ़ाइल से पृष्ठ-स्मृति को आयात करें" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "अब आप लॉग आउट हैं" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: हालिया पृष्ठ-स्मृति" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "अपनी मनपसंद पृष्ठ-स्मृतियाँ सहेजें, साझा करें और टैग करें" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "हालिया पृष्ठ-स्मृतियाँ" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "पक्की बात ना?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "हाँ" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "नहीं" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "उपलब्ध" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "उपलब्ध नहीं" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "आपने जो विवरण भरे हैं वे गलत हैं. कृपया पुनः प्रयास करें." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "लॉग इन" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "आपका उपयोक्ता नाम प्रविष्ट करना ज़रूरी है." + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "ईमेल पता भरना आवश्यक है." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "इस से मेल खाता कोई उपयोक्ता नाम नहीं मिला." + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "इस उपयोक्ता तथा ईमेल पते से मेल खाता कोई जोड़ नहीं मिला." + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "आपका नया कूटशब्द बनाने समय कोई त्रुटि हुई है। कृपया पुनः प्रयास करें।" + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "आपका नया कूटशब्द हैः" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "अपनी पृष्ठ-स्मृतियाँ सुरक्षित रखने के लिये, जब आप अगली बार लॉगिन करें तो अपने प्रोफाईल में जाकर अपना कूटशब्द अवश्य बदल लें." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "%s खाते की जानकारी" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "नया कूटशब्द बना कर %s को भेज दिया गया है." + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "भूला कूटशब्द" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "लोकप्रिय टैग" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "उपयोक्ता नाम निर्दिष्ट नहीं है" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "मेरा प्रोफ़ाइल" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "प्रोफ़ाइल" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "कूटशब्द तथा उसका पुष्टिकरण मेल नहीं खाते" + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "कूटशब्द को कम से कम 6 अक्षर लंबा होना चाहिए" + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "ईमेल पता वैध नहीं है." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "आपके द्वारा किए गए परिवर्तनों को सहेजने के दौरान त्रुटि हुई." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "परिवर्तनों को सहेजा गया." + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "आपको उपयोक्ता नाम, कूटशब्द तथा ईमेल पता भरना आवश्यक है" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "यह उपयोक्ता नाम पहले ही मौजूद है, कृपया कोई दूसरा चुनें." + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "ईमेल पता वैध नहीं है." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "आप सफलता पूर्वक पंजीकृत हो गए हैं. बधाई!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "पंजीकरण असफल. कृपया फिर से कोशिश करें." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "पंजीकरण" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "ढूंढें" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "इस उपयोक्ता की पृष्ठ-स्मृतियाँ" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "मेरी पृष्ठ-स्मृतियाँ" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "मेरी निगरानी सूची" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "सभी पृष्ठ-स्मृतियाँ" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "के लिए" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "पृष्ठ-स्मृतियाँ ढूंढें" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "खोज परिणाम" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "टैग" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s पृष्ठ-स्मृतियाँ" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "आपकी निगरानी सूची से उपयोक्ता को मिटाया गया" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "उपयोक्ता को आपकी निगरानी सूची में जोड़ा" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "मेरी निगरानी सूची" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "निगरानी सूची" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "अपनी पसंद की कड़ियों को कहीं से भी पहुँच योग्य बनाने के लिए एक ही स्थल परसंचितकरें." + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "अपने पृष्ठ-स्मृति कड़ियों को सबके साथ, अपने निगरानी सूची के मित्रों के साथ साझा करें या निजी इस्तेमाल करें" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "अपनी पृष्ठ-स्मृति कड़ियों को किसी फोल्डर में ठूंसने के बजाए चाहे जितने लेबलों के साथटैग कर सकते हैं." + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "तुरंत पंजीकृत हों %s का इस्तेमाल करने के लिए!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "विद्वानों का खजाना" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s एक मुक्त स्रोत परियोजना पर आधारित है तथा इसेग्नू जनरल पब्लिक लाइसेंस के तहत जारी किया गया है. इसका अर्थ है कि आप इसे अपने स्वयं के वेब सर्वर पर चाहे इंटरनेट पर हो या निजी नेटवर्क पर या आपके व्यक्तिगत कम्प्यूटर पर, होस्ट कर सकते हैं." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s में प्रायः सभी del.icio.us एपीआई का समर्थन मिलता है. उस तंत्र के लिए बनाए गए प्रायः सभी औजारों को %1$s के लिए कार्य करने लायक परिवर्धित किया जा सकता है. यदि आपको कोई औजार ऐसा मिलता है जो आपको एपीआई पता बदलने नहीं देता है तो उसके सृजक को इस विन्यास को जोड़ने के लिए कहें. कौन जाने वे ऐसा भी कर लें." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "इस आधार पर छांटें:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "तारीख़" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "शीर्षक" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "यूआरएल" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "संपादन" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "मिटाएँ" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "द्वारा" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr " तथा %s1 अन्य%s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " तथा %2$s%1$s अन्य%3$s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "नक़ल करें" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "प्रथम" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "पिछला" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "अगला" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "अंतिम" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "%d में से पृष्ठ %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "कोई पृष्ठ-स्मृति उपलब्ध नहीं" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "पृष्ठ-स्मृति" +msgstr[1] "पृष्ठ-स्मृतियाँ" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "पता" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "आवश्यक" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "वर्णन" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "अल्पविराम से अलग की गई" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "गोपनीयता" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "सार्वजनिक" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "निगरानी सूची के साथ साझा" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "निजी" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "पृष्ठ-स्मृति मिटाएँ" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "पृष्ठ-स्मृति चिह्नक" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "निम्न पृष्ठ-स्मृति चिह्नकों में से किसी एक को अपने ब्राउज़र के पृष्ठ-स्मृति में खींच लाएँ व जब भी आप %s पर हों व कोई पृष्ठ जोड़ना चाहेँ तो उस पर क्लिक करें" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "%s को पोस्ट करें" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "%s को पोस्ट करें (पॉप-अप)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "आयात" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "पृष्ठ-स्मृति को पृष्ठ-स्मृति फ़ाइल से आयात करें" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "इंटरनेट एक्सप्लोरर, मॉज़िल्ला फ़ॉयरफ़ॉक्स तथा नेटस्केप" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "del.icio.us से पृष्ठ-स्मृति आयात करें" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "खाते की जानकारी" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "उपयोक्ता नाम" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "नया कूटशब्द" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "नया कूटशब्द सत्यापित करें" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "ईमेल" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "व्यक्तिगत जानकारी" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "नाम" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "गृहपृष्ठ" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "नहीं मिला" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "इस सर्वर पर निवेदित यूआरएल नहीं मिला" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "सामान्य सर्वर त्रुटि" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "निवेदित यूआरएल को प्रोसेस नहीं किया जा सका" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "del.icio.us के निर्यात पृष्ठ पर लॉगइन करें" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "परिणाम एक्सएमएल को अपने कम्प्यूटर पर सहेजें" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "इस फ़ाइल को अपने कम्प्यूटर पर ढूंढने के लिए ब्राउज़... पर क्लिक करें. फ़ाइल का अधिकतम आकार 1 मे.बा. तक हो सकता है" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "आपके आयातित पृष्ठ-स्मृति के डिफ़ॉल्ट गोपनीयता विन्यास चुनें" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "पृष्ठ-स्मृति आयात चालू करने के लिए आयात पर क्लिक करें, इसमें कुछ समय लग सकता है" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "निर्देश" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "अपने ब्राउज़र से अपने पृष्ठ-स्मृति को एक फ़ाइल में निर्यात करें" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "इंटरनेट एक्सप्लोरर: फ़ाइल > आयात व निर्यात... > पृष्ठ-स्मृतियाँ निर्यात करें" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "मॉज़िल्ला फ़ॉयरफ़ॉक्स: पृष्ठ-स्मृतियाँ > पृष्ठ-स्मृति प्रबंधन... > फ़ाइल > निर्यात..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "नेटस्केप: पृष्ठ-स्मृतियाँ > पृष्ठ-स्मृति प्रबंधन... > औजार > निर्यात..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "अपने कम्प्यूटर में सहेजे गए पृष्ठ-स्मृति फ़ाइलों को ढूंढने के लिए ब्राउज़... पर क्लिक करें. फ़ाइल का अधिकतम आकार 1मे.बा. तक हो सकता है." + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "कूटशब्द" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "कूटशब्द के लिए मुझसे 2 सप्ताह तक नहीं पूछें" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "अपना कूटशब्द भूल गये हैं?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "अगर आप अपना कूटशब्द भूल गये हों तो %s आपके एक नया कूटशब्द बना सकता है। खाते से संबद्ध अपना उपयोक्ता नाम और ईमेल पता नीचे प्रविष्ट करें और हम आपको एक नया कूटशब्द ईमेल कर देंगे." + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "ईमेल" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "नया कूटशब्द बनायें" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "सदस्यता अवधि" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "निगरानी में" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "द्वारा देखा गया" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "मुफ़्त %s खाता बनाने के लिए यहाँ साइन करें. नीचे निवेदित सभी जानकारियाँ आवश्यक हैं" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "%s को पोस्ट की गईं हालिया पृष्ठ-स्मृतियाँ " + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "कोई पृष्ठ-स्मृति नहीं मिली" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "हालिया टैग" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "सम्बंधित टैग" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "निगरानी सूची से मिटाएँ" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "निगरानी सूची में जोड़ें" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "निर्देश" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "वर्ण" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "लोकप्रियता" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "पृष्ठ-स्मृतियाँ" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "लॉग आउट" + diff --git a/locales/it_IT/LC_MESSAGES/messages.mo b/locales/it_IT/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..7662e54f3df7a6a192b1c83c09356b39807dc7ec GIT binary patch literal 9206 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 ZuN<=-(yki@V&uBYDU>)d$#)MK{{wF+Sw{c> literal 0 HcmV?d00001 diff --git a/locales/it_IT/LC_MESSAGES/messages.po b/locales/it_IT/LC_MESSAGES/messages.po new file mode 100644 index 0000000..46d86d3 --- /dev/null +++ b/locales/it_IT/LC_MESSAGES/messages.po @@ -0,0 +1,853 @@ +# Scuttle it-IT Translation +# Copyright (C) 2005 - 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-11-10 16:58+0100\n" +"PO-Revision-Date: 2006-03-18 21:51-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: it-IT \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Informazioni" + +#: ..\..\..\ajaxDelete.php:29 +#, fuzzy +msgid "You are not allowed to delete this bookmark" +msgstr "Non hai il permesso di eliminare questo preferito" + +#: ..\..\..\ajaxDelete.php:33 +#, fuzzy +msgid "Failed to delete bookmark" +msgstr "Eliminazione del preferito fallita" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Tutti i Tags" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "L'utente %s non è stato trovato" + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "L'utente %s non è stato trovato" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Il preferito deve avere un titolo ed un indirizzo" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Preferito salvato" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Si è verificato un errore salvando il tuo preferito. Riprova o contatta l'amministratore" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Aggiungi un preferito" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Aggiungi preferito" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Devi essere loggato per poter aggiungere dei preferiti" + +#: ..\..\..\bookmarks.php:213 +#, fuzzy +msgid "My Bookmarks" +msgstr "I Miei Preferiti" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Modifica Preferito" + +#: ..\..\..\edit.php:34 +#, fuzzy, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Il preferito con id %s non è stato trovato" + +#: ..\..\..\edit.php:39 +#, fuzzy +msgid "You are not allowed to edit this bookmark" +msgstr "Non hai il permesso per modificare questo preferito" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Errore salvando il preferito" + +#: ..\..\..\edit.php:78 +#, fuzzy +msgid "Failed to delete the bookmark" +msgstr "Eliminazione preferito fallita" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Salva Modifiche" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() è stato richiamato più volte." + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "Errore SQL" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Linea" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "File" + +#: ..\..\..\functions.inc.php:116 +#, fuzzy +msgid "Information" +msgstr "Informazioni" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Informazioni Importanti" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "Si è verificato un errore" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "Errore Generale" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "Si è verificato un errore critico" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Errore Critico" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "MODO DEBUG" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "Non posso aprire la fonte XML" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "Errore XML: %s alla linea %d" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importa Preferiti da del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +#, fuzzy +msgid "You have already submitted this bookmark." +msgstr "Hai già inserito questo preferito" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +#, fuzzy +msgid "Bookmark imported." +msgstr "Preferito importato" + +#: ..\..\..\importNetscape.php:81 +#, fuzzy +msgid "Import Bookmarks from Browser File" +msgstr "Importa Preferiti da un File del Browser" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Sei uscito dal sistema" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Preferiti recenti" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Preferiti Recenti" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "" + +#: ..\..\..\jsScuttle.php:71 +#, fuzzy +msgid "Not Available" +msgstr "Nessun preferito disponibile" + +#: ..\..\..\login.php:38 +#, fuzzy +msgid "The details you have entered are incorrect. Please try again." +msgstr "Le informazioni che hai fornito non sono corrette. Riprova." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Entra" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "" + +#: ..\..\..\password.php:35 +#, fuzzy +msgid "You must enter your e-mail address." +msgstr "Devi inserire un nome utente, una password, un nome ed un indirizzo e-mail." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "" + +#: ..\..\..\password.php:45 +#, fuzzy +msgid "No matches found for that combination of username and e-mail address." +msgstr "Devi inserire un nome utente, una password, un nome ed un indirizzo e-mail." + +#: ..\..\..\password.php:53 +#, fuzzy +msgid "There was an error while generating your new password. Please try again." +msgstr "Si è verificato un errore salvando il tuo preferito. Riprova o contatta l'amministratore" + +#: ..\..\..\password.php:57 +#, fuzzy +msgid "Your new password is:" +msgstr "Conferma Nuova Password" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "" + +#: ..\..\..\password.php:60 +#, fuzzy, php-format +msgid "%s Account Information" +msgstr "Informazioni" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "" + +#: ..\..\..\password.php:69 +#, fuzzy +msgid "Forgotten Password" +msgstr "Nuova Password" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Tags Più Utilizzati" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Nome utente non specificato" + +#: ..\..\..\profile.php:60 +#, fuzzy +msgid "My Profile" +msgstr "Profilo" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profilo" + +#: ..\..\..\profile.php:80 +#, fuzzy +msgid "Password and confirmation do not match." +msgstr "La password e la sua conferma non coincidono." + +#: ..\..\..\profile.php:84 +#, fuzzy +msgid "Password must be at least 6 characters long." +msgstr "La password deve essere lunga almeno 6 caratteri." + +#: ..\..\..\profile.php:88 +#, fuzzy +msgid "E-mail address is not valid." +msgstr "Indirizzo e-mail non valido." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "Si è verificato un errore salvando le tue modifiche." + +#: ..\..\..\profile.php:94 +#, fuzzy +msgid "Changes saved." +msgstr "Modifiche salvate." + +#: ..\..\..\register.php:33 +#, fuzzy +msgid "You must enter a username, password and e-mail address." +msgstr "Devi inserire un nome utente, una password, un nome ed un indirizzo e-mail." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Questo nome utente esiste già, scegline un altro." + +#: ..\..\..\register.php:41 +#, fuzzy +msgid "E-mail address is not valid. Please try again." +msgstr "Indirizzo e-mail non valido." + +#: ..\..\..\register.php:50 +#, fuzzy +msgid "You have successfully registered. Enjoy!" +msgstr "Ti sei registrato con successo. Buon divertimento!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Registrazione fallita. Riprova." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registrati" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "Cerca" + +#: ..\..\..\search.inc.php:35 +#, fuzzy +msgid "this user's bookmarks" +msgstr "%s preferiti" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "i miei preferiti" + +#: ..\..\..\search.inc.php:41 +#, fuzzy +msgid "my watchlist" +msgstr "Metti Sotto Osservazione" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "tutti i preferiti" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "per" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Cerca Preferiti" + +#: ..\..\..\search.php:97 +#, fuzzy +msgid "Search Results" +msgstr "Risultati della Ricerca" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Etichette" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s Preferiti" + +#: ..\..\..\watch.php:84 +#, fuzzy +msgid "User removed from your watchlist" +msgstr "Utente rimosso dalla tua watchlist" + +#: ..\..\..\watch.php:86 +#, fuzzy +msgid "User added to your watchlist" +msgstr "Utente aggiunto alla tua watchlist" + +#: ..\..\..\watched.php:105 +#, fuzzy +msgid "My Watchlist" +msgstr "Lista Sotto Osservazione" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "Lista Sotto Osservazione" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Archivia i tuoi Preferiti in un unico luogo, accessibile ovunque tu sia. " + +#: ..\..\..\templates\about.tpl.php:7 +#, fuzzy +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Condividi i tuoi Preferiti con gli altri o mantinili privati. Potrai restare aggiornato sui Preferiti aggiunti da altri utenti." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Tagga i tuoi Preferiti con quante etichette vuoi, anziché perdere tempo con le cartelle." + +#: ..\..\..\templates\about.tpl.php:9 +#, fuzzy, php-format +msgid "Register now to start using %s!" +msgstr "Registrati ora per iniziare ad utilizzare %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "(Geek Stuff)" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s è basato su un progetto open-source." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s supporta la maggioranza delle del.icio.us API. Praticamente tutti i tools progettati per de.icio.us possono essere modificati per funzionare con %1$s. Se trovi un tool che non lascia variare indirizzo API, chiedi a chiedi a chi lo ha realizzato di aggiungere questo settaggio." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "Ordinato per:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Data" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Titolo" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Modifica" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Elimina" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, fuzzy, php-format +msgid " and %s1 other%s" +msgstr " e %s altri" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, fuzzy, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " e %s altri" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Copia" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Precedente" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Seguente" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Pagina %d di %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Nessun preferito disponibile" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +#, fuzzy +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "preferito" +msgstr[1] "preferiti" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Indirizzo" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Obbligatorio" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Descrizione" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Saparati da virgola" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Privacy" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Pubblico" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Condiviso con chi tieni sotto osservazione" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Privato" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Elimina Preferito" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Trascina uno dei seguenti bookmarklets tra i collegamenti del tuo browser e cliccalo ogni volta che vuoi aggiungere la pagina in cui ti trovi al tuo account %s " + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Aggiungi a %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Aggiungi a %s (Pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importa" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importa preferiti da un file" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox e Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importa preferiti da del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Username" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Nuova Password" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "Conferma Nuova Password" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Nome" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Homepage" + +#: ..\..\..\templates\error.404.tpl.php:5 +#, fuzzy +msgid "Not Found" +msgstr "Non Trovato" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "URL non trovata" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Errore generale del server" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "URL non eseguibile" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Fai il Log-in e vai alla export page di del.icio.us" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Salva il file XML nel tuo computer" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Clicca Sfoglia... per trovare il file nel tuo computer. La dimensione massima accettata è 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Seleziona il livello di privacy predefinito per i preferiti importati" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Clicca Importa per cominciare ad importare i preferiti; questa operazione può richiedere qualche minuto" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Istruzioni" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Esporta i tuoi preferiti dal tuo browser ad un file" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +#, fuzzy +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: File > Importa ed Esporta... > Esporta Preferiti" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +#, fuzzy +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Segnalibri > Gestione Segnalibri... > File > Esporta..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +#, fuzzy +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Bookmarks > Gestione Bookmarks... > Strumenti > Esporta..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Clicca Sfoglia... per trovare il file salvato sul tuo computer. La dimensione massima consentita è 1MB" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Password" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Non chiedermi la password per 2 settimane" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +#, fuzzy +msgid "Generate Password" +msgstr "Nuova Password" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Iscritto Dal" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +#, fuzzy +msgid "Watching" +msgstr "Lista Sotto Osservazione" + +#: ..\..\..\templates\profile.tpl.php:50 +#, fuzzy +msgid "Watched By" +msgstr "Sotto Osservazione Di" + +#: ..\..\..\templates\register.tpl.php:11 +#, fuzzy, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Registrati per creare un account gratuito con %s. Tutte le informazioni richieste sono obbligatorie." + +#: ..\..\..\templates\rss.tpl.php:9 +#, fuzzy, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Preferiti inseriti di recente" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Nessun preferito trovato" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +#, fuzzy +msgid "Recent Tags" +msgstr "Tags Recenti" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Tags Correlati" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Rimuovi da Sotto Osservazione" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Metti Sotto Osservazione" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "Istruzioni" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:9 +#, fuzzy +msgid "Popularity" +msgstr "Tags Più Utilizzati" + +#: ..\..\..\templates\toolbar.inc.php:11 +#, fuzzy +msgid "Bookmarks" +msgstr "%s Preferiti" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Esci" + diff --git a/locales/ja_JP/LC_MESSAGES/messages.mo b/locales/ja_JP/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d7b372cbf015d477caa137b64c23d759672d77c GIT binary patch literal 18216 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, 2005-2006. +# +msgid "" +msgstr "" +"Project-Id-Version: scuttle\n" +"Report-Msgid-Bugs-To: elf2000@users.sourceforge.net\n" +"POT-Creation-Date: 2005-11-15 19:51+0000\n" +"PO-Revision-Date: 2006-04-19 07:52+0900\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Japanese\n" +"X-Poedit-Country: JAPAN\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "このサイトについて" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "このブックマークの削除は許可されていません" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "ブックマークの削除に失敗" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "すべてのタグ" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "ユーザー名「%s」のユーザーは見つかりません" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "ユーザー名「%s」のユーザーは見つかりません" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "ブックマークは題名とアドレスがなければなりません" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "ブックマークを保存しました" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "ブックマークの保存でエラーです。再度試すか、管理者に連絡してください。" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "ブックマーク追加" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "ブックマークを追加する" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "ブックマークを追加する前にログインしなければなりません。" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "自分のブックマーク" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "ブックマークを編集する" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "ID「%s」とブックマークは見つかりません" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "このブックマークの編集は許可されていません" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "ブックマークの保存中にエラー" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "ブックマークの削除に失敗" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "変更を保存する" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() は複数回呼ばれました。" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "SQL エラー" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "行" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "ファイル" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "情報" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "重要な情報" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "エラーが発生しました" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "一般エラー" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "重大なエラーが発生しました" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "重大なエラー" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "デバッグモード" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "履歴" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "%s の履歴" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "アドレスは見つかりません" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "入力 XML を開けません" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XML エラー: %s の %d 行目" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "del.icio.us からブックマークをインポートする" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "このブックマークは既に送信しています。" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "ブックマークをインポートしました。" + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "ブラウザーのファイルからブックマークをインポートする" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "ログアウトしました" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: 最近のブックマーク" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "お気に入りのリンクの保存、共有、タグ付けをします。" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "最近のブックマーク" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "本当にしますか?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "はい" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "いいえ" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "利用できます" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "利用できません" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "入力した詳細は正しくありません。再び試みてください。" + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "ログイン" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "ユーザー名を入力してください。" + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "電子メールアドレスを入力しなければなりません。" + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "一致するユーザー名が見つかりません。" + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "一致する電子メールアドレスとユーザー名の組み合わせが見つかりませんでした。" + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "新規パスワードの生成中にエラーです。再度試してください。" + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "新規パスワード:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "ブックマークの安全性を維持するために、次回のログイン時にプロフィールのこのパスワードを変えるべきです。" + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "%sアカウント情報" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "新規アカウントを生成し、%s に送信しました" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "パスワード忘れ" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "人気のタグ" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "ユーザー名が指定されていない" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "自分のプロフィール" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "プロフィール" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "パスワードと確認が一致しません。" + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "パスワードは少なくとも 6 文字以上です。" + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "電子メールアドレスは有効ではありません。" + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "変更の保存中にエラーです。" + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "変更を保存しました。" + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "ユーザー名、パスワード、名前と電子メールアドレスを入力しなければなりません。" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "ユーザー名は既に存在します。他を選んでください。" + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "電子メールアドレスは有効ではありません。再度試してください。" + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "登録に成功しました。楽しんでください!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "登録に失敗しました。再度試してください。" + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "登録する" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "検索" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "このユーザーのブックマーク" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "自分のブックマーク" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "自分の注目一覧" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "すべてのブックマーク" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "キーワード" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "ブックマークを検索する" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "検索結果" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "タグ" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%sブックマーク" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "注目一覧からユーザーを削除しました" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "注目一覧にユーザーを追加しました" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "自分の注目一覧" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "注目一覧" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "いかなる場所からもアクセス可能な 1 つの場所に、好きなリンクをすべて格納します。" + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "フォルダーと格闘する代わりに、望むならいくつかのラベルととしてブックマークのタグを付けてください。" + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "%s を使い始めるには今すぐ登録してください!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Geek スタッフ" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s は オープンソースに基づいた、GNUGeneral Public License の元でライセンスされています。これは、インターネットや個人のネットワーク、あるいは自分のコンピュータや、自分のウェブサーバで無料で運営することができることを意味します。" + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s はほとんどの del.icio.us API をサポートします。Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "ソート基準" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "日付" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "題名" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "編集する" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "削除する" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "とその他%sひとり%s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "とその他 %2$s%1$s 人%3$s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "コピーする" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "最初へ" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "前へ" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "次へ" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "最後へ" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "ページ(%d/%d)" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "ブックマークは利用できません" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "ブックマーク" +msgstr[1] "ブックマーク" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "アドレス" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "必須" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "説明" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "カンマ区切り" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "プライバシー" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "公開" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "注目リストで共有" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "プライベート" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "ブックマークを削除する" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "ブックマークレット" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "ブラウザーのブックマークに次のブックマークレットのうちの 1 つをドラッグし、%s にページを追加したい場合、常にそれをクリックします。" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "%s に投稿する" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "%s に投稿する (ポップアップ)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "インポートする" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "ブックマークファイルからブックマークをインポートする" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer、Mozilla Firefox と Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "del.icio.us からブックマークをインポートする" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "アカウントの詳細" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "ユーザー名" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "新規パスワード" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "パスワード(確認)" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "電子メール" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "個人の詳細" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "名前" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "ホームページ" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "見つかりません" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "要求された URL はこのサーバーで見つかりません" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "サーバー全体のエラー" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "要求された URL は処理できません" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "del.icio.us のエクスポートページ にログインします。" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "結果の XML ファイルをコンピューターに保存します。" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "コンピューター上のこのファイルを見つけるために 参照... をクリックします。ファイルの最大サイズは 1MB です。" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "インポートしたブックマークのデフォルトプライバシー設定を選択します。" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "インポートする をクリックするとブックマークのインポートを開始します。しばらくかかるかもしれません。" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "手順" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "ブラウザーからファイルにブックマークをエクスポートする" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: ファイル > インポートとエクスポート... > お気に入りのエクスポート" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: ブックマーク > ブックマークの管理... > ファイル > Export..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: ブックマーク > ブックマークの管理... > ツール > エクスポート..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "コンピューター上に保存されたブックマークを見つけるために 参照... をクリックします。ファイルの最大サイズは 1MB です。" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "パスワード" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "2 週間自分のパスワードを問い合わせません" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "パスワードを忘れましたか?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "パスワードを忘れてしまった場合、%s は新しいパスワードを生成できます。アカウントのユーザー名と電子メールアドレスを下のフォームに入力してください。そうすれば、新しいパスワードを電子メールで送信するでしょう。" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "電子メール" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "パスワードを生成する" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "メンバー登録日" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "注目一覧" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "ここでサインアップし、%s のアカウントを自由に作成できます。下記で要求された情報はすべて必須です。" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "最近のブックマークを %s に投稿しました" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "ブックマークが見つかりません" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "最近のタグ" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "関連するタグ" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "注目一覧から削除する" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "注目一覧に追加" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "操作" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "アルファベット" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "人気" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "ブックマーク" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "ログアウト" + diff --git a/locales/lt_LT/LC_MESSAGES/messages.mo b/locales/lt_LT/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..216b01f14620a7581ed8ca1c843356a693e78380 GIT binary patch literal 16466 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 literal 0 HcmV?d00001 diff --git a/locales/lt_LT/LC_MESSAGES/messages.po b/locales/lt_LT/LC_MESSAGES/messages.po new file mode 100644 index 0000000..90cd169 --- /dev/null +++ b/locales/lt_LT/LC_MESSAGES/messages.po @@ -0,0 +1,808 @@ +# Scuttle lt-LT Translation +# Copyright (C) 2005 - 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# Audrius Radzevičius +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-03-26 14:26-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: lt-LT \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Lithuanian\n" +"X-Poedit-Country: LITHUANIA\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Apie" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "Jums neturite teisės iÅ¡trinti šį žymę" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "Nepavyko iÅ¡trinti žymės" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Visos gairės" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "Nepavyko rasti vartotojo vardu %s" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "Nepavyko rasti vartotojo vardu %s" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Ä®raÅ¡oma žymė privalo turėti pavadinimą ir adresą" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Žymė iÅ¡saugota" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Saugant žymę įvyko klaida. Bandykite dar kartą arba kreipkitės į administratorių." + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Pridėti žymę" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Pridėti žymę" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Jei norite pridėti naujas žymes, privalote prisijungti." + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "Mano žymės" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Keisti žymę" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Žymės su id %s nepavyko rasti" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "JÅ«s neturite teisės keisti Å¡ią žymę" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Saugant žymę įvyko klaida" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "Žymės iÅ¡trinti nepavyko" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "IÅ¡saugoti pakeitimus" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die() buvo iÅ¡kviesta daug kartų." + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "message_die() buvo iÅ¡kviesta daug kartų." + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "Eilutė" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Failas" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "Informacija" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "Kritinė informacija" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "Ä®vyko klaida" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "Bendro pobÅ«džio klaida" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "Ä®vyko kritinė klaida" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "Kritinė klaida" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "Derinimo rėžimas" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "Istorija" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "%s istorija" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "Adreso nepavyko rasti" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "Nepavyko atidaryti XML įvesties" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XML klaida: %s eilutėje %d" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importuoti žymes iÅ¡ del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "JÅ«s jau iÅ¡saugojote Å¡ią žymę." + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "Žymė importuota." + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "Importuoti žymes iÅ¡ naryklės failo" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "JÅ«s dabar atsijungėte" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: naujos žymės" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "Kaupkite, dalinkites ir apraÅ¡inėkite savo svarbiausias interneto žymes" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Naujos žymės" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "Ar tikrai?" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "Taip" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "Ne" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "Yra" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "Nėra" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "JÅ«sų įraÅ¡yti duomenys neteisingi. Bandykite dar kartą." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Prisijungti" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Privalote įraÅ¡yti vartotojo vardą." + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "Privalote įraÅ¡yti savo el. paÅ¡to adresą." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "Nepavyko rasti įrašų, susijusių su Å¡iuo vartotoju." + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "Nepavyko rasti įrašų, susijusių su Å¡iuo vartotojo vardu ir el. paÅ¡to adresu." + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "Generuojant naują JÅ«sų slaptažodį įvyko klaida. Bandykite dar kartą." + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "JÅ«sų naujasis slaptažodis yra:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "Vardan JÅ«sų kaupiamos informacijos saugumo, rekomenduojame pasikeisti slaptažodį, kai kitą kartą prisijungsite prie vartotojo profilio." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "%s paskyros informacija" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Naujas slaptažodis sukurtas ir iÅ¡siųstas %s" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "UžmirÅ¡tas slaptažodis" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Populiarios gairės" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "Nenurodytas vartotojo vardas" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "Mano profilis" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profilis" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "Ä®raÅ¡yti slaptažodžio variantai nesutampa." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "Slaptažodis turi bÅ«ti bent 6 simbolių ilgio." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "Neteisingas el. paÅ¡to adresas." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "Saugant pakeitimus įvyko klaida." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "Pakeitimai iÅ¡saugoti." + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "Privalote įraÅ¡yti vartotojo vardą, slaptažodį, vardą ir el. paÅ¡to adresą." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "Toks vartotojas jau yra, praÅ¡om pasirinkti kitą." + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "El. paÅ¡to adresas neteisingas. Bandykite dar kartą." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "Sveikiname sėkmingai užsiregistravus!" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "Registracija nepavyko. Bandykite dar kartą." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registracija" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "IeÅ¡koti" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "Å¡io vartotojo žymėse" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "mano žymėse" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "bičiulių žymėse" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "visose žymėse" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "teksto" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "IeÅ¡koti žymėse" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "PaieÅ¡kos rezultatai" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Gairės" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s žymės" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Vartotojas iÅ¡brauktas iÅ¡ bičiulių sąraÅ¡o" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Vartotojas įtrauktas į bičiulių sąrašą" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "Mano bičiuliai" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "Bičiuliai" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Kaupkite Jus dominančias žymes vienoje, bet kur pasiekiamoje vietoje." + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Dalinkitės savo žymėmis su visais ar į tik bičiulių sąrašą įtrauktais draugais arba laikykite jas asmeniniam naudojimui." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Grupuokite savo žymes gairių pagalba. Jų galite sukurti tiek, kiek Jums reikia. PamirÅ¡kite nelanksčius katalogus!" + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "Registruokitės dabar ir pradėkite darbą su %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Techninė informacija" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "%s veikia pagal GNU GPL licenciją sukurto atvirojo kodo projekto pagrindu. Tai reiÅ¡kia, kad JÅ«s galite Å¡ią sistemą nemokamai naudoti ir talpinti internete, vidaus tinkle ar savo kompiuteryje." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "%1$s palaiko del.icio.us API. Daugumą Å¡iai sistemai skirtų įrankių galiama pakoreguoti taip, kad jie veiktų su %1$s. Jei radote įrankį, kuriame negalima pakeisti API adreso, papraÅ¡ykite jo kÅ«rėjų tai padaryti. Jie tikrai neatsilaikys JÅ«sų kerams." + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "RÅ«Å¡iuoti pagal:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "datą" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "pavadinimą" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "adresą" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Keisti" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Trinti" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr " įrašė" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr " bei dar %s1 vartotojas%s" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr " bei dar %2$s%1$s vartotojai%3$s" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Kopijuoti" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "Pirmas" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "Ankstesnis" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "Kitas" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "Paskutinis" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "%d iÅ¡ %d puslapių" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Žymių nėra" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "žymė" +msgstr[1] "žymės" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Adresas" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Privaloma" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "ApraÅ¡as" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Skiriamos kableliais" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Privatumas" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "VieÅ¡a" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Tik bičiuliams" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Privati" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Trinti žymę" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Žymeklis" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Perkelkite šį žymeklįį JÅ«sų narÅ¡yklėje esantį žymių katalogą ir naudokite, kai norėsite pridėti naują puslapį į %s" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Siųsti į %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Siųsti į %s (atskirame lange)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importas" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importuoti žymes iÅ¡ žymių failo" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox ir Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importuoti žymes iÅ¡ del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "Paskyris informacija" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Vartotojas" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Naujas slaptažodis" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "Pakartoti slaptažodį" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "El. paÅ¡tas" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "Asmeniniai duomenys" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Vardas" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Svetainė" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "Nėra" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "Užklausto saito darbo stotyje nėra" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Bendro pobÅ«džio darbo stoties klaida" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "Užklausa negali bÅ«ti įvykdyta" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Prisijunkite prie del.icio.us eksporto puslapio" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "IÅ¡saugoti XML failą JÅ«sų kompiuteryje" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Paspauskite Browse... ir raskite šį failą kompiuteryje. Maksimalus failo dydis - 1 MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Pasirinkite bazines privatumo nuostatas importuojamoms žymėms" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Norėdami importuoti žymes, spauskite Importuoti; tai gali Å¡iek tiek užtrukti" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Instrukcija" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Eksportuokite savo žymes iÅ¡ narÅ¡yklės į failą" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: File > Import and Export... > Export Favorites" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Paspauskite Browse... ir raskite žymes savo kompiuteryje. Maksimalus failo dydis - 1MB." + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Slaptažodis" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Neklausti slaptažodžio dvi savaites" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "PamirÅ¡ote slaptažodį?" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Jei pamirÅ¡ote savo slaptažodį, %s gali sukurti Jums naują. Ä®raÅ¡ykite savo paskyros vartotojo vardą ir mums pateikto el. paÅ¡to adresą ir mes Jums persiųsime naująjį slaptažodį." + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "El. paÅ¡tas" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "Generuoti slaptažodį" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Dalyvauja nuo" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "Stebi" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "Yra stebimas" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Norėdami prisiregistruoti %s užlipdykite žemiau esančią anketą" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Naujos, %s iÅ¡siųstos gairės" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Žymių nėra" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "Naujos gairės" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Susiję gairės" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "PaÅ¡alinti iÅ¡ bičiulių sąraÅ¡o" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Ä®traukti į bičiulių sąrašą" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "Veiksmai" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "Abėcėlė" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "Populiarumas" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "Žymės" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Atsijungti" + diff --git a/locales/messages.po b/locales/messages.po new file mode 100644 index 0000000..1d9c8ca --- /dev/null +++ b/locales/messages.po @@ -0,0 +1,825 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-03-18 21:39-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: ..\..\..\about.php:25 ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "" + +#: ..\..\..\alltags.php:59 ..\..\..\populartags.php:63 ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 ..\..\..\search.php:61 ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "" + +#: ..\..\..\bookmarks.php:71 +#, php-format +msgid "User with username %s was not found" +msgstr "" + +#: ..\..\..\bookmarks.php:94 ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "" + +#: ..\..\..\bookmarks.php:114 ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "" + +#: ..\..\..\bookmarks.php:122 ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "" +"There was an error saving your bookmark. Please try again or contact the " +"administrator." +msgstr "" + +#: ..\..\..\bookmarks.php:160 ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "" + +#: ..\..\..\edit.php:88 ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "" + +#: ..\..\..\functions.inc.php:110 ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "" + +#: ..\..\..\import.php:86 ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "" + +#: ..\..\..\import.php:97 ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "" + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "" + +#: ..\..\..\jsScuttle.php:71 +msgid "Not Available" +msgstr "" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "" + +#: ..\..\..\login.php:48 ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "" + +#: ..\..\..\password.php:35 +msgid "" +"You must enter your e-mail address." +msgstr "" + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "" + +#: ..\..\..\password.php:45 +msgid "" +"No matches found for that combination of username and e-mail address." +msgstr "" + +#: ..\..\..\password.php:53 +msgid "" +"There was an error while generating your new password. Please try again." +msgstr "" + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "" + +#: ..\..\..\password.php:57 +msgid "" +"To keep your bookmarks secure, you should change this password in your " +"profile the next time you log in." +msgstr "" + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "" + +#: ..\..\..\populartags.php:54 ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "" + +#: ..\..\..\profile.php:54 ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "" + +#: ..\..\..\profile.php:60 +msgid "My Profile" +msgstr "" + +#: ..\..\..\profile.php:62 ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "" + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "" + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "" + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "" + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "" + +#: ..\..\..\register.php:33 +msgid "You must enter a username, password and e-mail address." +msgstr "" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "" + +#: ..\..\..\register.php:41 +msgid "E-mail address is not valid. Please try again." +msgstr "" + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "" + +#: ..\..\..\register.php:57 ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "" + +#: ..\..\..\search.inc.php:29 ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "" + +#: ..\..\..\search.inc.php:35 +msgid "this user's bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:41 +msgid "my watchlist" +msgstr "" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "" + +#: ..\..\..\search.php:91 ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "" + +#: ..\..\..\tags.php:38 ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "" + +#: ..\..\..\watched.php:105 +msgid "My Watchlist" +msgstr "" + +#: ..\..\..\watched.php:107 ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "Watchlist" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "" +"Store all your favourite links in one place, accessible " +"from anywhere." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:7 +msgid "" +"Share your bookmarks with everyone, with friends on your " +"watchlist or just keep them private." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "" +"Tag your bookmarks with as many labels as you want, instead " +"of wrestling with folders." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "" +"Register now to start using %s!" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "" +"%s is based on an open-" +"source project licensed under the GNU General Public " +"License. This means you can host it on your own web server for free, " +"whether it is on the Internet, a private network or just your own computer." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "" +"%1$s supports most of the del.icio.us " +"API. Almost all " +"of the neat tools made for that system can be modified to work with %1$s " +"instead. If you find a tool that won't let you change the API address, ask " +"the creator to add this setting. You never know, they might just do it." +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:17 ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "" +msgstr[1] "" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "" +"Drag one of the following bookmarklets to your browser's bookmarks and click " +"it whenever you want to add the page you are on to %s" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:24 +msgid "Confirm Password" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "" +"Log in to the export page at " +"del.icio.us" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "" +"Save the resulting XML " +"file to your computer" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "" +"Click Browse... to find this file on your computer. The maximum " +"size the file can be is 1MB" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "" +"Click Import to start importing the bookmarks; it may take a " +"minute" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "" +"Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "" +"Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > " +"Export..." +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "" +"Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "" + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "" +"Click Browse... to find the saved bookmark file on your computer. " +"The maximum size the file can be is 1MB" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:20 ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "" +"If you have forgotten your password, %s can generate a new one. Enter the " +"username and e-mail address of your account into the form below and we will " +"e-mail your new password to you." +msgstr "" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +msgid "Watching" +msgstr "" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "" +"Sign up here to create a free %s account. All the information requested " +"below is required" +msgstr "" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "" + +#: ..\..\..\templates\rss.tpl.php:17 ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +msgid "Actions" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:9 +msgid "Popularity" +msgstr "" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "Bookmarks" +msgstr "" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "" diff --git a/locales/nl_NL/LC_MESSAGES/messages.mo b/locales/nl_NL/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..b4b617c1d0f5e9936ebb65a4079d9895e957e922 GIT binary patch literal 6030 zcmcJTTZm*w8GuVoOfnkHMWaR&E331!YqonXyUFhMT(Ud2&1PqIC$p2wqA%5bYP!$# zxp^+#JF60jAU=qONDxslNJPX3^+ga86eJ)-5e0>a_~4Tu0YM=z3Vwf`)0bWIkc8wg z)nA`Fb*ldQZ}s>5^|tGtQCw$eAEWKOQz-+#dL18Jx4c`a_rhD@2jJcCdU&+zKMCK* z{W`n_J_2umyYNOBRnPnIJ=}j8=J08_3vXcXc^L=a4_|i8r}vE zL+M|DAA#FY)(;>mRVfrbd>$gYdJ29Ieg}RFKEP%!!Iz=Pcl6d$o^w#_cnQjUUx4!d zm!SCX*P+Py9K0X?6n+=}9m@ExAe_kgHAt8GCY*vlgkq21SI=LDVz0l!Bk&a{`?wRK zWxZoi^mGbtz!=KB&%?*zi%|A?H$puO4?(fR6?hIl0mWV~!8_q!s{2==ta~HML$&I5 zDEm18MW54rh@5LslE@EjDs z_yH7oe+flzFG7*$rRw>gp{(;ScpP4jk!o-e%D66c`>pPufVhpjG@l=(P10nqV$V;} zM88buu0=kN(GJp9Xs2n1X{g6tvX{Xn{(gc+YIB#!A(z-gVtsJk#g}_&;?HZeY1%AJ zt_JOHn%Mf<>uA;S$%8IEA)4r0 zt_9j0?Kn+*LhK~EmrHyU6}n68DVNwyt^+i&#m8y$v^q_E1Q%5I(N<}MRe4QjdO41} zp-H=$n#>w{+qP_!>*lcYbTck;b=vcW1Ko|e`ZkaCVJ74yB?$usV+Peq5xw z6^BWY+qABC7#W(&eprM$^RHOax*8b?#PHd$Bi#;FeXbz-utAE%zXpVNJ7agEi~ zv{5)p-z}9I2SMBy$p=!iP$njGCTTiTrc>GQai$HXY&mPQyMD(;wr5iruKNa$<5h!` ziLn#Yw(fyRot1esnW?o}X#7B}d4BFbM%!7tEXu7`9yqSvP2=z?Y1|UdrfMDkQ4hu; zx@=oj8mGdT#BPSc{>m52q1TS_Y*6=Geq1jybvDZKv}lQLUvE{u ztY>O+jF70F?>mHIu? z+Am4$ZKbiK5w%q`aeh_h*P#yR2qc=zxwmZ?_iX99qkOt;KU?4}p1Mf-)GHkmwK1=| z5tEW@iy)U+TrkaMs&hXN?Bap7%ejp*pKa+)(tDBU4PGqR;ejR61U6*wQkmn}&Q+;Y zU9=``bw;M5Bd{&@&3c~QH7ux;a;G}8xm#WGhnuBLYwT$dI|$n$mOb6~^G(9PqqmAo zub41tTI65gkf)>Gsya@!C7;$gJ(qa7^o-h$HDN=VdpVy@0^>*Xx`oMcjm0A0t(_Q+6A5>1T3d@+v4_(( z^ogdQPdr}RiY=+VHV~zuR|^V?(F0DpC{Onr`uy6?gKOIxr_ZlmoY)GA)C9HlI1MRY zqQu>1i*xh3{JMB3()TRt*~9Y_ls9AkJgRl zcX?L!@M6bl;^gjeHE$wo;Rk^{A#8 zLzEYxB0=>1J!jFO`Sp0`g^)E;e-DGT)nlgB$@_@li9NeiELc%XRn}z}Zk32*Ufi;4 zF;tH_jioLI)+VmE$HsW0bSl0~4ZK(CwJ9ALjy1Z;vE5qJ1b84X>=6@X1$P9k=&pFC zOn#Mf8je^7@`v6<015>^GPshsn)ZD6Ou~Y|>-!uSqgYyVrQEXZ+mwBb^zeT@nJ%jk zF{X%CU@I4crFd$&^r~xXIT>EnbE1{Oo-;jszbX?4jz2cI)YxkjboO=CbI3WUTHe}n z?rh`^w_!n7hWMMR=fq6z_2DjEMYrL5{A`N6>}@IMO!(H8bG|M5{B#(^hdMK!oB81( zq3U;=IJlH`vgJw7c{ioRD6Fd5j`FIi?gC@@A%k`%sqe;a^r7T6D!hZXotoZ!S>@TF ztn!G>z~Aduwchyoat6nga?g?w%Jm*4KE{s?39?~+AT1;mjh$Sw25H@<Rg4hvlZ-lZCJMI%e3a +# +msgid "" +msgstr "" +"Project-Id-Version: scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-03-18 21:46-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: nl-NL \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Dutch\n" +"X-Poedit-Country: NETHERLANDS\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Over ons" + +#: ..\..\..\ajaxDelete.php:29 +#, fuzzy +msgid "You are not allowed to delete this bookmark" +msgstr "De bookmark kon niet worden verwijderd" + +#: ..\..\..\ajaxDelete.php:33 +#, fuzzy +msgid "Failed to delete bookmark" +msgstr "Bookmark Verwijderen" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "Alle tags" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "" + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "Bookmark werd niet gevonden" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "Je bookmarks moeten een titel en adres hebben" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "Bookmark opgeslagen" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Voeg een bookmark toe" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "Bookmark toevoegen" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "Je moet ingelogd zijn om bookmarks toe te kunnen voegen" + +#: ..\..\..\bookmarks.php:213 +#, fuzzy +msgid "My Bookmarks" +msgstr "%s Bookmarks" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Bookmark Bewerken" + +#: ..\..\..\edit.php:34 +#, fuzzy, php-format +msgid "Bookmark with id %s not was not found" +msgstr "Bookmark werd niet gevonden" + +#: ..\..\..\edit.php:39 +#, fuzzy +msgid "You are not allowed to edit this bookmark" +msgstr "De bookmark kon niet worden verwijderd" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "" + +#: ..\..\..\edit.php:78 +#, fuzzy +msgid "Failed to delete the bookmark" +msgstr "De bookmark kon niet worden verwijderd" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "Veranderingen opslaan" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Bestand" + +#: ..\..\..\functions.inc.php:116 +#, fuzzy +msgid "Information" +msgstr "Instructies" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "XML bestand kon niet geopend worden" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XML fout: %s op regel %d" + +#: ..\..\..\import.php:54 +#, fuzzy +msgid "Import Bookmarks from del.icio.us" +msgstr "Importeer van del.icio.us" + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +#, fuzzy +msgid "You have already submitted this bookmark." +msgstr "Je hebt deze bookmark al opgenomen" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +#, fuzzy +msgid "Bookmark imported." +msgstr "Bookmark opgeslagen" + +#: ..\..\..\importNetscape.php:81 +#, fuzzy +msgid "Import Bookmarks from Browser File" +msgstr "Importeer bookmarks uit een bookmark bestand" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "Je bent uitgelogd" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Recente bookmarks" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "Recente bookmarks" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "" + +#: ..\..\..\jsScuttle.php:71 +#, fuzzy +msgid "Not Available" +msgstr "Geen bookmarks beschikbaar" + +#: ..\..\..\login.php:38 +#, fuzzy +msgid "The details you have entered are incorrect. Please try again." +msgstr "De ingevoerde details zijn niet correct. Probeer het nog eens." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Inloggen" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "" + +#: ..\..\..\password.php:35 +#, fuzzy +msgid "You must enter your e-mail address." +msgstr "Een gebruikersnaam, wachtwoord, naam en email adres moeten worden opgegeven" + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "" + +#: ..\..\..\password.php:45 +#, fuzzy +msgid "No matches found for that combination of username and e-mail address." +msgstr "Een gebruikersnaam, wachtwoord, naam en email adres moeten worden opgegeven" + +#: ..\..\..\password.php:53 +#, fuzzy +msgid "There was an error while generating your new password. Please try again." +msgstr "De ingevoerde details zijn niet correct. Probeer het nog eens." + +#: ..\..\..\password.php:57 +#, fuzzy +msgid "Your new password is:" +msgstr "Bevestiging nieuw wachtwoord" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "" + +#: ..\..\..\password.php:60 +#, fuzzy, php-format +msgid "%s Account Information" +msgstr "Instructies" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "" + +#: ..\..\..\password.php:69 +#, fuzzy +msgid "Forgotten Password" +msgstr "Nieuw wachtwoord" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "Populaire Tags" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "" + +#: ..\..\..\profile.php:60 +#, fuzzy +msgid "My Profile" +msgstr "Profiel" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "Profiel" + +#: ..\..\..\profile.php:80 +#, fuzzy +msgid "Password and confirmation do not match." +msgstr "Wachtwoord en wachtwoordbevestiging komen niet overen" + +#: ..\..\..\profile.php:84 +#, fuzzy +msgid "Password must be at least 6 characters long." +msgstr "Wachtwoord dient minimaal 6 karakters lang te zijn" + +#: ..\..\..\profile.php:88 +#, fuzzy +msgid "E-mail address is not valid." +msgstr "Email adres is ongeldig" + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "" + +#: ..\..\..\profile.php:94 +#, fuzzy +msgid "Changes saved." +msgstr "Wijzigingen opgeslagen" + +#: ..\..\..\register.php:33 +#, fuzzy +msgid "You must enter a username, password and e-mail address." +msgstr "Een gebruikersnaam, wachtwoord, naam en email adres moeten worden opgegeven" + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "" + +#: ..\..\..\register.php:41 +#, fuzzy +msgid "E-mail address is not valid. Please try again." +msgstr "Email adres is ongeldig" + +#: ..\..\..\register.php:50 +#, fuzzy +msgid "You have successfully registered. Enjoy!" +msgstr "De bookmark is succesvol verwijderd" + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "" + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "" + +#: ..\..\..\search.inc.php:35 +#, fuzzy +msgid "this user's bookmarks" +msgstr "%s Bookmarks" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "Mijn bookmarks" + +#: ..\..\..\search.inc.php:41 +#, fuzzy +msgid "my watchlist" +msgstr "Voeg toe aan 'watch-list'" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "Alle bookmarks" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "voor" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "Bookmarks zoeken" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "Tags" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s Bookmarks" + +#: ..\..\..\watch.php:84 +#, fuzzy +msgid "User removed from your watchlist" +msgstr "Van 'watch-list' verwijderen" + +#: ..\..\..\watch.php:86 +#, fuzzy +msgid "User added to your watchlist" +msgstr "Voeg toe aan 'watch-list'" + +#: ..\..\..\watched.php:105 +#, fuzzy +msgid "My Watchlist" +msgstr "Watch List" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "Watch List" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:7 +#, fuzzy +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Deel je bookmarks met iedereen, met gebruikers op jouw 'watch-list' of hou ze gewoon voor jezelf" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:9 +#, fuzzy, php-format +msgid "Register now to start using %s!" +msgstr "Registreer nu om je eigen bookmarks op te slaan" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "Datum" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "Titel" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "Bewerken" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "Verwijderen" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, php-format +msgid " and %s1 other%s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "Kopiëren" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "Pagina %d van %d" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "Geen bookmarks beschikbaar" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +#, fuzzy +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "%s Bookmarks" +msgstr[1] "%s Bookmarks" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "Adres" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "Verplicht" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Omschrijving" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "Door comma's gescheiden" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "Privacy" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "Publiekelijk" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "Gedeeld met 'watch list'" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "Priv&egrav;" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "Bookmark Verwijderen" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Sleep een van de volgende 'bookmarklets' naar de link-balk van je browser, en klik er vervolgens op als je je op een pagina bevind die je aan %s wilt toevoegen" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "Plaats op %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Plaats op %s (pop-up)" + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "Importeren" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "Importeer bookmarks uit een bookmark bestand" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox en Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "Importeer van del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "Gebruikersnaam" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "Nieuw wachtwoord" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "Bevestiging nieuw wachtwoord" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "Email" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "Naam" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Homepage" + +#: ..\..\..\templates\error.404.tpl.php:5 +#, fuzzy +msgid "Not Found" +msgstr "Gebruiker werd niet gevonden" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "Log in op de export pagina op del.icio.us" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "Sla het resulterende XML bestand op, op de locale computer" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Klik vervolgens op Bladeren... om dit opgeslagen bestand op de computer te vinden. De maximum toegelaten bestandsgrootte op onze server is 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Selecteer welke privacy instelling moet worden toegepast op de geïmporteerde bookmarks" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Klik op Importeren om het importeren te starten. Dit kan enkele minuten duren." + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "Instructies" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "Bookmarks exporteren vanuit een browser" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: File > Import and Export... > Export Favorites" + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Klik vervolgens op Bladeren... om het opgeslagen bookmark bestand op de computer te vinden. De maximum toegelaten bestandsgrootte op onze server is 1MB" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "Wachtwoord" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "Wachtwoord de komende 2 weken niet nog een keer vragen" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:19 +#, fuzzy +msgid "Generate Password" +msgstr "Nieuw wachtwoord" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Lid sinds" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +#, fuzzy +msgid "Watching" +msgstr "Watch List" + +#: ..\..\..\templates\profile.tpl.php:50 +#, fuzzy +msgid "Watched By" +msgstr "Watched" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "" + +#: ..\..\..\templates\rss.tpl.php:9 +#, fuzzy, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Recente bookmarks" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +#, fuzzy +msgid "No bookmarks found" +msgstr "Geen bookmarks beschikbaar" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +#, fuzzy +msgid "Recent Tags" +msgstr "Gerelateerde Tags" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "Gerelateerde Tags" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Van 'watch-list' verwijderen" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Voeg toe aan 'watch-list'" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "Instructies" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:9 +#, fuzzy +msgid "Popularity" +msgstr "Populaire Tags" + +#: ..\..\..\templates\toolbar.inc.php:11 +#, fuzzy +msgid "Bookmarks" +msgstr "%s Bookmarks" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "" + diff --git a/locales/pt_BR/LC_MESSAGES/messages.mo b/locales/pt_BR/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..4faf24ae949c0d16f2a4ab618b446ebf91e2b691 GIT binary patch literal 17153 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

7^ZcMF%Ul)qW94*|i}S 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 literal 0 HcmV?d00001 diff --git a/locales/pt_BR/LC_MESSAGES/messages.po b/locales/pt_BR/LC_MESSAGES/messages.po new file mode 100644 index 0000000..36df105 --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/messages.po @@ -0,0 +1,814 @@ +# Scuttle pt-BR Translation +# Copyright (C) 2006 Scuttle project +# This file is distributed under the same license as the Scuttle package. +# Marcelo Jorge Vieira (metal) , 2006. +# +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-04-06 17:26-0300\n" +"Last-Translator: Daniel duende Carvalho \n" +"Language-Team: Portuguese/Brazil\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\toolbar.inc.php:14 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "Sobre" + +#: ..\..\..\ajaxDelete.php:28 +msgid "You are not allowed to delete this bookmark" +msgstr "Você não tem permissão para apagar este bookmark" + +#: ..\..\..\ajaxDelete.php:32 +msgid "Failed to delete bookmark" +msgstr "Falha ao apagar bookmark" + +#: ..\..\..\alltags.php:48 +msgid "All Tags" +msgstr "Todos os Tags" + +#: ..\..\..\alltags.php:57 +#: ..\..\..\bookmarks.php:64 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:39 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:55 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:56 +#, php-format +msgid "User with username %s not was not found" +msgstr "O Nome de Usuário %s não foi encontrado" + +#: ..\..\..\bookmarks.php:87 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "O seu bookmark deve possuir um título e um endereço" + +#: ..\..\..\bookmarks.php:104 +msgid "Bookmark saved" +msgstr "Bookmark gravado" + +#: ..\..\..\bookmarks.php:106 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:71 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "Ocorreu um erro na gravação do seu bookmark. Por favor tente novamente ou entre em contato com o administrador." + +#: ..\..\..\bookmarks.php:143 +#: ..\..\..\toolbar.inc.php:9 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "Adicione um Bookmark" + +#: ..\..\..\bookmarks.php:144 +msgid "Add Bookmark" +msgstr "Adicionar Bookmark" + +#: ..\..\..\bookmarks.php:147 +msgid "You must be logged in before you can add bookmarks." +msgstr "Você deve dar entrada no sistema para poder adicionar bookmarks" + +#: ..\..\..\bookmarks.php:196 +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s Bookmarks" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "Editar Bookmark" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "O Bookmark com a identificação %s não foi encontrado" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "Você não tem permissão para editar este bookmark" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "Erro durante a gravação do seu bookmark" + +#: ..\..\..\edit.php:73 +msgid "Failed to delete the bookmark" +msgstr "Falha ao apagar o bookmark" + +#: ..\..\..\edit.php:80 +#: ..\..\..\templates\editprofile.tpl.php:59 +msgid "Save Changes" +msgstr "Salva Alterações" + +#: ..\..\..\functions.inc.php:98 +msgid "message_die() was called multiple times." +msgstr "message_die() foi chamada múltiplas vezes" + +#: ..\..\..\functions.inc.php:110 +msgid "SQL Error" +msgstr "Erro de SQL" + +#: ..\..\..\functions.inc.php:116 +msgid "Line" +msgstr "Linha" + +#: ..\..\..\functions.inc.php:116 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "Arquivo" + +#: ..\..\..\functions.inc.php:122 +msgid "Information" +msgstr "Informações" + +#: ..\..\..\functions.inc.php:127 +msgid "Critical Information" +msgstr "Informações Importantes" + +#: ..\..\..\functions.inc.php:132 +msgid "An error occured" +msgstr "Um erro ocorreu" + +#: ..\..\..\functions.inc.php:135 +msgid "General Error" +msgstr "Erro Geral" + +#: ..\..\..\functions.inc.php:143 +msgid "An critical error occured" +msgstr "Um erro crítico ocorreu" + +#: ..\..\..\functions.inc.php:146 +msgid "Critical Error" +msgstr "Erro Crítico" + +#: ..\..\..\functions.inc.php:155 +msgid "DEBUG MODE" +msgstr "MODO DEBUG" + +#: ..\..\..\import.php:39 +msgid "Could not open XML input" +msgstr "Não foi possível abrir a entrada XML" + +#: ..\..\..\import.php:43 +#, php-format +msgid "XML error: %s at line %d" +msgstr "Erro de XML: %s na linha %d" + +#: ..\..\..\import.php:52 +msgid "Import Bookmarks from del.icio.us" +msgstr "Importar Bookmarks do del.icio.us" + +#: ..\..\..\import.php:84 +#: ..\..\..\importNetscape.php:62 +msgid "You have already submitted this bookmark." +msgstr "Você já submeteu este Bookmark." + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:69 +msgid "Bookmark imported." +msgstr "Bookmark importado." + +#: ..\..\..\importNetscape.php:77 +msgid "Import Bookmarks from Browser File" +msgstr "Importar Bookmarks (Favoritos) do Arquivo do Navegador" + +#: ..\..\..\index.php:31 +msgid "You have now logged out" +msgstr "Você saiu do sistema" + +#: ..\..\..\index.php:38 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: Bookmarks recentes" + +#: ..\..\..\index.php:71 +msgid "Online Bookmarks Manager" +msgstr "Gerenciador Online de Bookmarks" + +#: ..\..\..\index.php:72 +msgid "Recent Bookmarks" +msgstr "Bookmarks Recentes" + +#: ..\..\..\jsScuttle.php:42 +msgid "Are you sure?" +msgstr "Você tem certeza disso!?" + +#: ..\..\..\jsScuttle.php:42 +msgid "Yes" +msgstr "Sim" + +#: ..\..\..\jsScuttle.php:42 +msgid "No" +msgstr "Não" + +#: ..\..\..\login.php:36 +msgid "The details you have entered are incorrect. Please try again." +msgstr "Os detalhes submetidos por você estão incorretos. Por favor tente novamente." + +#: ..\..\..\login.php:53 +msgid "You are already logged in." +msgstr "Você já entrou no sistema." + +#: ..\..\..\login.php:55 +#: ..\..\..\toolbar.inc.php:14 +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "Entrar no sistema" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "Você tem que digitar o seu nome de usuário" + +#: ..\..\..\password.php:35 +msgid "You must enter your e-mail address." +msgstr "Você tem que digitar o seu endereço de e-mail." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "Nenhum resultado encontrado pra este nome de usuário" + +#: ..\..\..\password.php:45 +msgid "No matches found for that combination of username and e-mail address." +msgstr "Nenhum resultado encontrado para esta combinação de nome de usuário e endereço de e-mail " + +#: ..\..\..\password.php:53 +msgid "There was an error while generating your new password. Please try again." +msgstr "Ocorreu um erro durante a geração de sua nova senha. Por favor tente novamente." + +#: ..\..\..\password.php:57 +msgid "Your new password is:" +msgstr "A sua nova senha é:" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "Para manter seguros os seus bookmarks, você deveria alterar esta senha (em seu perfil) na próxima vez que entrar no sistema." + +#: ..\..\..\password.php:60 +#, php-format +msgid "%s Account Information" +msgstr "Informações da Conta de %s" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "Nova senha gerada e enviada para %s" + +#: ..\..\..\password.php:69 +msgid "Forgotten Password" +msgstr "Esquecí a Senha" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\sidebar.block.popular.php:13 +msgid "Popular Tags" +msgstr "Tags populares" + +#: ..\..\..\profile.php:47 +#: ..\..\..\templates\sidebar.block.profile.php:11 +msgid "Profile" +msgstr "Perfil" + +#: ..\..\..\profile.php:49 +msgid "Username was not specified" +msgstr "O nome de usuário não foi especificado" + +#: ..\..\..\profile.php:57 +#, php-format +msgid "%s Profile" +msgstr "Perfil de %s" + +#: ..\..\..\profile.php:71 +msgid "Your name and e-mail address are required and must be completed." +msgstr "Seu nome e endereço de email são requeridos e devem ser preenchidos." + +#: ..\..\..\profile.php:75 +msgid "Password and confirmation do not match." +msgstr "A senha digitada não é idêntica àquela digitada no campo de confirmação de senha." + +#: ..\..\..\profile.php:79 +msgid "Password must be at least 6 characters long." +msgstr "A senha deve ter um mínimo de 6 caracteres." + +#: ..\..\..\profile.php:87 +msgid "E-mail address is not valid." +msgstr "O endereço de e-mail fornecido não é válido." + +#: ..\..\..\profile.php:91 +msgid "An error occurred while saving your changes." +msgstr "Um erro ocorreu durante a gravação das suas alterações." + +#: ..\..\..\profile.php:93 +msgid "Changes saved." +msgstr "Alterações gravadas." + +#: ..\..\..\register.php:30 +msgid "You must enter a username, password, name and e-mail address." +msgstr "Você deve digitar um nome de usuário, uma senha, seu nome e endereço de e-mail." + +#: ..\..\..\register.php:34 +msgid "This username already exists, please make another choice." +msgstr "Este nome de usuário já existe. Por favor, escolha outro nome de usuário." + +#: ..\..\..\register.php:38 +msgid "E-mail address is not valid. Please try again." +msgstr "Endereço de email inválido. Por favor tente novamente." + +#: ..\..\..\register.php:46 +msgid "You have successfully registered. Enjoy!" +msgstr "Você completou o seu registro. Agora divirta-se!" + +#: ..\..\..\register.php:48 +msgid "Registration failed. Please try again." +msgstr "Falha ao registrar-se. Por favor tente novamente." + +#: ..\..\..\register.php:52 +#: ..\..\..\toolbar.inc.php:14 +#: ..\..\..\templates\register.tpl.php:27 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "Registre-se" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:58 +msgid "Search" +msgstr "Busca" + +#: ..\..\..\search.inc.php:36 +#, php-format +msgid "%s bookmarks" +msgstr "%s bookmarks" + +#: ..\..\..\search.inc.php:41 +msgid "my bookmarks" +msgstr "meus bookmarks" + +#: ..\..\..\search.inc.php:42 +msgid "my watched bookmarks" +msgstr "meus bookmarks observados" + +#: ..\..\..\search.inc.php:46 +msgid "all bookmarks" +msgstr "todos os bookmarks" + +#: ..\..\..\search.inc.php:49 +msgid "for" +msgstr "por" + +#: ..\..\..\search.php:110 +#: ..\..\..\search.php:114 +msgid "Search Bookmarks" +msgstr "Busca Bookmarks" + +#: ..\..\..\search.php:112 +msgid "Search Results" +msgstr "Resultados da Busca" + +#: ..\..\..\toolbar.inc.php:9 +msgid "Your Bookmarks" +msgstr "Seus Bookmarks" + +#: ..\..\..\toolbar.inc.php:9 +msgid "Watched Bookmarks" +msgstr "Bookmarks Observados" + +#: ..\..\..\toolbar.inc.php:9 +msgid "All Bookmarks" +msgstr "Todos os Bookmarks" + +#: ..\..\..\toolbar.inc.php:9 +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "Sair do Sistema" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "Usuário removido da sua lista de observação" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "Usuário adicionado à sua lista de observação" + +#: ..\..\..\watched.php:64 +#: ..\..\..\watched.php:101 +#, php-format +msgid "%s Watched Bookmarks" +msgstr "%s Bookmarks Observados" + +#: ..\..\..\services\userservice.php:93 +msgid "Your" +msgstr "Seu" + +#: ..\..\..\services\userservice.php:101 +#, php-format +msgid "%s'" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "Agregue todos os seus links favoritos em um só local, acessível de qualquer lugar." + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "Compartilhe seus bookmarks com todo o mundo, com amigos em sua lista de observação ou guarde-os apenas para você." + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "Identifique seus bookmarks com tantos tags quanto quiser, em vez de lutar contra pastas e diretórios." + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "Registre-se agora para começar a usar o %s!" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "Coisas de Geek" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "O %s é baseado em um projeto open source licenciado sob a GNU General Public Licence. Isso significa que você pode hospedá-lo em seu próprio servidor de rede gratuitamente, esteja ele na Internet, em uma rede privada ou apenas em seu computador." + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "O %1$s suporta a maior parte do API do del.icio.us. Quase todas as adoráveis ferramentas desenvolvidas para aquele sistema podem ser modificadas para funcionar com o %1$s. Se você encontrar uma ferramenta que não permita a mudança de seu endereço de API, solicite a seu criador para que adicione esta configuração. Nunca se sabe. Ele pode simplesmente atender a seu pedido." + +#: ..\..\..\templates\bookmarks.tpl.php:10 +#: ..\..\..\templates\tags.tpl.php:6 +msgid "Sort by:" +msgstr "Ordenar por:" + +#: ..\..\..\templates\bookmarks.tpl.php:11 +msgid "Date" +msgstr "Data" + +#: ..\..\..\templates\bookmarks.tpl.php:12 +#: ..\..\..\templates\editbookmark.tpl.php:28 +msgid "Title" +msgstr "Título" + +#: ..\..\..\templates\bookmarks.tpl.php:13 +msgid "URL" +msgstr "URL" + +#: ..\..\..\templates\bookmarks.tpl.php:52 +msgid "Edit" +msgstr "Editar" + +#: ..\..\..\templates\bookmarks.tpl.php:52 +msgid "Delete" +msgstr "Apagar" + +#: ..\..\..\templates\bookmarks.tpl.php:67 +msgid " and 1 other" +msgstr "e 1 outro" + +#: ..\..\..\templates\bookmarks.tpl.php:70 +#, php-format +msgid " and %s others" +msgstr "e %s outros" + +#: ..\..\..\templates\bookmarks.tpl.php:73 +msgid "Copy" +msgstr "Copiar" + +#: ..\..\..\templates\bookmarks.tpl.php:121 +#: ..\..\..\templates\bookmarks.tpl.php:125 +msgid "Previous" +msgstr "Anterior" + +#: ..\..\..\templates\bookmarks.tpl.php:132 +#: ..\..\..\templates\bookmarks.tpl.php:134 +msgid "Next" +msgstr "Próximo" + +#: ..\..\..\templates\bookmarks.tpl.php:135 +#, php-format +msgid "Page %d of %d" +msgstr "Página %d de %d" + +#: ..\..\..\templates\bookmarks.tpl.php:145 +msgid "No bookmarks available" +msgstr "Nenhum bookmark disponível" + +#: ..\..\..\templates\editbookmark.tpl.php:23 +msgid "Address" +msgstr "Endereço" + +#: ..\..\..\templates\editbookmark.tpl.php:25 +#: ..\..\..\templates\editbookmark.tpl.php:30 +#: ..\..\..\templates\editprofile.tpl.php:17 +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "Required" +msgstr "Requerido" + +#: ..\..\..\templates\editbookmark.tpl.php:33 +#: ..\..\..\templates\editprofile.tpl.php:24 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "Descrição" + +#: ..\..\..\templates\editbookmark.tpl.php:38 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Tags" +msgstr "Tags (Rótulos)" + +#: ..\..\..\templates\editbookmark.tpl.php:40 +#: ..\..\..\templates\importDelicious.tpl.php:17 +#: ..\..\..\templates\importNetscape.tpl.php:18 +msgid "Comma-separated" +msgstr "Separados por vírgula" + +#: ..\..\..\templates\editbookmark.tpl.php:43 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Privacy" +msgstr "Privacidade" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +#: ..\..\..\templates\importDelicious.tpl.php:23 +#: ..\..\..\templates\importNetscape.tpl.php:24 +msgid "Public" +msgstr "Público" + +#: ..\..\..\templates\editbookmark.tpl.php:47 +#: ..\..\..\templates\importDelicious.tpl.php:24 +#: ..\..\..\templates\importNetscape.tpl.php:25 +msgid "Shared with Watch List" +msgstr "Partilhado com a sua Lista de Observação" + +#: ..\..\..\templates\editbookmark.tpl.php:48 +#: ..\..\..\templates\importDelicious.tpl.php:25 +#: ..\..\..\templates\importNetscape.tpl.php:26 +msgid "Private" +msgstr "Privado" + +#: ..\..\..\templates\editbookmark.tpl.php:60 +msgid "Delete Bookmark" +msgstr "Apagar Bookmark" + +#: ..\..\..\templates\editbookmark.tpl.php:74 +msgid "Bookmarklet" +msgstr "Gerador de Bookmarks" + +#: ..\..\..\templates\editbookmark.tpl.php:75 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Arraste um dos seguintes Geradores de Bookmark para a área de favoridos de seu navegador. Clique nele toda vez que quiser adicionar a página na qual você se encontra ao %s" + +#: ..\..\..\templates\editbookmark.tpl.php:77 +#, php-format +msgid "Post to %s" +msgstr "Postar para %s" + +#: ..\..\..\templates\editbookmark.tpl.php:78 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "Postar para %s (versão Pop-Up)" + +#: ..\..\..\templates\editbookmark.tpl.php:81 +#: ..\..\..\templates\importDelicious.tpl.php:31 +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Import" +msgstr "Importar" + +#: ..\..\..\templates\editbookmark.tpl.php:83 +msgid "Import bookmarks from bookmark file" +msgstr "Importar bookmarks do arquivo de bookmarks" + +#: ..\..\..\templates\editbookmark.tpl.php:83 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox and Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:84 +msgid "Import bookmarks from del.icio.us" +msgstr "Importar bookmarks do del.icio.us" + +#: ..\..\..\templates\editprofile.tpl.php:10 +#: ..\..\..\templates\login.tpl.php:9 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:10 +msgid "Username" +msgstr "Nome de Usuário" + +#: ..\..\..\templates\editprofile.tpl.php:12 +msgid "New Password" +msgstr "Nova Senha" + +#: ..\..\..\templates\editprofile.tpl.php:14 +msgid "Confirm New Password" +msgstr "Confirme a Nova Senha" + +#: ..\..\..\templates\editprofile.tpl.php:16 +#: ..\..\..\templates\profile.tpl.php:12 +#: ..\..\..\templates\register.tpl.php:18 +msgid "Name" +msgstr "Nome" + +#: ..\..\..\templates\editprofile.tpl.php:18 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\editprofile.tpl.php:20 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "Página na Web" + +#: ..\..\..\templates\editprofile.tpl.php:22 +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "Membro Desde" + +#: ..\..\..\templates\editprofile.tpl.php:30 +#: ..\..\..\templates\profile.tpl.php:35 +msgid "Watch List" +msgstr "Lista de Observação" + +#: ..\..\..\templates\editprofile.tpl.php:45 +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "Observado Por" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "Não Encontrado" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "A URL requisitada não foi encontrada neste servidor" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "Erro Geral de servidor" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "A URL requisitada não pôde ser processada" + +#: ..\..\..\templates\importDelicious.tpl.php:38 +msgid "Log in to the export page at del.icio.us" +msgstr "Entrar na página de exportação do del.icio.us" + +#: ..\..\..\templates\importDelicious.tpl.php:39 +msgid "Save the resulting XML file to your computer" +msgstr "Salvar o arquivo XML resultante em seu computador." + +#: ..\..\..\templates\importDelicious.tpl.php:40 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "Clique em Navegar...para encontrar este arquivo no seu computador. O tamanho máximo que o arquivo pode ter é 1MB" + +#: ..\..\..\templates\importDelicious.tpl.php:41 +#: ..\..\..\templates\importNetscape.tpl.php:48 +msgid "Input the default tags you want added to your imported bookmarks" +msgstr "Digite as tags padrão que você deseja que sejam adicionadas aos bookmarks importados" + +#: ..\..\..\templates\importDelicious.tpl.php:42 +#: ..\..\..\templates\importNetscape.tpl.php:49 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "Selecione o status de privacidade padrão para os seus bookmarks importados" + +#: ..\..\..\templates\importDelicious.tpl.php:43 +#: ..\..\..\templates\importNetscape.tpl.php:50 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "Clique em Importar para começar a importar os bookmarks. Isso pode levar um minutinho..." + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Instructions" +msgstr "Instruções" + +#: ..\..\..\templates\importNetscape.tpl.php:40 +msgid "Export your bookmarks from your browser to a file" +msgstr "Exporte seus bookmarks de seu navegador para um arquivo" + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: Arquivo > Importar e Exportar... > Exportar Favoritos" + +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: Bookmarks > Gerenciar Bookmarks... > Arquivo > Exportar..." + +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: Bookmarks > Gerenciar Bookmarks... > Ferramentas > Exportar..." + +#: ..\..\..\templates\importNetscape.tpl.php:47 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "Clique Procurar... para encontrar o arquivo de bookmarks gravado em seu computador. O tamanho máximo permitido para o arquivo é 1MB" + +#: ..\..\..\templates\login.tpl.php:14 +#: ..\..\..\templates\register.tpl.php:14 +msgid "Password" +msgstr "Senha" + +#: ..\..\..\templates\login.tpl.php:16 +msgid "Don't ask for my password for 2 weeks" +msgstr "Não pergunte minha senha por duas semanas" + +#: ..\..\..\templates\login.tpl.php:24 +msgid "Forgotten your password?" +msgstr "Esqueceu a sua senha?" + +#: ..\..\..\templates\myTagsDynamicInsert.inc.php:34 +#: ..\..\..\templates\myTagsDynamicInsert.inc.php:65 +msgid "My Tags" +msgstr "Minhas Tags" + +#: ..\..\..\templates\myTagsDynamicInsert.inc.php:44 +msgid "Show" +msgstr "Mostrar" + +#: ..\..\..\templates\myTagsDynamicInsert.inc.php:57 +msgid "System Popular Tags" +msgstr "Tags Populares Gerais" + +#: ..\..\..\templates\myTagsDynamicInsert.inc.php:70 +msgid "My Popular Tags" +msgstr "Minhas Tags Populares" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "Se você esqueceu a sua senha, o %s pode gerar uma nova para você. Digite o seu nome de usuário e o seu endereço de e-mail no formulário abaixo e nós enviaremos a nova senha para seu e-mail." + +#: ..\..\..\templates\password.tpl.php:14 +#: ..\..\..\templates\register.tpl.php:22 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +msgid "Generate Password" +msgstr "Gerar Senha" + +#: ..\..\..\templates\register.tpl.php:5 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "Cadastre-se aqui para criar uma conta gratuita no %s. Todas as informações solicitadas abaixo são necessárias." + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "Bookmarks recentemente postados para %s" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "Nenhum bookmark encontrado" + +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Watched" +msgstr "Observado" + +#: ..\..\..\templates\sidebar.block.recent.php:13 +msgid "Recent Tags" +msgstr "Tags Recentes" + +#: ..\..\..\templates\sidebar.block.related.php:14 +msgid "Related Tags" +msgstr "Tags Relacionadas" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "Remover da Lista de Observação" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "Adicionar à Lista de Observação" + +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Alphabet" +msgstr "Alfabeto" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Popularity" +msgstr "Popularidade" + +#: ..\..\..\templates\tags.tpl.php:15 +msgid "bookmark" +msgstr "bookmark" + +#: ..\..\..\templates\toolbar.inc.php:10 +msgid "My Bookmarks" +msgstr "Meus Bookmarks" + +#: ..\..\..\templates\toolbar.inc.php:11 +msgid "My Watched" +msgstr "Meus Observados" + +#: ..\..\..\templates\toolbar.inc.php:12 +msgid "All Recent" +msgstr "Todos os Recentes" + diff --git a/locales/zh_CN/LC_MESSAGES/messages.mo b/locales/zh_CN/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..2bdc82e628999341ccadd496a18073085f91420e GIT binary patch literal 10939 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 Qmz(VLPriVC%|AH)57t +# +msgid "" +msgstr "" +"Project-Id-Version: Scuttle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-04-29 11:17+0200\n" +"PO-Revision-Date: 2006-03-18 21:45-0800\n" +"Last-Translator: Marcus Campbell \n" +"Language-Team: zh-CN \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ..\..\..\about.php:25 +#: ..\..\..\templates\toolbar.inc.php:24 +msgid "About" +msgstr "关于" + +#: ..\..\..\ajaxDelete.php:29 +msgid "You are not allowed to delete this bookmark" +msgstr "您没有权限删除此条书签" + +#: ..\..\..\ajaxDelete.php:33 +msgid "Failed to delete bookmark" +msgstr "删除书签失败" + +#: ..\..\..\alltags.php:50 +msgid "All Tags" +msgstr "所有标签" + +#: ..\..\..\alltags.php:59 +#: ..\..\..\populartags.php:63 +#: ..\..\..\profile.php:46 +#: ..\..\..\rss.php:55 +#: ..\..\..\search.php:61 +#: ..\..\..\watch.php:35 +#: ..\..\..\watched.php:62 +#, php-format +msgid "User with username %s not was not found" +msgstr "未发现以 %s 为用户名的用户" + +#: ..\..\..\bookmarks.php:71 +#, fuzzy, php-format +msgid "User with username %s was not found" +msgstr "未发现以 %s 为用户名的用户" + +#: ..\..\..\bookmarks.php:94 +#: ..\..\..\edit.php:44 +msgid "Your bookmark must have a title and an address" +msgstr "每条书签必须包含标题和网址" + +#: ..\..\..\bookmarks.php:114 +#: ..\..\..\edit.php:58 +msgid "Bookmark saved" +msgstr "录入书签已被成功保存" + +#: ..\..\..\bookmarks.php:122 +#: ..\..\..\import.php:99 +#: ..\..\..\importNetscape.php:74 +msgid "There was an error saving your bookmark. Please try again or contact the administrator." +msgstr "保存书签时出错,请再保存重试一次或者联系管理员" + +#: ..\..\..\bookmarks.php:160 +#: ..\..\..\templates\toolbar.inc.php:13 +msgid "Add a Bookmark" +msgstr "添加书签" + +#: ..\..\..\bookmarks.php:163 +msgid "Add Bookmark" +msgstr "添加书签" + +#: ..\..\..\bookmarks.php:166 +msgid "You must be logged in before you can add bookmarks." +msgstr "您必须登陆后才能添加书签" + +#: ..\..\..\bookmarks.php:213 +msgid "My Bookmarks" +msgstr "您的书签" + +#: ..\..\..\edit.php:29 +msgid "Edit Bookmark" +msgstr "编辑书签" + +#: ..\..\..\edit.php:34 +#, php-format +msgid "Bookmark with id %s not was not found" +msgstr "id为 %s 的书签不存在" + +#: ..\..\..\edit.php:39 +msgid "You are not allowed to edit this bookmark" +msgstr "您没有权限编辑此条书签" + +#: ..\..\..\edit.php:55 +msgid "Error while saving your bookmark" +msgstr "在保存书签时出错" + +#: ..\..\..\edit.php:78 +msgid "Failed to delete the bookmark" +msgstr "删除书签失败" + +#: ..\..\..\edit.php:88 +#: ..\..\..\templates\editprofile.tpl.php:52 +msgid "Save Changes" +msgstr "保存修改" + +#: ..\..\..\functions.inc.php:92 +msgid "message_die() was called multiple times." +msgstr "message_die()被调用了多次" + +#: ..\..\..\functions.inc.php:104 +msgid "SQL Error" +msgstr "SQL出错" + +#: ..\..\..\functions.inc.php:110 +msgid "Line" +msgstr "行" + +#: ..\..\..\functions.inc.php:110 +#: ..\..\..\templates\importDelicious.tpl.php:8 +#: ..\..\..\templates\importNetscape.tpl.php:9 +msgid "File" +msgstr "文件" + +#: ..\..\..\functions.inc.php:116 +msgid "Information" +msgstr "信息" + +#: ..\..\..\functions.inc.php:121 +msgid "Critical Information" +msgstr "关键性信息" + +#: ..\..\..\functions.inc.php:126 +msgid "An error occured" +msgstr "有错误发生" + +#: ..\..\..\functions.inc.php:129 +msgid "General Error" +msgstr "一般性错误" + +#: ..\..\..\functions.inc.php:137 +msgid "An critical error occured" +msgstr "有严重错误发生" + +#: ..\..\..\functions.inc.php:140 +msgid "Critical Error" +msgstr "严重错误" + +#: ..\..\..\functions.inc.php:149 +msgid "DEBUG MODE" +msgstr "调试模式" + +#: ..\..\..\history.php:65 +msgid "History" +msgstr "" + +#: ..\..\..\history.php:66 +#, php-format +msgid "History for %s" +msgstr "" + +#: ..\..\..\history.php:81 +msgid "Address was not found" +msgstr "" + +#: ..\..\..\import.php:41 +msgid "Could not open XML input" +msgstr "无法打开XML输入" + +#: ..\..\..\import.php:45 +#, php-format +msgid "XML error: %s at line %d" +msgstr "XML错误: %s 发生在 %d 行" + +#: ..\..\..\import.php:54 +msgid "Import Bookmarks from del.icio.us" +msgstr "将del.icio.us的书签文件导入 " + +#: ..\..\..\import.php:86 +#: ..\..\..\importNetscape.php:64 +msgid "You have already submitted this bookmark." +msgstr "您过去已经录入过这条书签" + +#: ..\..\..\import.php:97 +#: ..\..\..\importNetscape.php:72 +msgid "Bookmark imported." +msgstr "书签导入完毕." + +#: ..\..\..\importNetscape.php:81 +msgid "Import Bookmarks from Browser File" +msgstr "将浏览器的书签文件导入(Internet Explorer, Mozilla Firefox and Netscape)" + +#: ..\..\..\index.php:32 +msgid "You have now logged out" +msgstr "您已经成功登出" + +#: ..\..\..\index.php:39 +#, php-format +msgid "%s: Recent bookmarks" +msgstr "%s: 最近书签" + +#: ..\..\..\index.php:72 +msgid "Store, share and tag your favourite links" +msgstr "" + +#: ..\..\..\index.php:73 +msgid "Recent Bookmarks" +msgstr "最近书签" + +#: ..\..\..\jsScuttle.php:22 +msgid "Are you sure?" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "Yes" +msgstr "" + +#: ..\..\..\jsScuttle.php:22 +msgid "No" +msgstr "" + +#: ..\..\..\jsScuttle.php:68 +msgid "Available" +msgstr "" + +#: ..\..\..\jsScuttle.php:71 +#, fuzzy +msgid "Not Available" +msgstr "尚未有书签列入" + +#: ..\..\..\login.php:38 +msgid "The details you have entered are incorrect. Please try again." +msgstr "您输入的详细信息不正确,请重试." + +#: ..\..\..\login.php:48 +#: ..\..\..\templates\login.tpl.php:26 +#: ..\..\..\templates\toolbar.inc.php:28 +msgid "Log In" +msgstr "登陆" + +#: ..\..\..\password.php:31 +msgid "You must enter your username." +msgstr "" + +#: ..\..\..\password.php:35 +#, fuzzy +msgid "You must enter your e-mail address." +msgstr "您 必须 输入用户名,密码,姓名和 e-mail 地址." + +#: ..\..\..\password.php:42 +msgid "No matches found for that username." +msgstr "" + +#: ..\..\..\password.php:45 +#, fuzzy +msgid "No matches found for that combination of username and e-mail address." +msgstr "您 必须 输入用户名,密码,姓名和 e-mail 地址." + +#: ..\..\..\password.php:53 +#, fuzzy +msgid "There was an error while generating your new password. Please try again." +msgstr "保存书签时出错,请再保存重试一次或者联系管理员" + +#: ..\..\..\password.php:57 +#, fuzzy +msgid "Your new password is:" +msgstr "确认密码" + +#: ..\..\..\password.php:57 +msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in." +msgstr "" + +#: ..\..\..\password.php:60 +#, fuzzy, php-format +msgid "%s Account Information" +msgstr "信息" + +#: ..\..\..\password.php:62 +#, php-format +msgid "New password generated and sent to %s" +msgstr "" + +#: ..\..\..\password.php:69 +#, fuzzy +msgid "Forgotten Password" +msgstr "新的密码" + +#: ..\..\..\populartags.php:54 +#: ..\..\..\templates\dynamictags.inc.php:101 +#: ..\..\..\templates\sidebar.block.common.php:9 +#: ..\..\..\templates\sidebar.block.popular.php:15 +#: ..\..\..\templates\sidebar.block.recent.php:25 +msgid "Popular Tags" +msgstr "热门标签" + +#: ..\..\..\profile.php:54 +#: ..\..\..\watched.php:114 +msgid "Username was not specified" +msgstr "没有提供用户名" + +#: ..\..\..\profile.php:60 +#, fuzzy +msgid "My Profile" +msgstr "个人资料" + +#: ..\..\..\profile.php:62 +#: ..\..\..\templates\sidebar.block.profile.php:12 +msgid "Profile" +msgstr "个人资料" + +#: ..\..\..\profile.php:80 +msgid "Password and confirmation do not match." +msgstr "密码和确认密码不一致." + +#: ..\..\..\profile.php:84 +msgid "Password must be at least 6 characters long." +msgstr "密码至少6位." + +#: ..\..\..\profile.php:88 +msgid "E-mail address is not valid." +msgstr "Email地址不合法." + +#: ..\..\..\profile.php:92 +msgid "An error occurred while saving your changes." +msgstr "保存修改时出错." + +#: ..\..\..\profile.php:94 +msgid "Changes saved." +msgstr "保存修改成功." + +#: ..\..\..\register.php:33 +#, fuzzy +msgid "You must enter a username, password and e-mail address." +msgstr "您 必须 输入用户名,密码,姓名和 e-mail 地址." + +#: ..\..\..\register.php:37 +msgid "This username already exists, please make another choice." +msgstr "用户名已经存在,请选择其他用户名." + +#: ..\..\..\register.php:41 +#, fuzzy +msgid "E-mail address is not valid. Please try again." +msgstr "Email地址不合法." + +#: ..\..\..\register.php:50 +msgid "You have successfully registered. Enjoy!" +msgstr "您已经注册成功." + +#: ..\..\..\register.php:52 +msgid "Registration failed. Please try again." +msgstr "注册失败,请重试." + +#: ..\..\..\register.php:57 +#: ..\..\..\templates\register.tpl.php:32 +#: ..\..\..\templates\toolbar.inc.php:27 +msgid "Register" +msgstr "注册" + +#: ..\..\..\search.inc.php:29 +#: ..\..\..\search.inc.php:57 +msgid "Search" +msgstr "搜索" + +#: ..\..\..\search.inc.php:35 +#, fuzzy +msgid "this user's bookmarks" +msgstr "%s 书签" + +#: ..\..\..\search.inc.php:40 +msgid "my bookmarks" +msgstr "您的书签" + +#: ..\..\..\search.inc.php:41 +#, fuzzy +msgid "my watchlist" +msgstr "将用户加入到您的关注列表" + +#: ..\..\..\search.inc.php:45 +msgid "all bookmarks" +msgstr "所有书签" + +#: ..\..\..\search.inc.php:48 +msgid "for" +msgstr "关于" + +#: ..\..\..\search.php:91 +#: ..\..\..\search.php:128 +msgid "Search Bookmarks" +msgstr "搜索书签" + +#: ..\..\..\search.php:97 +msgid "Search Results" +msgstr "搜索结果" + +#: ..\..\..\tags.php:38 +#: ..\..\..\templates\editbookmark.tpl.php:44 +#: ..\..\..\templates\sidebar.block.profile.php:13 +msgid "Tags" +msgstr "标签" + +#: ..\..\..\watch.php:79 +#, php-format +msgid "%s Bookmarks" +msgstr "%s 书签" + +#: ..\..\..\watch.php:84 +msgid "User removed from your watchlist" +msgstr "已将用户从您的关注列表中删除" + +#: ..\..\..\watch.php:86 +msgid "User added to your watchlist" +msgstr "已将用户加入到您的关注列表中" + +#: ..\..\..\watched.php:105 +#, fuzzy +msgid "My Watchlist" +msgstr "我关注的其他用户" + +#: ..\..\..\watched.php:107 +#: ..\..\..\templates\sidebar.block.profile.php:14 +#: ..\..\..\templates\toolbar.inc.php:12 +#, fuzzy +msgid "Watchlist" +msgstr "我关注的其他用户" + +#: ..\..\..\templates\about.tpl.php:6 +msgid "Store all your favourite links in one place, accessible from anywhere." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:7 +msgid "Share your bookmarks with everyone, with friends on your watchlist or just keep them private." +msgstr "您可以将您收藏的书签资源与所有朋友分享,也许因此发现与您志同道合的朋友。或者保存为只能您自己查看的私有状态" + +#: ..\..\..\templates\about.tpl.php:8 +msgid "Tag your bookmarks with as many labels as you want, instead of wrestling with folders." +msgstr "您可以将您认为优秀的站点用标签(Tag)定义,这是一种更为灵活的分类形式,方便您的发散记忆和管理。" + +#: ..\..\..\templates\about.tpl.php:9 +#, php-format +msgid "Register now to start using %s!" +msgstr "" + +#: ..\..\..\templates\about.tpl.php:12 +msgid "Geek Stuff" +msgstr "致谢" + +#: ..\..\..\templates\about.tpl.php:14 +#, php-format +msgid "%s is based on an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer." +msgstr "" + +#: ..\..\..\templates\about.tpl.php:15 +#, php-format +msgid "%1$s supports most of the del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it." +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:17 +#: ..\..\..\templates\tags.tpl.php:7 +msgid "Sort by:" +msgstr "排序方式:" + +#: ..\..\..\templates\bookmarks.tpl.php:18 +msgid "Date" +msgstr "发布时间" + +#: ..\..\..\templates\bookmarks.tpl.php:19 +#: ..\..\..\templates\editbookmark.tpl.php:34 +msgid "Title" +msgstr "书签标题" + +#: ..\..\..\templates\bookmarks.tpl.php:23 +msgid "URL" +msgstr "URL网址" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Edit" +msgstr "编辑" + +#: ..\..\..\templates\bookmarks.tpl.php:60 +msgid "Delete" +msgstr "删除" + +#: ..\..\..\templates\bookmarks.tpl.php:66 +msgid "by" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:78 +#, fuzzy, php-format +msgid " and %s1 other%s" +msgstr "同时被其他 %s 个用户收藏" + +#: ..\..\..\templates\bookmarks.tpl.php:81 +#, fuzzy, php-format +msgid " and %2$s%1$s others%3$s" +msgstr "同时被其他 %s 个用户收藏" + +#: ..\..\..\templates\bookmarks.tpl.php:90 +msgid "Copy" +msgstr "复制" + +#: ..\..\..\templates\bookmarks.tpl.php:136 +#: ..\..\..\templates\bookmarks.tpl.php:142 +msgid "First" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:137 +#: ..\..\..\templates\bookmarks.tpl.php:143 +msgid "Previous" +msgstr "上一页" + +#: ..\..\..\templates\bookmarks.tpl.php:150 +#: ..\..\..\templates\bookmarks.tpl.php:153 +msgid "Next" +msgstr "下一页" + +#: ..\..\..\templates\bookmarks.tpl.php:151 +#: ..\..\..\templates\bookmarks.tpl.php:154 +msgid "Last" +msgstr "" + +#: ..\..\..\templates\bookmarks.tpl.php:156 +#, php-format +msgid "Page %d of %d" +msgstr "第 %d 页 / 共 %d 页" + +#: ..\..\..\templates\bookmarks.tpl.php:160 +msgid "No bookmarks available" +msgstr "尚未有书签列入" + +#: ..\..\..\templates\dynamictags.inc.php:108 +#: ..\..\..\templates\sidebar.block.common.php:15 +#: ..\..\..\templates\sidebar.block.popular.php:21 +#: ..\..\..\templates\sidebar.block.recent.php:20 +#: ..\..\..\templates\tags.tpl.php:16 +msgid "bookmark" +msgid_plural "bookmarks" +msgstr[0] "书签" +msgstr[1] "书签" + +#: ..\..\..\templates\editbookmark.tpl.php:29 +msgid "Address" +msgstr "网址" + +#: ..\..\..\templates\editbookmark.tpl.php:31 +#: ..\..\..\templates\editbookmark.tpl.php:36 +#: ..\..\..\templates\editprofile.tpl.php:31 +msgid "Required" +msgstr "必填项目" + +#: ..\..\..\templates\editbookmark.tpl.php:39 +#: ..\..\..\templates\editprofile.tpl.php:47 +#: ..\..\..\templates\profile.tpl.php:28 +msgid "Description" +msgstr "描述" + +#: ..\..\..\templates\editbookmark.tpl.php:46 +msgid "Comma-separated" +msgstr "以单字节逗号分开" + +#: ..\..\..\templates\editbookmark.tpl.php:49 +#: ..\..\..\templates\importDelicious.tpl.php:15 +#: ..\..\..\templates\importNetscape.tpl.php:16 +msgid "Privacy" +msgstr "私密" + +#: ..\..\..\templates\editbookmark.tpl.php:52 +#: ..\..\..\templates\importDelicious.tpl.php:18 +#: ..\..\..\templates\importNetscape.tpl.php:19 +msgid "Public" +msgstr "公开发布" + +#: ..\..\..\templates\editbookmark.tpl.php:53 +#: ..\..\..\templates\importDelicious.tpl.php:19 +#: ..\..\..\templates\importNetscape.tpl.php:20 +msgid "Shared with Watch List" +msgstr "仅关注者" + +#: ..\..\..\templates\editbookmark.tpl.php:54 +#: ..\..\..\templates\importDelicious.tpl.php:20 +#: ..\..\..\templates\importNetscape.tpl.php:21 +msgid "Private" +msgstr "仅本用户" + +#: ..\..\..\templates\editbookmark.tpl.php:66 +msgid "Delete Bookmark" +msgstr "删除书签" + +#: ..\..\..\templates\editbookmark.tpl.php:93 +msgid "Bookmarklet" +msgstr "Bookmarklet" + +#: ..\..\..\templates\editbookmark.tpl.php:94 +#, php-format +msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s" +msgstr "Bookmarklet是一个内含简单JavaScript代码的书签,使用的方法和您的浏览器中的书签一样,不同的地方是:书签是用来记录浏览的位置,而Bookmarklet则是记录某些对您正在浏览的页面进行处理的程序和方法。
使用Bookmarklet之前,您无需另外安装或下载程式,只要简单的将如下链接加入您的浏览器书签或是收藏夹之中。
选择如下Bookmarklet之一,并将其加入到您的浏览器书签中,当您浏览并希望收藏其他网站页面时,只需点击您的浏览器中 Bookmarklet 书签,就会将您希望收藏的页面发布到 %s" + +#: ..\..\..\templates\editbookmark.tpl.php:106 +#, php-format +msgid "Post to %s" +msgstr "收藏到 %s" + +#: ..\..\..\templates\editbookmark.tpl.php:107 +#, php-format +msgid "Post to %s (Pop-up)" +msgstr "收藏到 %s(弹出窗口) " + +#: ..\..\..\templates\editbookmark.tpl.php:111 +#: ..\..\..\templates\importDelicious.tpl.php:26 +#: ..\..\..\templates\importNetscape.tpl.php:27 +msgid "Import" +msgstr "导入书签" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Import bookmarks from bookmark file" +msgstr "导入(Internet Explorer, Mozilla Firefox and Netscape)浏览器的书签文件" + +#: ..\..\..\templates\editbookmark.tpl.php:113 +msgid "Internet Explorer, Mozilla Firefox and Netscape" +msgstr "Internet Explorer, Mozilla Firefox and Netscape" + +#: ..\..\..\templates\editbookmark.tpl.php:114 +msgid "Import bookmarks from del.icio.us" +msgstr "导入del.icio.us的书签文件" + +#: ..\..\..\templates\editprofile.tpl.php:10 +msgid "Account Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:14 +#: ..\..\..\templates\login.tpl.php:15 +#: ..\..\..\templates\password.tpl.php:10 +#: ..\..\..\templates\profile.tpl.php:7 +#: ..\..\..\templates\register.tpl.php:16 +msgid "Username" +msgstr "用户帐号" + +#: ..\..\..\templates\editprofile.tpl.php:19 +msgid "New Password" +msgstr "新的密码" + +#: ..\..\..\templates\editprofile.tpl.php:24 +#, fuzzy +msgid "Confirm Password" +msgstr "确认密码" + +#: ..\..\..\templates\editprofile.tpl.php:29 +#: ..\..\..\templates\register.tpl.php:26 +msgid "E-mail" +msgstr "用户Email" + +#: ..\..\..\templates\editprofile.tpl.php:35 +msgid "Personal Details" +msgstr "" + +#: ..\..\..\templates\editprofile.tpl.php:39 +#: ..\..\..\templates\profile.tpl.php:12 +msgid "Name" +msgstr "用户全名" + +#: ..\..\..\templates\editprofile.tpl.php:43 +#: ..\..\..\templates\profile.tpl.php:18 +msgid "Homepage" +msgstr "用户网站" + +#: ..\..\..\templates\error.404.tpl.php:5 +msgid "Not Found" +msgstr "文件不存在" + +#: ..\..\..\templates\error.404.tpl.php:6 +msgid "The requested URL was not found on this server" +msgstr "您指定的文件不存在。" + +#: ..\..\..\templates\error.500.tpl.php:5 +msgid "General server error" +msgstr "一般性服务器错误" + +#: ..\..\..\templates\error.500.tpl.php:6 +msgid "The requested URL could not be processed" +msgstr "无法对您指定的文件进行导入操作。" + +#: ..\..\..\templates\importDelicious.tpl.php:33 +msgid "Log in to the export page at del.icio.us" +msgstr "登录del.icio.us导出书签数据" + +#: ..\..\..\templates\importDelicious.tpl.php:34 +msgid "Save the resulting XML file to your computer" +msgstr "保存XML文件到您的电脑中。" + +#: ..\..\..\templates\importDelicious.tpl.php:35 +msgid "Click Browse... to find this file on your computer. The maximum size the file can be is 1MB" +msgstr "点击浏览...在您的电脑中找到书签文件,最大允许导入1Mb数据" + +#: ..\..\..\templates\importDelicious.tpl.php:36 +#: ..\..\..\templates\importNetscape.tpl.php:43 +msgid "Select the default privacy setting for your imported bookmarks" +msgstr "为导入的书签选择默认私密设置" + +#: ..\..\..\templates\importDelicious.tpl.php:37 +#: ..\..\..\templates\importNetscape.tpl.php:44 +msgid "Click Import to start importing the bookmarks; it may take a minute" +msgstr "点击导入书签开始导入,耗时1分钟左右。" + +#: ..\..\..\templates\importNetscape.tpl.php:32 +msgid "Instructions" +msgstr "步骤和导入方法" + +#: ..\..\..\templates\importNetscape.tpl.php:35 +msgid "Export your bookmarks from your browser to a file" +msgstr "将您的浏览器书签数据导出为一个文件" + +#: ..\..\..\templates\importNetscape.tpl.php:37 +msgid "Internet Explorer: File > Import and Export... > Export Favorites" +msgstr "Internet Explorer: 文件 > 导入和导出... > 导出收藏夹 " + +#: ..\..\..\templates\importNetscape.tpl.php:38 +msgid "Mozilla Firefox: Bookmarks > Manage Bookmarks... > File > Export..." +msgstr "Mozilla Firefox: 书签 > 管理书签... > 文件 > 导出书签... " + +#: ..\..\..\templates\importNetscape.tpl.php:39 +msgid "Netscape: Bookmarks > Manage Bookmarks... > Tools > Export..." +msgstr "Netscape: 书签 > 管理书签... > 工具 >> 导出书签... " + +#: ..\..\..\templates\importNetscape.tpl.php:42 +msgid "Click Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB" +msgstr "点击浏览... 在您的电脑中找到书签文件,最大允许导入1Mb数据" + +#: ..\..\..\templates\login.tpl.php:20 +#: ..\..\..\templates\register.tpl.php:21 +msgid "Password" +msgstr "密码" + +#: ..\..\..\templates\login.tpl.php:22 +msgid "Don't ask for my password for 2 weeks" +msgstr "存储帐号密码信息2周" + +#: ..\..\..\templates\login.tpl.php:30 +msgid "Forgotten your password?" +msgstr "" + +#: ..\..\..\templates\password.tpl.php:5 +#, php-format +msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you." +msgstr "" + +#: ..\..\..\templates\password.tpl.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: ..\..\..\templates\password.tpl.php:19 +#, fuzzy +msgid "Generate Password" +msgstr "新的密码" + +#: ..\..\..\templates\profile.tpl.php:23 +msgid "Member Since" +msgstr "注册时间" + +#: ..\..\..\templates\profile.tpl.php:35 +#: ..\..\..\templates\sidebar.block.watchlist.php:8 +#, fuzzy +msgid "Watching" +msgstr "我关注的其他用户" + +#: ..\..\..\templates\profile.tpl.php:50 +msgid "Watched By" +msgstr "关注该用户的其他用户" + +#: ..\..\..\templates\register.tpl.php:11 +#, php-format +msgid "Sign up here to create a free %s account. All the information requested below is required" +msgstr "您可以免费注册成为 %s 的用户,请填写如下表单:" + +#: ..\..\..\templates\rss.tpl.php:9 +#, php-format +msgid "Recent bookmarks posted to %s" +msgstr "最新发布到%s的书签" + +#: ..\..\..\templates\rss.tpl.php:17 +#: ..\..\..\templates\rss.tpl.php:19 +msgid "No bookmarks found" +msgstr "尚无书签" + +#: ..\..\..\templates\sidebar.block.recent.php:15 +msgid "Recent Tags" +msgstr "最新标签" + +#: ..\..\..\templates\sidebar.block.related.php:15 +msgid "Related Tags" +msgstr "关联标签" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:10 +msgid "Remove from Watchlist" +msgstr "将用户从您的关注列表中删除" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:12 +msgid "Add to Watchlist" +msgstr "将用户加入到您的关注列表" + +#: ..\..\..\templates\sidebar.block.watchstatus.php:17 +#, fuzzy +msgid "Actions" +msgstr "步骤和导入方法" + +#: ..\..\..\templates\tags.tpl.php:8 +msgid "Alphabet" +msgstr "" + +#: ..\..\..\templates\tags.tpl.php:9 +#, fuzzy +msgid "Popularity" +msgstr "热门标签" + +#: ..\..\..\templates\toolbar.inc.php:11 +#, fuzzy +msgid "Bookmarks" +msgstr "%s 书签" + +#: ..\..\..\templates\toolbar.inc.php:16 +msgid "Log Out" +msgstr "登出" + diff --git a/login.php b/login.php new file mode 100644 index 0000000..4d212a9 --- /dev/null +++ b/login.php @@ -0,0 +1,53 @@ +login($posteduser, $_POST['password'], ($_POST['keeppass'] == "yes")); + if ($login) { + if ($_POST['query']) + header('Location: '. createURL('bookmarks', $posteduser .'?'. $_POST['query'])); + else + header('Location: '. createURL('bookmarks', $posteduser)); + } else { + $tplVars['error'] = T_('The details you have entered are incorrect. Please try again.'); + } +} +if (!$login) { + if ($userservice->isLoggedOn()) { + $cUser = $userservice->getCurrentUser(); + $cUsername = strtolower($cUser[$userservice->getFieldName('username')]); + header('Location: '. createURL('bookmarks', $cUsername)); + } + + $tplVars['subtitle'] = T_('Log In'); + $tplVars['formaction'] = createURL('login'); + $tplVars['querystring'] = filter($_SERVER['QUERY_STRING']); + $templateservice->loadTemplate('login.tpl', $tplVars); +} +?> diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4afe5653f548b4b74ea0ecdb727ea2d7ac12a091 GIT binary patch literal 2973 zcmV;O3u5$%P)goj-97KwhiC2V3PP2ldJ3g;d6n8G9?K;-nbmfpSUq#CUJ0lX6J}IALW+ z#Th(ACNE@i0;bjV0463;7)ztZW8mlBgC+9Iz`bue0pMf6t(mbYh&+b&=h{{e+Q5S@ z3CA%E3_94^5i;X9Vho=vmt^EkBTz2MO~B`!!X)BkDUN4xoM?m9yI1wWwBm%uCwuT# z?DW8xQU3K!ApxIPq0%pnVk!u-o5l)~?iOta|t> zFVk9l9*tTp;CsLifM;-ObsaLgFy0Ajv84w|C%o9{+i5d$SzY5?3r+}x3i^2b$Ij#In&SAZjiX zx{HLhIiltgKm+(8@Lk~HspDGh5_suzY z0Qr$T1ET|E3t7aHt*x81azFiR2rtCOL_*6AX}JM@BP0w##0C^^{uJKADFxm>bzGlw zfDd$l7sd;WUOP%|IEQ6zH9f3EC%O+Q_$Q1`b zEW!X<^?>?Sm(0Gm;VqmJ;C;Yz4sZpy4j^01k{``)9Z4I+fEpl707!ts+ND0)tS70D z4d6I7)}T#ov4y`n4ZvcRrK$KyPIO=`UtFfK(%1!oUa#~nTHCJ&8}w#(`jwe01a1Xy z{#jZ9i@*CIGa@o>0pDnaoCHAO@(Y*on_JFUyCBjo9lBuK1)W(hDK_bQ!FHcr*H^AA z<6d2(dHEz7x_rOP1D99vfonxox$h47rH|dg;~9r>fJ{Ea;ad-5r81D3fb@Q_2iu){ z?N19@mttLC=_IMc=Gka>`bNcL>D&rIz2d+grovNXm#AvLu3*erG`m^BA_wh=Ui0NeVS|HK->b-@&)reSn zWs%TbA*{`^Qs>#<{vr=123T_dEyLz{Wss?r-=tvf%Baoo0eNuy;}D;ch8sj zwCkJM>e+8&f+p34RkYUwM4%e~?#6jLU%ZQ8W#O9pVCdICGCL4anrk(d&(EQO3mS3e zGGG3)Z}5XeBNuo{6D9PP8yZ!ezOc;2uRP6XqvmSVxcDT2>k~9RHY9P^BZf_Rf`MQK z+@Hnabm&iE_&s3d`ck+$bG2)bN|P5q`Y(JvaoY!8Xoq@Nw%d`t{J@huvs~vVLG3cC z5he^0AQRv>g;nx?2+fycBDou2@=xOMaz-}|82anj9)E$a^vpOfsH)fdjMERjs;Y>* zB;aBaGf&6*y&*#~4|=9sH4xR}DOMbCMqun%99HVb_xvT&ql5VV1tNEmdW+6MumUft zZhgAF?Veawqu~M8Py;54bD&?yBxj{f9!ltq2mWPnUxCKyn3Q)30K0gYf$MGuz!*Al zKBKCu{V?|RK(~R-us9i1BSd=RKjDEc;GU%3(5BZziMCM-_2vjFE+C8-b&z-`HoYyr zod^I2B$WpfVcV>O*e+x?>9zvD`M#YJ)Wl`SSRot*n!3ZO!>$NeP7c)w%a)zN?*zDO z`G}3)GuV!RMu=rIG!Txq2isP*B~UI&3K$h92O447+gUpiKAT7>y9qDbq3r>SLWWUx zac;Gf2Sxx9JB^4z`T>3|9@uc-Y#?nr&?!p>GK>T1H%g!g@d<%QKkIG;?0YSms}0<> z8j&B6&Zo!^=g1b*aSm-sD(+isP&J5Hq$~#Zi~wTC*56>&bq^R5;jYxEEmaBJ7ODo* zTEqAa0(S`aY85c#M{^ABE0P&-wg@kSWpxYzj=hHjL~O*`yog0XKy9f?eYu7S0!&aR zsLl|%OK8+N85FE^0XsKFEgYe?xJD-LFtoo&ek2!rw%xB~#W|p=I2JiTM8xSWA6^TA zY<%g&dfd5JX;5FO;ZbbIjZ^rMDf~SG&F7*WN;P z7CSqN@rUs$b!~vlvJ-)qfm%?RF50;<>WvCfb2&bUZ7!p#y4v8>vln^v z(~t1OHMhT|?thfi_dm+%V{c>sz3=9OMe%LK_dqsg| zU`|!Lp(G+1;{Q%uL(lAT>k$S&@(yl3JkDFZ0QZ3>dEzJMskCoDuc{UL$gT*8$c+%6 z8EqpW@iFCP)&4IhL_~lIV3HoM^pTU>^|zZ^2w;)^1lE9gU`bW`d8I4u;%pIE6p;e4 zSN8Y8vbG&~*rf*mL}U^;1f+mEacnPawM%-fA|e(rM(mkE;+ba^cvW@Vqd)#11OE3^ T8>YXG00000NkvXXu0mjfBm9@% literal 0 HcmV?d00001 diff --git a/logo_24.png b/logo_24.png new file mode 100644 index 0000000000000000000000000000000000000000..f450b785b4bf47180cbdb6dfadb5eb28b064371a GIT binary patch literal 1729 zcmV;y20rkEPgZuXG;H-0%DT zzweV-(rj*+_U)0o*?zf#Dnk8j6-EddnrDgo+2d(Vf6r!?%eB9T(0 z-h6~m^al%hm3>_SfD>Ik`){>UIqZyrutCfYu~He5yYKAx1Ag?n0TlA;c4a2NVf74= z=`&H%gs_2<2B~g?SpNaKQhi@4#Ii}U13jervMn)l4Z!-mUiPRhI=Iac z34DV3EPizguQE{+ul8r)dEn8ZS(e)oOgSp&EMVDGTW4tAO&A&48r2J4sYU(UVG zIXZ@JV5AKKH=r^$O0`K@DP+yN0o$ba*Ml=A&XY%X6<-W!17sjgB|4L zUmT?jG=a+^A}gaX3{v#qjz`9)`QdUYm@{V2AgYoGXKIZmhuwrqLu+5EN zHFxV^_Cw$2p?(EwFGbY@wZ$4BOcptN^l|>wk{J<^+OlRlHX?H4+Ujr22_m3% zFb*`!pr;{scjQpm#B%1aO2fEwBh}XNuZqarTD=Vb0DWmZrRgY^d*8CXBg~q6p#wp& z<(Q8OmXN@~)QJN{5gBdQ>Ik3|DU^<;!c7E&)wXPK#$UOoR0t?codi(rq}34sNGheb zD)ZJ@9>h&YKs+W^JUyh5w9|VU!A7jbjRbC@djschbm9zFyjf5JuyF6`9QHgOXybcsx$s< zW`SuDsdU(r1_pp$Hd;O@B3HKp5C`@VS?2&Vz`Tfr9XG7ss{=hiAJ7H3ME?O!``Z5l X*t)bK+V-;000000NkvXXu0mjf-#;p% literal 0 HcmV?d00001 diff --git a/password.php b/password.php new file mode 100644 index 0000000..b7daa70 --- /dev/null +++ b/password.php @@ -0,0 +1,72 @@ +e-mail address.'); + + // USERNAME AND E-MAIL + } else { + + // NO MATCH + if (!($userinfo = $userservice->getUserByUsername($_POST['username']))) { + $tplVars['error'] = T_('No matches found for that username.'); + + } elseif ($_POST['email'] != $userinfo['email']) { + $tplVars['error'] = T_('No matches found for that combination of username and e-mail address.'); + + // MATCH + } else { + + // GENERATE AND STORE PASSWORD + $password = $userservice->generatePassword($userinfo['uId']); + if (!($password = $userservice->generatePassword($userinfo['uId']))) { + $tplVars['error'] = T_('There was an error while generating your new password. Please try again.'); + + } else { + // SEND E-MAIL + $message = T_('Your new password is:') ."\n". $password ."\n\n". T_('To keep your bookmarks secure, you should change this password in your profile the next time you log in.'); + $message = wordwrap($message, 70); + $headers = 'From: '. $adminemail; + $mail = mail($_POST['email'], sprintf(T_('%s Account Information'), $sitename), $message); + + $tplVars['msg'] = sprintf(T_('New password generated and sent to %s'), $_POST['email']); + } + } + } +} + +$templatename = 'password.tpl'; +$tplVars['subtitle'] = T_('Forgotten Password'); +$tplVars['formaction'] = createURL('password'); +$templateservice->loadTemplate($templatename, $tplVars); +?> diff --git a/populartags.php b/populartags.php new file mode 100644 index 0000000..daef205 --- /dev/null +++ b/populartags.php @@ -0,0 +1,86 @@ +isLoggedOn()) { + $hashtext .= $userservice->getCurrentUserID(); + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + if ($currentUsername == $user) { + $hashtext .= $user; + } + } + $hash = md5($hashtext); + + // Cache for an hour + $cacheservice->Start($hash, 3600); +} + +// Header variables +$tplvars = array(); +$pagetitle = T_('Popular Tags'); + +if (isset($user) && $user != '') { + if (is_int($user)) { + $userid = intval($user); + } else { + if ($userinfo = $userservice->getUserByUsername($user)) { + $userid =& $userinfo[$userservice->getFieldName('primary')]; + } else { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + //throw a 404 error + exit(); + } + } + $pagetitle .= ': '. ucfirst($user); +} else { + $userid = NULL; +} + +$tags = $tagservice->getPopularTags($userid, 150, $logged_on_userid); +$tplVars['tags'] =& $tagservice->tagCloud($tags, 5, 90, 225, getSortOrder('alphabet_asc')); +$tplVars['user'] = $user; + +if (isset($userid)) { + $tplVars['cat_url'] = createURL('bookmarks', '%s/%s'); +} else { + $tplVars['cat_url'] = createURL('tags', '%2$s'); +} + +$tplVars['subtitle'] = $pagetitle; +$templateservice->loadTemplate('tags.tpl', $tplVars); + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> diff --git a/profile.php b/profile.php new file mode 100644 index 0000000..d834144 --- /dev/null +++ b/profile.php @@ -0,0 +1,107 @@ +isLoggedOn()) { + $loggedon = true; + $currentUser = $userservice->getCurrentUser(); + $currentUserID = $userservice->getCurrentUserId(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; +} + +if ($user) { + if (is_int($user)) { + $userid = intval($user); + } else { + $user = urldecode($user); + if (!($userinfo = $userservice->getUserByUsername($user))) { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); + } else { + $userid =& $userinfo['uId']; + } + } +} else { + $tplVars['error'] = T_('Username was not specified'); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); +} + +if ($user == $currentUsername) { + $title = T_('My Profile'); +} else { + $title = T_('Profile') .': '. $user; +} +$tplVars['pagetitle'] = $title; +$tplVars['subtitle'] = $title; + +$tplVars['user'] = $user; +$tplVars['userid'] = $userid; + +if (isset($_POST['submitted'])) { + $error = false; + $detPass = trim($_POST['pPass']); + $detPassConf = trim($_POST['pPassConf']); + $detName = trim($_POST['pName']); + $detMail = trim($_POST['pMail']); + $detPage = trim($_POST['pPage']); + $detDesc = filter($_POST['pDesc']); + if ($detPass != $detPassConf) { + $error = true; + $tplVars['error'] = T_('Password and confirmation do not match.'); + } + if ($detPass != "" && strlen($detPass) < 6) { + $error = true; + $tplVars['error'] = T_('Password must be at least 6 characters long.'); + } + if (!$userservice->isValidEmail($detMail)) { + $error = true; + $tplVars['error'] = T_('E-mail address is not valid.'); + } + if (!$error) { + if (!$userservice->updateUser($userid, $detPass, $detName, $detMail, $detPage, $detDesc)) { + $tplvars['error'] = T_('An error occurred while saving your changes.'); + } else { + $tplVars['msg'] = T_('Changes saved.'); + } + } + $userinfo = $userservice->getUserByUsername($user); +} + +if ($currentUserID != $userid) { + $templatename = 'profile.tpl.php'; +} else { + $templatename = 'editprofile.tpl.php'; + $tplVars['formaction'] = createURL('profile', $user); +} + +$tplVars['row'] = $userinfo; +$templateservice->loadTemplate($templatename, $tplVars); +?> diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..636893f --- /dev/null +++ b/readme.txt @@ -0,0 +1,86 @@ +Scuttle 0.7.2 +http://sourceforge.net/projects/scuttle/ +http://scuttle.org/ + +Copyright (C) 2004 - 2006 Scuttle project +Available under the GNU General Public License + +============ +INSTALLATION +============ + +* Use the SQL contained in tables.sql to create the necessary database tables. This file was written specifically for MySQL, so may need rewritten if you intend to use a different database system. + +* Edit config.inc.php.example and save the changes as a new config.inc.php file in the same directory. + +* Set the CHMOD permissions on the /cache/ subdirectory to 777 + +[ See also: http://scuttle.org/wiki/doku.php?id=installation ] + +========= +UPGRADING +========= + +Instructions on how to upgrade from the last stable release of Scuttle are detailed on our Wiki: + +http://scuttle.org/wiki/doku.php?id=upgrading + +=== +API +=== + +Scuttle supports most of the del.icio.us API [ http://del.icio.us/doc/api ]. Almost all of the neat tools made for that system can be modified to work with your installation instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it. + +[ See also: http://scuttle.org/wiki/doku.php?id=scuttle_api ] + +============ +TRANSLATIONS +============ + +Scuttle is available in many languages. If you know gettext and can provide additional translations, your help would be greatly appreciated. + +------------------- +Available languages +------------------- +English en-GB 100% (Default) +Chinese zh-CN 86% +Danish dk-DK 100% +Dutch nl-NL 68% +French fr-FR 100% +German de-DE 100% +Hindi hi-IN 100% +Italian it-IT 89% +Japanese ja-JP 100% +Lithuanian lt-LT 100% +Portuguese pt-BR 100% +Spanish es-ES 94% + +[ See also: http://scuttle.org/wiki/doku.php?id=translations ] + +============= +PROJECT LINKS +============= + +Scuttle Project: +http://sourceforge.net/projects/scuttle/ + +Scuttle.org: +http://scuttle.org/ + +Scuttle Wiki: +http://scuttle.org/wiki/ + +Help forum: +https://sourceforge.net/forum/forum.php?forum_id=455068 + +Bug reports: +https://sourceforge.net/tracker/?atid=729860&group_id=134378&func=browse + +Feature requests: +https://sourceforge.net/tracker/?atid=729863&group_id=134378&func=browse + +User-submitted patches: +https://sourceforge.net/tracker/?atid=729862&group_id=134378&func=browse + +Discussion forum: +https://sourceforge.net/forum/forum.php?forum_id=455067 diff --git a/register.php b/register.php new file mode 100644 index 0000000..8549d05 --- /dev/null +++ b/register.php @@ -0,0 +1,64 @@ +must enter a username, password and e-mail address.'); + + // Check if username is reserved + } elseif ($userservice->isReserved($posteduser)) { + $tplVars['error'] = T_('This username has been reserved, please make another choice.'); + + // Check if username already exists + } elseif ($userservice->getUserByUsername($posteduser)) { + $tplVars['error'] = T_('This username already exists, please make another choice.'); + + // Check if e-mail address is valid + } elseif (!$userservice->isValidEmail($_POST['email'])) { + $tplVars['error'] = T_('E-mail address is not valid. Please try again.'); + + // Register details + } elseif ($userservice->addUser($posteduser, $_POST['password'], $_POST['email'])) { + // Log in with new username + $login = $userservice->login($posteduser, $_POST['password']); + if ($login) { + header('Location: '. createURL('bookmarks', $posteduser)); + } + $tplVars['msg'] = T_('You have successfully registered. Enjoy!'); + } else { + $tplVars['error'] = T_('Registration failed. Please try again.'); + } +} + +$tplVars['loadjs'] = true; +$tplVars['subtitle'] = T_('Register'); +$tplVars['formaction'] = createURL('register'); +$templateservice->loadTemplate('register.tpl', $tplVars); +?> diff --git a/rss.gif b/rss.gif new file mode 100644 index 0000000000000000000000000000000000000000..094ba10625425b6917afdac48670431b4e36f807 GIT binary patch literal 401 zcmZ?wbhEHb6krfwSgOEqB1Y~~yv&JYgS+Yc7jq2XSMl6v^#9l-_O#9FTc5(uiDHLm zG{2tW{$OUw?>Xu(=O%ny82D?E&8L-N-_|Am+!XV4`@%QdXa3w>e(c22Z-*xRJu~gc zg>^sfANlkA+Mkb4{{8#?pTgu7`#d-nFdUivV~4#QS0vMc75qOAHY61K%aoJ}uyYEC3kx!{ z6{MABadJxLi!h7IiwpD#adPqS*2)QXOV2Eu&6UDjE6!N3lySDCOi{NKv!vvDA^toW zE>3a53ikCP9C^}Qrw+3&Wf2nO;GZy|B94bi!dLiCs8FB)4isLoggedOn()) { + $hashtext .= $userservice->getCurrentUserID(); + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + if ($currentUsername == $user) { + $hashtext .= $user; + } + } + $hash = md5($hashtext); + + // Cache for an hour + $cacheservice->Start($hash, 3600); +} + +$watchlist = null; +if ($user && $user != 'all') { + if ($user == 'watchlist') { + $user = $cat; + $cat = null; + $watchlist = true; + } + if (is_int($user)) { + $userid = intval($user); + } else { + if ($userinfo = $userservice->getUserByUsername($user)) { + $userid =& $userinfo[$userservice->getFieldName('primary')]; + } else { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + //throw a 404 error + exit(); + } + } + $pagetitle .= ": ". $user; +} else { + $userid = NULL; +} + +if ($cat) { + $pagetitle .= ": ". str_replace('+', ' + ', $cat); +} + +$tplVars['feedtitle'] = filter($GLOBALS['sitename'] . (isset($pagetitle) ? $pagetitle : '')); +$tplVars['feedlink'] = $GLOBALS['root']; +$tplVars['feeddescription'] = sprintf(T_('Recent bookmarks posted to %s'), $GLOBALS['sitename']); + +$bookmarks =& $bookmarkservice->getBookmarks(0, 15, $userid, $cat, NULL, getSortOrder(), $watchlist); +$bookmarks_tmp =& filter($bookmarks['bookmarks']); + +$bookmarks_tpl = array(); +foreach(array_keys($bookmarks_tmp) as $key) { + $row =& $bookmarks_tmp[$key]; + + $_link = $row['bAddress']; + // Redirection option + if ($GLOBALS['useredir']) { + $_link = $GLOBALS['url_redir'] . $_link; + } + $_pubdate = gmdate("r", strtotime($row['bDatetime'])); + // array_walk($row['tags'], 'filter'); + + $bookmarks_tpl[] = array( + 'title' => $row['bTitle'], + 'link' => $_link, + 'description' => $row['bDescription'], + 'creator' => $row['username'], + 'pubdate' => $_pubdate, + 'tags' => $row['tags'] + ); +} +unset($bookmarks_tmp); +unset($bookmarks); +$tplVars['bookmarks'] =& $bookmarks_tpl; + +$templateservice->loadTemplate('rss.tpl', $tplVars); + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> diff --git a/scuttle.css b/scuttle.css new file mode 100644 index 0000000..0d7ab2b --- /dev/null +++ b/scuttle.css @@ -0,0 +1,436 @@ +/* BASE */ + +* { + font-family: "trebuchet ms", tahoma, sans-serif; +} +a { + color: #47A; + text-decoration: none; +} +a:hover { + color: #258; + text-decoration: underline; +} +a img { + border: 0; +} +body { + margin: 0; + padding: 0; +} +input[type=text], +input[type=password], +select, +textarea { + border: 1px solid #AAA; + padding: 0.1em; +} +input[type=text], +input[type=password], +textarea { + padding: 0.2em; +} +input[type=text]:focus, +input[type=password]:focus, +select:focus, +textarea:focus { + border-color: #666; +} +p.error, +p.success { + border: 1px solid; + font-size: small; + margin: 0.5em; + padding: 0.5em; + width: 70%; +} +p.error { + background: #FCC; + border-color: #966; + color: #633; +} +p.success { + background: #CFC; + border-color: #696; + color: #363; +} +td#availability { + color: #285; + font-weight: bold; +} +td#availability.not-available { + color: #F00; +} +textarea { + font-size: small; + padding: 0.2em; +} +th { + padding-right: 1em; + text-align: right; +} + +/* HEADER */ + +div#header { + background: #FFF url('bg_header.png') bottom repeat-x; + border-bottom: 3px solid #9CD; + clear: both; +} +div#header:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +* html div#header { + height: 1%; +} +h1 { + float: left; + font-size: x-large; + font-weight: bold; + letter-spacing: 0.25em; + margin: 0; + padding: 1em; + text-transform: lowercase; +} +html > body h1 { + background: url('logo.png') no-repeat 10px; + padding-left: 75px; +} +html > body div#header.popup h1 { + background: url('logo_24.png') no-repeat 10px; + padding: 0.5em 0.5em 0.5em 50px; +} +h1 a { + color: #000; +} +h1 a:hover { + color: #000; +} +h2 { + background: #666 url('bg_bar.png') center center repeat-x; + border-bottom: 3px solid #DDD; + clear: both; + color: #DDD; + font-size: medium; + letter-spacing: 0.1em; + margin: 0 0 1em 0; + padding: 0.5em 1em; + text-transform: lowercase; +} + +/* NAVIGATION */ + +ul#navigation { + list-style-type: none; + margin: 0; + padding: 1.75em 1em; + text-transform: lowercase; + width: auto; +} +ul#navigation a { + font-size: medium; + font-weight: bold; + padding: 0.2em 0.5em; +} +ul#navigation a:hover { + background: #7AD; + color: #FFF; +} +ul#navigation li { + float: left; +} +ul#navigation li.access { + float: right; +} + +/* BOOKMARKS */ + +ol#bookmarks { + list-style-type: none; + margin: 0; + padding: 0 1em; + width: 70%; +} +html > body ol#bookmarks { + margin: 0 1em; + padding: 0; +} +div.link a { + color: blue; + font-size: medium; +} +div.link a:visited { + color: purple; +} +div.meta { + color: #285; +} +div.meta span { + color: #F00; +} +li.xfolkentry { + border-bottom: 1px solid #DDD; + margin-bottom: 0; + padding: 1em 0.5em; +} +html > body li.xfolkentry { + border-bottom: 1px dotted #AAA; +} +li.xfolkentry div { + padding: 0.1em; +} +li.xfolkentry.deleted { + opacity: 0.5; +} +li.xfolkentry.private { + border-left: 3px solid #F00; +} +li.xfolkentry.shared { + border-left: 3px solid #FA0; +} + +/* SIDEBAR */ + +div#sidebar { + font-size: small; + position: absolute; + right: 1em; + top: 10em; + width: 25%; +} +div#sidebar a { + color: #995; +} +div#sidebar a:hover { + color: #773; +} +div#sidebar div { + background: #FFF url('bg_sidebar.png') bottom repeat-x; + border: 1px solid #CC8; + color: #555; + margin-bottom: 1em; +} +div#sidebar h2 { + background: transparent; + border: 0; + color: #995; + letter-spacing: 0; + margin: 0; + padding: 0.5em 0; +} +div#sidebar hr { + display: none; +} +div#sidebar p { + margin: 1em; +} +div#sidebar p.tags a { + margin: 0; +} +div#sidebar table { + margin: 0.5em 0.5em 0 0.5em; +} +div#sidebar table td { + padding-bottom: 0.25em; + padding-right: 0.5em; +} +div#sidebar ul { + list-style-type: none; + margin: 0; + padding: 0.5em; +} +div#sidebar ul li { + margin: 0.5em 0; +} + +/* TAGS */ + +p.tags { + line-height: 2.25em; + margin: 2em 10%; + text-align: justify; + vertical-align: middle; +} +p.tags a, +p.tags span { + color: #47A; + margin-right: 0.5em; +} +p.tags span:hover { + cursor: pointer; + text-decoration: underline; +} +p.tags span.selected { + background: #CEC; +} + +/* PROFILE */ + +table.profile th { + width: 10em; +} + +/* OTHER GUFF */ + +dd { + background: #CEC; + border-right: 4px solid #ACA; + color: #464; + padding: 6px; +} +dd a { + color: #464; +} +dd a:hover { + color: #000 !important; + text-decoration: underline !important; +} + +dl { + font-size: small; + margin: 1em; + width: 70%; +} +dl#profile dd { + background: #CDE; + border-color: #ABC; + color: #247; +} +dl#profile dt { + background: #BCE; + border-color: #9AC; + color: #245; + display: block; + font-weight: bold; + padding: 6px; +} +dl#profile a { + color: #446; +} +dl#profile a:hover { + color: #000 !important; + text-decoration: underline !important; +} +dl#meta dd { + line-height: 1.5em; +} +dl#meta dt { + background: #BDB; + color: #353; + display: block; + font-weight: bold; + padding: 6px; +} +dt { + border-right: 4px solid #9B9; +} +dt a { + background: #BDB; + color: #353; + display: block; + font-weight: bold; + padding: 6px; +} +dt a:hover { + background: #ACA; + border: 0; +} +form { + margin: 0; +} +form#search { + background: #FFF; + color: #555; + font-size: small; + margin-bottom: 1em; +} +form label, +form td, +form th { + font-size: small; +} +form table { + margin: 0 1em; +} +h3 { + background: #DDD; + color: #555; + font-size: small; + letter-spacing: 0.2em; + margin: 2em 1em 1em 1em; + padding: 0.25em 0.75em; +} +li { + font-size: small; + margin-bottom: 0.5em; +} +p { + font-size: small; + margin: 1em; +} +p#sort { + color: #CCC; + font-size: small; + float: right; + margin: 0; + position: absolute; + right: 0; + top: 7em; +} +html > body p#sort { + margin-right: 0.75em; +} +p#sort a { + background: #AAA; + color: #555; + font-weight: normal; + margin-right: 0.5em; + padding: 0 1em; +} +html > body p#sort a { + margin-right: 0; +} +p#sort a:hover { + background: #CCC; + text-decoration: none !important; +} +p#sort span { + display: none; +} +p.paging { + font-size: small; + margin-left: 1em; +} +p.paging a, +p.paging span.disable { + background: #888; + color: #FFF; + display: inline; + margin-right: 0.5em; + padding: 0.25em 1em; +} +p.paging a:hover { + background: #666; +} +p.paging span { + display: none; +} +p.paging span.disable { + background: #DDD; + color: #AAA; +} +div.collapsible p.tags { + line-height: 2.25em; + margin: 1em 2em; +} +th label { + padding-right: 1em; +} +ul { + margin-right: 1em; + width: 75%; +} diff --git a/search.inc.php b/search.inc.php new file mode 100644 index 0000000..1c2cbc3 --- /dev/null +++ b/search.inc.php @@ -0,0 +1,44 @@ +

diff --git a/search.php b/search.php new file mode 100644 index 0000000..2c88f91 --- /dev/null +++ b/search.php @@ -0,0 +1,113 @@ +getCurrentUserId(); + list($url, $range, $terms, $page) = explode('/', $_SERVER['PATH_INFO']); + + $tplvars = array(); + $tplVars['loadjs'] = true; + + // Pagination + $perpage = getPerPageCount(); + if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; + } else { + $page = 0; + $start = 0; + } + + $s_user = NULL; + $s_start = NULL; + $s_end = NULL; + $s_watchlist = NULL; + + // No search terms + if (is_null($terms)) { + $tplVars['subtitle'] = T_('Search Bookmarks'); + $s_start = date('Y-m-d H:i:s', strtotime($dtend .' -'. $defaultRecentDays .' days')); + $s_end = date('Y-m-d H:i:s', strtotime('tomorrow')); + + // Search terms + } else { + $tplVars['subtitle'] = T_('Search Results'); + $selected = ' selected="selected"'; + + switch ($range) { + case 'all': + $tplVars['select_all'] = $selected; + $s_user = NULL; + break; + case 'watchlist': + $tplVars['select_watchlist'] = $selected; + $s_user = $logged_on_userid; + $s_watchlist = true; + break; + default: + $s_user = $range; + break; + } + + if (isset($s_user)) { + if (is_numeric($s_user)) { + $s_user = intval($s_user); + } else { + if (!($userinfo = $userservice->getUserByUsername($s_user) ) ) { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $s_user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); + } else { + $s_user =& $userinfo[$userservice->getFieldName('primary')]; + } + } + } + } + $bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, $s_user, NULL, $terms, getSortOrder(), $s_watchlist, $s_start, $s_end); + + $tplVars['page'] = $page; + $tplVars['start'] = $start; + $tplVars['popCount'] = 25; + $tplVars['sidebar_blocks'] = array('recent'); + $tplVars['range'] = $range; + $tplVars['terms'] = $terms; + $tplVars['pagetitle'] = T_('Search Bookmarks'); + $tplVars['bookmarkCount'] = $start + 1; + $tplVars['total'] = $bookmarks['total']; + $tplVars['bookmarks'] =& $bookmarks['bookmarks']; + $tplVars['cat_url'] = createURL('tags', '%2$s'); + $tplVars['nav_url'] = createURL('search', $range .'/'. $terms .'/%3$s'); + + $templateservice->loadTemplate('bookmarks.tpl', $tplVars); +} +?> diff --git a/services/bookmarkservice.php b/services/bookmarkservice.php new file mode 100644 index 0000000..afc7179 --- /dev/null +++ b/services/bookmarkservice.php @@ -0,0 +1,416 @@ +db = & $db; + } + + function _getbookmark($fieldname, $value, $all = false) { + if (!$all) { + $userservice = & ServiceFactory :: getServiceInstance('UserService'); + $sId = $userservice->getCurrentUserId(); + $range = ' AND uId = '. $sId; + } + + $query = 'SELECT * FROM '. $GLOBALS['tableprefix'] .'bookmarks WHERE '. $fieldname .' = "'. $this->db->sql_escape($value) .'"'. $range; + + if (!($dbresult = & $this->db->sql_query_limit($query, 1, 0))) { + message_die(GENERAL_ERROR, 'Could not get bookmark', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if ($row =& $this->db->sql_fetchrow($dbresult)) { + return $row; + } else { + return false; + } + } + + function & getBookmark($bid, $include_tags = false) { + if (!is_numeric($bid)) + return; + + $sql = 'SELECT * FROM '. $GLOBALS['tableprefix'] .'bookmarks WHERE bId = '. $this->db->sql_escape($bid); + + if (!($dbresult = & $this->db->sql_query($sql))) + message_die(GENERAL_ERROR, 'Could not get vars', '', __LINE__, __FILE__, $sql, $this->db); + + if ($row = & $this->db->sql_fetchrow($dbresult)) { + if ($include_tags) { + $tagservice = & ServiceFactory :: getServiceInstance('TagService'); + $row['tags'] = $tagservice->getTagsForBookmark($bid); + } + return $row; + } else { + return false; + } + } + + function getBookmarkByAddress($address) { + $hash = md5($address); + return $this->getBookmarkByHash($hash); + } + + function getBookmarkByHash($hash) { + return $this->_getbookmark('bHash', $hash, true); + } + + function editAllowed($bookmark) { + if (!is_numeric($bookmark) && (!is_array($bookmark) || !is_numeric($bookmark['bId']))) + return false; + + if (!is_array($bookmark)) + if (!($bookmark = $this->getBookmark($bookmark))) + return false; + + $userservice = & ServiceFactory :: getServiceInstance('UserService'); + $userid = $userservice->getCurrentUserId(); + if ($userservice->isAdmin($userid)) + return true; + else + return ($bookmark['uId'] == $userid); + } + + function bookmarkExists($address = false, $uid = NULL) { + if (!$address) { + return; + } + + // If address doesn't contain ":", add "http://" as the default protocol + if (strpos($address, ':') === false) { + $address = 'http://'. $address; + } + + $crit = array ('bHash' => md5($address)); + if (isset ($uid)) { + $crit['uId'] = $uid; + } + + $sql = 'SELECT COUNT(*) FROM '. $GLOBALS['tableprefix'] .'bookmarks WHERE '. $this->db->sql_build_array('SELECT', $crit); + if (!($dbresult = & $this->db->sql_query($sql))) { + message_die(GENERAL_ERROR, 'Could not get vars', '', __LINE__, __FILE__, $sql, $this->db); + } + return ($this->db->sql_fetchfield(0, 0) > 0); + } + + // Adds a bookmark to the database. + // Note that date is expected to be a string that's interpretable by strtotime(). + function addBookmark($address, $title, $description, $status, $categories, $date = NULL, $fromApi = false, $fromImport = false) { + $userservice = & ServiceFactory :: getServiceInstance('UserService'); + $sId = $userservice->getCurrentUserId(); + + // If bookmark address doesn't contain ":", add "http://" to the start as a default protocol + if (strpos($address, ':') === false) { + $address = 'http://'. $address; + } + + // Get the client's IP address and the date; note that the date is in GMT. + if (getenv('HTTP_CLIENT_IP')) + $ip = getenv('HTTP_CLIENT_IP'); + else + if (getenv('REMOTE_ADDR')) + $ip = getenv('REMOTE_ADDR'); + else + $ip = getenv('HTTP_X_FORWARDED_FOR'); + + // Note that if date is NULL, then it's added with a date and time of now, and if it's present, + // it's expected to be a string that's interpretable by strtotime(). + if (is_null($date)) + $time = time(); + else + $time = strtotime($date); + $datetime = gmdate('Y-m-d H:i:s', $time); + + // Set up the SQL insert statement and execute it. + $values = array('uId' => intval($sId), 'bIp' => $ip, 'bDatetime' => $datetime, 'bModified' => $datetime, 'bTitle' => $title, 'bAddress' => $address, 'bDescription' => $description, 'bStatus' => intval($status), 'bHash' => md5($address)); + $sql = 'INSERT INTO '. $GLOBALS['tableprefix'] .'bookmarks '. $this->db->sql_build_array('INSERT', $values); + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not insert bookmark', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + // Get the resultant row ID for the bookmark. + $bId = $this->db->sql_nextid($dbresult); + if (!isset($bId) || !is_int($bId)) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not insert bookmark', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + + $uriparts = explode('.', $address); + $extension = end($uriparts); + unset($uriparts); + + $tagservice = & ServiceFactory :: getServiceInstance('TagService'); + if (!$tagservice->attachTags($bId, $categories, $fromApi, $extension, false, $fromImport)) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not insert bookmark', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + $this->db->sql_transaction('commit'); + // Everything worked out, so return the new bookmark's bId. + return $bId; + } + + function updateBookmark($bId, $address, $title, $description, $status, $categories, $date = NULL, $fromApi = false) { + if (!is_numeric($bId)) + return false; + + // Get the client's IP address and the date; note that the date is in GMT. + if (getenv('HTTP_CLIENT_IP')) + $ip = getenv('HTTP_CLIENT_IP'); + else + if (getenv('REMOTE_ADDR')) + $ip = getenv('REMOTE_ADDR'); + else + $ip = getenv('HTTP_X_FORWARDED_FOR'); + + $moddatetime = gmdate('Y-m-d H:i:s', time()); + + // Set up the SQL update statement and execute it. + $updates = array('bModified' => $moddatetime, 'bTitle' => $title, 'bAddress' => $address, 'bDescription' => $description, 'bStatus' => $status, 'bHash' => md5($address)); + + if (!is_null($date)) { + $datetime = gmdate('Y-m-d H:i:s', strtotime($date)); + $updates[] = array('bDateTime' => $datetime); + } + + $sql = 'UPDATE '. $GLOBALS['tableprefix'] .'bookmarks SET '. $this->db->sql_build_array('UPDATE', $updates) .' WHERE bId = '. intval($bId); + $this->db->sql_transaction('begin'); + + if (!($dbresult = & $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not update bookmark', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + + $uriparts = explode('.', $address); + $extension = end($uriparts); + unset($uriparts); + + $tagservice = & ServiceFactory :: getServiceInstance('TagService'); + if (!$tagservice->attachTags($bId, $categories, $fromApi, $extension)) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not update bookmark', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + + $this->db->sql_transaction('commit'); + // Everything worked out, so return true. + return true; + } + + function & getBookmarks($start = 0, $perpage = NULL, $user = NULL, $tags = NULL, $terms = NULL, $sortOrder = NULL, $watched = NULL, $startdate = NULL, $enddate = NULL, $hash = NULL) { + // Only get the bookmarks that are visible to the current user. Our rules: + // - if the $user is NULL, that means get bookmarks from ALL users, so we need to make + // sure to check the logged-in user's watchlist and get the contacts-only bookmarks from + // those users. If the user isn't logged-in, just get the public bookmarks. + // - if the $user is set and isn't the logged-in user, then get that user's bookmarks, and + // if that user is on the logged-in user's watchlist, get the public AND contacts-only + // bookmarks; otherwise, just get the public bookmarks. + // - if the $user is set and IS the logged-in user, then get all bookmarks. + $userservice =& ServiceFactory::getServiceInstance('UserService'); + $tagservice =& ServiceFactory::getServiceInstance('TagService'); + $sId = $userservice->getCurrentUserId(); + + if ($userservice->isLoggedOn()) { + // All public bookmarks, user's own bookmarks and any shared with user + $privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')'; + $watchnames = $userservice->getWatchNames($sId, true); + foreach($watchnames as $watchuser) { + $privacy .= ' OR (U.username = "'. $watchuser .'" AND B.bStatus = 1)'; + } + $privacy .= ')'; + } else { + // Just public bookmarks + $privacy = ' AND B.bStatus = 0'; + } + + // Set up the tags, if need be. + if (!is_array($tags) && !is_null($tags)) { + $tags = explode('+', trim($tags)); + } + + $tagcount = count($tags); + for ($i = 0; $i < $tagcount; $i ++) { + $tags[$i] = trim($tags[$i]); + } + + // Set up the SQL query. + $query_1 = 'SELECT DISTINCT '; + if (SQL_LAYER == 'mysql4') { + $query_1 .= 'SQL_CALC_FOUND_ROWS '; + } + $query_1 .= 'B.*, U.'. $userservice->getFieldName('username'); + + $query_2 = ' FROM '. $userservice->getTableName() .' AS U, '. $GLOBALS['tableprefix'] .'bookmarks AS B'; + + $query_3 = ' WHERE B.uId = U.'. $userservice->getFieldName('primary') . $privacy; + if (is_null($watched)) { + if (!is_null($user)) { + $query_3 .= ' AND B.uId = '. $user; + } + } else { + $arrWatch = $userservice->getWatchlist($user); + if (count($arrWatch) > 0) { + foreach($arrWatch as $row) { + $query_3_1 .= 'B.uId = '. intval($row) .' OR '; + } + $query_3_1 = substr($query_3_1, 0, -3); + } else { + $query_3_1 = 'B.uId = -1'; + } + $query_3 .= ' AND ('. $query_3_1 .') AND B.bStatus IN (0, 1)'; + } + + switch($sortOrder) { + case 'date_asc': + $query_5 = ' ORDER BY B.bDatetime ASC '; + break; + case 'title_desc': + $query_5 = ' ORDER BY B.bTitle DESC '; + break; + case 'title_asc': + $query_5 = ' ORDER BY B.bTitle ASC '; + break; + case 'url_desc': + $query_5 = ' ORDER BY B.bAddress DESC '; + break; + case 'url_asc': + $query_5 = ' ORDER BY B.bAddress ASC '; + break; + default: + $query_5 = ' ORDER BY B.bDatetime DESC '; + } + + // Handle the parts of the query that depend on any tags that are present. + $query_4 = ''; + for ($i = 0; $i < $tagcount; $i ++) { + $query_2 .= ', '. $GLOBALS['tableprefix'] .'tags AS T'. $i; + $query_4 .= ' AND T'. $i .'.tag = "'. $this->db->sql_escape($tags[$i]) .'" AND T'. $i .'.bId = B.bId'; + } + + // Search terms + if ($terms) { + // Multiple search terms okay + $aTerms = explode(' ', $terms); + $aTerms = array_map('trim', $aTerms); + + // Search terms in tags as well when none given + if (!count($tags)) { + $query_2 .= ' LEFT JOIN '. $GLOBALS['tableprefix'] .'tags AS T ON B.bId = T.bId'; + $dotags = true; + } else { + $dotags = false; + } + + $query_4 = ''; + for ($i = 0; $i < count($aTerms); $i++) { + $query_4 .= ' AND (B.bTitle LIKE "%'. $this->db->sql_escape($aTerms[$i]) .'%"'; + $query_4 .= ' OR B.bDescription LIKE "%'. $this->db->sql_escape($aTerms[$i]) .'%"'; + if ($dotags) { + $query_4 .= ' OR T.tag = "'. $this->db->sql_escape($aTerms[$i]) .'"'; + } + $query_4 .= ')'; + } + } + + // Start and end dates + if ($startdate) { + $query_4 .= ' AND B.bDatetime > "'. $startdate .'"'; + } + if ($enddate) { + $query_4 .= ' AND B.bDatetime < "'. $enddate .'"'; + } + + // Hash + if ($hash) { + $query_4 .= ' AND B.bHash = "'. $hash .'"'; + } + + $query = $query_1 . $query_2 . $query_3 . $query_4 . $query_5; + if (!($dbresult = & $this->db->sql_query_limit($query, intval($perpage), intval($start)))) { + message_die(GENERAL_ERROR, 'Could not get bookmarks', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if (SQL_LAYER == 'mysql4') { + $totalquery = 'SELECT FOUND_ROWS() AS total'; + } else { + $totalquery = 'SELECT COUNT(*) AS total'. $query_2 . $query_3 . $query_4; + } + + if (!($totalresult = & $this->db->sql_query($totalquery)) || (!($row = & $this->db->sql_fetchrow($totalresult)))) { + message_die(GENERAL_ERROR, 'Could not get total bookmarks', '', __LINE__, __FILE__, $totalquery, $this->db); + return false; + } + + $total = $row['total']; + + $bookmarks = array(); + while ($row = & $this->db->sql_fetchrow($dbresult)) { + $row['tags'] = $tagservice->getTagsForBookmark(intval($row['bId'])); + $bookmarks[] = $row; + } + return array ('bookmarks' => $bookmarks, 'total' => $total); + } + + function deleteBookmark($bookmarkid) { + $query = 'DELETE FROM '. $GLOBALS['tableprefix'] .'bookmarks WHERE bId = '. intval($bookmarkid); + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($query))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $query = 'DELETE FROM '. $GLOBALS['tableprefix'] .'tags WHERE bId = '. intval($bookmarkid); + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($query))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $this->db->sql_transaction('commit'); + return true; + } + + function countOthers($address) { + if (!$address) { + return false; + } + + $userservice = & ServiceFactory :: getServiceInstance('UserService'); + $sId = $userservice->getCurrentUserId(); + + if ($userservice->isLoggedOn()) { + // All public bookmarks, user's own bookmarks and any shared with user + $privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')'; + $watchnames = $userservice->getWatchNames($sId, true); + foreach($watchnames as $watchuser) { + $privacy .= ' OR (U.username = "'. $watchuser .'" AND B.bStatus = 1)'; + } + $privacy .= ')'; + } else { + // Just public bookmarks + $privacy = ' AND B.bStatus = 0'; + } + + $sql = 'SELECT COUNT(*) FROM '. $userservice->getTableName() .' AS U, '. $GLOBALS['tableprefix'] .'bookmarks AS B WHERE U.'. $userservice->getFieldName('primary') .' = B.uId AND B.bHash = "'. md5($address) .'"'. $privacy; + if (!($dbresult = & $this->db->sql_query($sql))) { + message_die(GENERAL_ERROR, 'Could not get vars', '', __LINE__, __FILE__, $sql, $this->db); + } + return $this->db->sql_fetchfield(0, 0) - 1; + } +} +?> diff --git a/services/cacheservice.php b/services/cacheservice.php new file mode 100644 index 0000000..fe66d38 --- /dev/null +++ b/services/cacheservice.php @@ -0,0 +1,38 @@ +basedir = $GLOBALS['dir_cache']; + } + + function Start($hash, $time = 300) { + $cachefile = $this->basedir .'/'. $hash . $this->fileextension; + if (file_exists($cachefile) && time() < filemtime($cachefile) + $time) { + @readfile($cachefile); + echo "\n\n"; + unset($cachefile); + exit; + } + ob_start("ob_gzhandler"); + } + + function End($hash) { + $cachefile = $this->basedir .'/'. $hash . $this->fileextension; + $handle = fopen($cachefile, 'w'); + fwrite($handle, ob_get_contents()); + fclose($handle); + ob_flush(); + } +} +?> \ No newline at end of file diff --git a/services/servicefactory.php b/services/servicefactory.php new file mode 100644 index 0000000..ba2d6d7 --- /dev/null +++ b/services/servicefactory.php @@ -0,0 +1,33 @@ +sql_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport, $dbpersist); + if(!$db->db_connect_id) { + message_die(CRITICAL_ERROR, "Could not connect to the database", $db); + } + } + if (!isset($instances[$name])) { + if (isset($serviceoverrules[$name])) { + $name = $serviceoverrules[$name]; + } + if (!class_exists($name)) { + if (!isset($servicedir)) { + $servicedir = dirname(__FILE__) .'/'; + } + require_once($servicedir . strtolower($name) . '.php'); + } + $instances[$name] = call_user_func(array($name, 'getInstance'), $db); + } + return $instances[$name]; + } +} +?> \ No newline at end of file diff --git a/services/tagservice.php b/services/tagservice.php new file mode 100644 index 0000000..6bfbf15 --- /dev/null +++ b/services/tagservice.php @@ -0,0 +1,363 @@ +db =& $db; + $this->tablename = $GLOBALS['tableprefix'] .'tags'; + } + + function isNotSystemTag($var) { + if (utf8_substr($var, 0, 7) == 'system:') + return false; + else + return true; + } + + function attachTags($bookmarkid, $tags, $fromApi = false, $extension = NULL, $replace = true, $fromImport = false) { + // Make sure that categories is an array of trimmed strings, and that if the categories are + // coming in from an API call to add a bookmark, that underscores are converted into strings. + if (!is_array($tags)) { + $tags = trim($tags); + if ($tags != '') { + if (substr($tags, -1) == ',') { + $tags = substr($tags, 0, -1); + } + if ($fromApi) { + $tags = explode(' ', $tags); + } else { + $tags = explode(',', $tags); + } + } else { + $tags = null; + } + } + + $tags_count = count($tags); + for ($i = 0; $i < $tags_count; $i++) { + $tags[$i] = trim(strtolower($tags[$i])); + if ($fromApi) { + include_once(dirname(__FILE__) .'/../functions.inc.php'); + $tags[$i] = convertTag($tags[$i], 'in'); + } + } + + if ($tags_count > 0) { + // Remove system tags + $tags = array_filter($tags, array($this, "isNotSystemTag")); + + // Eliminate any duplicate categories + $temp = array_unique($tags); + $tags = array_values($temp); + } else { + // Unfiled + $tags[] = 'system:unfiled'; + } + + // Media and file types + if (!is_null($extension)) { + include_once(dirname(__FILE__) .'/../functions.inc.php'); + if ($keys = multi_array_search($extension, $GLOBALS['filetypes'])) { + $tags[] = 'system:filetype:'. $extension; + $tags[] = 'system:media:'. array_shift($keys); + } + } + + // Imported + if ($fromImport) { + $tags[] = 'system:imported'; + } + + $this->db->sql_transaction('begin'); + + if ($replace) { + if (!$this->deleteTagsForBookmark($bookmarkid)){ + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not attach tags (deleting old ones failed)', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + } + + // Add the categories to the DB. + for ($i = 0; $i < count($tags); $i++) { + if ($tags[$i] != '') { + $values = array( + 'bId' => intval($bookmarkid), + 'tag' => $tags[$i] + ); + + if (!$this->hasTag($bookmarkid, $tags[$i])) { + $sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values); + if (!($dbresult =& $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not attach tags', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + } + } + } + $this->db->sql_transaction('commit'); + return true; + } + + function deleteTag($tag) { + $userservice =& ServiceFactory::getServiceInstance('UserService'); + $logged_on_user = $userservice->getCurrentUserId(); + + $query = 'DELETE FROM '. $this->getTableName() .' USING '. $GLOBALS['tableprefix'] .'tags, '. $GLOBALS['tableprefix'] .'bookmarks WHERE '. $GLOBALS['tableprefix'] .'tags.bId = '. $GLOBALS['tableprefix'] .'bookmarks.bId AND '. $GLOBALS['tableprefix'] .'bookmarks.uId = '. $logged_on_user .' AND '. $GLOBALS['tableprefix'] .'tags.tag = "'. $this->db->sql_escape($tag) .'"'; + + if (!($dbresult =& $this->db->sql_query($query))) { + message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + return true; + } + + function deleteTagsForBookmark($bookmarkid) { + if (!is_int($bookmarkid)) { + message_die(GENERAL_ERROR, 'Could not delete tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query); + return false; + } + + $query = 'DELETE FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid); + + if (!($dbresult =& $this->db->sql_query($query))) { + message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + return true; + } + + function &getTagsForBookmark($bookmarkid) { + if (!is_int($bookmarkid)) { + message_die(GENERAL_ERROR, 'Could not get tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query); + return false; + } + + $query = 'SELECT tag FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND LEFT(tag, 7) <> "system:" ORDER BY tag'; + + if (!($dbresult =& $this->db->sql_query($query))) { + message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $tags = array(); + while ($row =& $this->db->sql_fetchrow($dbresult)) { + $tags[] = $row['tag']; + } + + return $tags; + } + + function &getTags($userid = NULL) { + $userservice =& ServiceFactory::getServiceInstance('UserService'); + $logged_on_user = $userservice->getCurrentUserId(); + + $query = 'SELECT T.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B INNER JOIN '. $userservice->getTableName() .' AS U ON B.uId = U.'. $userservice->getFieldName('primary') .' INNER JOIN '. $GLOBALS['tableprefix'] .'tags AS T ON B.bId = T.bId'; + + $conditions = array(); + if (!is_null($userid)) { + $conditions['U.'. $userservice->getFieldName('primary')] = intval($userid); + if ($logged_on_user != $userid) + $conditions['B.bStatus'] = 0; + } else { + $conditions['B.bStatus'] = 0; + } + + $query .= ' WHERE '. $this->db->sql_build_array('SELECT', $conditions) .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag'; + + if (!($dbresult =& $this->db->sql_query($query))) { + message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + return $this->db->sql_fetchrowset($dbresult); + } + + + // Returns the tags related to the specified tags; i.e. attached to the same bookmarks + function &getRelatedTags($tags, $for_user = NULL, $logged_on_user = NULL, $limit = 10) { + $conditions = array(); + // Only count the tags that are visible to the current user. + if ($for_user != $logged_on_user || is_null($for_user)) + $conditions['B.bStatus'] = 0; + + if (!is_null($for_user)) + $conditions['B.uId'] = $for_user; + + // Set up the tags, if need be. + if (is_numeric($tags)) + $tags = NULL; + if (!is_array($tags) and !is_null($tags)) + $tags = explode('+', trim($tags)); + + $tagcount = count($tags); + for ($i = 0; $i < $tagcount; $i++) { + $tags[$i] = trim($tags[$i]); + } + + // Set up the SQL query. + $query_1 = 'SELECT DISTINCTROW T0.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B, '. $this->getTableName() .' AS T0'; + $query_2 = ''; + $query_3 = ' WHERE B.bId = T0.bId '; + if (count($conditions) > 0) + $query_4 = ' AND '. $this->db->sql_build_array('SELECT', $conditions); + else + $query_4 = ''; + // Handle the parts of the query that depend on any tags that are present. + for ($i = 1; $i <= $tagcount; $i++) { + $query_2 .= ', '. $this->getTableName() .' AS T'. $i; + $query_4 .= ' AND T'. $i .'.bId = B.bId AND T'. $i .'.tag = "'. $this->db->sql_escape($tags[$i - 1]) .'" AND T0.tag <> "'. $this->db->sql_escape($tags[$i - 1]) .'"'; + } + $query_5 = ' AND LEFT(T0.tag, 7) <> "system:" GROUP BY T0.tag ORDER BY bCount DESC, T0.tag'; + $query = $query_1 . $query_2 . $query_3 . $query_4 . $query_5; + + if (! ($dbresult =& $this->db->sql_query_limit($query, $limit)) ){ + message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + return $this->db->sql_fetchrowset($dbresult); + } + + // Returns the most popular tags used for a particular bookmark hash + function &getRelatedTagsByHash($hash, $limit = 20) { + $userservice = & ServiceFactory :: getServiceInstance('UserService'); + $sId = $userservice->getCurrentUserId(); + // Logged in + if ($userservice->isLoggedOn()) { + $arrWatch = $userservice->getWatchList($sId); + // From public bookmarks or user's own + $privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')'; + // From shared bookmarks in watchlist + foreach ($arrWatch as $w) { + $privacy .= ' OR (B.uId = '. $w .' AND B.bStatus = 1)'; + } + $privacy .= ') '; + // Not logged in + } else { + $privacy = ' AND B.bStatus = 0 '; + } + + $query = 'SELECT T.tag, COUNT(T.tag) AS bCount FROM sc_bookmarks AS B LEFT JOIN sc_tags AS T ON B.bId = T.bId WHERE B.bHash = "'. $hash .'" '. $privacy .'AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC'; + + if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) { + message_die(GENERAL_ERROR, 'Could not get related tags for this hash', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + return $this->db->sql_fetchrowset($dbresult); + } + + function &getPopularTags($user = NULL, $limit = 30, $logged_on_user = NULL, $days = NULL) { + // Only count the tags that are visible to the current user. + if (($user != $logged_on_user) || is_null($user) || ($user === false)) + $privacy = ' AND B.bStatus = 0'; + else + $privacy = ''; + + if (is_null($days) || !is_int($days)) + $span = ''; + else + $span = ' AND B.bDatetime > "'. date('Y-m-d H:i:s', time() - (86400 * $days)) .'"'; + + $query = 'SELECT T.tag, COUNT(T.bId) AS bCount FROM '. $this->getTableName() .' AS T, '. $GLOBALS['tableprefix'] .'bookmarks AS B WHERE '; + if (is_null($user) || ($user === false)) { + $query .= 'B.bId = T.bId AND B.bStatus = 0'; + } else { + $query .= 'B.uId = '. $this->db->sql_escape($user) .' AND B.bId = T.bId'. $privacy; + } + $query .= $span .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag'; + + if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) { + message_die(GENERAL_ERROR, 'Could not get popular tags', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + return $this->db->sql_fetchrowset($dbresult); + } + + function hasTag($bookmarkid, $tag) { + $query = 'SELECT COUNT(*) AS tCount FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND tag ="'. $this->db->sql_escape($tag) .'"'; + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not find tag', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if ($row =& $this->db->sql_fetchrow($dbresult)) { + if ($row['tCount'] > 0) { + return true; + } + } + return false; + } + + function renameTag($userid, $old, $new, $fromApi = false) { + $bookmarkservice =& ServiceFactory::getServiceInstance('BookmarkService'); + + if (is_null($userid) || is_null($old) || is_null($new)) + return false; + + // Find bookmarks with old tag + $bookmarksInfo =& $bookmarkservice->getBookmarks(0, NULL, $userid, $old); + $bookmarks =& $bookmarksInfo['bookmarks']; + + // Delete old tag + $this->deleteTag($old); + + // Attach new tags + foreach(array_keys($bookmarks) as $key) { + $row =& $bookmarks[$key]; + $this->attachTags($row['bId'], $new, $fromApi, NULL, false); + } + + return true; + } + + function &tagCloud($tags = NULL, $steps = 5, $sizemin = 90, $sizemax = 225, $sortOrder = NULL) { + + if (is_null($tags) || count($tags) < 1) { + return false; + } + + $min = $tags[count($tags) - 1]['bCount']; + $max = $tags[0]['bCount']; + + for ($i = 1; $i <= $steps; $i++) { + $delta = ($max - $min) / (2 * $steps - $i); + $limit[$i] = $i * $delta + $min; + } + $sizestep = ($sizemax - $sizemin) / $steps; + foreach ($tags as $row) { + $next = false; + for ($i = 1; $i <= $steps; $i++) { + if (!$next && $row['bCount'] <= $limit[$i]) { + $size = $sizestep * ($i - 1) + $sizemin; + $next = true; + } + } + $tempArray = array('size' => $size .'%'); + $row = array_merge($row, $tempArray); + $output[] = $row; + } + + if ($sortOrder == 'alphabet_asc') { + usort($output, create_function('$a,$b','return strcasecmp(utf8_deaccent($a["tag"]), utf8_deaccent($b["tag"]));')); + } + + return $output; + } + + // Properties + function getTableName() { return $this->tablename; } + function setTableName($value) { $this->tablename = $value; } +} +?> \ No newline at end of file diff --git a/services/templateservice.php b/services/templateservice.php new file mode 100644 index 0000000..191ab8d --- /dev/null +++ b/services/templateservice.php @@ -0,0 +1,46 @@ +basedir = $GLOBALS['TEMPLATES_DIR']; + } + + function loadTemplate($template, $vars = NULL) { + if (substr($template, -4) != '.php') + $template .= '.php'; + $tpl =& new Template($this->basedir .'/'. $template, $vars, $this); + $tpl->parse(); + return $tpl; + } +} + +class Template { + var $vars = array(); + var $file = ''; + var $templateservice; + + function Template($file, $vars = NULL, &$templateservice) { + $this->vars = $vars; + $this->file = $file; + $this->templateservice = $templateservice; + } + + function parse() { + if (isset($this->vars)) + extract($this->vars); + include($this->file); + } + + function includeTemplate($name) { + return $this->templateservice->loadTemplate($name, $this->vars); + } +} +?> \ No newline at end of file diff --git a/services/userservice.php b/services/userservice.php new file mode 100644 index 0000000..1e7ed46 --- /dev/null +++ b/services/userservice.php @@ -0,0 +1,362 @@ + 'uId', + 'username' => 'username', + 'password' => 'password' + ); + var $profileurl; + var $tablename; + var $sessionkey; + var $cookiekey; + var $cookietime = 1209600; // 2 weeks + + function UserService(&$db) { + $this->db =& $db; + $this->tablename = $GLOBALS['tableprefix'] .'users'; + $this->sessionkey = $GLOBALS['cookieprefix'] .'-currentuserid'; + $this->cookiekey = $GLOBALS['cookieprefix'] .'-login'; + $this->profileurl = createURL('profile', '%2$s'); + } + + function _checkdns($host) { + if (function_exists('checkdnsrr')) { + return checkdnsrr($host); + } else { + return $this->_checkdnsrr($host); + } + } + + function _checkdnsrr($host, $type = "MX") { + if(!empty($host)) { + @exec("nslookup -type=$type $host", $output); + while(list($k, $line) = each($output)) { + if(eregi("^$host", $line)) { + return true; + } + } + return false; + } + } + + function _getuser($fieldname, $value) { + $query = 'SELECT * FROM '. $this->getTableName() .' WHERE '. $fieldname .' = "'. $this->db->sql_escape($value) .'"'; + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not get user', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if ($row =& $this->db->sql_fetchrow($dbresult)) + return $row; + else + return false; + } + + function _randompassword() { + $seed = (integer) md5(microtime()); + mt_srand($seed); + $password = mt_rand(1, 99999999); + $password = substr(md5($password), mt_rand(0, 19), mt_rand(6, 12)); + return $password; + } + + function _updateuser($uId, $fieldname, $value) { + $updates = array ($fieldname => $value); + $sql = 'UPDATE '. $this->getTableName() .' SET '. $this->db->sql_build_array('UPDATE', $updates) .' WHERE '. $this->getFieldName('primary') .'='. intval($uId); + + // Execute the statement. + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not update user', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + $this->db->sql_transaction('commit'); + + // Everything worked out, so return true. + return true; + } + + function getProfileUrl($id, $username) { + return sprintf($this->profileurl, urlencode($id), urlencode($username)); + } + + function getUserByUsername($username) { + return $this->_getuser($this->getFieldName('username'), $username); + } + + function getUser($id) { + return $this->_getuser($this->getFieldName('primary'), $id); + } + + function isLoggedOn() { + return ($this->getCurrentUserId() !== false); + } + + function &getCurrentUser($refresh = FALSE, $newval = NULL) { + static $currentuser; + if (!is_null($newval)) //internal use only: reset currentuser + $currentuser = $newval; + else if ($refresh || !isset($currentuser)) { + if ($id = $this->getCurrentUserId()) + $currentuser = $this->getUser($id); + else + return; + } + return $currentuser; + } + + function isAdmin($userid) { + return false; //not implemented yet + } + + function getCurrentUserId() { + if (isset($_SESSION[$this->getSessionKey()])) { + return $_SESSION[$this->getSessionKey()]; + } else if (isset($_COOKIE[$this->getCookieKey()])) { + $cook = split(':', $_COOKIE[$this->getCookieKey()]); + //cookie looks like this: 'id:md5(username+password)' + $query = 'SELECT * FROM '. $this->getTableName() . + ' WHERE MD5(CONCAT('.$this->getFieldName('username') . + ', '.$this->getFieldName('password') . + ')) = \''.$this->db->sql_escape($cook[1]).'\' AND '. + $this->getFieldName('primary'). ' = '. $this->db->sql_escape($cook[0]); + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not get user', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if ($row = $this->db->sql_fetchrow($dbresult)) { + $_SESSION[$this->getSessionKey()] = $row[$this->getFieldName('primary')]; + return $_SESSION[$this->getSessionKey()]; + } + } + return false; + } + + function login($username, $password, $remember = FALSE) { + $password = $this->sanitisePassword($password); + $query = 'SELECT '. $this->getFieldName('primary') .' FROM '. $this->getTableName() .' WHERE '. $this->getFieldName('username') .' = "'. $this->db->sql_escape($username) .'" AND '. $this->getFieldName('password') .' = "'. $this->db->sql_escape($password) .'"'; + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not get user', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + if ($row =& $this->db->sql_fetchrow($dbresult)) { + $id = $_SESSION[$this->getSessionKey()] = $row[$this->getFieldName('primary')]; + if ($remember) { + $cookie = $id .':'. md5($username.$password); + setcookie($this->cookiekey, $cookie, time() + $this->cookietime); + } + return true; + } else { + return false; + } + } + + function logout() { + @setcookie($this->cookiekey, NULL, time() - 1); + unset($_COOKIE[$this->cookiekey]); + session_unset(); + $this->getCurrentUser(TRUE, false); + } + + function getWatchlist($uId) { + // Gets the list of user IDs being watched by the given user. + $query = 'SELECT watched FROM '. $GLOBALS['tableprefix'] .'watched WHERE uId = '. intval($uId); + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not get watchlist', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $arrWatch = array(); + if ($this->db->sql_numrows($dbresult) == 0) + return $arrWatch; + while ($row =& $this->db->sql_fetchrow($dbresult)) + $arrWatch[] = $row['watched']; + return $arrWatch; + } + + function getWatchNames($uId, $watchedby = false) { + // Gets the list of user names being watched by the given user. + // - If $watchedby is false get the list of users that $uId watches + // - If $watchedby is true get the list of users that watch $uId + if ($watchedby) { + $table1 = 'b'; + $table2 = 'a'; + } else { + $table1 = 'a'; + $table2 = 'b'; + } + $query = 'SELECT '. $table1 .'.'. $this->getFieldName('username') .' FROM '. $GLOBALS['tableprefix'] .'watched AS W, '. $this->getTableName() .' AS a, '. $this->getTableName() .' AS b WHERE W.watched = a.'. $this->getFieldName('primary') .' AND W.uId = b.'. $this->getFieldName('primary') .' AND '. $table2 .'.'. $this->getFieldName('primary') .' = '. intval($uId) .' ORDER BY '. $table1 .'.'. $this->getFieldName('username'); + + if (!($dbresult =& $this->db->sql_query($query))) { + message_die(GENERAL_ERROR, 'Could not get watchlist', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $arrWatch = array(); + if ($this->db->sql_numrows($dbresult) == 0) { + return $arrWatch; + } + while ($row =& $this->db->sql_fetchrow($dbresult)) { + $arrWatch[] = $row[$this->getFieldName('username')]; + } + return $arrWatch; + } + + function getWatchStatus($watcheduser, $currentuser) { + // Returns true if the current user is watching the given user, and false otherwise. + $query = 'SELECT watched FROM '. $GLOBALS['tableprefix'] .'watched AS W INNER JOIN '. $this->getTableName() .' AS U ON U.'. $this->getFieldName('primary') .' = W.watched WHERE U.'. $this->getFieldName('primary') .' = '. intval($watcheduser) .' AND W.uId = '. intval($currentuser); + + if (! ($dbresult =& $this->db->sql_query($query)) ) { + message_die(GENERAL_ERROR, 'Could not get watchstatus', '', __LINE__, __FILE__, $query, $this->db); + return false; + } + + $arrWatch = array(); + if ($this->db->sql_numrows($dbresult) == 0) + return false; + else + return true; + } + + function setWatchStatus($subjectUserID) { + if (!is_numeric($subjectUserID)) + return false; + + $currentUserID = $this->getCurrentUserId(); + $watched = $this->getWatchStatus($subjectUserID, $currentUserID); + + if ($watched) { + $sql = 'DELETE FROM '. $GLOBALS['tableprefix'] .'watched WHERE uId = '. intval($currentUserID) .' AND watched = '. intval($subjectUserID); + if (!($dbresult =& $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not add user to watch list', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + } else { + $values = array( + 'uId' => intval($currentUserID), + 'watched' => intval($subjectUserID) + ); + $sql = 'INSERT INTO '. $GLOBALS['tableprefix'] .'watched '. $this->db->sql_build_array('INSERT', $values); + if (!($dbresult =& $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not add user to watch list', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + } + + $this->db->sql_transaction('commit'); + return true; + } + + function addUser($username, $password, $email) { + // Set up the SQL UPDATE statement. + $datetime = gmdate('Y-m-d H:i:s', time()); + $password = $this->sanitisePassword($password); + $values = array('username' => $username, 'password' => $password, 'email' => $email, 'uDatetime' => $datetime, 'uModified' => $datetime); + $sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values); + + // Execute the statement. + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not insert user', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + $this->db->sql_transaction('commit'); + + // Everything worked out, so return true. + return true; + } + + function updateUser($uId, $password, $name, $email, $homepage, $uContent) { + if (!is_numeric($uId)) + return false; + + // Set up the SQL UPDATE statement. + $moddatetime = gmdate('Y-m-d H:i:s', time()); + if ($password == '') + $updates = array ('uModified' => $moddatetime, 'name' => $name, 'email' => $email, 'homepage' => $homepage, 'uContent' => $uContent); + else + $updates = array ('uModified' => $moddatetime, 'password' => $this->sanitisePassword($password), 'name' => $name, 'email' => $email, 'homepage' => $homepage, 'uContent' => $uContent); + $sql = 'UPDATE '. $this->getTableName() .' SET '. $this->db->sql_build_array('UPDATE', $updates) .' WHERE '. $this->getFieldName('primary') .'='. intval($uId); + + // Execute the statement. + $this->db->sql_transaction('begin'); + if (!($dbresult = & $this->db->sql_query($sql))) { + $this->db->sql_transaction('rollback'); + message_die(GENERAL_ERROR, 'Could not update user', '', __LINE__, __FILE__, $sql, $this->db); + return false; + } + $this->db->sql_transaction('commit'); + + // Everything worked out, so return true. + return true; + } + + function sanitisePassword($password) { + return sha1(trim($password)); + } + + function generatePassword($uId) { + if (!is_numeric($uId)) + return false; + + $password = $this->_randompassword(); + + if ($this->_updateuser($uId, $this->getFieldName('password'), $this->sanitisePassword($password))) + return $password; + else + return false; + } + + function isReserved($username) { + if (in_array($username, $GLOBALS['reservedusers'])) { + return true; + } else { + return false; + } + } + + function isValidEmail($email) { + if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$", $email)) { + list($emailUser, $emailDomain) = split("@", $email); + + // Check if the email domain has a DNS record + if ($this->_checkdns($emailDomain)) { + return true; + } + } + return false; + } + + // Properties + function getTableName() { return $this->tablename; } + function setTableName($value) { $this->tablename = $value; } + + function getFieldName($field) { return $this->fields[$field]; } + function setFieldName($field, $value) { $this->fields[$field] = $value; } + + function getSessionKey() { return $this->sessionkey; } + function setSessionKey($value) { $this->sessionkey = $value; } + + function getCookieKey() { return $this->cookiekey; } + function setCookieKey($value) { $this->cookiekey = $value; } +} +?> diff --git a/tables.sql b/tables.sql new file mode 100644 index 0000000..578fa06 --- /dev/null +++ b/tables.sql @@ -0,0 +1,68 @@ +-- +-- Table structure for table `sc_bookmarks` +-- + +CREATE TABLE `sc_bookmarks` ( + `bId` int(11) NOT NULL auto_increment, + `uId` int(11) NOT NULL default '0', + `bIp` varchar(40) default NULL, + `bStatus` tinyint(1) NOT NULL default '0', + `bDatetime` datetime NOT NULL default '0000-00-00 00:00:00', + `bModified` datetime NOT NULL default '0000-00-00 00:00:00', + `bTitle` varchar(255) NOT NULL default '', + `bAddress` text NOT NULL, + `bDescription` varchar(255) default NULL, + `bHash` varchar(32) NOT NULL default '', + PRIMARY KEY (`bId`), + KEY `sc_bookmarks_usd` (`uId`,`bStatus`,`bDatetime`), + KEY `sc_bookmarks_hui` (`bHash`,`uId`,`bId`), + KEY `sc_bookmarks_du` (`bDatetime`,`uId`) +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sc_tags` +-- + +CREATE TABLE `sc_tags` ( + `id` int(11) NOT NULL auto_increment, + `bId` int(11) NOT NULL default '0', + `tag` varchar(32) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `sc_tags_tag_bId` (`tag`,`bId`), + KEY `sc_tags_bId` (`bId`) +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `scUsers` +-- + +CREATE TABLE `sc_users` ( + `uId` int(11) NOT NULL auto_increment, + `username` varchar(25) NOT NULL default '', + `password` varchar(40) NOT NULL default '', + `uDatetime` datetime NOT NULL default '0000-00-00 00:00:00', + `uModified` datetime NOT NULL default '0000-00-00 00:00:00', + `name` varchar(50) default NULL, + `email` varchar(50) NOT NULL default '', + `homepage` varchar(255) default NULL, + `uContent` text, + PRIMARY KEY (`uId`) +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sc_watched` +-- + +CREATE TABLE `sc_watched` ( + `wId` int(11) NOT NULL auto_increment, + `uId` int(11) NOT NULL default '0', + `watched` int(11) NOT NULL default '0', + PRIMARY KEY (`wId`), + KEY `sc_watched_uId` (`uId`) +); \ No newline at end of file diff --git a/tagdelete.php b/tagdelete.php new file mode 100644 index 0000000..9f11bdd --- /dev/null +++ b/tagdelete.php @@ -0,0 +1,48 @@ +deleteTag($tag)) { + $tplVars['msg'] = T_('Tag deleted'); + $logged_on_user = $userservice->getCurrentUser(); + header('Location: '. createURL('bookmarks', $logged_on_user[$userservice->getFieldName('username')])); + } else { + $tplVars['error'] = T_('Failed to delete the tag'); + $templateservice->loadTemplate('error.500.tpl', $tplVars); + exit(); + } +} elseif ($_POST['cancel']) { + $logged_on_user = $userservice->getCurrentUser(); + header('Location: '. createURL('bookmarks', $logged_on_user[$userservice->getFieldName('username')] .'/'. $tags)); +} + +$tplVars['subtitle'] = T_('Delete Tag') .': '. $tag; +$tplVars['formaction'] = $_SERVER['SCRIPT_NAME'] .'/'. $tag; +$tplVars['referrer'] = $_SERVER['HTTP_REFERER']; +$templateservice->loadTemplate('tagdelete.tpl', $tplVars); +?> \ No newline at end of file diff --git a/tags.php b/tags.php new file mode 100644 index 0000000..ff46881 --- /dev/null +++ b/tags.php @@ -0,0 +1,88 @@ +isLoggedOn()) { + $hash = md5($_SERVER['REQUEST_URI'] . $userservice->getCurrentUserID()); + } else { + $hash = md5($_SERVER['REQUEST_URI']); + } + + // Cache for 30 minutes + $cacheservice->Start($hash, 1800); +} + +// Header variables +$tplVars['pagetitle'] = $pagetitle; +$tplVars['loadjs'] = true; +$tplVars['rsschannels'] = array( + array(filter($sitename .': '. $pagetitle), createURL('rss', 'all/'. filter($cat, 'url'))) +); + +// Pagination +$perpage = getPerPageCount(); +if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; +} else { + $page = 0; + $start = 0; +} + +$tplVars['page'] = $page; +$tplVars['start'] = $start; +$tplVars['popCount'] = 25; +$tplVars['currenttag'] = $cat; +$tplVars['sidebar_blocks'] = array('related', 'popular'); +$tplVars['subtitle'] = filter($pagetitle); +$tplVars['bookmarkCount'] = $start + 1; +$bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, NULL, $cat, NULL, getSortOrder()); +$tplVars['total'] = $bookmarks['total']; +$tplVars['bookmarks'] =& $bookmarks['bookmarks']; +$tplVars['cat_url'] = createURL('tags', '%2$s'); +$tplVars['nav_url'] = createURL('tags', '%2$s%3$s'); + +$templateservice->loadTemplate('bookmarks.tpl', $tplVars); + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> diff --git a/templates/about.tpl.php b/templates/about.tpl.php new file mode 100644 index 0000000..494a2e3 --- /dev/null +++ b/templates/about.tpl.php @@ -0,0 +1,20 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    +
  • Store all your favourite links in one place, accessible from anywhere.'); ?>
  • +
  • Share your bookmarks with everyone, with friends on your watchlist or just keep them private.') ;?>
  • +
  • Tag your bookmarks with as many labels as you want, instead of wrestling with folders.'); ?>
  • +
  • Register now to start using %s!'), $GLOBALS['sitename']); ?>
  • +
+ +

+
    +
  • an open-source project licensed under the GNU General Public License. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer.'), $GLOBALS['sitename']); ?>
  • +
  • del.icio.us API. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won\'t let you change the API address, ask the creator to add this setting. You never know, they might just do it.'), $GLOBALS['sitename']); ?>
  • +
+ +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/bookmarks.tpl.php b/templates/bookmarks.tpl.php new file mode 100644 index 0000000..368ec8b --- /dev/null +++ b/templates/bookmarks.tpl.php @@ -0,0 +1,166 @@ +getCurrentUserId(); +$this->includeTemplate($GLOBALS['top_include']); + +include('search.inc.php'); +if (count($bookmarks) > 0) { +?> + + + +

+ + / + / + + + +

+ + 0 ? ' start="'. ++$start .'"' : ''); ?> id="bookmarks"> + + '. filter($tag) .', '; + } + $cats = substr($cats, 0, -2); + if ($cats != '') { + $cats = ' to '. $cats; + } + + // Edit and delete links + $edit = ''; + if ($bookmarkservice->editAllowed($row['bId'])) { + $edit = ' - '. T_('Edit') .''; + } + + // User attribution + $copy = ''; + if (!isset($user) || isset($watched)) { + $copy = ' '. T_('by') .' '. $row['username'] .''; + } + + // Udders! + if (!isset($hash)) { + $others = $bookmarkservice->countOthers($row['bAddress']); + $ostart = ''; + $oend = ''; + switch ($others) { + case 0: + break; + case 1: + $copy .= sprintf(T_(' and %s1 other%s'), $ostart, $oend); + break; + default: + $copy .= sprintf(T_(' and %2$s%1$s others%3$s'), $others, $ostart, $oend); + } + } + + // Copy link + if ($userservice->isLoggedOn() && ($logged_on_userid != $row['uId'])) { + // Get the username of the current user + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + $copy .= ' - '. T_('Copy') .''; + } + + // Nofollow option + $rel = ''; + if ($GLOBALS['nofollow']) { + $rel = ' rel="nofollow"'; + } + + $address = filter($row['bAddress']); + + // Redirection option + if ($GLOBALS['useredir']) { + $address = $GLOBALS['url_redir'] . $address; + } + + // Output + echo '
  • '."\n"; + echo '\n"; + if ($row['bDescription'] != '') { + echo '
    '. filter($row['bDescription']) ."
    \n"; + } + echo '
    '. date($GLOBALS['shortdate'], strtotime($row['bDatetime'])) . $cats . $copy . $edit ."
    \n"; + echo "
  • \n"; + } + ?> + + + + '. T_('First') .''; + $bprev = ''. T_('Previous') .''; + } else { + $prev = $page - 1; + $prev = 'page='. $prev; + $start = ($page - 1) * $perpage; + $bfirst= ''. T_('First') .''; + $bprev = ''. T_('Previous') .''; + } + + // Next + $next = $page + 1; + $totalpages = ceil($total / $perpage); + if (count($bookmarks) < $perpage || $perpage * $page == $total) { + $bnext = ''. T_('Next') .''; + $blast = ''. T_('Last') .''; + } else { + $bnext = ''. T_('Next') .''; + $blast = ''. T_('Last') .''; + } + echo '

    '. $bfirst .' / '. $bprev .' / '. $bnext .' / '. $blast .' / '. sprintf(T_('Page %d of %d'), $page, $totalpages) .'

    '; +} else { +?> + +

    .

    + +includeTemplate('sidebar.tpl'); +$this->includeTemplate($GLOBALS['bottom_include']); +?> diff --git a/templates/bottom.inc.php b/templates/bottom.inc.php new file mode 100644 index 0000000..691287b --- /dev/null +++ b/templates/bottom.inc.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/templates/dynamictags.inc.php b/templates/dynamictags.inc.php new file mode 100644 index 0000000..5a85143 --- /dev/null +++ b/templates/dynamictags.inc.php @@ -0,0 +1,120 @@ +getCurrentUserId(); + +$userPopularTags =& $tagservice->getPopularTags($logged_on_userid, 25, $logged_on_userid); +$userPopularTagsCloud =& $tagservice->tagCloud($userPopularTags, 5, 90, 175); +$userPopularTagsCount = count($userPopularTags); + +if ($userPopularTagsCount > 0) { +?> + + + + \ No newline at end of file diff --git a/templates/editbookmark.tpl.php b/templates/editbookmark.tpl.php new file mode 100644 index 0000000..a590d81 --- /dev/null +++ b/templates/editbookmark.tpl.php @@ -0,0 +1,120 @@ +includeTemplate($GLOBALS['top_include']); + +$accessPublic = ''; +$accessShared = ''; +$accessPrivate = ''; +switch ($row['bStatus']) { + case 0 : + $accessPublic = ' selected="selected"'; + break; + case 1 : + $accessShared = ' selected="selected"'; + break; + case 2 : + $accessPrivate = ' selected="selected"'; + break; +} +?> + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + +
    +
    + +includeTemplate('dynamictags.inc'); + +// Bookmarklets and import links +if (empty($_REQUEST['popup']) && !$showdelete) { +?> + +

    +

    :

    + + + +

    +
      +
    • ()
    • +
    • +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/editprofile.tpl.php b/templates/editprofile.tpl.php new file mode 100644 index 0000000..ebfc972 --- /dev/null +++ b/templates/editprofile.tpl.php @@ -0,0 +1,56 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    + +

    + + + + + + + + + + + + + + + + + + + + + + +
    + +

    + + + + + + + + + + + + + + + + + + +
    +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/error.404.tpl.php b/templates/error.404.tpl.php new file mode 100644 index 0000000..fe9401d --- /dev/null +++ b/templates/error.404.tpl.php @@ -0,0 +1,9 @@ +includeTemplate($GLOBALS['top_include']); +if (!$error) { + echo '

    '. T_('Not Found') .'

    '; + echo '

    '. T_('The requested URL was not found on this server') .'

    '; +} +$this->includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/error.500.tpl.php b/templates/error.500.tpl.php new file mode 100644 index 0000000..1d7f7ae --- /dev/null +++ b/templates/error.500.tpl.php @@ -0,0 +1,9 @@ +includeTemplate($GLOBALS['top_include']); +if (!$error) { + echo '

    '. T_('General server error') .'

    '; + echo '

    '. T_('The requested URL could not be processed') .'

    '; +} +$this->includeTemplate($GLOBALS['bottom_include']); +?> diff --git a/templates/importDelicious.tpl.php b/templates/importDelicious.tpl.php new file mode 100644 index 0000000..bc4d892 --- /dev/null +++ b/templates/importDelicious.tpl.php @@ -0,0 +1,42 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +

    +
      +
    1. export page at del.icio.us'); ?>.
    2. +
    3. XML file to your computer'); ?>.
    4. +
    5. Browse... to find this file on your computer. The maximum size the file can be is 1MB'); ?>.
    6. +
    7. .
    8. +
    9. Import to start importing the bookmarks; it may take a minute'); ?>.
    10. +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/importNetscape.tpl.php b/templates/importNetscape.tpl.php new file mode 100644 index 0000000..627a5af --- /dev/null +++ b/templates/importNetscape.tpl.php @@ -0,0 +1,50 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    +
    + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +

    +
      +
    1. +

      :

      +
        +
      • File > Import and Export... > Export Favorites'); ?>
      • +
      • Bookmarks > Manage Bookmarks... > File > Export...'); ?>
      • +
      • Bookmarks > Manage Bookmarks... > Tools > Export...'); ?>
      • +
      +
    2. +
    3. Browse... to find the saved bookmark file on your computer. The maximum size the file can be is 1MB'); ?>.
    4. +
    5. .
    6. +
    7. Import to start importing the bookmarks; it may take a minute'); ?>.
    8. +
    +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/login.tpl.php b/templates/login.tpl.php new file mode 100644 index 0000000..6137dc0 --- /dev/null +++ b/templates/login.tpl.php @@ -0,0 +1,35 @@ +includeTemplate($GLOBALS['top_include']); +?> + + + +
    +
    + + + + + + + + + + + + + + + + +
    .
    +

    »

    + + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/password.tpl.php b/templates/password.tpl.php new file mode 100644 index 0000000..55dbed6 --- /dev/null +++ b/templates/password.tpl.php @@ -0,0 +1,26 @@ +includeTemplate($GLOBALS['top_include']); +?> + +

    + +
    + + + + + + + + + + + + + +
    +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/profile.tpl.php b/templates/profile.tpl.php new file mode 100644 index 0000000..e9ff91b --- /dev/null +++ b/templates/profile.tpl.php @@ -0,0 +1,67 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +getWatchNames($userid); +if ($watching) { +?> +
    +
    + '. $watchuser .', '; + } + echo substr($list, 0, -2); + ?> +
    +getWatchNames($userid, true); +if ($watchnames) { +?> +
    +
    + '. $watchuser .', '; + } + echo substr($list, 0, -2); + ?> +
    + +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/register.tpl.php b/templates/register.tpl.php new file mode 100644 index 0000000..7160535 --- /dev/null +++ b/templates/register.tpl.php @@ -0,0 +1,40 @@ +includeTemplate($GLOBALS['top_include']); +?> + + + +

    .

    + +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/rss.tpl.php b/templates/rss.tpl.php new file mode 100644 index 0000000..0f03c06 --- /dev/null +++ b/templates/rss.tpl.php @@ -0,0 +1,28 @@ +\n"; +?> + + + + <?php echo $feedtitle; ?> + + + 60 + + + + <?php echo $bookmark['title']; ?> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/sidebar.block.common.php b/templates/sidebar.block.common.php new file mode 100644 index 0000000..205ca1e --- /dev/null +++ b/templates/sidebar.block.common.php @@ -0,0 +1,25 @@ +getRelatedTagsByHash($hash); +$commonTags =& $tagservice->tagCloud($commonTags, 5, 90, 225, 'alphabet_asc'); + +if ($commonTags && count($commonTags) > 0) { +?> + +

    +
    +

    + '. filter($row['tag']) .' '; + } + echo $contents ."\n"; + ?> +

    +
    + + \ No newline at end of file diff --git a/templates/sidebar.block.popular.php b/templates/sidebar.block.popular.php new file mode 100644 index 0000000..fc9703d --- /dev/null +++ b/templates/sidebar.block.popular.php @@ -0,0 +1,31 @@ +getCurrentUserId(); +if ($logged_on_userid === false) { + $logged_on_userid = NULL; +} +$popularTags =& $tagservice->getPopularTags($userid, $popCount, $logged_on_userid); +$popularTags =& $tagservice->tagCloud($popularTags, 5, 90, 225, 'alphabet_asc'); + +if ($popularTags && count($popularTags) > 0) { +?> + +

    + + + \ No newline at end of file diff --git a/templates/sidebar.block.profile.php b/templates/sidebar.block.profile.php new file mode 100644 index 0000000..1b8e915 --- /dev/null +++ b/templates/sidebar.block.profile.php @@ -0,0 +1,16 @@ + 0) { + $name = $userinfo['name']; +} else { + $name = $userinfo['username']; +} +?> +

    +
    +
      +
    • +
    • +
    • +
    +
    diff --git a/templates/sidebar.block.recent.php b/templates/sidebar.block.recent.php new file mode 100644 index 0000000..f489e49 --- /dev/null +++ b/templates/sidebar.block.recent.php @@ -0,0 +1,30 @@ +getCurrentUserId(); +if ($logged_on_userid === false) { + $logged_on_userid = NULL; +} +$recentTags = $tagservice->getPopularTags($userid, $popCount, $logged_on_userid, $GLOBALS['defaultRecentDays']); +$recentTags =& $tagservice->tagCloud($recentTags, 5, 90, 225, 'alphabet_asc'); + +if ($recentTags && count($recentTags) > 0) { +?> + +

    +
    + '; + foreach ($recentTags as $row) { + $entries = T_ngettext('bookmark', 'bookmarks', $row['bCount']); + $contents .= ' '; + } + echo $contents ."

    \n"; + ?> +

    +
    + + \ No newline at end of file diff --git a/templates/sidebar.block.related.php b/templates/sidebar.block.related.php new file mode 100644 index 0000000..3a37718 --- /dev/null +++ b/templates/sidebar.block.related.php @@ -0,0 +1,29 @@ +getCurrentUserId(); +if ($logged_on_userid === false) { + $logged_on_userid = NULL; +} +if ($currenttag) { + $relatedTags = $tagservice->getRelatedTags($currenttag, $userid, $logged_on_userid); + if (sizeof($relatedTags) > 0) { +?> + +

    + + + \ No newline at end of file diff --git a/templates/sidebar.block.tagactions.php b/templates/sidebar.block.tagactions.php new file mode 100644 index 0000000..836c40c --- /dev/null +++ b/templates/sidebar.block.tagactions.php @@ -0,0 +1,27 @@ +isLoggedOn()) { + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + + if ($currentUsername == $user) { + $tags = explode('+', $currenttag); + $renametext = T_ngettext('Rename Tag', 'Rename Tags', count($tags)); + $renamelink = createURL('tagrename', $currenttag); + $deletelink = createURL('tagdelete', $currenttag); +?> + +

    +
    +
      +
    • + +
    • + +
    +
    + + \ No newline at end of file diff --git a/templates/sidebar.block.watchlist.php b/templates/sidebar.block.watchlist.php new file mode 100644 index 0000000..e35fa76 --- /dev/null +++ b/templates/sidebar.block.watchlist.php @@ -0,0 +1,19 @@ +getWatchNames($userid); +if ($watching) { +?> + +

    +
    +
      + +
    • + +
    +
    + + \ No newline at end of file diff --git a/templates/sidebar.block.watchstatus.php b/templates/sidebar.block.watchstatus.php new file mode 100644 index 0000000..d912846 --- /dev/null +++ b/templates/sidebar.block.watchstatus.php @@ -0,0 +1,27 @@ +isLoggedOn()) { + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + + if ($currentUsername != $user) { + $result = $userservice->getWatchStatus($userid, $userservice->getCurrentUserId()); + if ($result) { + $linkText = T_('Remove from Watchlist'); + } else { + $linkText = T_('Add to Watchlist'); + } + $linkAddress = createURL('watch', $user); +?> + +

    +
    +
      +
    • +
    +
    + + \ No newline at end of file diff --git a/templates/sidebar.tpl.php b/templates/sidebar.tpl.php new file mode 100644 index 0000000..5f399b5 --- /dev/null +++ b/templates/sidebar.tpl.php @@ -0,0 +1,13 @@ + diff --git a/templates/tagdelete.tpl.php b/templates/tagdelete.tpl.php new file mode 100644 index 0000000..3e9744a --- /dev/null +++ b/templates/tagdelete.tpl.php @@ -0,0 +1,20 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
    +

    +

    + + +

    + + +
    + + +
    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/tags.tpl.php b/templates/tags.tpl.php new file mode 100644 index 0000000..7266170 --- /dev/null +++ b/templates/tags.tpl.php @@ -0,0 +1,27 @@ +includeTemplate($GLOBALS['top_include']); +if ($tags && count($tags) > 0) { +?> + +

    + + / + +

    +

    + +'. filter($row['tag']) .' '; +} +echo $contents ."\n"; +?> + +

    + +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file diff --git a/templates/toolbar.inc.php b/templates/toolbar.inc.php new file mode 100644 index 0000000..2eb56ac --- /dev/null +++ b/templates/toolbar.inc.php @@ -0,0 +1,27 @@ +isLoggedOn()) { + $cUser = $userservice->getCurrentUser(); + $cUsername = $cUser[$userservice->getFieldName('username')]; +?> + + + + + + + + diff --git a/templates/top.inc.php b/templates/top.inc.php new file mode 100644 index 0000000..64213fd --- /dev/null +++ b/templates/top.inc.php @@ -0,0 +1,47 @@ + + + + + <?php echo filter($GLOBALS['sitename'] . (isset($pagetitle) ? ': ' . $pagetitle : '')); ?> + + + + '; + } + if ($loadjs) { + echo ''; + } + ?> + + + + + + + +'. $subtitle ."\n"; +} +if (isset($error)) { + echo '

    '. $error ."

    \n"; +} +if (isset($msg)) { + echo '

    '. $msg ."

    \n"; +} +?> diff --git a/watch.php b/watch.php new file mode 100644 index 0000000..6a01e9a --- /dev/null +++ b/watch.php @@ -0,0 +1,56 @@ +isLoggedOn() && $user) { + $tplVars = array(); + $pagetitle = ''; + + if (is_int($user)) { + $userid = intval($user); + } else { + if (!($userinfo = $userservice->getUserByUsername($user))) { + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); + } else { + $userid =& $userinfo['uId']; + } + } + + $watched = $userservice->getWatchStatus($userid, $userservice->getCurrentUserId()); + $changed = $userservice->setWatchStatus($userid); + + if ($watched) { + $tplVars['msg'] = T_('User removed from your watchlist'); + } else { + $tplVars['msg'] = T_('User added to your watchlist'); + } + + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; + + header('Location: '. createURL('watchlist', $currentUsername)); +} +?> diff --git a/watchlist.php b/watchlist.php new file mode 100644 index 0000000..973263c --- /dev/null +++ b/watchlist.php @@ -0,0 +1,125 @@ +isLoggedOn()) { + $loggedon = true; + $currentUser = $userservice->getCurrentUser(); + $currentUsername = $currentUser[$userservice->getFieldName('username')]; +} + +if ($usecache) { + // Generate hash for caching on + if ($loggedon) { + if ($currentUsername != $user) { + $cachehash = md5($_SERVER['REQUEST_URI'] . $currentUsername); + + // Cache for 5 minutes + $cacheservice->Start($cachehash); + } + } else { + // Cache for 30 minutes + $cachehash = md5($_SERVER['REQUEST_URI']); + $cacheservice->Start($cachehash, 1800); + } +} + +if ($user) { + if (is_int($user)) { + $userid = intval($user); + } else { + if (!($userinfo = $userservice->getUserByUsername($user) ) ) { + // Throw a 404 error + $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); + } else { + $userid =& $userinfo['uId']; + } + } +} + +// Header variables +$tplVars['loadjs'] = true; + +if ($user) { + $tplVars['user'] = $user; + $tplVars['userid'] = $userid; + $tplVars['userinfo'] =& $userinfo; + + // Pagination + $perpage = getPerPageCount(); + if (isset($_GET['page']) && intval($_GET['page']) > 1) { + $page = $_GET['page']; + $start = ($page - 1) * $perpage; + } else { + $page = 0; + $start = 0; + } + + // Set template vars + $tplVars['page'] = $page; + $tplVars['start'] = $start; + $tplVars['bookmarkCount'] = $start + 1; + + $bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, $userid, NULL, NULL, getSortOrder(), true); + + $tplVars['sidebar_blocks'] = array('watchlist'); + $tplVars['watched'] = true; + $tplVars['total'] = $bookmarks['total']; + $tplVars['bookmarks'] =& $bookmarks['bookmarks']; + $tplVars['cat_url'] = createURL('tags', '%2$s'); + $tplVars['nav_url'] = createURL('watchlist', '%s/%s%s'); + + if ($user == $currentUsername) { + $title = T_('My Watchlist'); + } else { + $title = T_('Watchlist') .': '. $user; + } + $tplVars['pagetitle'] = $title; + $tplVars['subtitle'] = $title; + + $tplVars['rsschannels'] = array( + array(filter($sitename .': '. $title), createURL('rss', 'watchlist/'. filter($user, 'url'))) + ); + + $templateservice->loadTemplate('bookmarks.tpl', $tplVars); +} else { + $tplVars['error'] = T_('Username was not specified'); + $templateservice->loadTemplate('error.404.tpl', $tplVars); + exit(); +} + +if ($usecache) { + // Cache output if existing copy has expired + $cacheservice->End($hash); +} +?> -- 2.30.2