Merge branch '0.9.x' into private-rss

This commit is contained in:
Jeffery To 2009-07-17 16:54:46 +08:00
commit 1aea598977
75 changed files with 8029 additions and 6699 deletions

63
README
View File

@ -3,7 +3,7 @@ README
------
Laconica 0.8.0 ("Shiny Happy People")
8 July 2009
15 July 2009
This is the README file for Laconica, the Open Source microblogging
platform. It includes installation instructions, descriptions of
@ -116,6 +116,16 @@ This is a major feature release since version 0.7.4, released May 31
as default TOS for Laconica sites.
- Better command-line handling for scripts, including standard options
and ability to set hostname and path from the command line.
- An experimental plugin to use Meteor (http://www.meteorserver.org/)
for "real-time" updates.
- A new framework for "real-time" updates, making it easier to develop
plugins for different browser-based update modes.
- RSS 2.0 and Atom feeds for groups.
- RSS 2.0 and Atom feeds for tags.
- Attachments can be sent by email.
- Attachments are encoded as enclosures in RSS 2.0 and Atom.
- Notices with attachments display in Facebook as media inline.
- Many, many bug fixes.
Prerequisites
@ -936,8 +946,6 @@ notice: A plain string that will appear on every page. A good place
to put introductory information about your service, or info about
upgrades and outages, or other community info. Any HTML will
be escaped.
dupelimit: Time in which it's not OK for the same person to post the
same notice; default = 60 seconds.
logo: URL of an image file to use as the logo for the site. Overrides
the logo in the theme, if any.
ssl: Whether to use SSL and https:// URLs for some or all pages.
@ -953,15 +961,12 @@ sslserver: use an alternate server name for SSL URLs, like
shorturllength: Length of URL at which URLs in a message exceeding 140
characters will be sent to the user's chosen
shortening service.
<<<<<<< HEAD:README
design: a default design (colors and background) for the site.
Sub-items are: backgroundcolor, contentcolor, sidebarcolor,
textcolor, linkcolor, backgroundimage, disposition.
dupelimit: minimum time allowed for one person to say the same thing
twice. Default 60s. Anything lower is considered a user
or UI error.
=======
>>>>>>> 0.7.x:README
db
--
@ -1424,6 +1429,51 @@ notify third-party servers of updates.
notify: an array of URLs for ping endpoints. Default is the empty
array (no notification).
Plugins
=======
Beginning with the 0.7.x branch, Laconica has supported a simple but
powerful plugin architecture. Important events in the code are named,
like 'StartNoticeSave', and other software can register interest
in those events. When the events happen, the other software is called
and has a choice of accepting or rejecting the events.
In the simplest case, you can add a function to config.php and use the
Event::addHandler() function to hook an event:
function AddGoogleLink($action)
{
$action->menuItem('http://www.google.com/', _('Google'), _('Search engine'));
return true;
}
Event::addHandler('EndPrimaryNav', 'AddGoogleLink');
This adds a menu item to the end of the main navigation menu. You can
see the list of existing events, and parameters that handlers must
implement, in EVENTS.txt.
The Plugin class in lib/plugin.php makes it easier to write more
complex plugins. Sub-classes can just create methods named
'onEventName', where 'EventName' is the name of the event (case
matters!). These methods will be automatically registered as event
handlers by the Plugin constructor (which you must call from your own
class's constructor).
Several example plugins are included in the plugins/ directory. You
can enable a plugin with the following line in config.php:
addPlugin('Example', array('param1' => 'value1',
'param2' => 'value2'));
This will look for and load files named 'ExamplePlugin.php' or
'Example/ExamplePlugin.php' either in the plugins/ directory (for
plugins that ship with Laconica) or in the local/ directory (for
plugins you write yourself or that you get from somewhere else) or
local/plugins/.
Plugins are documented in their own directories.
Troubleshooting
===============
@ -1533,6 +1583,7 @@ if anyone's been overlooked in error.
* Brenda Wallace
* Jeffery To
* Federico Marani
* Craig Andrews
Thanks also to the developers of our upstream library code and to the
thousands of people who have tried out Identi.ca, installed Laconi.ca,

View File

@ -127,7 +127,9 @@ class ApiAction extends Action
'help/downtime_schedule',
'laconica/version',
'laconica/config',
'laconica/wadl');
'laconica/wadl',
'tags/timeline',
'groups/timeline');
static $bareauth = array('statuses/user_timeline',
'statuses/friends_timeline',

View File

@ -116,6 +116,11 @@ class ConversationAction extends Action
$cnt = $ct->show();
}
function isReadOnly()
{
return true;
}
}
/**

View File

@ -57,7 +57,7 @@ class FacebookhomeAction extends FacebookAction
// If this is the first time the user has started the app
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('status_update')) {
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
@ -203,7 +203,7 @@ class FacebookhomeAction extends FacebookAction
$api_key = common_config('facebook', 'apikey');
$auth_url = 'http://www.facebook.com/authorize.php?api_key=' .
$api_key . '&v=1.0&ext_perm=status_update&next=' . $next .
$api_key . '&v=1.0&ext_perm=publish_stream&next=' . $next .
'&next_cancel=' . $next . '&submit=skip';
$this->elementStart('span', array('class' => 'facebook-button'));

View File

@ -31,7 +31,7 @@ class FacebookinviteAction extends FacebookAction
$this->error = $error;
if ($this->flink) {
if (!$this->facebook->api_client->users_hasAppPermission('status_update') &&
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') &&
$this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
@ -60,7 +60,7 @@ class FacebookinviteAction extends FacebookAction
// If this is the first time the user has started the app
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('status_update')) {
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {

View File

@ -78,7 +78,7 @@ class FacebooksettingsAction extends FacebookAction
}
}
if ($this->facebook->api_client->users_hasAppPermission('status_update')) {
if ($this->facebook->api_client->users_hasAppPermission('publish_stream')) {
$this->elementStart('form', array('method' => 'post',
'id' => 'facebook_settings'));
@ -131,7 +131,7 @@ class FacebooksettingsAction extends FacebookAction
$this->elementStart('ul', array('id' => 'fb-permissions-list'));
$this->elementStart('li', array('id' => 'fb-permissions-item'));
$this->elementStart('fb:prompt-permission', array('perms' => 'status_update',
$this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream',
'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
$this->element('span', array('class' => 'facebook-button'),
sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));

View File

@ -317,8 +317,25 @@ class ShowgroupAction extends GroupDesignAction
common_local_url('grouprss',
array('nickname' => $this->group->nickname));
return array(new Feed(Feed::RSS1, $url, sprintf(_('Notice feed for %s group'),
$this->group->nickname)));
return array(new Feed(Feed::RSS1,
common_local_url('grouprss',
array('nickname' => $this->group->nickname)),
sprintf(_('Notice feed for %s group (RSS 1.0)'),
$this->group->nickname)),
new Feed(Feed::RSS2,
common_local_url('api',
array('apiaction' => 'groups',
'method' => 'timeline',
'argument' => $this->group->nickname.'.rss')),
sprintf(_('Notice feed for %s group (RSS 2.0)'),
$this->group->nickname)),
new Feed(Feed::ATOM,
common_local_url('api',
array('apiaction' => 'groups',
'method' => 'timeline',
'argument' => $this->group->nickname.'.atom')),
sprintf(_('Notice feed for %s group (Atom)'),
$this->group->nickname)));
}
/**
@ -466,4 +483,4 @@ class GroupAdminSection extends ProfileSection
{
return null;
}
}
}

View File

@ -72,8 +72,24 @@ class TagAction extends Action
function getFeeds()
{
return array(new Feed(Feed::RSS1,
common_local_url('tagrss', array('tag' => $this->tag)),
sprintf(_('Feed for tag %s'), $this->tag)));
common_local_url('tagrss',
array('tag' => $this->tag)),
sprintf(_('Notice feed for tag %s (RSS 1.0)'),
$this->tag)),
new Feed(Feed::RSS2,
common_local_url('api',
array('apiaction' => 'tags',
'method' => 'timeline',
'argument' => $this->tag.'.rss')),
sprintf(_('Notice feed for %s group (RSS 2.0)'),
$this->tag)),
new Feed(Feed::ATOM,
common_local_url('api',
array('apiaction' => 'tags',
'method' => 'timeline',
'argument' => $this->tag.'.atom')),
sprintf(_('Notice feed for tag %s (Atom)'),
$this->tag)));
}
function showContent()

114
actions/twitapigroups.php Normal file
View File

@ -0,0 +1,114 @@
<?php
/**
* Laconica, the distributed open-source microblogging tool
*
* Laconica extensions to the Twitter-like API for groups
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Twitter
* @package Laconica
* @author Craig Andrews
* @author Zach Copley <zach@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
if (!defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/twitterapi.php';
/**
* Group-specific API methods
*
* This class handles Laconica group API methods.
*
* @category Twitter
* @package Laconica
* @author Craig Andrews
* @author Zach Copley <zach@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
class TwitapigroupsAction extends TwitterapiAction
{
function timeline($args, $apidata)
{
parent::handle($args);
common_debug("in groups api action");
$this->auth_user = $apidata['user'];
$group = $this->get_group($apidata['api_arg'], $apidata);
if (empty($group)) {
$this->clientError('Not Found', 404, $apidata['content-type']);
return;
}
$sitename = common_config('site', 'name');
$title = sprintf(_("%s timeline"), $group->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:GroupTimeline:".$group->id;
$link = common_local_url('showgroup',
array('nickname' => $group->nickname));
$subtitle = sprintf(_('Updates from %1$s on %2$s!'),
$group->nickname, $sitename);
$page = (int)$this->arg('page', 1);
$count = (int)$this->arg('count', 20);
$max_id = (int)$this->arg('max_id', 0);
$since_id = (int)$this->arg('since_id', 0);
$since = $this->arg('since');
$notice = $group->getNotices(($page-1)*$count,
$count, $since_id, $max_id, $since);
switch($apidata['content-type']) {
case 'xml':
$this->show_xml_timeline($notice);
break;
case 'rss':
$this->show_rss_timeline($notice, $title, $link,
$subtitle, $suplink);
break;
case 'atom':
if (isset($apidata['api_arg'])) {
$selfuri = common_root_url() .
'api/laconica/groups/timeline/' .
$apidata['api_arg'] . '.atom';
} else {
$selfuri = common_root_url() .
'api/laconica/groups/timeline.atom';
}
$this->show_atom_timeline($notice, $title, $id, $link,
$subtitle, $suplink, $selfuri);
break;
case 'json':
$this->show_json_timeline($notice);
break;
default:
$this->clientError(_('API method not found!'), $code = 404);
}
}
}

114
actions/twitapitags.php Normal file
View File

@ -0,0 +1,114 @@
<?php
/**
* Laconica, the distributed open-source microblogging tool
*
* Laconica extensions to the Twitter-like API for groups
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Twitter
* @package Laconica
* @author Craig Andrews
* @author Zach Copley <zach@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
if (!defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/lib/twitterapi.php';
/**
* Group-specific API methods
*
* This class handles Laconica group API methods.
*
* @category Twitter
* @package Laconica
* @author Craig Andrews
* @author Zach Copley <zach@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
class TwitapitagsAction extends TwitterapiAction
{
function timeline($args, $apidata)
{
parent::handle($args);
common_debug("in tags api action");
$this->auth_user = $apidata['user'];
$tag = $apidata['api_arg'];
if (empty($tag)) {
$this->clientError('Not Found', 404, $apidata['content-type']);
return;
}
$sitename = common_config('site', 'name');
$title = sprintf(_("Notices tagged with %s"), $tag);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:TagTimeline:".$tag;
$link = common_local_url('tag',
array('tag' => $tag));
$subtitle = sprintf(_('Updates tagged with %1$s on %2$s!'),
$tag, $sitename);
$page = (int)$this->arg('page', 1);
$count = (int)$this->arg('count', 20);
$max_id = (int)$this->arg('max_id', 0);
$since_id = (int)$this->arg('since_id', 0);
$since = $this->arg('since');
# XXX: support max_id, since_id, and since arguments
$notice = Notice_tag::getStream($tag, ($page-1)*$count, $count + 1);
switch($apidata['content-type']) {
case 'xml':
$this->show_xml_timeline($notice);
break;
case 'rss':
$this->show_rss_timeline($notice, $title, $link,
$subtitle, $suplink);
break;
case 'atom':
if (isset($apidata['api_arg'])) {
$selfuri = common_root_url() .
'api/laconica/tags/timeline/' .
$apidata['api_arg'] . '.atom';
} else {
$selfuri = common_root_url() .
'api/laconica/tags/timeline.atom';
}
$this->show_atom_timeline($notice, $title, $id, $link,
$subtitle, $suplink, $selfuri);
break;
case 'json':
$this->show_json_timeline($notice);
break;
default:
$this->clientError(_('API method not found!'), $code = 404);
}
}
}

View File

@ -193,5 +193,18 @@ class File extends Memcached_DataObject
return 'http://'.$server.$path.$filename;
}
function isEnclosure(){
if(isset($this->filename)){
return true;
}
$notEnclosureMimeTypes = array('text/html','application/xhtml+xml');
$mimetype = strtolower($this->mimetype);
$semicolon = strpos($mimetype,';');
if($semicolon){
$mimetype = substr($mimetype,0,$semicolon);
}
return(! in_array($mimetype,$notEnclosureMimeTypes));
}
}

View File

@ -1170,11 +1170,13 @@ class Notice extends Memcached_DataObject
$attachments = $this->attachments();
if($attachments){
foreach($attachments as $attachment){
$attributes = array('rel'=>'enclosure','href'=>$attachment->url,'type'=>$attachment->mimetype,'length'=>$attachment->size);
if($attachment->title){
$attributes['title']=$attachment->title;
if ($attachment->isEnclosure()) {
$attributes = array('rel'=>'enclosure','href'=>$attachment->url,'type'=>$attachment->mimetype,'length'=>$attachment->size);
if($attachment->title){
$attributes['title']=$attachment->title;
}
$xs->element('link', $attributes, null);
}
$xs->element('link', $attributes, null);
}
}

View File

@ -2,11 +2,11 @@
/**
* Object Based Database Query Builder and data store
*
* PHP versions 4 and 5
* For PHP versions 4,5 and 6
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* LICENSE: This source file is subject to version 3.01 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* http://www.php.net/license/3_01.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
@ -14,8 +14,8 @@
* @package DB_DataObject
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: DataObject.php,v 1.439 2008/01/30 02:14:06 alan_k Exp $
* @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version CVS: $Id: DataObject.php 284150 2009-07-15 23:27:59Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/
@ -235,7 +235,7 @@ class DB_DataObject extends DB_DataObject_Overload
* @access private
* @var string
*/
var $_DB_DataObject_version = "1.8.8";
var $_DB_DataObject_version = "1.8.11";
/**
* The Database table (used by table extends)
@ -1027,7 +1027,13 @@ class DB_DataObject extends DB_DataObject_Overload
if ($leftq || $useNative) {
$table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table);
$r = $this->_query("INSERT INTO {$table} ($leftq) VALUES ($rightq) ");
if (($dbtype == 'pgsql') && empty($leftq)) {
$r = $this->_query("INSERT INTO {$table} DEFAULT VALUES");
} else {
$r = $this->_query("INSERT INTO {$table} ($leftq) VALUES ($rightq) ");
}
@ -1339,7 +1345,7 @@ class DB_DataObject extends DB_DataObject_Overload
* build the condition only using the object parameters.
*
* @access public
* @return mixed True on success, false on failure, 0 on no data affected
* @return mixed Int (No. of rows affected) on success, false on failure, 0 on no data affected
*/
function delete($useWhere = false)
{
@ -1369,7 +1375,13 @@ class DB_DataObject extends DB_DataObject_Overload
if (($this->_query !== false) && $this->_query['condition']) {
$table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table);
$sql = "DELETE FROM {$table} {$this->_query['condition']}{$extra_cond}";
$sql = "DELETE ";
// using a joined delete. - with useWhere..
$sql .= (!empty($this->_join) && $useWhere) ?
"{$table} FROM {$table} {$this->_join} " :
"FROM {$table} ";
$sql .= $this->_query['condition']. $extra_cond;
// add limit..
@ -1521,15 +1533,15 @@ class DB_DataObject extends DB_DataObject_Overload
}
$keys = $this->keys();
if (!$keys[0] && !is_string($countWhat)) {
if (empty($keys[0]) && (!is_string($countWhat) || (strtoupper($countWhat) == 'DISTINCT'))) {
$this->raiseError(
"You cannot do run count without keys - use \$do->keys('id');",
"You cannot do run count without keys - use \$do->count('id'), or use \$do->count('distinct id')';",
DB_DATAOBJECT_ERROR_INVALIDARGS,PEAR_ERROR_DIE);
return false;
}
$table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table);
$key_col = ($quoteIdentifiers ? $DB->quoteIdentifier($keys[0]) : $keys[0]);
$key_col = empty($keys[0]) ? '' : (($quoteIdentifiers ? $DB->quoteIdentifier($keys[0]) : $keys[0]));
$as = ($quoteIdentifiers ? $DB->quoteIdentifier('DATAOBJECT_NUM') : 'DATAOBJECT_NUM');
// support distinct on default keys.
@ -2044,7 +2056,7 @@ class DB_DataObject extends DB_DataObject_Overload
// technically postgres native here...
// we need to get the new improved tabledata sorted out first.
if ( in_array($dbtype , array('psql', 'mysql', 'mysqli', 'mssql', 'ifx')) &&
if ( in_array($dbtype , array('pgsql', 'mysql', 'mysqli', 'mssql', 'ifx')) &&
($table[$usekey] & DB_DATAOBJECT_INT) &&
isset($realkeys[$usekey]) && ($realkeys[$usekey] == 'N')
) {
@ -2125,10 +2137,13 @@ class DB_DataObject extends DB_DataObject_Overload
$this->_loadConfig();
}
// Set database driver for reference
$db_driver = empty($_DB_DATAOBJECT['CONFIG']['db_driver']) ? 'DB' : $_DB_DATAOBJECT['CONFIG']['db_driver'];
// is it already connected ?
$db_driver = empty($_DB_DATAOBJECT['CONFIG']['db_driver']) ?
'DB' : $_DB_DATAOBJECT['CONFIG']['db_driver'];
// is it already connected ?
if ($this->_database_dsn_md5 && !empty($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
// connection is an error...
if (PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
return $this->raiseError(
$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->message,
@ -2137,7 +2152,7 @@ class DB_DataObject extends DB_DataObject_Overload
}
if (!$this->_database) {
if (empty($this->_database)) {
$this->_database = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['database'];
$hasGetDatabase = method_exists($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5], 'getDatabase');
@ -2166,6 +2181,7 @@ class DB_DataObject extends DB_DataObject_Overload
// try and work out what to use for the dsn !
$options= &$_DB_DATAOBJECT['CONFIG'];
// if the databse dsn dis defined in the object..
$dsn = isset($this->_database_dsn) ? $this->_database_dsn : null;
if (!$dsn) {
@ -2173,14 +2189,14 @@ class DB_DataObject extends DB_DataObject_Overload
$this->_database = isset($options["table_{$this->__table}"]) ? $options["table_{$this->__table}"] : null;
}
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("Checking for database database_{$this->_database} in options","CONNECT");
$this->debug("Checking for database specific ini ('{$this->_database}') : database_{$this->_database} in options","CONNECT");
}
if ($this->_database && !empty($options["database_{$this->_database}"])) {
$dsn = $options["database_{$this->_database}"];
} else if (!empty($options['database'])) {
$dsn = $options['database'];
}
}
@ -2205,6 +2221,9 @@ class DB_DataObject extends DB_DataObject_Overload
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("USING CACHED CONNECTION", "CONNECT",3);
}
if (!$this->_database) {
$hasGetDatabase = method_exists($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5], 'getDatabase');
@ -2221,7 +2240,7 @@ class DB_DataObject extends DB_DataObject_Overload
return true;
}
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("NEW CONNECTION", "CONNECT",3);
$this->debug("NEW CONNECTION TP DATABASE :" .$this->_database , "CONNECT",3);
/* actualy make a connection */
$this->debug(print_r($dsn,true) ." {$this->_database_dsn_md5}", "CONNECT",3);
}
@ -2265,8 +2284,8 @@ class DB_DataObject extends DB_DataObject_Overload
);
}
if (!$this->_database) {
if (empty($this->_database)) {
$hasGetDatabase = method_exists($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5], 'getDatabase');
$this->_database = ($db_driver != 'DB' && $hasGetDatabase)
@ -2357,38 +2376,38 @@ class DB_DataObject extends DB_DataObject_Overload
$t= explode(' ',microtime());
$_DB_DATAOBJECT['QUERYENDTIME'] = $time = $t[0]+$t[1];
do {
if ($_DB_driver == 'DB') {
$result = $DB->query($string);
} else {
switch (strtolower(substr(trim($string),0,6))) {
for ($tries = 0;$tries < 3;$tries++) {
case 'insert':
case 'update':
case 'delete':
$result = $DB->exec($string);
break;
default:
$result = $DB->query($string);
break;
if ($_DB_driver == 'DB') {
$result = $DB->query($string);
} else {
switch (strtolower(substr(trim($string),0,6))) {
case 'insert':
case 'update':
case 'delete':
$result = $DB->exec($string);
break;
default:
$result = $DB->query($string);
break;
}
}
// see if we got a failure.. - try again a few times..
if (!is_a($result,'PEAR_Error')) {
break;
}
if ($result->getCode() != -14) { // *DB_ERROR_NODBSELECTED
break; // not a connection error..
}
sleep(1); // wait before retyring..
$DB->connect($DB->dsn);
}
// try to reconnect, at most 3 times
$again = false;
if (is_a($result, 'PEAR_Error')
AND $result->getCode() == DB_ERROR_NODBSELECTED
AND $cpt++<3) {
$DB->disconnect();
sleep(1);
$DB->connect($DB->dsn);
$again = true;
}
} while ($again);
if (is_a($result,'PEAR_Error')) {
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
@ -2556,11 +2575,13 @@ class DB_DataObject extends DB_DataObject_Overload
* use @ to silence it (if you are sure it is acceptable)
* eg. $do = @DB_DataObject::factory('person')
*
* table name will eventually be databasename/table
* table name can bedatabasename/table
* - and allow modular dataobjects to be written..
* (this also helps proxy creation)
*
*
* Experimental Support for Multi-Database factory eg. mydatabase.mytable
*
*
* @param string $table tablename (use blank to create a new instance of the same class.)
* @access private
* @return DataObject|PEAR_Error
@ -2570,9 +2591,27 @@ class DB_DataObject extends DB_DataObject_Overload
function factory($table = '') {
global $_DB_DATAOBJECT;
// multi-database support.. - experimental.
$database = '';
if (strpos( $table,'/') !== false ) {
list($database,$table) = explode('.',$table, 2);
}
if (empty($_DB_DATAOBJECT['CONFIG'])) {
DB_DataObject::_loadConfig();
}
// no configuration available for database
if (!empty($database) && empty($_DB_DATAOBJECT['CONFIG']['database_'.$database])) {
return DB_DataObject::raiseError(
"unable to find database_{$database} in Configuration, It is required for factory with database"
, 0, PEAR_ERROR_DIE );
}
if ($table === '') {
if (is_a($this,'DB_DataObject') && strlen($this->__table)) {
@ -2584,17 +2623,22 @@ class DB_DataObject extends DB_DataObject_Overload
}
}
// does this need multi db support??
$p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ?
$_DB_DATAOBJECT['CONFIG']['class_prefix'] : '';
$class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table));
$ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class);
$class = $ce ? $class : DB_DataObject::_autoloadClass($class);
// proxy = full|light
if (!$class && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) {
DB_DataObject::debug("FAILED TO Autoload $database.$table - using proxy.","FACTORY",1);
$proxyMethod = 'getProxy'.$_DB_DATAOBJECT['CONFIG']['proxy'];
// if you have loaded (some other way) - dont try and load it again..
class_exists('DB_DataObject_Generator') ? '' :
require_once 'DB/DataObject/Generator.php';
@ -2614,8 +2658,12 @@ class DB_DataObject extends DB_DataObject_Overload
"factory could not find class $class from $table",
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
}
return new $class;
$ret = new $class;
if (!empty($database)) {
DB_DataObject::debug("Setting database to $database","FACTORY",1);
$ret->database($database);
}
return $ret;
}
/**
* autoload Class
@ -3079,7 +3127,7 @@ class DB_DataObject extends DB_DataObject_Overload
return;
}
//echo '<PRE>'; print_r(func_get_args());
$useWhereAsOn = false;
// support for 2nd argument as an array of options
if (is_array($joinType)) {
@ -3119,8 +3167,39 @@ class DB_DataObject extends DB_DataObject_Overload
$DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
/// CHANGED 26 JUN 2009 - we prefer links from our local table over the remote one.
/* otherwise see if there are any links from this table to the obj. */
//print_r($this->links());
if (($ofield === false) && ($links = $this->links())) {
foreach ($links as $k => $v) {
/* link contains {this column} = {linked table}:{linked column} */
$ar = explode(':', $v);
// Feature Request #4266 - Allow joins with multiple keys
if (strpos($k, ',') !== false) {
$k = explode(',', $k);
}
if (strpos($ar[1], ',') !== false) {
$ar[1] = explode(',', $ar[1]);
}
if ($ar[0] == $obj->__table) {
if ($joinCol !== false) {
if ($k == $joinCol) {
$tfield = $k;
$ofield = $ar[1];
break;
} else {
continue;
}
} else {
$tfield = $k;
$ofield = $ar[1];
break;
}
}
}
}
/* look up the links for obj table */
//print_r($obj->links());
if (!$ofield && ($olinks = $obj->links())) {
@ -3164,37 +3243,6 @@ class DB_DataObject extends DB_DataObject_Overload
}
}
/* otherwise see if there are any links from this table to the obj. */
//print_r($this->links());
if (($ofield === false) && ($links = $this->links())) {
foreach ($links as $k => $v) {
/* link contains {this column} = {linked table}:{linked column} */
$ar = explode(':', $v);
// Feature Request #4266 - Allow joins with multiple keys
if (strpos($k, ',') !== false) {
$k = explode(',', $k);
}
if (strpos($ar[1], ',') !== false) {
$ar[1] = explode(',', $ar[1]);
}
if ($ar[0] == $obj->__table) {
if ($joinCol !== false) {
if ($k == $joinCol) {
$tfield = $k;
$ofield = $ar[1];
break;
} else {
continue;
}
} else {
$tfield = $k;
$ofield = $ar[1];
break;
}
}
}
}
// finally if these two table have column names that match do a join by default on them
if (($ofield === false) && $joinCol) {
@ -3383,22 +3431,25 @@ class DB_DataObject extends DB_DataObject_Overload
case 'RIGHT': // others??? .. cross, left outer, right outer, natural..?
// Feature Request #4266 - Allow joins with multiple keys
$this->_join .= "\n {$joinType} JOIN {$objTable} {$fullJoinAs}";
$jadd = "\n {$joinType} JOIN {$objTable} {$fullJoinAs}";
//$this->_join .= "\n {$joinType} JOIN {$objTable} {$fullJoinAs}";
if (is_array($ofield)) {
$key_count = count($ofield);
for($i = 0; $i < $key_count; $i++) {
if ($i == 0) {
$this->_join .= " ON ({$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]}) ";
$jadd .= " ON ({$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]}) ";
}
else {
$this->_join .= " AND {$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]} ";
$jadd .= " AND {$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]} ";
}
}
$this->_join .= ' ' . $appendJoin . ' ';
$jadd .= ' ' . $appendJoin . ' ';
} else {
$this->_join .= " ON ({$joinAs}.{$ofield}={$table}.{$tfield}) {$appendJoin} ";
$jadd .= " ON ({$joinAs}.{$ofield}={$table}.{$tfield}) {$appendJoin} ";
}
// jadd avaliable for debugging join build.
//echo $jadd ."\n";
$this->_join .= $jadd;
break;
case '': // this is just a standard multitable select..
@ -3459,7 +3510,7 @@ class DB_DataObject extends DB_DataObject_Overload
continue;
}
if (empty($from[$k]) && $skipEmpty) {
if (empty($from[sprintf($format,$k)]) && $skipEmpty) {
continue;
}

View File

@ -15,9 +15,9 @@
* @category Database
* @package DB_DataObject
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @copyright 1997-2008 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Cast.php,v 1.15 2005/07/07 05:30:53 alan_k Exp $
* @version CVS: $Id: Cast.php 264148 2008-08-04 03:44:59Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/
@ -391,7 +391,10 @@ class DB_DataObject_Cast {
// this is funny - the parameter order is reversed ;)
return "'".mysqli_real_escape_string($db->connection, $this->value)."'";
case 'sqlite':
// this is funny - the parameter order is reversed ;)
return "'".sqlite_escape_string($this->value)."'";
default:
return PEAR::raiseError("DB_DataObject_Cast cant handle blobs for Database:{$db->dsn['phptype']} Yet");

View File

@ -18,7 +18,7 @@
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Error.php,v 1.3 2005/03/23 02:35:35 alan_k Exp $
* @version CVS: $Id: Error.php 277015 2009-03-12 05:51:03Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/

View File

@ -4,9 +4,9 @@
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* LICENSE: This source file is subject to version 3.01 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* http://www.php.net/license/3_01.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
@ -14,8 +14,8 @@
* @package DB_DataObject
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Generator.php,v 1.141 2008/01/30 02:29:39 alan_k Exp $
* @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version CVS: $Id: Generator.php 284150 2009-07-15 23:27:59Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/
@ -193,7 +193,11 @@ class DB_DataObject_Generator extends DB_DataObject
/**
* set portability and some modules to fetch the informations
*/
$__DB->setOption('portability', MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE);
$db_options = PEAR::getStaticProperty('MDB2','options');
if (empty($db_options)) {
$__DB->setOption('portability', MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE);
}
$__DB->loadModule('Manager');
$__DB->loadModule('Reverse');
}
@ -265,12 +269,7 @@ class DB_DataObject_Generator extends DB_DataObject
} else {
$defs = $__DB->reverse->tableInfo($quotedTable);
// rename the length value, so it matches db's return.
foreach ($defs as $k => $v) {
if (!isset($defs[$k]['length'])) {
continue;
}
$defs[$k]['len'] = $defs[$k]['length'];
}
}
if (is_a($defs,'PEAR_Error')) {
@ -286,7 +285,10 @@ class DB_DataObject_Generator extends DB_DataObject
if (!is_array($def)) {
continue;
}
// rename the length value, so it matches db's return.
if (isset($def['length']) && !isset($def['len'])) {
$def['len'] = $def['length'];
}
$this->_definitions[$table][] = (object) $def;
}
@ -391,7 +393,10 @@ class DB_DataObject_Generator extends DB_DataObject
$fk = array();
foreach($this->tables as $this->table) {
$res =& $DB->query('SHOW CREATE TABLE ' . $this->table);
$quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $DB->quoteIdentifier($table) : $this->table;
$res =& $DB->query('SHOW CREATE TABLE ' . $quotedTable );
if (PEAR::isError($res)) {
die($res->getMessage());
}
@ -467,7 +472,7 @@ class DB_DataObject_Generator extends DB_DataObject
function _generateDefinitionsTable()
{
global $_DB_DATAOBJECT;
$options = PEAR::getStaticProperty('DB_DataObject','options');
$defs = $this->_definitions[$this->table];
$this->_newConfig .= "\n[{$this->table}]\n";
$keys_out = "\n[{$this->table}__keys]\n";
@ -551,6 +556,9 @@ class DB_DataObject_Generator extends DB_DataObject
case 'ENUM':
case 'SET': // not really but oh well
case 'POINT': // mysql geometry stuff - not really string - but will do..
case 'TIMESTAMPTZ': // postgres
case 'BPCHAR': // postgres
case 'INTERVAL': // postgres (eg. '12 days')
@ -594,14 +602,18 @@ class DB_DataObject_Generator extends DB_DataObject
DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME;
break;
case 'TINYBLOB':
case 'BLOB': /// these should really be ignored!!!???
case 'TINYBLOB':
case 'MEDIUMBLOB':
case 'LONGBLOB':
case 'CLOB': // oracle character lob support
case 'BYTEA': // postgres blob support..
$type = DB_DATAOBJECT_STR + DB_DATAOBJECT_BLOB;
break;
default:
echo "*****************************************************************\n".
"** WARNING UNKNOWN TYPE **\n".
@ -653,7 +665,9 @@ class DB_DataObject_Generator extends DB_DataObject
// only use primary key or nextval(), cause the setFrom blocks you setting all key items...
// if no keys exist fall back to using unique
//echo "\n{$t->name} => {$t->flags}\n";
if (preg_match("/(auto_increment|nextval\()/i",rawurldecode($t->flags))
$secondary_key_match = isset($options['generator_secondary_key_match']) ? $options['generator_secondary_key_match'] : 'primary|unique';
if (preg_match('/(auto_increment|nextval\()/i',rawurldecode($t->flags))
|| (isset($t->autoincrement) && ($t->autoincrement === true))) {
// native sequences = 2
@ -662,7 +676,7 @@ class DB_DataObject_Generator extends DB_DataObject
}
$ret_keys_primary[$t->name] = 'N';
} else if (preg_match("/(primary|unique)/i",$t->flags)) {
} else if ($secondary_key_match && preg_match('/('.$secondary_key_match.')/i',$t->flags)) {
// keys.. = 1
$key_type = 'K';
if (!preg_match("/(primary)/i",$t->flags)) {
@ -868,10 +882,13 @@ class DB_DataObject_Generator extends DB_DataObject
// then we should add var $_database = here
// as database names may not always match..
if (empty($GLOBALS['_DB_DATAOBJECT']['CONFIG'])) {
DB_DataObject::_loadConfig();
}
// Only include the $_database property if the omit_database_var is unset or false
if (isset($options["database_{$this->_database}"])) {
if (isset($options["database_{$this->_database}"]) && empty($GLOBALS['_DB_DATAOBJECT']['CONFIG']['generator_omit_database_var'])) {
$body .= " {$var} \$_database = '{$this->_database}'; {$p}// database name (used with database_{*} config)\n";
}
@ -904,9 +921,10 @@ class DB_DataObject_Generator extends DB_DataObject
$padding = (30 - strlen($t->name));
if ($padding < 2) $padding =2;
$p = str_repeat(' ',$padding) ;
$body .=" {$var} \${$t->name}; {$p}// {$t->type}({$t->len}) {$t->flags}\n";
$length = empty($t->len) ? '' : '('.$t->len.')';
$body .=" {$var} \${$t->name}; {$p}// {$t->type}$length {$t->flags}\n";
// can not do set as PEAR::DB table info doesnt support it.
//if (substr($t->Type,0,3) == "set")
// $sets[$t->Field] = "array".substr($t->Type,3);
@ -1185,7 +1203,7 @@ class DB_DataObject_Generator extends DB_DataObject
$__DB->loadModule('Manager');
$__DB->loadModule('Reverse');
}
$quotedTable = !empty($options['quote_identifiers']) ?
$quotedTable = !empty($options['quote_identifiers_tableinfo']) ?
$__DB->quoteIdentifier($table) : $table;
if (!$is_MDB2) {

2
extlib/DB/DataObject/createTables.php Executable file → Normal file
View File

@ -16,7 +16,7 @@
// | Author: Alan Knowles <alan@akbkhome.com>
// +----------------------------------------------------------------------+
//
// $Id: createTables.php,v 1.24 2006/01/13 01:27:55 alan_k Exp $
// $Id: createTables.php 277015 2009-03-12 05:51:03Z alan_k $
//
// since this version doesnt use overload,

View File

@ -283,7 +283,7 @@ function NoticeAttachments() {
},
timeout : 0,
autoHide : true,
css : {'max-width':'542px', 'top':'22.5%', 'left':'32.5%'}
css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'}
};
$('#content .notice a.attachment').click(function() {

View File

@ -460,16 +460,6 @@ class FacebookAction extends Action
}
}
function updateFacebookStatus($notice)
{
$prefix = $this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX, $this->fbuid);
$content = "$prefix $notice->content";
if ($this->facebook->api_client->users_hasAppPermission('status_update', $this->fbuid)) {
$this->facebook->api_client->users_setStatus($content, $this->fbuid, false, true);
}
}
function saveNewNotice()
{
@ -504,7 +494,7 @@ class FacebookAction extends Action
$replyto = $this->trimmed('inreplyto');
$notice = Notice::saveNew($user->id, $content,
'Facebook', 1, ($replyto == 'false') ? null : $replyto);
'web', 1, ($replyto == 'false') ? null : $replyto);
if (is_string($notice)) {
$this->showPage($notice);
@ -514,8 +504,7 @@ class FacebookAction extends Action
common_broadcast_notice($notice);
// Also update the user's Facebook status
$this->updateFacebookStatus($notice);
$this->updateProfileBox($notice);
facebookBroadcastNotice($notice);
}

View File

@ -86,13 +86,17 @@ function isFacebookBound($notice, $flink) {
// Check to see if the user has given the FB app status update perms
$result = $facebook->api_client->
users_hasAppPermission('status_update', $fbuid);
users_hasAppPermission('publish_stream', $fbuid);
if ($result != 1) {
$result = $facebook->api_client->
users_hasAppPermission('status_update', $fbuid);
}
if ($result != 1) {
$user = $flink->getUser();
$msg = "Not sending notice $notice->id to Facebook " .
"because user $user->nickname hasn't given the " .
'Facebook app \'status_update\' permission.';
'Facebook app \'status_update\' or \'publish_stream\' permission.';
common_debug($msg);
$success = false;
}
@ -138,7 +142,56 @@ function facebookBroadcastNotice($notice)
// Okay, we're good to go, update the FB status
try {
$facebook->api_client->users_setStatus($status, $fbuid, false, true);
$result = $facebook->api_client->
users_hasAppPermission('publish_stream', $fbuid);
if($result == 1){
// authorized to use the stream api, so use it
$fbattachment = null;
$attachments = $notice->attachments();
if($attachments){
$fbattachment=array();
$fbattachment['media']=array();
//facebook only supports one attachment per item
$attachment = $attachments[0];
$fbmedia=array();
if(strncmp($attachment->mimetype,'image/',strlen('image/'))==0){
$fbmedia['type']='image';
$fbmedia['src']=$attachment->url;
$fbmedia['href']=$attachment->url;
$fbattachment['media'][]=$fbmedia;
/* Video doesn't seem to work. The notice never makes it to facebook, and no error is reported.
}else if(strncmp($attachment->mimetype,'video/',strlen('image/'))==0 || $attachment->mimetype="application/ogg"){
$fbmedia['type']='video';
$fbmedia['video_src']=$attachment->url;
// http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29
// says that preview_img is required... but we have no value to put in it
// $fbmedia['preview_img']=$attachment->url;
if($attachment->title){
$fbmedia['video_title']=$attachment->title;
}
$fbmedia['video_type']=$attachment->mimetype;
$fbattachment['media'][]=$fbmedia;
*/
}else if($attachment->mimetype=='audio/mpeg'){
$fbmedia['type']='mp3';
$fbmedia['src']=$attachment->url;
$fbattachment['media'][]=$fbmedia;
}else if($attachment->mimetype=='application/x-shockwave-flash'){
$fbmedia['type']='flash';
// http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29
// says that imgsrc is required... but we have no value to put in it
// $fbmedia['imgsrc']='';
$fbmedia['swfsrc']=$attachment->url;
$fbattachment['media'][]=$fbmedia;
}else{
$fbattachment['name']=($attachment->title?$attachment->title:$attachment->url);
$fbattachment['href']=$attachment->url;
}
}
$facebook->api_client->stream_publish($status, $fbattachment, null, null, $fbuid);
}else{
$facebook->api_client->users_setStatus($status, $fbuid, false, true);
}
} catch(FacebookRestClientException $e) {
common_log(LOG_ERR, $e->getMessage());
common_log(LOG_ERR,
@ -150,7 +203,7 @@ function facebookBroadcastNotice($notice)
if ($code >= 200) {
// 200 The application does not have permission to operate on the passed in uid parameter.
// 250 Updating status requires the extended permission status_update.
// 250 Updating status requires the extended permission status_update or publish_stream.
// see: http://wiki.developers.facebook.com/index.php/Users.setStatus#Example_Return_XML
remove_facebook_app($flink);

View File

@ -266,7 +266,7 @@ class Router
$m->connect('api/statuses/:method/:argument',
array('action' => 'api',
'apiaction' => 'statuses'),
array('method' => '(user_timeline|friends_timeline|replies|mentions|show|destroy|friends|followers)'));
array('method' => '(|user_timeline|friends_timeline|replies|mentions|show|destroy|friends|followers)'));
// users
@ -394,6 +394,24 @@ class Router
array('action' => 'api',
'apiaction' => 'laconica'));
// Groups
$m->connect('api/laconica/groups/:method/:argument',
array('action' => 'api',
'apiaction' => 'groups'));
$m->connect('api/laconica/groups/:method',
array('action' => 'api',
'apiaction' => 'groups'));
// Tags
$m->connect('api/laconica/tags/:method/:argument',
array('action' => 'api',
'apiaction' => 'tags'));
$m->connect('api/laconica/tags/:method',
array('action' => 'api',
'apiaction' => 'tags'));
// search
$m->connect('api/search.atom', array('action' => 'twitapisearchatom'));
$m->connect('api/search.json', array('action' => 'twitapisearchjson'));

View File

@ -229,6 +229,24 @@ class Rss10Action extends Action
}
}
// XXX: Surely there should be a common function to do this?
function extract_tags ($string)
{
$count = preg_match_all('/(?:^|\s)#([A-Za-z0-9_\-\.]{1,64})/', strtolower($string), $match);
if (!count)
{
return array();
}
$rv = array();
foreach ($match[1] as $tag)
{
$rv[] = common_canonical_tag($tag);
}
return array_unique($rv);
}
function showItem($notice)
{
$profile = Profile::staticGet($notice->profile_id);
@ -256,10 +274,46 @@ class Rss10Action extends Action
$attachments = $notice->attachments();
if($attachments){
foreach($attachments as $attachment){
$this->element('enc:enclosure', array('rdf:resource'=>$attachment->url,'enc:type'=>$attachment->mimetype,'enc:length'=>$attachment->size), null);
if ($attachment->isEnclosure()) {
// DO NOT move xmlns declaration to root element. Making it
// the default namespace here improves compatibility with
// real-world feed readers.
$attribs = array(
'rdf:resource' => $attachment->url,
'url' => $attachment->url,
'xmlns' => 'http://purl.oclc.org/net/rss_2.0/enc#'
);
if ($attachment->title) {
$attribs['dc:title'] = $attachment->title;
}
if ($attachment->modified) {
$attribs['dc:date'] = common_date_w3dtf($attachment->modified);
}
if ($attachment->size) {
$attribs['length'] = $attachment->size;
}
if ($attachment->mimetype) {
$attribs['type'] = $attachment->mimetype;
}
$this->element('enclosure', $attribs);
}
$this->element('sioc:links_to', array('rdf:resource'=>$attachment->url));
}
}
$tags = $this->extract_tags($notice->content);
if (!empty($tags)) {
foreach ($tags as $tag)
{
$tagpage = common_local_url('tag', array('tag' => $tag));
$tagrss = common_local_url('tagrss', array('tag' => $tag));
$this->elementStart('ctag:tagged');
$this->elementStart('ctag:Tag', array('rdf:about'=>$tagpage.'#concept', 'ctag:label'=>$tag));
$this->element('foaf:page', array('rdf:resource'=>$tagpage));
$this->element('rdfs:seeAlso', array('rdf:resource'=>$tagrss));
$this->elementEnd('ctag:Tag');
$this->elementEnd('ctag:tagged');
}
}
$this->elementEnd('item');
$this->creators[$creator_uri] = $profile;
}
@ -295,8 +349,8 @@ class Rss10Action extends Action
'http://creativecommons.org/ns#',
'xmlns:content' =>
'http://purl.org/rss/1.0/modules/content/',
'xmlns:enc' =>
'http://purl.oclc.org/net/rss_2.0/enc#',
'xmlns:ctag' =>
'http://commontag.org/ns#',
'xmlns:foaf' =>
'http://xmlns.com/foaf/0.1/',
'xmlns:sioc' =>

View File

@ -186,6 +186,21 @@ class TwitterapiAction extends Action
$twitter_status['favorited'] = false;
}
# Enclosures
$attachments = $notice->attachments();
$twitter_status['attachments']=array();
if($attachments){
foreach($attachments as $attachment){
if ($attachment->isEnclosure()) {
$enclosure=array();
$enclosure['url']=$attachment->url;
$enclosure['mimetype']=$attachment->mimetype;
$enclosure['size']=$attachment->size;
$twitter_status['attachments'][]=$enclosure;
}
}
}
if ($include_user) {
# Don't get notice (recursive!)
$twitter_user = $this->twitter_user_array($profile, false);
@ -218,11 +233,13 @@ class TwitterapiAction extends Action
if($attachments){
$entry['enclosures']=array();
foreach($attachments as $attachment){
$enclosure=array();
$enclosure['url']=$attachment->url;
$enclosure['mimetype']=$attachment->mimetype;
$enclosure['size']=$attachment->size;
$entry['enclosures'][]=$enclosure;
if ($attachment->isEnclosure()) {
$enclosure=array();
$enclosure['url']=$attachment->url;
$enclosure['mimetype']=$attachment->mimetype;
$enclosure['size']=$attachment->size;
$entry['enclosures'][]=$enclosure;
}
}
}
@ -774,6 +791,34 @@ class TwitterapiAction extends Action
}
}
function get_group($id, $apidata=null)
{
if (empty($id)) {
if (is_numeric($this->arg('id'))) {
return User_group::staticGet($this->arg('id'));
} else if ($this->arg('id')) {
$nickname = common_canonical_nickname($this->arg('id'));
return User_group::staticGet('nickname', $nickname);
} else if ($this->arg('group_id')) {
// This is to ensure that a non-numeric user_id still
// overrides screen_name even if it doesn't get used
if (is_numeric($this->arg('group_id'))) {
return User_group::staticGet('id', $this->arg('group_id'));
}
} else if ($this->arg('group_name')) {
$nickname = common_canonical_nickname($this->arg('group_name'));
return User_group::staticGet('nickname', $nickname);
}
} else if (is_numeric($id)) {
return User_group::staticGet($id);
} else {
$nickname = common_canonical_nickname($id);
return User_group::staticGet('nickname', $nickname);
}
}
function get_profile($id)
{
if (is_numeric($id)) {

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -3,29 +3,25 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2009-07-07 22:07+0000\n"
"Last-Translator: Tomas Kral <tomas.kral@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
"X-Generator: Pootle 1.1.0\n"
# jak přeložit stream?
#: ../actions/noticesearchrss.php:64 actions/noticesearchrss.php:68
#: actions/noticesearchrss.php:88
#, fuzzy, php-format
msgid " Search Stream for \"%s\""
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Hledej ve Streamu \"%s\"\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr " Hledej \"%s\" ve Streamu"
#: ../actions/finishopenidlogin.php:82 ../actions/register.php:191
#: actions/finishopenidlogin.php:88 actions/register.php:205
@ -33,12 +29,13 @@ msgstr ""
msgid ""
" except this private data: password, email address, IM address, phone number."
msgstr ""
"až na tyto privátní data: heslo, emailová adresa, IM adresa, telefonní číslo."
" až na tyto privátní data: heslo, emailová adresa, IM adresa, telefonní "
"číslo."
#: ../actions/showstream.php:400 ../lib/stream.php:109
#: actions/showstream.php:418 lib/mailbox.php:164 lib/stream.php:76
msgid " from "
msgstr ""
msgstr " od "
#: ../actions/twitapistatuses.php:478 actions/twitapistatuses.php:412
#: actions/twitapistatuses.php:347
@ -861,20 +858,14 @@ msgstr "Nahrávání obrázku selhalo."
#: actions/allrss.php:64 actions/all.php:75 actions/allrss.php:107
#, fuzzy, php-format
msgid "Feed for friends of %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Feed přítel uživatele: %s\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Feed přítel uživatele: %s"
#: ../actions/replies.php:65 ../actions/repliesrss.php:80
#: actions/replies.php:65 actions/repliesrss.php:66 actions/replies.php:134
#: actions/repliesrss.php:71
#, fuzzy, php-format
msgid "Feed for replies to %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Feed odpovědí na %s\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Feed odpovědí na %s"
#: ../actions/tag.php:55 actions/tag.php:55 actions/tag.php:61
#, php-format
@ -1581,10 +1572,7 @@ msgstr ""
#: actions/showstream.php:192
#, fuzzy, php-format
msgid "Notice feed for %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Feed sdělení pro %s\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Feed sdělení pro %s"
#: ../actions/shownotice.php:39 actions/shownotice.php:39
#: actions/shownotice.php:94
@ -1808,10 +1796,7 @@ msgstr "Neznámý profil"
#: ../actions/public.php:54 actions/public.php:54 actions/public.php:124
#, fuzzy
msgid "Public Stream Feed"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Veřejný Stream Feed\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Veřejný Stream Feed"
#: ../actions/public.php:33 actions/public.php:33 actions/public.php:109
#: lib/publicgroupnav.php:77
@ -1985,10 +1970,7 @@ msgstr "Hledat"
#: actions/noticesearch.php:127
#, fuzzy
msgid "Search Stream Feed"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Hledat ve Stream Feed\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Hledat ve Stream Feed"
#: ../actions/noticesearch.php:30 actions/noticesearch.php:30
#: actions/noticesearch.php:57
@ -3602,10 +3584,7 @@ msgstr ""
#: actions/facebookinvite.php:105
#, fuzzy, php-format
msgid "Invite your friends to use %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Feed přítel uživatele: %s\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Feed přítel uživatele: %s"
#: actions/facebookinvite.php:113
#, php-format
@ -4001,10 +3980,7 @@ msgstr ""
#: actions/publictagcloud.php:57
#, fuzzy
msgid "Public tag cloud"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Veřejný Stream Feed\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Veřejný Stream Feed"
#: actions/publictagcloud.php:63
#, php-format
@ -4115,10 +4091,7 @@ msgstr ""
#: actions/showgroup.php:323
#, fuzzy, php-format
msgid "Notice feed for %s group"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Feed sdělení pro %s\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "Feed sdělení pro %s"
#: actions/showgroup.php:357 lib/groupnav.php:90
#, fuzzy
@ -4682,12 +4655,12 @@ msgstr "%1 od teď naslouchá tvým sdělením v %2"
#: lib/mail.php:254
#, fuzzy, php-format
msgid "Location: %s\n"
msgstr "Umístění"
msgstr "Umístění %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
msgid "Homepage: %s\n"
msgstr "Moje stránky"
msgstr "Moje stránky: %s\n"
#: lib/mail.php:258
#, php-format

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-01-30 19:59+0000\n"
"Last-Translator: Paula Salazar <psalazar@cmet.net>\n"
"PO-Revision-Date: 2009-07-12 05:49+0000\n"
"Last-Translator: Jorge <xchido@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -45,10 +45,11 @@ msgstr "%1$s / Actualizaciones en respuesta a %2$s"
#: ../actions/invite.php:168 actions/invite.php:176 actions/invite.php:211
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s te ha invitado a unirte a ellos en %2$s"
msgstr "%1$s te ha invitado a que te unas con el/ellos en %2$s"
#: ../actions/invite.php:170
#, php-format
#, fuzzy
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
"\n"
@ -94,12 +95,13 @@ msgstr ""
"\n"
"%5$s\n"
"\n"
"Si quieres probar el servicio, cliquea el enlace debajo para aceptar la "
"invitación.\n"
"Si quieres inscribirte y probar el servicio, haz click en enlace debajo para "
"aceptar la invitación.\n"
"\n"
"%6$s\n"
"\n"
"Si no, puedes ignorar este mensaje. Gracias por tu paciencia y tiempo.\n"
"Si no deseas inscribirte puedes ignorar este mensaje. Gracias por tu "
"paciencia y tiempo.\n"
"\n"
"Sinceramente, %2$s\n"
@ -147,7 +149,7 @@ msgstr "%s (%s)"
#: actions/publicrss.php:90
#, php-format
msgid "%s Public Stream"
msgstr "Corriente pública de %s"
msgstr "Mensajes publicos de %s"
#: ../actions/all.php:47 ../actions/allrss.php:60
#: ../actions/twitapistatuses.php:238 ../lib/stream.php:51 actions/all.php:47
@ -4348,19 +4350,19 @@ msgid "These are the people who listen to "
msgstr "Estas son las personas que escuchan"
#: actions/subscribers.php:67
#, fuzzy, php-format
#, php-format
msgid "These are the people who "
msgstr "Estas son las personas que "
#: actions/subscriptions.php:52
#, fuzzy, php-format
#, php-format
msgid "%s subscriptions"
msgstr "Suscripciones %s"
#: actions/subscriptions.php:54
#, fuzzy, php-format
msgid "%s subscriptions, page %d"
msgstr "Suscripciones, página %d"
msgstr "%s suscripciones, página %d"
#: actions/subscriptions.php:65
#, fuzzy
@ -4393,9 +4395,8 @@ msgid "Not logged in"
msgstr "No conectado."
#: actions/tagother.php:39
#, fuzzy
msgid "No id argument."
msgstr "No existe argumento de Id."
msgstr "No existe argumento de ID."
#: actions/tagother.php:65
#, php-format
@ -4435,12 +4436,11 @@ msgstr ""
"Usar este formulario para agregar tags a tus suscriptores o suscripciones."
#: actions/tagrss.php:35
#, fuzzy
msgid "No such tag."
msgstr "No existe ese tag."
#: actions/tagrss.php:66
#, fuzzy, php-format
#, php-format
msgid "Microblog tagged with %s"
msgstr "Microblog marcado con %s"
@ -4466,7 +4466,6 @@ msgid "Twitter user name"
msgstr "Nombre de usuario de Twitter"
#: actions/twittersettings.php:126
#, fuzzy
msgid "Twitter password"
msgstr "Contraseña de Twitter"
@ -4494,9 +4493,8 @@ msgid "No profile id in request."
msgstr "Ningún perfil de Id en solicitud."
#: actions/unsubscribe.php:57
#, fuzzy
msgid "No profile with that id."
msgstr "Ninfún perfil con ese Id."
msgstr "Ningún perfil con ese ID."
#: actions/unsubscribe.php:71
#, fuzzy

Binary file not shown.

View File

@ -19,8 +19,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-03-07 19:21+0000\n"
"Last-Translator: Anarcat <anarcat@anarcat.ath.cx>\n"
"PO-Revision-Date: 2009-05-01 23:42+0000\n"
"Last-Translator: Nicolas Ritoux <niko@vulusu.ca>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -64,7 +64,7 @@ msgstr "%1$s / Réponses à %2$s"
#: actions/invite.php:211
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s vous invite à vous inscrire à %2$s"
msgstr "%1$s vous invite à vous inscrire sur %2$s"
#: ../actions/invite.php:170
#, php-format
@ -91,11 +91,16 @@ msgid ""
"\n"
"Sincerely, %2$s\n"
msgstr ""
"%1$s vous invite à vous inscrire à %2$s (%3$s).\n"
"%1$s vous invite à vous inscrire sur %2$s (%3$s).\n"
"\n"
"%2$s est un service de micro-blogging qui vous laisse garder contact avec des personnes que vous connaissez et des personnes qui vous intéressent.\n"
"%2$s est un service de micro-blogging qui vous permet de rester en contact "
"avec des personnes que vous connaissez et des personnes qui vous "
"intéressent.\n"
"\n"
"Vous pouvez aussi partager des nouvelles à propos de vous, vos pensées, ou votre vie en ligne avec les personnes qui vous connaissent. C'est également un outil utile pour rencontrer de nouvelles personnes qui partagent vos intérêts.\n"
"Vous pouvez aussi partager des informations sur vous, vos idées, ou votre "
"vie en ligne avec les personnes qui vous connaissent. C'est également un "
"outil utile pour rencontrer de nouvelles personnes qui partagent vos "
"intérêts.\n"
"\n"
"%1$s dit:\n"
"\n"
@ -105,11 +110,13 @@ msgstr ""
"\n"
"%5$s\n"
"\n"
"Si vous souhaitez essayez ce service, cliquez sur le lien si dessous pour accepter l'invitation\n"
"Si vous souhaitez essayez ce service, cliquez sur le lien ci-dessous pour "
"accepter l'invitation\n"
"\n"
"%6$s\n"
"\n"
"Sinon, vous pouvez ignorer ce message. Merci pour votre patience et votre temps.\n"
"Sinon, vous pouvez ignorer ce message. Merci pour votre patience et votre "
"temps.\n"
"\n"
"Cordialement, %2$s\n"
@ -280,12 +287,17 @@ msgstr "Un code de confirmation a été envoyé à votre adresse de messagerie i
#: ../actions/emailsettings.php:213
#: actions/emailsettings.php:231
msgid "A confirmation code was sent to the email address you added. Check your inbox (and spam box!) for the code and instructions on how to use it."
msgstr "Un code de confirmation a été envoyé à l'adresse courriel indiquée. Vérifiez votre boite de réception pour récupérer le code et les instructions."
msgstr ""
"Un code de confirmation a été envoyé à l'adresse courriel indiquée. Vérifiez "
"votre boîte de réception pour récupérer le code et les instructions."
#: ../actions/smssettings.php:216
#: actions/smssettings.php:224
msgid "A confirmation code was sent to the phone number you added. Check your inbox (and spam box!) for the code and instructions on how to use it."
msgstr "Un code de confirmation a été envoyé au numéro de téléphone indiqué. Vérifiez votre boite de réception pour récupérer le code et les instructions."
msgstr ""
"Un code de confirmation a été envoyé au numéro de téléphone indiqué. "
"Vérifiez votre boîte de réception pour récupérer le code et les "
"instructions."
#: ../actions/twitapiaccount.php:49
#: ../actions/twitapihelp.php:45
@ -2749,7 +2761,7 @@ msgstr ""
#: lib/util.php:346
#: lib/action.php:574
msgid "Source"
msgstr "Provenance"
msgstr "Source"
#: ../actions/showstream.php:296
#: actions/showstream.php:311

Binary file not shown.

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: laconica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-02-18 12:57+0000\n"
"PO-Revision-Date: 2009-06-04 14:09+0000\n"
"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"MIME-Version: 1.0\n"
@ -3555,7 +3555,7 @@ msgid "Failed to save block information."
msgstr "Salvataggio delle informazioni per il blocco non riuscito."
#: actions/confirmaddress.php:159
#, fuzzy, php-format
#, php-format
msgid "The address \"%s\" has been "
msgstr "L'indirizzo \"%s\" è stato "
@ -3624,12 +3624,10 @@ msgid "Awaiting confirmation on this address. "
msgstr "Attesa la conferma per questo indirizzo. "
#: actions/emailsettings.php:139 actions/smssettings.php:150
#, fuzzy
msgid "Make a new email address for posting to; "
msgstr "Crea un nuovo indirizzo email per inviare messaggi; "
#: actions/emailsettings.php:157
#, fuzzy
msgid "Send me email when someone "
msgstr "Inviami un'email quando qualcuno "
@ -4134,7 +4132,7 @@ msgstr "URL della tua pagina web, blog "
#: actions/register.php:404
#, fuzzy
msgid "Describe yourself and your "
msgstr "Descriviti assieme ai tuoi "
msgstr "Descrivi te e i tuoi "
#: actions/register.php:410
#, fuzzy
@ -4607,7 +4605,7 @@ msgstr "Blocca"
# è un suggerimento
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
msgstr "Togli questa nota dai preferiti"
msgstr "Togli questo messaggio dai preferiti"
#: lib/facebookaction.php:268
#, php-format

Binary file not shown.

View File

@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-01-26 15:04+0000\n"
"Last-Translator: JaeHo Choi <sayhi2choi@gmail.com>\n"
"PO-Revision-Date: 2009-05-19 00:01+0000\n"
"Last-Translator: Roberto A Tsuchiya <beto.tsuchiya@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -39,7 +39,7 @@ msgstr "個人情報を除く:パスワード、メールアドレス、IMアド
#: ../actions/showstream.php:400 ../lib/stream.php:109
#: actions/showstream.php:418 lib/mailbox.php:164 lib/stream.php:76
msgid " from "
msgstr ""
msgstr "から"
#: ../actions/twitapistatuses.php:478 actions/twitapistatuses.php:412
#: actions/twitapistatuses.php:347
@ -142,18 +142,18 @@ msgstr "%s & ともだち"
#: actions/twitapistatuses.php:33
#, php-format
msgid "%s public timeline"
msgstr ""
msgstr "%s パブリックタイムライン"
#: ../lib/mail.php:206 lib/mail.php:212 lib/mail.php:411
#, php-format
msgid "%s status"
msgstr ""
msgstr "%s ステータス"
#: ../actions/twitapistatuses.php:338 actions/twitapistatuses.php:265
#: actions/twitapistatuses.php:199
#, php-format
msgid "%s timeline"
msgstr ""
msgstr "%s タイムライン"
#: ../actions/twitapistatuses.php:52 actions/twitapistatuses.php:52
#: actions/twitapistatuses.php:36
@ -194,7 +194,7 @@ msgstr "164字以内で、小文字アルファベット、数字、スペー
#: ../actions/register.php:152 actions/register.php:166
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
msgstr ""
msgstr "164字以内で、小文字アルファベット、数字、スペース句読点を除くが必須です"
#: ../actions/password.php:42 actions/profilesettings.php:181
#: actions/passwordsettings.php:102
@ -209,7 +209,7 @@ msgstr "6文字以上。お忘れなく"
#: ../actions/register.php:154 actions/register.php:168
#: actions/register.php:373
msgid "6 or more characters. Required."
msgstr ""
msgstr "6文字以上が必須です。"
#: ../actions/imsettings.php:197 actions/imsettings.php:205
#, php-format
@ -304,7 +304,7 @@ msgstr "OpenIDを追加"
#: ../lib/settingsaction.php:97 lib/settingsaction.php:91
#: lib/accountsettingsaction.php:117
msgid "Add or remove OpenIDs"
msgstr ""
msgstr "OpenIDを追加または削除"
#: ../actions/emailsettings.php:38 ../actions/imsettings.php:39
#: ../actions/smssettings.php:39 actions/emailsettings.php:39
@ -420,7 +420,7 @@ msgstr "バイオグラフィが長すぎます。最長140字"
#: ../lib/deleteaction.php:41 lib/deleteaction.php:41 lib/deleteaction.php:69
msgid "Can't delete this notice."
msgstr ""
msgstr "この通知を削除できません。"
#: ../actions/updateprofile.php:119 actions/updateprofile.php:120
#: actions/updateprofile.php:123
@ -454,7 +454,7 @@ msgstr "その Jabbar ID を正規化できません"
#: ../actions/emailsettings.php:181 actions/emailsettings.php:199
#: actions/emailsettings.php:311
msgid "Cannot normalize that email address"
msgstr ""
msgstr "そのメールアドレスを正規化できません"
#: ../actions/password.php:45 actions/profilesettings.php:184
#: actions/passwordsettings.php:110
@ -464,7 +464,7 @@ msgstr "変更"
#: ../lib/settingsaction.php:88 lib/settingsaction.php:88
#: lib/accountsettingsaction.php:114
msgid "Change email handling"
msgstr ""
msgstr "メールの扱いを変更"
#: ../actions/password.php:32 actions/profilesettings.php:36
#: actions/passwordsettings.php:58
@ -473,12 +473,12 @@ msgstr "パスワードの変更"
#: ../lib/settingsaction.php:94 lib/accountsettingsaction.php:111
msgid "Change your password"
msgstr ""
msgstr "パスワードの変更"
#: ../lib/settingsaction.php:85 lib/settingsaction.php:85
#: lib/accountsettingsaction.php:105
msgid "Change your profile settings"
msgstr ""
msgstr "プロファイル設定の変更"
#: ../actions/password.php:43 ../actions/recoverpassword.php:181
#: ../actions/register.php:155 ../actions/smssettings.php:65
@ -505,7 +505,7 @@ msgstr "確認作業がキャンセルされました。"
#: ../actions/smssettings.php:63 actions/smssettings.php:63
#: actions/smssettings.php:118
msgid "Confirmation code"
msgstr ""
msgstr "確認コード"
#: ../actions/confirmaddress.php:38 actions/confirmaddress.php:38
#: actions/confirmaddress.php:80
@ -739,7 +739,7 @@ msgstr ""
#: ../actions/emailsettings.php:32 actions/emailsettings.php:32
#: actions/emailsettings.php:60
msgid "Email Settings"
msgstr ""
msgstr "メール設定"
#: ../actions/register.php:73 actions/register.php:80 actions/register.php:163
msgid "Email address already exists."
@ -756,7 +756,7 @@ msgstr ""
#: ../actions/invite.php:129 actions/invite.php:137 actions/invite.php:174
msgid "Email addresses"
msgstr ""
msgstr "メールアドレス"
#: ../actions/recoverpassword.php:191 actions/recoverpassword.php:197
#: actions/recoverpassword.php:231
@ -1011,7 +1011,7 @@ msgstr "不正なアバターURL '%s'"
#: ../actions/invite.php:55 actions/invite.php:62 actions/invite.php:70
#, php-format
msgid "Invalid email address: %s"
msgstr ""
msgstr "不正なメールアドレス:%s'"
#: ../actions/updateprofile.php:98 actions/updateprofile.php:99
#: actions/updateprofile.php:102
@ -4306,16 +4306,15 @@ msgstr "マイクロブログ by %s"
#: actions/twitapiblocks.php:47
msgid "Block user failed."
msgstr ""
msgstr "ユーザのブロックに失敗しました。"
#: actions/twitapiblocks.php:69
msgid "Unblock user failed."
msgstr ""
msgstr "ユーザのアンブロックに失敗しました。"
#: actions/twitapiusers.php:48
#, fuzzy
msgid "Not found."
msgstr "リクエストがありません!"
msgstr "見つかりません。"
#: actions/twittersettings.php:71
msgid "Add your Twitter account to automatically send "
@ -4326,52 +4325,47 @@ msgid "Twitter user name"
msgstr ""
#: actions/twittersettings.php:126
#, fuzzy
msgid "Twitter password"
msgstr "新しいパスワード"
msgstr "Twitterパスワード"
#: actions/twittersettings.php:228
msgid "Twitter Friends"
msgstr ""
msgstr "Twitterフレンド"
#: actions/twittersettings.php:327
msgid "Username must have only numbers, "
msgstr ""
#: actions/twittersettings.php:341
#, fuzzy, php-format
#, php-format
msgid "Unable to retrieve account information "
msgstr "メール承認を削除できません"
msgstr "アカウント情報を取得できません"
#: actions/unblock.php:108
#, fuzzy
msgid "Error removing the block."
msgstr "ユーザ保存エラー"
msgstr "ブロックの削除エラー"
#: actions/unsubscribe.php:50
#, fuzzy
msgid "No profile id in request."
msgstr "サーバから提供されるプロファイルURLはありません。"
msgstr "リクエスト内にプロファイルIDがありません。"
#: actions/unsubscribe.php:57
#, fuzzy
msgid "No profile with that id."
msgstr "リモートプロファイルと一致するものがありません"
msgstr "そのIDはプロファイルではありません。"
#: actions/unsubscribe.php:71
#, fuzzy
msgid "Unsubscribed"
msgstr "サブスクライブ中止"
msgstr "サブスクライブ解除済み"
#: actions/usergroups.php:63
#, php-format
msgid "%s groups"
msgstr ""
msgstr "%s グループ"
#: actions/usergroups.php:65
#, php-format
msgid "%s groups, page %d"
msgstr ""
msgstr "%s グループ, %d ページ"
#: classes/Notice.php:104
#, fuzzy
@ -4388,17 +4382,16 @@ msgid "You are banned from posting notices on this site."
msgstr ""
#: lib/accountsettingsaction.php:108
#, fuzzy
msgid "Upload an avatar"
msgstr "アバターの更新に失敗しました。"
msgstr "アバターのアップロード"
#: lib/accountsettingsaction.php:119
msgid "Other"
msgstr ""
msgstr "その他"
#: lib/accountsettingsaction.php:120
msgid "Other options"
msgstr ""
msgstr "その他のオプション"
#: lib/action.php:130
#, php-format
@ -4407,7 +4400,7 @@ msgstr ""
#: lib/action.php:145
msgid "Untitled page"
msgstr ""
msgstr "名称未設定ページ"
#: lib/action.php:316
msgid "Primary site navigation"
@ -4419,43 +4412,39 @@ msgstr ""
#: lib/action.php:325
msgid "Search for people or text"
msgstr ""
msgstr "人々かテキストを検索"
#: lib/action.php:328
#, fuzzy
msgid "Account"
msgstr "About"
msgstr "アカウント"
#: lib/action.php:328
msgid "Change your email, avatar, password, profile"
msgstr ""
msgstr "メールアドレス、アバター、パスワード、プロパティの変更"
#: lib/action.php:330
msgid "Connect to IM, SMS, Twitter"
msgstr ""
msgstr "IM、SMS、Twitterに接続"
#: lib/action.php:332
msgid "Logout from the site"
msgstr ""
msgstr "サイトからログアウト"
#: lib/action.php:335
msgid "Login to the site"
msgstr ""
msgstr "サイトへログイン"
#: lib/action.php:338
#, fuzzy
msgid "Create an account"
msgstr "アカウントを作成"
#: lib/action.php:341
#, fuzzy
msgid "Login with OpenID"
msgstr "そのようなOpenIDはありません。"
msgstr "OpenIDでログイン"
#: lib/action.php:344
#, fuzzy
msgid "Help me!"
msgstr "ヘルプ"
msgstr "助けて!"
#: lib/action.php:362
#, fuzzy
@ -4486,16 +4475,15 @@ msgstr ""
#: lib/action.php:635
msgid "license."
msgstr ""
msgstr "ライセンス。"
#: lib/blockform.php:123 lib/blockform.php:153
#, fuzzy
msgid "Block this user"
msgstr "そのようなユーザはいません。"
msgstr "このユーザをブロックする"
#: lib/blockform.php:153
msgid "Block"
msgstr ""
msgstr "ブロック"
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
@ -4507,27 +4495,24 @@ msgid "To use the %s Facebook Application you need to login "
msgstr ""
#: lib/facebookaction.php:271
#, fuzzy
msgid " a new account."
msgstr "アカウントを作成"
msgstr "新しいアカウント"
#: lib/facebookaction.php:557 lib/mailbox.php:214 lib/noticelist.php:354
#, fuzzy
msgid "Published"
msgstr "パブリック"
msgstr "発行済"
#: lib/favorform.php:114 lib/favorform.php:140
#, fuzzy
msgid "Favor this notice"
msgstr "そのような通知はありません。"
msgstr "この通知をお気に入りにする"
#: lib/feedlist.php:64
msgid "Export data"
msgstr ""
msgstr "データのエクスポート"
#: lib/galleryaction.php:121
msgid "Filter tags"
msgstr ""
msgstr "タグのフィルター"
#: lib/galleryaction.php:131
msgid "All"
@ -4535,7 +4520,7 @@ msgstr ""
#: lib/galleryaction.php:137
msgid "Tag"
msgstr ""
msgstr "タグ"
#: lib/galleryaction.php:138
msgid "Choose a tag to narrow list"
@ -4543,22 +4528,19 @@ msgstr ""
#: lib/galleryaction.php:139
msgid "Go"
msgstr ""
msgstr "移動"
#: lib/groupeditform.php:148
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
msgstr "ホームページ、ブログ、プロファイル、その他サイトの URL"
msgstr "グループやトピックのホームページやブログの URL"
#: lib/groupeditform.php:151
#, fuzzy
msgid "Description"
msgstr "サブスクリプション"
msgstr "概要"
#: lib/groupeditform.php:153
#, fuzzy
msgid "Describe the group or topic in 140 chars"
msgstr "140字以内で自己紹介"
msgstr "グループやトピックを140字以内記述"
#: lib/groupeditform.php:158
#, fuzzy
@ -4568,39 +4550,38 @@ msgstr "いる場所, 例えば \"City, State (or Region), Country\""
#: lib/groupnav.php:84 lib/searchgroupnav.php:84
msgid "Group"
msgstr ""
msgstr "グループ"
#: lib/groupnav.php:100
msgid "Admin"
msgstr ""
msgstr "管理者"
#: lib/groupnav.php:101
#, php-format
msgid "Edit %s group properties"
msgstr ""
msgstr "%s グループプロパティを編集"
#: lib/groupnav.php:106
#, fuzzy
msgid "Logo"
msgstr "ログアウト"
msgstr "ロ"
#: lib/groupnav.php:107
#, php-format
msgid "Add or edit %s logo"
msgstr ""
msgstr "%s ロゴの追加や編集"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
msgstr ""
msgstr "メンバー数が多いグループ"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
msgstr ""
msgstr "投稿が多いグループ"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
msgstr ""
msgstr "%s グループの通知にあるタグ"
#: lib/htmloutputter.php:104
#, fuzzy
@ -4608,28 +4589,24 @@ msgid "This page is not available in a "
msgstr "このページはあなたが承認したメディアタイプでは利用できません。"
#: lib/joinform.php:114
#, fuzzy
msgid "Join"
msgstr "ログイン"
msgstr "参加"
#: lib/leaveform.php:114
#, fuzzy
msgid "Leave"
msgstr "保存"
msgstr "離れる"
#: lib/logingroupnav.php:76
#, fuzzy
msgid "Login with a username and password"
msgstr "不正なユーザ名またはパスワード。"
msgstr "ユーザ名とパスワードでログイン"
#: lib/logingroupnav.php:79
#, fuzzy
msgid "Sign up for a new account"
msgstr "アカウントを作成"
msgstr "新しいアカウントでサインアップ"
#: lib/logingroupnav.php:82
msgid "Login or register with OpenID"
msgstr ""
msgstr "OpenIDでログインまたは登録"
#: lib/mail.php:175
#, php-format
@ -4644,14 +4621,14 @@ msgid "%1$s is now listening to "
msgstr "%1$s は %2$s であなたの通知を聞いています。"
#: lib/mail.php:254
#, fuzzy, php-format
#, php-format
msgid "Location: %s\n"
msgstr "場所"
msgstr "場所: %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
#, php-format
msgid "Homepage: %s\n"
msgstr "ホームページ"
msgstr "ホームページ: %s\n"
#: lib/mail.php:258
#, php-format
@ -4663,7 +4640,7 @@ msgstr ""
#: lib/mail.php:461
#, php-format
msgid "You've been nudged by %s"
msgstr ""
msgstr "あなたは %s に突かれています"
#: lib/mail.php:465
#, php-format
@ -4681,17 +4658,15 @@ msgstr ""
#: lib/messageform.php:110
msgid "Send a direct notice"
msgstr ""
msgstr "直接通知を送る"
#: lib/noticeform.php:125
#, fuzzy
msgid "Send a notice"
msgstr "新しい通知"
msgstr "通知を送る"
#: lib/noticeform.php:152
#, fuzzy
msgid "Available characters"
msgstr "6文字以上"
msgstr "利用可能な文字"
#: lib/noticelist.php:426
#, fuzzy
@ -4700,32 +4675,31 @@ msgstr "...に対しての返信"
#: lib/noticelist.php:447 lib/noticelist.php:450
msgid "Reply to this notice"
msgstr ""
msgstr "この通知へ返信"
#: lib/noticelist.php:451
#, fuzzy
msgid "Reply"
msgstr "返信"
#: lib/noticelist.php:471 lib/noticelist.php:474
msgid "Delete this notice"
msgstr ""
msgstr "この通知を削除"
#: lib/noticelist.php:474
msgid "Delete"
msgstr ""
msgstr "削除"
#: lib/nudgeform.php:116
msgid "Nudge this user"
msgstr ""
msgstr "このユーザを突く"
#: lib/nudgeform.php:128
msgid "Nudge"
msgstr ""
msgstr "突く"
#: lib/nudgeform.php:128
msgid "Send a nudge to this user"
msgstr ""
msgstr "このユーザへ突きを送る"
#: lib/personaltagcloudsection.php:56
#, php-format
@ -4734,7 +4708,7 @@ msgstr ""
#: lib/profilelist.php:182
msgid "(none)"
msgstr ""
msgstr "(なし)"
#: lib/publicgroupnav.php:76
msgid "Public"
@ -4742,33 +4716,31 @@ msgstr "パブリック"
#: lib/publicgroupnav.php:80
msgid "User groups"
msgstr ""
msgstr "ユーザグループ"
#: lib/publicgroupnav.php:82 lib/publicgroupnav.php:83
msgid "Recent tags"
msgstr ""
msgstr "最近のタグ"
#: lib/publicgroupnav.php:86
msgid "Featured"
msgstr ""
#: lib/publicgroupnav.php:90
#, fuzzy
msgid "Popular"
msgstr "ピープルサーチ"
msgstr "人気"
#: lib/searchgroupnav.php:82
#, fuzzy
msgid "Notice"
msgstr "通知"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
msgstr ""
msgstr "このサイト上のグループを検索する"
#: lib/section.php:89
msgid "Untitled section"
msgstr ""
msgstr "名称未設定のセクション"
#: lib/subgroupnav.php:81
#, fuzzy, php-format
@ -4806,20 +4778,19 @@ msgstr ""
#: lib/topposterssection.php:74
msgid "Top posters"
msgstr ""
msgstr "上位投稿者"
#: lib/unblockform.php:120 lib/unblockform.php:150
#, fuzzy
msgid "Unblock this user"
msgstr "そのようなユーザはいません。"
msgstr "このユーザをアンブロックする"
#: lib/unblockform.php:150
msgid "Unblock"
msgstr ""
msgstr "アンブロック"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
msgstr ""
msgstr "このユーザからのサブスクライブを解除する"
#, fuzzy
#~ msgid "Delete my account"

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-02-07 22:33+0000\n"
"Last-Translator: Jimmy Volatile <spam@useful.no>\n"
"PO-Revision-Date: 2009-04-09 22:44+0000\n"
"Last-Translator: Charlie Ball <staselig@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -82,7 +82,7 @@ msgstr ""
#: ../lib/mail.php:124 lib/mail.php:124 lib/mail.php:126 lib/mail.php:241
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr ""
msgstr "%1$s lytter nå til dine notiser på %2$s."
#: ../lib/mail.php:126
#, php-format
@ -94,6 +94,12 @@ msgid ""
"Faithfully yours,\n"
"%4$s.\n"
msgstr ""
"%1$s lytter nå til dine notiser på %2$s.\n"
"\n"
"\t%3$s\n"
"\n"
"Mvh,\n"
"%4$s.\n"
#: ../actions/twitapistatuses.php:482 actions/twitapistatuses.php:415
#: actions/twitapistatuses.php:350
@ -105,19 +111,19 @@ msgstr ""
#: actions/shownotice.php:161
#, php-format
msgid "%1$s's status on %2$s"
msgstr ""
msgstr "%1$s sin status på %2$s"
#: ../actions/invite.php:84 ../actions/invite.php:92 actions/invite.php:91
#: actions/invite.php:99 actions/invite.php:123 actions/invite.php:131
#, php-format
msgid "%s (%s)"
msgstr ""
msgstr "%s (%s)"
#: ../actions/publicrss.php:62 actions/publicrss.php:48
#: actions/publicrss.php:90
#, php-format
msgid "%s Public Stream"
msgstr ""
msgstr "%s Offentlig Strøm"
#: ../actions/all.php:47 ../actions/allrss.php:60
#: ../actions/twitapistatuses.php:238 ../lib/stream.php:51 actions/all.php:47
@ -132,7 +138,7 @@ msgstr "%s og venner"
#: actions/twitapistatuses.php:33
#, php-format
msgid "%s public timeline"
msgstr ""
msgstr "%s sin offentlige tidslinje"
#: ../lib/mail.php:206 lib/mail.php:212 lib/mail.php:411
#, php-format
@ -143,13 +149,13 @@ msgstr "%s status"
#: actions/twitapistatuses.php:199
#, php-format
msgid "%s timeline"
msgstr ""
msgstr "%s tidslinje"
#: ../actions/twitapistatuses.php:52 actions/twitapistatuses.php:52
#: actions/twitapistatuses.php:36
#, php-format
msgid "%s updates from everyone!"
msgstr "%s oppdatering fra alle!"
msgstr "%s oppdateringer fra alle!"
#: ../actions/register.php:213
msgid ""
@ -165,15 +171,17 @@ msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
"**%%site.name%%** er en mikroblogging-tjeneste av "
"[%%site.broughtby%%](%%site.broughtbyurl%%). "
#: ../lib/util.php:259 lib/util.php:275 lib/action.php:607
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
msgstr "**%%site.name%%** er en mikroblogging-tjeneste. "
#: ../lib/util.php:274 lib/util.php:290
msgid ". Contributors should be attributed by full name or nickname."
msgstr ""
msgstr ". Bidragsytere burde være etterfulgt av fullt navn eller brukernavn."
#: ../actions/finishopenidlogin.php:73 ../actions/profilesettings.php:43
#: actions/finishopenidlogin.php:79 actions/profilesettings.php:76
@ -181,10 +189,14 @@ msgstr ""
#: lib/groupeditform.php:139
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
"1-64 småbokstaver eller nummer, ingen punktum eller mellomrom (ei heller æøå "
"og lign.)"
#: ../actions/register.php:152 actions/register.php:166
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
msgstr ""
"1-64 småbokstaver eller nummer, ingen punktum eller mellomrom (ei heller æøå "
"og lign.) Påkrevd."
#: ../actions/password.php:42 actions/profilesettings.php:181
#: actions/passwordsettings.php:102
@ -194,7 +206,7 @@ msgstr "6 eller flere tegn"
#: ../actions/recoverpassword.php:180 actions/recoverpassword.php:186
#: actions/recoverpassword.php:220
msgid "6 or more characters, and don't forget it!"
msgstr "6 eller flere tegn. Og ikke glem det, nå!"
msgstr "6 eller flere tegn. Og ikke glem det!"
#: ../actions/register.php:154 actions/register.php:168
#: actions/register.php:373
@ -207,12 +219,16 @@ msgid ""
"A confirmation code was sent to the IM address you added. You must approve %"
"s for sending messages to you."
msgstr ""
"En bekreftelseskode ble sendt til lynmeldingsadressen du la til. Du må "
"godkjenne %s for å sende meldinger til deg."
#: ../actions/emailsettings.php:213 actions/emailsettings.php:231
msgid ""
"A confirmation code was sent to the email address you added. Check your "
"inbox (and spam box!) for the code and instructions on how to use it."
msgstr ""
"En bekreftelseskode ble sendt til lynmeldingsadressen du la til. Sjekk "
"innboksen din (og søppel-posten!) for koden, og hvordan du skal bruke den."
#: ../actions/smssettings.php:216 actions/smssettings.php:224
msgid ""
@ -240,7 +256,7 @@ msgstr ""
#: actions/twitapistatuses.php:402 actions/twitapistatuses.php:429
#: actions/twitapiusers.php:32
msgid "API method not found!"
msgstr ""
msgstr "API-metode ikke funnet!"
#: ../actions/twitapiaccount.php:57 ../actions/twitapiaccount.php:113
#: ../actions/twitapiaccount.php:119 ../actions/twitapiblocks.php:28
@ -263,7 +279,7 @@ msgstr ""
#: actions/twitapinotifications.php:31 actions/twitapinotifications.php:37
#: actions/twitapistatuses.php:562
msgid "API method under construction."
msgstr ""
msgstr "API-metode under utvikling."
#: ../lib/util.php:324 lib/util.php:340 lib/action.php:568
msgid "About"
@ -292,7 +308,7 @@ msgstr "Legg til OpenID"
#: ../lib/settingsaction.php:97 lib/settingsaction.php:91
#: lib/accountsettingsaction.php:117
msgid "Add or remove OpenIDs"
msgstr ""
msgstr "Legg til eller slett OpenID"
#: ../actions/emailsettings.php:38 ../actions/imsettings.php:39
#: ../actions/smssettings.php:39 actions/emailsettings.php:39
@ -304,7 +320,7 @@ msgstr "Adresse"
#: ../actions/invite.php:131 actions/invite.php:139 actions/invite.php:176
msgid "Addresses of friends to invite (one per line)"
msgstr ""
msgstr "Adresser til venner som skal inviteres (én per linje)"
#: ../actions/showstream.php:273 actions/showstream.php:288
#: actions/showstream.php:422
@ -321,7 +337,7 @@ msgstr "Alle oppdateringer for %s"
#: actions/noticesearchrss.php:90
#, php-format
msgid "All updates matching search term \"%s\""
msgstr ""
msgstr "Alle oppdateringer som passer søket: \"%s\""
#: ../actions/finishopenidlogin.php:29 ../actions/login.php:31
#: ../actions/openidlogin.php:29 ../actions/register.php:30
@ -330,16 +346,16 @@ msgstr ""
#: actions/finishopenidlogin.php:34 actions/login.php:77
#: actions/openidlogin.php:30 actions/register.php:92
msgid "Already logged in."
msgstr "Allerede logget inn."
msgstr "Allerede innlogget."
#: ../lib/subs.php:42 lib/subs.php:42 lib/subs.php:49
msgid "Already subscribed!."
msgstr ""
msgstr "Allerede abonnert!"
#: ../actions/deletenotice.php:54 actions/deletenotice.php:55
#: actions/deletenotice.php:113
msgid "Are you sure you want to delete this notice?"
msgstr ""
msgstr "Er du sikker på at du vil slette denne notisen?"
#: ../actions/userauthorization.php:77 actions/userauthorization.php:83
#: actions/userauthorization.php:81
@ -355,18 +371,18 @@ msgstr ""
#: ../actions/profilesettings.php:65 actions/profilesettings.php:98
msgid ""
"Automatically subscribe to whoever subscribes to me (best for non-humans)"
msgstr "Abonner "
msgstr "Abonner automatisk på de som abonnerer på meg (best for ikke-mennesker)"
#: ../actions/avatar.php:32 ../lib/settingsaction.php:90
#: actions/profilesettings.php:34 actions/avatarsettings.php:65
#: actions/showgroup.php:209 lib/accountsettingsaction.php:107
msgid "Avatar"
msgstr "Avatar"
msgstr "Brukerbilde"
#: ../actions/avatar.php:113 actions/profilesettings.php:350
#: actions/avatarsettings.php:395
msgid "Avatar updated."
msgstr "Avataren har blitt oppdatert."
msgstr "Brukerbildet har blitt oppdatert."
#: ../actions/imsettings.php:55 actions/imsettings.php:56
#, php-format
@ -380,6 +396,8 @@ msgid ""
"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
"a message with further instructions."
msgstr ""
"Venter på bekreftelse av adressen. Sjekk innboksen din (og søppel-post!) for "
"melding med videre veiledning."
#: ../actions/smssettings.php:58 actions/smssettings.php:58
#: actions/smssettings.php:111
@ -403,17 +421,17 @@ msgstr "Bio"
#: actions/profilesettings.php:205 actions/register.php:174
#: actions/updateprofile.php:107
msgid "Bio is too long (max 140 chars)."
msgstr "Bioen er for lang (max 140 tegn)"
msgstr "Bioen er for lang (maks 140 tegn)."
#: ../lib/deleteaction.php:41 lib/deleteaction.php:41 lib/deleteaction.php:69
msgid "Can't delete this notice."
msgstr ""
msgstr "Kan ikke slette notisen."
#: ../actions/updateprofile.php:119 actions/updateprofile.php:120
#: actions/updateprofile.php:123
#, php-format
msgid "Can't read avatar URL '%s'"
msgstr ""
msgstr "Kan ikke lese brukerbilde URL '%s'"
#: ../actions/password.php:85 ../actions/recoverpassword.php:300
#: actions/profilesettings.php:404 actions/recoverpassword.php:313
@ -441,7 +459,7 @@ msgstr ""
#: ../actions/emailsettings.php:181 actions/emailsettings.php:199
#: actions/emailsettings.php:311
msgid "Cannot normalize that email address"
msgstr ""
msgstr "Kan ikke normalisere den e-postadressen"
#: ../actions/password.php:45 actions/profilesettings.php:184
#: actions/passwordsettings.php:110
@ -451,7 +469,7 @@ msgstr "Endre"
#: ../lib/settingsaction.php:88 lib/settingsaction.php:88
#: lib/accountsettingsaction.php:114
msgid "Change email handling"
msgstr ""
msgstr "Endre e-post håndtering"
#: ../actions/password.php:32 actions/profilesettings.php:36
#: actions/passwordsettings.php:58
@ -460,12 +478,12 @@ msgstr "Endre passord"
#: ../lib/settingsaction.php:94 lib/accountsettingsaction.php:111
msgid "Change your password"
msgstr ""
msgstr "Endre passordet ditt"
#: ../lib/settingsaction.php:85 lib/settingsaction.php:85
#: lib/accountsettingsaction.php:105
msgid "Change your profile settings"
msgstr ""
msgstr "Endre profil instillingene dine"
#: ../actions/password.php:43 ../actions/recoverpassword.php:181
#: ../actions/register.php:155 ../actions/smssettings.php:65
@ -497,7 +515,7 @@ msgstr "Bekreftelseskode"
#: ../actions/confirmaddress.php:38 actions/confirmaddress.php:38
#: actions/confirmaddress.php:80
msgid "Confirmation code not found."
msgstr ""
msgstr "Bekreftelseskode ikke funnet."
#: ../actions/register.php:202
#, php-format
@ -517,6 +535,19 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
"Gratulerer, %s! Og velkommen til %%%%site.name%%%%. Herfra vil du kanskje...\n"
"\n"
"* Gå til [din profil](%s) og sende din første notis.\n"
"* Legge til en [Jabber/GTalk addresse](%%%%action.imsettings%%%%) så du kan "
"sende notiser fra lynmeldinger.\n"
"* [Søke etter brukere](%%%%action.peoplesearch%%%%) that you may know or "
"that share your interests. \n"
"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
"others more about you. \n"
"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
"missed. \n"
"\n"
"Thanks for signing up and we hope you enjoy using this service."
#: ../actions/finishopenidlogin.php:91 actions/finishopenidlogin.php:97
#: actions/finishopenidlogin.php:119 lib/action.php:330
@ -526,7 +557,7 @@ msgstr "Koble til"
#: ../actions/finishopenidlogin.php:86 actions/finishopenidlogin.php:92
#: actions/finishopenidlogin.php:114
msgid "Connect existing account"
msgstr ""
msgstr "Koble til eksisterende konto"
#: ../lib/util.php:332 lib/util.php:348 lib/action.php:576
msgid "Contact"
@ -557,7 +588,7 @@ msgstr ""
#: ../actions/updateprofile.php:162 actions/updateprofile.php:163
#: actions/updateprofile.php:166
msgid "Could not save avatar info"
msgstr "Klarte ikke å lagre avatar-informasjonen"
msgstr "Klarte ikke å lagre brukerbilde-informasjonen"
#: ../actions/updateprofile.php:155 actions/updateprofile.php:156
#: actions/updateprofile.php:159
@ -575,7 +606,7 @@ msgstr ""
#: ../actions/recoverpassword.php:102 actions/recoverpassword.php:105
#: actions/recoverpassword.php:111
msgid "Could not update user with confirmed email address."
msgstr ""
msgstr "Klarte ikke å oppdatere bruker med bekreftet e-post."
#: ../actions/finishremotesubscribe.php:99
#: actions/finishremotesubscribe.php:101 actions/finishremotesubscribe.php:114
@ -654,7 +685,7 @@ msgstr "Klarte ikke å oppdatere bruker."
#: ../actions/finishopenidlogin.php:84 actions/finishopenidlogin.php:90
#: actions/finishopenidlogin.php:112
msgid "Create"
msgstr ""
msgstr "Opprett"
#: ../actions/finishopenidlogin.php:70 actions/finishopenidlogin.php:76
#: actions/finishopenidlogin.php:98
@ -1603,18 +1634,12 @@ msgstr ""
msgid "OpenID URL"
msgstr "OpenID-URL"
# -#-#-#-
# laconica.po#-#-#-#-
# eller autentifikasjon?
#: ../actions/finishaddopenid.php:42 ../actions/finishopenidlogin.php:103
#: actions/finishaddopenid.php:42 actions/finishopenidlogin.php:109
#: actions/finishaddopenid.php:88 actions/finishopenidlogin.php:130
#, fuzzy
msgid "OpenID authentication cancelled."
msgstr ""
"#-#-#-#-# laconica.po #-#-#-#-#\n"
"OpenID-autentifisering avbrutt.\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "OpenID-autentifisering avbrutt."
#: ../actions/finishaddopenid.php:46 ../actions/finishopenidlogin.php:107
#: actions/finishaddopenid.php:46 actions/finishopenidlogin.php:113
@ -4565,7 +4590,7 @@ msgstr ""
#: lib/mail.php:256
#, fuzzy, php-format
msgid "Homepage: %s\n"
msgstr "Hjemmesiden"
msgstr "Hjemmesiden: %s\n"
#: lib/mail.php:258
#, php-format

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -6,8 +6,8 @@ msgstr ""
"Project-Id-Version: Laconica 0.6.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-02-18 22:11+0000\n"
"Last-Translator: Tor Christian <tctovsli@gmail.com>\n"
"PO-Revision-Date: 2009-03-16 18:52+0000\n"
"Last-Translator: Simon Hansen <simonboba@gmail.com>\n"
"Language-Team: Norwegian/Nynorsk <i18n-nn@lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -100,7 +100,7 @@ msgstr ""
#: ../lib/mail.php:124 lib/mail.php:124 lib/mail.php:126 lib/mail.php:241
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s høyrar no på notisane dine på %2$s."
msgstr "%1$s høyrer no på notisane dine på %2$s."
#: ../lib/mail.php:126
#, php-format

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-02-02 03:45+0000\n"
"Last-Translator: Tiago Faria <gouki@goukihq.org>\n"
"PO-Revision-Date: 2009-05-28 14:56+0000\n"
"Last-Translator: Rui de Brito Mendes <rbritomendes@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -40,7 +40,7 @@ msgstr "de"
#: actions/twitapistatuses.php:347
#, php-format
msgid "%1$s / Updates replying to %2$s"
msgstr "%1$s / Actualizações respondendo a %2$s"
msgstr "%1$s / Actualizações em resposta a %2$s"
#: ../actions/invite.php:168 actions/invite.php:176 actions/invite.php:211
#, php-format
@ -79,11 +79,11 @@ msgid ""
msgstr ""
"%1$s convidou-o a juntar-se a ele no %2$s (%3$s).\n"
"\n"
"%2$s é um serviço de micro-blogging que lhe permite deixar actualizado "
"pessoas que conheço e que lhe interessam.\n"
"%2$s é um serviço de micro-blogging que o deixa actualizado com pessoas que "
"conhece e que lhe interessam.\n"
"\n"
"Também pode partilhar notícias suas, pensamentos or a sua vida online com "
"pessoas que conheça. É também ideal para conhecer pessoas com interesses "
"Também pode partilhar notícias suas, pensamentos, ou a sua vida online com "
"pessoas que o conheça. É também ideal para conhecer pessoas com interesses "
"semelhantes aos seus.\n"
"\n"
"%1$s disse:\n"
@ -187,7 +187,7 @@ msgid ""
"to confirm your email address.)"
msgstr ""
"(Deverá receber uma mensagem por email dentro de momentos, com instrucções "
"como confirmar o seu endereço de email.)"
"sobre como confirmar o seu endereço de email.)"
#: ../lib/util.php:257 lib/util.php:273 lib/action.php:605
#, php-format
@ -212,7 +212,7 @@ msgstr ". Os colaboradores devem ser citados usando nome completo ou apelido."
#: actions/finishopenidlogin.php:101 actions/profilesettings.php:100
#: lib/groupeditform.php:139
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 letras ou números, sem pontuação ou espaços"
msgstr "1-64 letras minúsculas ou números, sem pontuação ou espaços"
#: ../actions/register.php:152 actions/register.php:166
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@ -248,8 +248,8 @@ msgid ""
"inbox (and spam box!) for the code and instructions on how to use it."
msgstr ""
"Um código de confirmação foi enviado para o endereço de email fornecido. "
"Procure na sua 'Caixa de Entrada' (e caixa de spam) a mensagem com o código "
"e instrucções."
"Procure na sua 'Caixa de Entrada' (e caixa de spam) pelo email com o código "
"e instrucções de utilização."
#: ../actions/smssettings.php:216 actions/smssettings.php:224
msgid ""
@ -459,13 +459,13 @@ msgstr "Não é possível remover a mensagem."
#: actions/updateprofile.php:123
#, php-format
msgid "Can't read avatar URL '%s'"
msgstr "Não é possível ler o avatar URL '%s'"
msgstr "Não é possível ler o URL do avatar '%s'"
#: ../actions/password.php:85 ../actions/recoverpassword.php:300
#: actions/profilesettings.php:404 actions/recoverpassword.php:313
#: actions/passwordsettings.php:169 actions/recoverpassword.php:347
msgid "Can't save new password."
msgstr "Não é possível salvar a nova password."
msgstr "Não é possível guardar a nova password."
#: ../actions/emailsettings.php:57 ../actions/imsettings.php:58
#: ../actions/smssettings.php:62 actions/emailsettings.php:58
@ -497,7 +497,7 @@ msgstr "Modificar"
#: ../lib/settingsaction.php:88 lib/settingsaction.php:88
#: lib/accountsettingsaction.php:114
msgid "Change email handling"
msgstr ""
msgstr "Alterar email handling"
#: ../actions/password.php:32 actions/profilesettings.php:36
#: actions/passwordsettings.php:58
@ -563,6 +563,19 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
"Parabéns, %s! Bemvindo ao %%%%site.name%%%%. A partir de agora deverá...\n"
"\n"
"* Ir ao [seu perfil](%s) e enviar a primeira mensagem.\n"
"* Adicionar uma [Endereço Jabber/GTalk](%%%%action.imsettings%%%%) de forma "
"a poder enviar notações através de mensagens instantâneas.\n"
"* [Procurar por pessoas](%%%%action.peoplesearch%%%%) que conheça ou "
"partilhem os seus interesses. \n"
"* Actualizar o seu perfil [Opções de perfil](%%%%action.profilesettings%%%%) "
"para contar mais acerca de si aos outros. \n"
"* Ler os [documentos online](%%%%doc.help%%%%) para conhecer todas as "
"funcionalidades que tenha perdido. \n"
"\n"
"Obrigado por se registar e esperamos que se divirta usando este serviço."
#: ../actions/finishopenidlogin.php:91 actions/finishopenidlogin.php:97
#: actions/finishopenidlogin.php:119 lib/action.php:330
@ -581,38 +594,38 @@ msgstr "Contacto"
#: ../lib/openid.php:178 lib/openid.php:178 lib/openid.php:187
#, php-format
msgid "Could not create OpenID form: %s"
msgstr ""
msgstr "Não foi possível criar o formulário de OpenID: %s"
#: ../actions/twitapifriendships.php:60 ../actions/twitapifriendships.php:76
#: actions/twitapifriendships.php:60 actions/twitapifriendships.php:76
#: actions/twitapifriendships.php:48 actions/twitapifriendships.php:64
#, php-format
msgid "Could not follow user: %s is already on your list."
msgstr ""
msgstr "Não foi possível seguir utilizador: %s já está na sua lista."
#: ../actions/twitapifriendships.php:53 actions/twitapifriendships.php:53
#: actions/twitapifriendships.php:41
msgid "Could not follow user: User not found."
msgstr ""
msgstr "Não foi possível seguir utilizador: Utilizador não encontrado."
#: ../lib/openid.php:160 lib/openid.php:160 lib/openid.php:169
#, php-format
msgid "Could not redirect to server: %s"
msgstr ""
msgstr "Não foi possível redireccionar para o servidor: %s"
#: ../actions/updateprofile.php:162 actions/updateprofile.php:163
#: actions/updateprofile.php:166
msgid "Could not save avatar info"
msgstr ""
msgstr "Não foi possível guardar a info do avatar "
#: ../actions/updateprofile.php:155 actions/updateprofile.php:156
#: actions/updateprofile.php:159
msgid "Could not save new profile info"
msgstr ""
msgstr "Não foi possível guardar a nova info do perfil"
#: ../lib/subs.php:54 lib/subs.php:61 lib/subs.php:72
msgid "Could not subscribe other to you."
msgstr ""
msgstr "Não foi possível subscrever outros a si."
#: ../lib/subs.php:46 lib/subs.php:46 lib/subs.php:57
msgid "Could not subscribe."
@ -622,11 +635,12 @@ msgstr "Não foi possível subscrever. "
#: actions/recoverpassword.php:111
msgid "Could not update user with confirmed email address."
msgstr ""
"Não foi possivel actualizar utilizador com endereço de email confirmado."
#: ../actions/finishremotesubscribe.php:99
#: actions/finishremotesubscribe.php:101 actions/finishremotesubscribe.php:114
msgid "Couldn't convert request tokens to access tokens."
msgstr ""
msgstr "Não foi possível converter os tokens de requisição em tokens de acesso."
#: ../actions/confirmaddress.php:84 ../actions/emailsettings.php:234
#: ../actions/imsettings.php:218 ../actions/smssettings.php:241
@ -635,21 +649,21 @@ msgstr ""
#: actions/confirmaddress.php:126 actions/emailsettings.php:375
#: actions/imsettings.php:357 actions/smssettings.php:370
msgid "Couldn't delete email confirmation."
msgstr ""
msgstr "Não foi possível apagar a confirmação do email."
#: ../lib/subs.php:103 lib/subs.php:116 lib/subs.php:134
msgid "Couldn't delete subscription."
msgstr ""
msgstr "Não foi possível apagar a subscrição."
#: ../actions/twitapistatuses.php:93 actions/twitapistatuses.php:98
#: actions/twitapistatuses.php:84
msgid "Couldn't find any statuses."
msgstr ""
msgstr "Não foi possivel encontrar algum estado."
#: ../actions/remotesubscribe.php:127 actions/remotesubscribe.php:136
#: actions/remotesubscribe.php:178
msgid "Couldn't get a request token."
msgstr ""
msgstr "Não foi possível obter um token de requisição."
#: ../actions/emailsettings.php:205 ../actions/imsettings.php:187
#: ../actions/smssettings.php:206 actions/emailsettings.php:223
@ -657,12 +671,12 @@ msgstr ""
#: actions/emailsettings.php:337 actions/imsettings.php:311
#: actions/smssettings.php:325
msgid "Couldn't insert confirmation code."
msgstr ""
msgstr "Não foi possível inserir o código de confirmação."
#: ../actions/finishremotesubscribe.php:180
#: actions/finishremotesubscribe.php:182 actions/finishremotesubscribe.php:218
msgid "Couldn't insert new subscription."
msgstr ""
msgstr "Não foi possível inserir nova subscrição."
#: ../actions/profilesettings.php:184 ../actions/twitapiaccount.php:96
#: actions/profilesettings.php:299 actions/twitapiaccount.php:94
@ -673,13 +687,13 @@ msgstr "Não foi possível salvar o perfil."
#: ../actions/profilesettings.php:161 actions/profilesettings.php:276
#: actions/profilesettings.php:279
msgid "Couldn't update user for autosubscribe."
msgstr ""
msgstr "Não foi possível actualizar o utilizador para auto-subscrição."
#: ../actions/emailsettings.php:280 ../actions/emailsettings.php:294
#: actions/emailsettings.php:298 actions/emailsettings.php:312
#: actions/emailsettings.php:440 actions/emailsettings.php:462
msgid "Couldn't update user record."
msgstr ""
msgstr "Não foi possível actualizar o registo do utilizador."
#: ../actions/confirmaddress.php:72 ../actions/emailsettings.php:156
#: ../actions/emailsettings.php:259 ../actions/imsettings.php:138
@ -695,164 +709,164 @@ msgstr ""
#: actions/profilesettings.php:259 actions/smssettings.php:266
#: actions/smssettings.php:408
msgid "Couldn't update user."
msgstr ""
msgstr "Não foi possível actualizar o utilizador."
#: ../actions/finishopenidlogin.php:84 actions/finishopenidlogin.php:90
#: actions/finishopenidlogin.php:112
msgid "Create"
msgstr ""
msgstr "Criar"
#: ../actions/finishopenidlogin.php:70 actions/finishopenidlogin.php:76
#: actions/finishopenidlogin.php:98
msgid "Create a new user with this nickname."
msgstr ""
msgstr "Criar um novo utilizador com esta alcunha."
#: ../actions/finishopenidlogin.php:68 actions/finishopenidlogin.php:74
#: actions/finishopenidlogin.php:96
msgid "Create new account"
msgstr ""
msgstr "Criar nova conta"
#: ../actions/finishopenidlogin.php:191 actions/finishopenidlogin.php:197
#: actions/finishopenidlogin.php:231
msgid "Creating new account for OpenID that already has a user."
msgstr ""
msgstr "Criar nova conta para OpenID que já possui um utilizador."
#: ../actions/imsettings.php:45 actions/imsettings.php:46
#: actions/imsettings.php:100
msgid "Current confirmed Jabber/GTalk address."
msgstr ""
msgstr "Endereço do Jabber/GTalk já confirmado."
#: ../actions/smssettings.php:46 actions/smssettings.php:46
#: actions/smssettings.php:100
msgid "Current confirmed SMS-enabled phone number."
msgstr ""
msgstr "Número de telefone com serviço SMS activo já confirmado."
#: ../actions/emailsettings.php:44 actions/emailsettings.php:45
#: actions/emailsettings.php:99
msgid "Current confirmed email address."
msgstr ""
msgstr "Endereço de email já confirmado."
#: ../actions/showstream.php:356 actions/showstream.php:367
msgid "Currently"
msgstr ""
msgstr "Actualmente"
#: ../classes/Notice.php:72 classes/Notice.php:86 classes/Notice.php:91
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
msgstr "Ocorreu um erro na base de dados ao inserir a hashtag: %s"
#: ../lib/util.php:1061 lib/util.php:1110 classes/Notice.php:698
#, php-format
msgid "DB error inserting reply: %s"
msgstr ""
msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s"
#: ../actions/deletenotice.php:41 actions/deletenotice.php:41
#: actions/deletenotice.php:79
msgid "Delete notice"
msgstr ""
msgstr "Apagar mensagem"
#: ../actions/profilesettings.php:51 ../actions/register.php:172
#: actions/profilesettings.php:84 actions/register.php:186
#: actions/profilesettings.php:114
msgid "Describe yourself and your interests in 140 chars"
msgstr ""
msgstr "Descreva-se e aos seus interesses em 140 caracteres"
#: ../actions/register.php:158 ../actions/register.php:161
#: ../lib/settingsaction.php:87 actions/register.php:172
#: actions/register.php:175 lib/settingsaction.php:87 actions/register.php:381
#: actions/register.php:385 lib/accountsettingsaction.php:113
msgid "Email"
msgstr ""
msgstr "Email"
#: ../actions/emailsettings.php:59 actions/emailsettings.php:60
#: actions/emailsettings.php:115
msgid "Email Address"
msgstr ""
msgstr "Endereço de Email"
#: ../actions/emailsettings.php:32 actions/emailsettings.php:32
#: actions/emailsettings.php:60
msgid "Email Settings"
msgstr ""
msgstr "Definições do Email"
#: ../actions/register.php:73 actions/register.php:80 actions/register.php:163
msgid "Email address already exists."
msgstr ""
msgstr "Endereço de Email já existe."
#: ../lib/mail.php:90 lib/mail.php:90 lib/mail.php:173
msgid "Email address confirmation"
msgstr ""
msgstr "Confirmação do Endereço de Email"
#: ../actions/emailsettings.php:61 actions/emailsettings.php:62
#: actions/emailsettings.php:117
msgid "Email address, like \"UserName@example.org\""
msgstr ""
msgstr "Endereço de Email, como \"nomedeutilizador@exemplo.org\""
#: ../actions/invite.php:129 actions/invite.php:137 actions/invite.php:174
msgid "Email addresses"
msgstr ""
msgstr "Endereços de Email"
#: ../actions/recoverpassword.php:191 actions/recoverpassword.php:197
#: actions/recoverpassword.php:231
msgid "Enter a nickname or email address."
msgstr ""
msgstr "Introduza uma alcunha ou um endereço de email"
#: ../actions/smssettings.php:64 actions/smssettings.php:64
#: actions/smssettings.php:119
msgid "Enter the code you received on your phone."
msgstr ""
msgstr "Introduza o código que recebeu no seu telefone."
#: ../actions/userauthorization.php:137 actions/userauthorization.php:144
#: actions/userauthorization.php:161
msgid "Error authorizing token"
msgstr ""
msgstr "Erro ao autorizar token"
#: ../actions/finishopenidlogin.php:253 actions/finishopenidlogin.php:259
#: actions/finishopenidlogin.php:297
msgid "Error connecting user to OpenID."
msgstr ""
msgstr "Erro ao ligar utilizador ao OpenID."
#: ../actions/finishaddopenid.php:78 actions/finishaddopenid.php:78
#: actions/finishaddopenid.php:126
msgid "Error connecting user."
msgstr ""
msgstr "Erro ao ligar utilizador."
#: ../actions/finishremotesubscribe.php:151
#: actions/finishremotesubscribe.php:153 actions/finishremotesubscribe.php:166
msgid "Error inserting avatar"
msgstr ""
msgstr "Erro ao inserir avatar"
#: ../actions/finishremotesubscribe.php:143
#: actions/finishremotesubscribe.php:145 actions/finishremotesubscribe.php:158
msgid "Error inserting new profile"
msgstr ""
msgstr "Erro ao inserir novo perfil"
#: ../actions/finishremotesubscribe.php:167
#: actions/finishremotesubscribe.php:169 actions/finishremotesubscribe.php:182
msgid "Error inserting remote profile"
msgstr ""
msgstr "Erro ao inserir perfil remoto"
#: ../actions/recoverpassword.php:240 actions/recoverpassword.php:246
#: actions/recoverpassword.php:280
msgid "Error saving address confirmation."
msgstr ""
msgstr "Erro ao guardar confirmação do endereço."
#: ../actions/userauthorization.php:140 actions/userauthorization.php:147
#: actions/userauthorization.php:164
msgid "Error saving remote profile"
msgstr ""
msgstr "Erro ao guardar perfil remoto"
#: ../lib/openid.php:226 lib/openid.php:226 lib/openid.php:235
msgid "Error saving the profile."
msgstr ""
msgstr "Erro ao guardar o perfil."
#: ../lib/openid.php:237 lib/openid.php:237 lib/openid.php:246
msgid "Error saving the user."
msgstr ""
msgstr "Erro ao guardar o utilizador."
#: ../actions/password.php:80 actions/profilesettings.php:399
#: actions/passwordsettings.php:164
msgid "Error saving user; invalid."
msgstr ""
msgstr "Erro ao guardar utilizador; inválido."
#: ../actions/login.php:47 ../actions/login.php:73
#: ../actions/recoverpassword.php:307 ../actions/register.php:98
@ -860,70 +874,72 @@ msgstr ""
#: actions/register.php:108 actions/login.php:112 actions/login.php:138
#: actions/recoverpassword.php:354 actions/register.php:198
msgid "Error setting user."
msgstr ""
msgstr "Erro ao configurar utilizador."
#: ../actions/finishaddopenid.php:83 actions/finishaddopenid.php:83
#: actions/finishaddopenid.php:131
msgid "Error updating profile"
msgstr ""
msgstr "Erro ao actualizar o perfil."
#: ../actions/finishremotesubscribe.php:161
#: actions/finishremotesubscribe.php:163 actions/finishremotesubscribe.php:176
msgid "Error updating remote profile"
msgstr ""
msgstr "Erro ao actualizar o perfil remoto"
#: ../actions/recoverpassword.php:80 actions/recoverpassword.php:80
#: actions/recoverpassword.php:86
msgid "Error with confirmation code."
msgstr ""
msgstr "Erro no código de confirmação."
#: ../actions/finishopenidlogin.php:89 actions/finishopenidlogin.php:95
#: actions/finishopenidlogin.php:117
msgid "Existing nickname"
msgstr ""
msgstr "Alcunha já existente"
#: ../lib/util.php:326 lib/util.php:342 lib/action.php:570
msgid "FAQ"
msgstr ""
msgstr "FAQ"
#: ../actions/avatar.php:115 actions/profilesettings.php:352
#: actions/avatarsettings.php:397
msgid "Failed updating avatar."
msgstr ""
msgstr "Falha ao actualizar avatar."
#: ../actions/all.php:61 ../actions/allrss.php:64 actions/all.php:61
#: actions/allrss.php:64 actions/all.php:75 actions/allrss.php:107
#, php-format
msgid "Feed for friends of %s"
msgstr ""
msgstr "Feed para os amigos de %s"
#: ../actions/replies.php:65 ../actions/repliesrss.php:80
#: actions/replies.php:65 actions/repliesrss.php:66 actions/replies.php:134
#: actions/repliesrss.php:71
#, php-format
msgid "Feed for replies to %s"
msgstr ""
msgstr "Feed para as respostas a %s"
#: ../actions/tag.php:55 actions/tag.php:55 actions/tag.php:61
#, php-format
msgid "Feed for tag %s"
msgstr ""
msgstr "Feed para a tag %s"
#: ../lib/searchaction.php:105 lib/searchaction.php:105
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
msgstr ""
msgstr "Encontrar conteúdo dos mensagens"
#: ../lib/searchaction.php:101 lib/searchaction.php:101
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
msgstr ""
msgstr "Encontrar pessoas neste site"
#: ../actions/login.php:122
msgid ""
"For security reasons, please re-enter your user name and password before "
"changing your settings."
msgstr ""
"Por razões de segurança, por favor reintroduza o seu nome de utilizador e "
"palavra-passe antes de alterar as suas configurações."
#: ../actions/profilesettings.php:44 ../actions/register.php:164
#: actions/profilesettings.php:77 actions/register.php:178
@ -931,7 +947,7 @@ msgstr ""
#: actions/showgroup.php:235 actions/showstream.php:262
#: actions/tagother.php:105 lib/groupeditform.php:142
msgid "Full name"
msgstr ""
msgstr "Nome Completo"
#: ../actions/profilesettings.php:98 ../actions/register.php:79
#: ../actions/updateprofile.php:93 actions/profilesettings.php:213
@ -940,50 +956,50 @@ msgstr ""
#: actions/profilesettings.php:202 actions/register.php:171
#: actions/updateprofile.php:97
msgid "Full name is too long (max 255 chars)."
msgstr ""
msgstr "Nome completo é demasiado longo (máx. 255 caracteres)."
#: ../lib/util.php:322 lib/util.php:338 lib/action.php:344 lib/action.php:566
msgid "Help"
msgstr ""
msgstr "Ajuda"
#: ../lib/util.php:298 lib/util.php:314 lib/action.php:322
#: lib/facebookaction.php:200
msgid "Home"
msgstr ""
msgstr "Início"
#: ../actions/profilesettings.php:46 ../actions/register.php:167
#: actions/profilesettings.php:79 actions/register.php:181
#: actions/profilesettings.php:107 actions/register.php:396
#: lib/groupeditform.php:146
msgid "Homepage"
msgstr ""
msgstr "Página Principal"
#: ../actions/profilesettings.php:95 ../actions/register.php:76
#: actions/profilesettings.php:210 actions/register.php:83
#: actions/editgroup.php:192 actions/newgroup.php:143
#: actions/profilesettings.php:199 actions/register.php:168
msgid "Homepage is not a valid URL."
msgstr ""
msgstr "A Homepage inserida não é um URL válido."
#: ../actions/emailsettings.php:91 actions/emailsettings.php:98
#: actions/emailsettings.php:173
msgid "I want to post notices by email."
msgstr ""
msgstr "Quero postar mensagens por email."
#: ../lib/settingsaction.php:102 lib/settingsaction.php:96
#: lib/connectsettingsaction.php:104
msgid "IM"
msgstr ""
msgstr "IM"
#: ../actions/imsettings.php:60 actions/imsettings.php:61
#: actions/imsettings.php:118
msgid "IM Address"
msgstr ""
msgstr "Endereço IM"
#: ../actions/imsettings.php:33 actions/imsettings.php:33
#: actions/imsettings.php:59
msgid "IM Settings"
msgstr ""
msgstr "Definições de IM"
#: ../actions/finishopenidlogin.php:88 actions/finishopenidlogin.php:94
#: actions/finishopenidlogin.php:116
@ -991,104 +1007,113 @@ msgid ""
"If you already have an account, login with your username and password to "
"connect it to your OpenID."
msgstr ""
"Se já tem uma conta, inicie sessão com o seu nome de utilizador e palavra-"
"passe para a ligar ao seu OpenID."
#: ../actions/openidsettings.php:45
msgid ""
"If you want to add an OpenID to your account, enter it in the box below and "
"click \"Add\"."
msgstr ""
"Se quiser adicionar um OpenID à sua conta, introduza-o na caixa a baixo e "
"clique em \"Adicionar\"."
#: ../actions/recoverpassword.php:137
msgid ""
"If you've forgotten or lost your password, you can get a new one sent to the "
"email address you have stored in your account."
msgstr ""
"Se você se esqueceu ou perdeu a sua palavra-passe, você pode receber uma "
"nova que será enviada para o endereço de email que tem configurado na sua "
"conta."
#: ../actions/emailsettings.php:67 ../actions/smssettings.php:76
#: actions/emailsettings.php:68 actions/smssettings.php:76
#: actions/emailsettings.php:127 actions/smssettings.php:140
msgid "Incoming email"
msgstr ""
msgstr "Email a receber"
#: ../actions/emailsettings.php:283 actions/emailsettings.php:301
#: actions/emailsettings.php:443
msgid "Incoming email address removed."
msgstr ""
msgstr "O endereço de email de recepção removido."
#: ../actions/password.php:69 actions/profilesettings.php:388
#: actions/passwordsettings.php:153
msgid "Incorrect old password"
msgstr ""
msgstr "Palavra-passe antiga incorrecta"
#: ../actions/login.php:67 actions/login.php:67 actions/facebookhome.php:131
#: actions/login.php:132
msgid "Incorrect username or password."
msgstr ""
msgstr "Nome de utilizador ou palavra-passe incorrecta"
#: ../actions/recoverpassword.php:265
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
"As instruções para a recuperação da palavra-passe foram enviadas para o "
"endereço de email registado na sua conta."
#: ../actions/updateprofile.php:114 actions/updateprofile.php:115
#: actions/updateprofile.php:118
#, php-format
msgid "Invalid avatar URL '%s'"
msgstr ""
msgstr "URL do avatar inválido '%s'"
#: ../actions/invite.php:55 actions/invite.php:62 actions/invite.php:70
#, php-format
msgid "Invalid email address: %s"
msgstr ""
msgstr "Endereço de email inválido: %s"
#: ../actions/updateprofile.php:98 actions/updateprofile.php:99
#: actions/updateprofile.php:102
#, php-format
msgid "Invalid homepage '%s'"
msgstr ""
msgstr "Página principal inválida '%s'"
#: ../actions/updateprofile.php:82 actions/updateprofile.php:83
#: actions/updateprofile.php:86
#, php-format
msgid "Invalid license URL '%s'"
msgstr ""
msgstr "URL de licença inválido '%s'"
#: ../actions/postnotice.php:61 actions/postnotice.php:62
#: actions/postnotice.php:66
msgid "Invalid notice content"
msgstr ""
msgstr "Conteúdo da mensagem inválido"
#: ../actions/postnotice.php:67 actions/postnotice.php:68
#: actions/postnotice.php:72
msgid "Invalid notice uri"
msgstr ""
msgstr "URI da mensagem inválido"
#: ../actions/postnotice.php:72 actions/postnotice.php:73
#: actions/postnotice.php:77
msgid "Invalid notice url"
msgstr ""
msgstr "URL da mensagem inválido"
#: ../actions/updateprofile.php:87 actions/updateprofile.php:88
#: actions/updateprofile.php:91
#, php-format
msgid "Invalid profile URL '%s'."
msgstr ""
msgstr "URL do perfil inválido '%s'."
#: ../actions/remotesubscribe.php:96 actions/remotesubscribe.php:105
#: actions/remotesubscribe.php:135
msgid "Invalid profile URL (bad format)"
msgstr ""
msgstr "URL de perfil inválido (formato incorrecto)"
#: ../actions/finishremotesubscribe.php:77
#: actions/finishremotesubscribe.php:79 actions/finishremotesubscribe.php:80
msgid "Invalid profile URL returned by server."
msgstr ""
msgstr "URL do perfil devolvido pelo servidor inválido."
#: ../actions/avatarbynickname.php:37 actions/avatarbynickname.php:37
#: actions/avatarbynickname.php:69
msgid "Invalid size."
msgstr ""
msgstr "Tamanho inválido."
#: ../actions/finishopenidlogin.php:235 ../actions/register.php:93
#: ../actions/register.php:111 actions/finishopenidlogin.php:241
@ -1096,24 +1121,24 @@ msgstr ""
#: actions/finishopenidlogin.php:279 actions/register.php:193
#: actions/register.php:211
msgid "Invalid username or password."
msgstr ""
msgstr "Nome de utilizador ou palavra-passe inválido."
#: ../actions/invite.php:79 actions/invite.php:86 actions/invite.php:102
msgid "Invitation(s) sent"
msgstr ""
msgstr "Contive(s) enviado(s)"
#: ../actions/invite.php:97 actions/invite.php:104 actions/invite.php:136
msgid "Invitation(s) sent to the following people:"
msgstr ""
msgstr "Convite(s) enviado(s) para as seguintes pessoas:"
#: ../lib/util.php:306 lib/util.php:322 lib/facebookaction.php:207
#: lib/subgroupnav.php:103
msgid "Invite"
msgstr ""
msgstr "Convidar"
#: ../actions/invite.php:123 actions/invite.php:130 actions/invite.php:104
msgid "Invite new users"
msgstr ""
msgstr "Convidar novos utilizadores"
#: ../lib/util.php:261 lib/util.php:277 lib/action.php:609
#, php-format
@ -1126,7 +1151,7 @@ msgstr ""
#: ../actions/imsettings.php:173 actions/imsettings.php:181
#: actions/imsettings.php:296
msgid "Jabber ID already belongs to another user."
msgstr ""
msgstr "O Jabber ID introduzido já pertence a outro utilizador."
#: ../actions/imsettings.php:62 actions/imsettings.php:63
#, php-format
@ -1138,12 +1163,12 @@ msgstr ""
#: ../actions/profilesettings.php:57 actions/profilesettings.php:90
#: actions/profilesettings.php:128
msgid "Language"
msgstr ""
msgstr "Linguagem"
#: ../actions/profilesettings.php:113 actions/profilesettings.php:228
#: actions/profilesettings.php:217
msgid "Language is too long (max 50 chars)."
msgstr ""
msgstr "Linguagem introduzida é muito longa (máx. 50 caracteres)."
#: ../actions/profilesettings.php:52 ../actions/register.php:173
#: actions/profilesettings.php:85 actions/register.php:187
@ -1152,7 +1177,7 @@ msgstr ""
#: actions/tagother.php:113 lib/groupeditform.php:156 lib/grouplist.php:126
#: lib/profilelist.php:125
msgid "Location"
msgstr ""
msgstr "Localidade"
#: ../actions/profilesettings.php:104 ../actions/register.php:85
#: ../actions/updateprofile.php:108 actions/profilesettings.php:219
@ -1161,7 +1186,7 @@ msgstr ""
#: actions/profilesettings.php:208 actions/register.php:177
#: actions/updateprofile.php:112
msgid "Location is too long (max 255 chars)."
msgstr ""
msgstr "Localidade é muito longa (máx. 255 caracteres)."
#: ../actions/login.php:97 ../actions/login.php:106
#: ../actions/openidlogin.php:68 ../lib/util.php:310 actions/login.php:97
@ -1171,13 +1196,13 @@ msgstr ""
#: lib/facebookaction.php:315 lib/logingroupnav.php:75
#, php-format
msgid "Login"
msgstr ""
msgstr "Entrar"
#: ../actions/openidlogin.php:44 actions/openidlogin.php:52
#: actions/openidlogin.php:62
#, php-format
msgid "Login with an [OpenID](%%doc.openid%%) account."
msgstr ""
msgstr "Entrar com conta [OpenID](%%doc.openid%%)"
#: ../actions/login.php:126
#, php-format
@ -1186,10 +1211,13 @@ msgid ""
"(%%action.register%%) a new account, or try [OpenID](%%action.openidlogin%"
"%). "
msgstr ""
"Entrar com o seu nome de utilizador e palavra passe. Não está registado "
"ainda?[Registe-se](%%action.register%%), ou tente entrar com "
"[OpenID](%%action.openidlogin%%). "
#: ../lib/util.php:308 lib/util.php:324 lib/action.php:332
msgid "Logout"
msgstr ""
msgstr "Sair"
#: ../actions/register.php:166 actions/register.php:180
#: actions/register.php:393
@ -1199,7 +1227,7 @@ msgstr ""
#: ../actions/login.php:110 actions/login.php:110 actions/login.php:245
#: lib/facebookaction.php:320
msgid "Lost or forgotten password?"
msgstr ""
msgstr "Perdeu ou esqueceu-se da palavra-passe?"
#: ../actions/emailsettings.php:80 ../actions/smssettings.php:89
#: actions/emailsettings.php:81 actions/smssettings.php:89
@ -1215,12 +1243,12 @@ msgstr ""
#: ../actions/showstream.php:300 actions/showstream.php:315
#: actions/showstream.php:480
msgid "Member since"
msgstr ""
msgstr "Membro desde"
#: ../actions/userrss.php:70 actions/userrss.php:67 actions/userrss.php:72
#, php-format
msgid "Microblog by %s"
msgstr ""
msgstr "Microblog por %s"
#: ../actions/smssettings.php:304
#, php-format
@ -1239,7 +1267,7 @@ msgstr ""
#: actions/emailsettings.php:83 actions/smssettings.php:91
#: actions/emailsettings.php:142 actions/smssettings.php:152
msgid "New"
msgstr ""
msgstr "Novo"
#: ../lib/mail.php:144 lib/mail.php:144 lib/mail.php:286
#, php-format
@ -1254,7 +1282,7 @@ msgstr ""
#: ../actions/finishopenidlogin.php:71 actions/finishopenidlogin.php:77
#: actions/finishopenidlogin.php:99
msgid "New nickname"
msgstr ""
msgstr "Nova alcunha"
#: ../actions/newnotice.php:87 actions/newnotice.php:96
#: actions/newnotice.php:68
@ -1265,11 +1293,11 @@ msgstr ""
#: actions/profilesettings.php:180 actions/recoverpassword.php:185
#: actions/passwordsettings.php:101 actions/recoverpassword.php:219
msgid "New password"
msgstr ""
msgstr "Nova palavra-passe"
#: ../actions/recoverpassword.php:314
msgid "New password successfully saved. You are now logged in."
msgstr ""
msgstr "Nova palavra-passe foi guardada com sucesso. Está agora conectado."
#: ../actions/login.php:101 ../actions/profilesettings.php:41
#: ../actions/register.php:151 actions/login.php:101
@ -1279,7 +1307,7 @@ msgstr ""
#: actions/showstream.php:251 actions/tagother.php:95
#: lib/facebookaction.php:308 lib/groupeditform.php:137
msgid "Nickname"
msgstr ""
msgstr "Alcunha"
#: ../actions/finishopenidlogin.php:175 ../actions/profilesettings.php:110
#: ../actions/register.php:69 actions/finishopenidlogin.php:181
@ -1288,7 +1316,7 @@ msgstr ""
#: actions/newgroup.php:134 actions/profilesettings.php:214
#: actions/register.php:159
msgid "Nickname already in use. Try another one."
msgstr ""
msgstr "Alcunha já em uso. Tente outra diferente."
#: ../actions/finishopenidlogin.php:165 ../actions/profilesettings.php:88
#: ../actions/register.php:67 ../actions/updateprofile.php:77
@ -1297,27 +1325,27 @@ msgstr ""
#: actions/finishopenidlogin.php:205 actions/profilesettings.php:192
#: actions/updateprofile.php:81
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
msgstr "Alcunha só deve conter letras minúsculas e números. Sem espaços."
#: ../actions/finishopenidlogin.php:170 actions/finishopenidlogin.php:176
#: actions/finishopenidlogin.php:210
msgid "Nickname not allowed."
msgstr ""
msgstr "Alcunha não permitida."
#: ../actions/remotesubscribe.php:72 actions/remotesubscribe.php:81
#: actions/remotesubscribe.php:106
msgid "Nickname of the user you want to follow"
msgstr ""
msgstr "Alcunha do utilizador que pretende seguir"
#: ../actions/recoverpassword.php:162 actions/recoverpassword.php:167
#: actions/recoverpassword.php:186
msgid "Nickname or email"
msgstr ""
msgstr "Alcunha ou email"
#: ../actions/deletenotice.php:59 actions/deletenotice.php:60
#: actions/block.php:147 actions/deletenotice.php:118
msgid "No"
msgstr ""
msgstr "Não"
#: ../actions/imsettings.php:156 actions/imsettings.php:164
#: actions/imsettings.php:279
@ -1337,7 +1365,7 @@ msgstr ""
#: ../actions/smssettings.php:316 actions/smssettings.php:324
#: actions/smssettings.php:486
msgid "No code entered"
msgstr ""
msgstr "Nenhum código introduzido"
#: ../actions/confirmaddress.php:33 actions/confirmaddress.php:33
#: actions/confirmaddress.php:75
@ -1367,12 +1395,12 @@ msgstr ""
#: ../actions/finishremotesubscribe.php:65
#: actions/finishremotesubscribe.php:67 actions/finishremotesubscribe.php:68
msgid "No nickname provided by remote server."
msgstr ""
msgstr "Nenhuma alcunha fornecida pelo servidor remoto."
#: ../actions/avatarbynickname.php:27 actions/avatarbynickname.php:27
#: actions/avatarbynickname.php:59 actions/leavegroup.php:81
msgid "No nickname."
msgstr ""
msgstr "Nenhuma alcunha."
#: ../actions/emailsettings.php:222 ../actions/imsettings.php:206
#: ../actions/smssettings.php:229 actions/emailsettings.php:240
@ -1380,12 +1408,12 @@ msgstr ""
#: actions/emailsettings.php:363 actions/imsettings.php:345
#: actions/smssettings.php:358
msgid "No pending confirmation to cancel."
msgstr ""
msgstr "Nenhuma confirmação pendente para cancelar."
#: ../actions/smssettings.php:176 actions/smssettings.php:184
#: actions/smssettings.php:294
msgid "No phone number."
msgstr ""
msgstr "Nenhum numero de telefone."
#: ../actions/finishremotesubscribe.php:72
#: actions/finishremotesubscribe.php:74 actions/finishremotesubscribe.php:75
@ -1395,19 +1423,19 @@ msgstr ""
#: ../actions/recoverpassword.php:226 actions/recoverpassword.php:232
#: actions/recoverpassword.php:266
msgid "No registered email address for that user."
msgstr ""
msgstr "Nenhum endereço de email registado para esse utilizador."
#: ../actions/userauthorization.php:49 actions/userauthorization.php:55
#: actions/userauthorization.php:57
msgid "No request found!"
msgstr ""
msgstr "Nenhum pedido encontrado!"
#: ../actions/noticesearch.php:64 ../actions/peoplesearch.php:64
#: actions/noticesearch.php:69 actions/peoplesearch.php:69
#: actions/groupsearch.php:81 actions/noticesearch.php:104
#: actions/peoplesearch.php:85
msgid "No results"
msgstr ""
msgstr "Nenhum resultado"
#: ../actions/avatarbynickname.php:32 actions/avatarbynickname.php:32
#: actions/avatarbynickname.php:64
@ -1418,12 +1446,12 @@ msgstr ""
#: actions/twitapistatuses.php:520 actions/twitapifavorites.php:112
#: actions/twitapistatuses.php:446
msgid "No status found with that ID."
msgstr ""
msgstr "Nenhum estado encontrado com esse ID."
#: ../actions/twitapistatuses.php:555 actions/twitapistatuses.php:478
#: actions/twitapistatuses.php:418
msgid "No status with that ID found."
msgstr ""
msgstr "Nenhum estado com esse ID encontrado."
#: ../actions/openidsettings.php:135 actions/openidsettings.php:144
#: actions/openidsettings.php:222
@ -4710,19 +4738,19 @@ msgstr "O utilizador bloqueou-o."
#: lib/subscribeform.php:115 lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr ""
msgstr "Subscrever este utilizador"
#: lib/tagcloudsection.php:56
msgid "None"
msgstr ""
msgstr "Nenhum"
#: lib/topposterssection.php:74
msgid "Top posters"
msgstr ""
msgstr "Top posters"
#: lib/unblockform.php:120 lib/unblockform.php:150
msgid "Unblock this user"
msgstr ""
msgstr "Desbloquear este utilizador"
#: lib/unblockform.php:150
msgid "Unblock"
@ -4730,4 +4758,4 @@ msgstr "Desbloquear"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
msgstr ""
msgstr "Des-Subscrever deste utilizador"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-02-03 18:51+0000\n"
"Last-Translator: Håkan Eriksson <eriksson@utryckning.se>\n"
"PO-Revision-Date: 2009-03-17 10:54+0000\n"
"Last-Translator: Per-Olov Jernberg <possan@possan.se>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -158,7 +158,7 @@ msgstr "%s med vänner"
#: actions/twitapistatuses.php:33
#, php-format
msgid "%s public timeline"
msgstr "%s publik tidslinje"
msgstr "%s publika tidslinje"
#: ../lib/mail.php:206 lib/mail.php:212 lib/mail.php:411
#, php-format
@ -278,7 +278,7 @@ msgstr ""
#: actions/twitapistatuses.php:402 actions/twitapistatuses.php:429
#: actions/twitapiusers.php:32
msgid "API method not found!"
msgstr "API metoden hittades inte!"
msgstr "API-metoden hittades inte!"
#: ../actions/twitapiaccount.php:57 ../actions/twitapiaccount.php:113
#: ../actions/twitapiaccount.php:119 ../actions/twitapiblocks.php:28
@ -301,7 +301,7 @@ msgstr "API metoden hittades inte!"
#: actions/twitapinotifications.php:31 actions/twitapinotifications.php:37
#: actions/twitapistatuses.php:562
msgid "API method under construction."
msgstr "API metoden är under uppbyggnad."
msgstr "API-metoden är under uppbyggnad."
#: ../lib/util.php:324 lib/util.php:340 lib/action.php:568
msgid "About"
@ -330,7 +330,7 @@ msgstr "Lägg till OpenID"
#: ../lib/settingsaction.php:97 lib/settingsaction.php:91
#: lib/accountsettingsaction.php:117
msgid "Add or remove OpenIDs"
msgstr "Lägg till eller tabort OpenIDs"
msgstr "Lägg till eller ta bort OpenID"
#: ../actions/emailsettings.php:38 ../actions/imsettings.php:39
#: ../actions/smssettings.php:39 actions/emailsettings.php:39
@ -450,7 +450,7 @@ msgstr "Biografin är för lång (max 140 tecken)"
#: ../lib/deleteaction.php:41 lib/deleteaction.php:41 lib/deleteaction.php:69
msgid "Can't delete this notice."
msgstr "Kan inte tabort detta inlägg."
msgstr "Kan inte ta bort detta inlägg."
#: ../actions/updateprofile.php:119 actions/updateprofile.php:120
#: actions/updateprofile.php:123
@ -462,7 +462,7 @@ msgstr "Kan inte läsa användarbild URL '%s'"
#: actions/profilesettings.php:404 actions/recoverpassword.php:313
#: actions/passwordsettings.php:169 actions/recoverpassword.php:347
msgid "Can't save new password."
msgstr "Kan inte spara nya lösenordet."
msgstr "Kan inte spara det nya lösenordet."
#: ../actions/emailsettings.php:57 ../actions/imsettings.php:58
#: ../actions/smssettings.php:62 actions/emailsettings.php:58
@ -508,7 +508,7 @@ msgstr "Ändra ditt lösenord"
#: ../lib/settingsaction.php:85 lib/settingsaction.php:85
#: lib/accountsettingsaction.php:105
msgid "Change your profile settings"
msgstr "Ändra dina profil inställningar"
msgstr "Ändra dina profilinställningar"
#: ../actions/password.php:43 ../actions/recoverpassword.php:181
#: ../actions/register.php:155 ../actions/smssettings.php:65
@ -540,7 +540,7 @@ msgstr "Bekräftelsekod"
#: ../actions/confirmaddress.php:38 actions/confirmaddress.php:38
#: actions/confirmaddress.php:80
msgid "Confirmation code not found."
msgstr "Verifikation koden finns ej."
msgstr "Bekräftelsekoden kunde inte hittas."
#: ../actions/register.php:202
#, php-format
@ -4794,12 +4794,12 @@ msgstr "%1$s lyssnar nu på dina meddelanden i %2$s."
#: lib/mail.php:254
#, fuzzy, php-format
msgid "Location: %s\n"
msgstr "Plats: %s"
msgstr "Plats: %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
msgid "Homepage: %s\n"
msgstr "Hemsida: %s"
msgstr "Hemsida: %s\n"
#: lib/mail.php:258
#, php-format
@ -4821,9 +4821,7 @@ msgstr ""
#: lib/mail.php:555
#, fuzzy, php-format
msgid "%1$s just added your notice from %2$s"
msgstr ""
"%1$s la just in ditt inlägg ifrån %2$s som en av deras favorit.\n"
"\n"
msgstr "%1$s la just in ditt inlägg ifrån %2$s som en av deras favorit."
#: lib/mailbox.php:229 lib/noticelist.php:380
#, fuzzy
@ -4853,7 +4851,7 @@ msgstr "svar till..."
#: lib/noticelist.php:447 lib/noticelist.php:450
#, fuzzy
msgid "Reply to this notice"
msgstr "Kan inte tabort detta inlägg."
msgstr "Svara på detta inlägg"
#: lib/noticelist.php:451
#, fuzzy
@ -4863,12 +4861,12 @@ msgstr "svar"
#: lib/noticelist.php:471 lib/noticelist.php:474
#, fuzzy
msgid "Delete this notice"
msgstr "Tabort inlägg"
msgstr "Ta bort inlägg"
#: lib/noticelist.php:474
#, fuzzy
msgid "Delete"
msgstr "Tabort"
msgstr "Ta bort"
#: lib/nudgeform.php:116
msgid "Nudge this user"

Binary file not shown.

View File

@ -10,20 +10,18 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2009-04-18 06:18+0000\n"
"Last-Translator: Veeven <veeven@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
"X-Generator: Pootle 1.1.0\n"
#: ../actions/noticesearchrss.php:64 actions/noticesearchrss.php:68
#: actions/noticesearchrss.php:88
@ -41,7 +39,7 @@ msgstr "ఈ అంతరంగిక భోగట్టా తప్ప: సం
#: ../actions/showstream.php:400 ../lib/stream.php:109
#: actions/showstream.php:418 lib/mailbox.php:164 lib/stream.php:76
msgid " from "
msgstr ""
msgstr " నుండి "
#: ../actions/twitapistatuses.php:478 actions/twitapistatuses.php:412
#: actions/twitapistatuses.php:347
@ -117,7 +115,7 @@ msgstr ""
#: actions/invite.php:99 actions/invite.php:123 actions/invite.php:131
#, php-format
msgid "%s (%s)"
msgstr ""
msgstr "%s (%s)"
#: ../actions/publicrss.php:62 actions/publicrss.php:48
#: actions/publicrss.php:90
@ -143,13 +141,13 @@ msgstr ""
#: ../lib/mail.php:206 lib/mail.php:212 lib/mail.php:411
#, php-format
msgid "%s status"
msgstr ""
msgstr "%s స్థితి"
#: ../actions/twitapistatuses.php:338 actions/twitapistatuses.php:265
#: actions/twitapistatuses.php:199
#, php-format
msgid "%s timeline"
msgstr ""
msgstr "%s కాలరేఖ"
#: ../actions/twitapistatuses.php:52 actions/twitapistatuses.php:52
#: actions/twitapistatuses.php:36
@ -345,7 +343,7 @@ msgstr "ఇప్పటికే చేరారు!"
#: ../actions/deletenotice.php:54 actions/deletenotice.php:55
#: actions/deletenotice.php:113
msgid "Are you sure you want to delete this notice?"
msgstr ""
msgstr "మీరు నిజంగానే ఈ నోటీసుని తొలగించాలనుకుంటున్నారా?"
#: ../actions/userauthorization.php:77 actions/userauthorization.php:83
#: actions/userauthorization.php:81
@ -412,7 +410,7 @@ msgstr "స్వపరిచయం చాలా పెద్దగా ఉంద
#: ../lib/deleteaction.php:41 lib/deleteaction.php:41 lib/deleteaction.php:69
msgid "Can't delete this notice."
msgstr ""
msgstr "ఈ నోటీసుని తొలగించలేము."
#: ../actions/updateprofile.php:119 actions/updateprofile.php:120
#: actions/updateprofile.php:123
@ -779,10 +777,7 @@ msgstr "వాడుకరిని అనుసంధానించడంల
#: actions/finishremotesubscribe.php:153 actions/finishremotesubscribe.php:166
#, fuzzy
msgid "Error inserting avatar"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"అవతారాన్ని పెట్టడంలో పొరపాటు\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "అవతారాన్ని పెట్టడంలో పొరపాటు"
#: ../actions/finishremotesubscribe.php:143
#: actions/finishremotesubscribe.php:145 actions/finishremotesubscribe.php:158
@ -848,10 +843,7 @@ msgstr "ప్రస్తుత పేరు"
#: ../lib/util.php:326 lib/util.php:342 lib/action.php:570
#, fuzzy
msgid "FAQ"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"తవసం\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "తవసం"
#: ../actions/avatar.php:115 actions/profilesettings.php:352
#: actions/avatarsettings.php:397
@ -918,10 +910,7 @@ msgstr "సహాయం"
#: lib/facebookaction.php:200
#, fuzzy
msgid "Home"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"వాకిలి\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "వాకిలి"
#: ../actions/profilesettings.php:46 ../actions/register.php:167
#: actions/profilesettings.php:79 actions/register.php:181
@ -929,10 +918,7 @@ msgstr ""
#: lib/groupeditform.php:146
#, fuzzy
msgid "Homepage"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"హోమ్ పేజీ\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "హోమ్ పేజీ"
#: ../actions/profilesettings.php:95 ../actions/register.php:76
#: actions/profilesettings.php:210 actions/register.php:83
@ -1198,10 +1184,7 @@ msgstr "సభ్యులైన తేదీ"
#: ../actions/userrss.php:70 actions/userrss.php:67 actions/userrss.php:72
#, fuzzy, php-format
msgid "Microblog by %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"%s యొక్క మైక్రోబ్లాగు\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "%s యొక్క మైక్రోబ్లాగు"
#: ../actions/smssettings.php:304
#, php-format
@ -1354,10 +1337,7 @@ msgstr "దూరపు సర్వర్ పేరుని ఇవ్వలే
#: actions/avatarbynickname.php:59 actions/leavegroup.php:81
#, fuzzy
msgid "No nickname."
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"పేరు లేదు.\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "పేరు లేదు."
#: ../actions/emailsettings.php:222 ../actions/imsettings.php:206
#: ../actions/smssettings.php:229 actions/emailsettings.php:240
@ -1614,10 +1594,7 @@ msgstr "ఓపెన్ఐడీ"
#: actions/finishopenidlogin.php:73
#, fuzzy
msgid "OpenID Account Setup"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"ఓపెన్ఐడీ ఖాతా అమర్పు\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "ఓపెన్ఐడీ ఖాతా అమర్పు"
#: ../lib/openid.php:180 lib/openid.php:180 lib/openid.php:266
msgid "OpenID Auto-Submit"
@ -3448,10 +3425,7 @@ msgstr ""
#: actions/showgroup.php:121
#, fuzzy
msgid "No nickname"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"పేరు లేదు.\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "పేరు లేదు."
#: actions/editgroup.php:99 actions/groupbyid.php:88 actions/grouplogo.php:100
#: actions/groupmembers.php:83 actions/joingroup.php:88
@ -4230,10 +4204,7 @@ msgstr "Jabber ID లేదు."
#: actions/tag.php:43
#, fuzzy, php-format
msgid "Notices tagged with %s, page %d"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"%s యొక్క మైక్రోబ్లాగు\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "%s యొక్క మైక్రోబ్లాగు"
#: actions/tag.php:66
#, php-format
@ -4291,10 +4262,7 @@ msgstr "అటువంటి సందేశమేమీ లేదు."
#: actions/tagrss.php:66
#, fuzzy, php-format
msgid "Microblog tagged with %s"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"%s యొక్క మైక్రోబ్లాగు\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "%s యొక్క మైక్రోబ్లాగు"
#: actions/twitapiblocks.php:47
msgid "Block user failed."
@ -4638,15 +4606,12 @@ msgstr ""
#: lib/mail.php:254
#, fuzzy, php-format
msgid "Location: %s\n"
msgstr "ప్రాంతం: %s"
msgstr "ప్రాంతం: %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
msgid "Homepage: %s\n"
msgstr ""
"#-#-#-#-# laconica.pot (PACKAGE VERSION) #-#-#-#-#\n"
"హోమ్ పేజీ\n"
"#-#-#-#-# laconica.new.pot (PACKAGE VERSION) #-#-#-#-#\n"
msgstr "హోమ్ పేజీ\n"
#: lib/mail.php:258
#, php-format

Binary file not shown.

View File

@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: laconica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-25 16:24+0000\n"
"PO-Revision-Date: 2009-01-31 05:21+0000\n"
"Last-Translator: Tuan Nguyen <group3t@gmail.com>\n"
"PO-Revision-Date: 2009-05-10 05:27+0000\n"
"Last-Translator: NGUYỄN Mạnh Hùng <loveleeyoungae@yahoo.com>\n"
"Language-Team: <support@saigonica.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -30,13 +30,13 @@ msgstr " ngoại trừ thông tin riêng: mật khẩu, email, địa chỉ IM,
#: ../actions/showstream.php:400 ../lib/stream.php:109
#: actions/showstream.php:418 lib/mailbox.php:164 lib/stream.php:76
msgid " from "
msgstr " từ"
msgstr " từ "
#: ../actions/twitapistatuses.php:478 actions/twitapistatuses.php:412
#: actions/twitapistatuses.php:347
#, php-format
msgid "%1$s / Updates replying to %2$s"
msgstr ""
msgstr "%1$s / Các cập nhật đang trả lời tới %2$s"
#: ../actions/invite.php:168 actions/invite.php:176 actions/invite.php:211
#, php-format
@ -103,7 +103,7 @@ msgstr ""
#: ../lib/mail.php:124 lib/mail.php:124 lib/mail.php:126 lib/mail.php:241
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s dang theo doi tin nhan cua ban tren %2$s."
msgstr "%1$s đang theo dõi lưu ý của bạn trên %2$s."
#: ../lib/mail.php:126
#, php-format
@ -176,7 +176,7 @@ msgstr "Dòng tin nhắn của %s"
#: actions/twitapistatuses.php:36
#, php-format
msgid "%s updates from everyone!"
msgstr ""
msgstr "%s cập nhật từ tất cả mọi người!"
#: ../actions/register.php:213
msgid ""
@ -817,7 +817,7 @@ msgstr "Nhập biệt hiệu hoặc email."
#: ../actions/smssettings.php:64 actions/smssettings.php:64
#: actions/smssettings.php:119
msgid "Enter the code you received on your phone."
msgstr ""
msgstr "Nhập mã mà bạn nhận được trên điện thoại của bạn."
#: ../actions/userauthorization.php:137 actions/userauthorization.php:144
#: actions/userauthorization.php:161
@ -1151,9 +1151,9 @@ msgid ""
"s, available under the [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
"Saigonica là bản sửa đổi của phiên bản [Laconica 0.6.0](http://laconi.ca/), "
"phát hành theo bản quyền [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
"Đang dùng [Laconica](http://laconi.ca/), phiên bản %s phát hành theo bản "
"quyền [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: ../actions/imsettings.php:173 actions/imsettings.php:181
#: actions/imsettings.php:296
@ -1178,7 +1178,7 @@ msgstr "Ngôn ngữ"
#: actions/profilesettings.php:217
#, fuzzy
msgid "Language is too long (max 50 chars)."
msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
msgstr "Ngôn ngữ quá dài (tối đa là 50 ký tự)."
#: ../actions/profilesettings.php:52 ../actions/register.php:173
#: actions/profilesettings.php:85 actions/register.php:187
@ -1280,7 +1280,7 @@ msgstr "Ghi chú và các file của tôi đã có ở phía dưới"
#: actions/emailsettings.php:83 actions/smssettings.php:91
#: actions/emailsettings.php:142 actions/smssettings.php:152
msgid "New"
msgstr ""
msgstr "Mới"
#: ../lib/mail.php:144 lib/mail.php:144 lib/mail.php:286
#, php-format
@ -1395,9 +1395,8 @@ msgstr "Không có nội dung!"
#: ../actions/emailsettings.php:174 actions/emailsettings.php:192
#: actions/emailsettings.php:304
#, fuzzy
msgid "No email address."
msgstr "Địa chỉ email của bạn"
msgstr "Không có địa chỉ email."
#: ../actions/userbyid.php:32 actions/userbyid.php:32 actions/userbyid.php:70
msgid "No id."
@ -1429,9 +1428,8 @@ msgstr "Sự xác nhận chưa được hủy bỏ."
#: ../actions/smssettings.php:176 actions/smssettings.php:184
#: actions/smssettings.php:294
#, fuzzy
msgid "No phone number."
msgstr "Số điện thoại để nhắn SMS "
msgstr "Không có số điện thoại."
#: ../actions/finishremotesubscribe.php:72
#: actions/finishremotesubscribe.php:74 actions/finishremotesubscribe.php:75
@ -1635,9 +1633,8 @@ msgstr "Chưa đăng nhận!"
#: ../actions/opensearch.php:35 actions/opensearch.php:35
#: actions/opensearch.php:67
#, fuzzy
msgid "Notice Search"
msgstr "Tin đã gửi"
msgstr "Tìm kiếm thông báo"
#: ../actions/showstream.php:82 actions/showstream.php:82
#: actions/showstream.php:180 actions/showstream.php:187
@ -1659,9 +1656,9 @@ msgstr "Tin nhắn"
#: ../actions/tag.php:35 ../actions/tag.php:81 actions/tag.php:35
#: actions/tag.php:81 actions/tag.php:41
#, fuzzy, php-format
#, php-format
msgid "Notices tagged with %s"
msgstr "Dòng tin nhắn cho %s"
msgstr "Thông báo được gắn thẻ %s"
#: ../actions/password.php:39 actions/profilesettings.php:178
#: actions/passwordsettings.php:97
@ -2915,7 +2912,7 @@ msgstr "Đây là hộp thư đến của bạn, bao gồm các tin nhắn gửi
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
"\n"
msgstr "%1$s moi ban tham gia vao %2$s"
msgstr "%1$s moi ban tham gia vao %2$s (%3$s).\n"
#: actions/login.php:104 actions/login.php:235 actions/openidlogin.php:108
#: actions/register.php:416
@ -3194,7 +3191,8 @@ msgstr "%s da them tin nhan cua ban vao danh sach tin nhan ua thich"
msgid ""
"%1$s just added your notice from %2$s as one of their favorites.\n"
"\n"
msgstr "%s da them tin nhan cua ban vao danh sach tin nhan ua thich"
msgstr "%s da them tin nhan cua ban vao danh sach tin nhan ua thich\n"
"\n"
#: actions/twittersettings.php:27
#, fuzzy
@ -3326,7 +3324,7 @@ msgstr ""
#: classes/Command.php:96 classes/Command.php:113
#, fuzzy, php-format
msgid "Subscriptions: %1$s\n"
msgstr "Tôi theo"
msgstr "Tôi theo: %1$s\n"
#: classes/Command.php:125 classes/Command.php:242 classes/Command.php:145
#: classes/Command.php:276
@ -3352,12 +3350,12 @@ msgstr "Tên đầy đủ"
#: classes/Command.php:172 classes/Command.php:195
#, fuzzy, php-format
msgid "Location: %s"
msgstr "Thành phố"
msgstr "Thành phố: %s"
#: classes/Command.php:175 classes/Command.php:198
#, fuzzy, php-format
msgid "Homepage: %s"
msgstr "Trang chủ hoặc Blog"
msgstr "Trang chủ hoặc Blog: %s"
#: classes/Command.php:178 classes/Command.php:201
#, fuzzy, php-format
@ -4878,12 +4876,12 @@ msgstr "%1$s dang theo doi tin nhan cua ban tren %2$s."
#: lib/mail.php:254
#, fuzzy, php-format
msgid "Location: %s\n"
msgstr "Thành phố"
msgstr "Thành phố: %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
msgid "Homepage: %s\n"
msgstr "Trang chủ hoặc Blog"
msgstr "Trang chủ hoặc Blog: %s\n"
#: lib/mail.php:258
#, php-format
@ -5050,22 +5048,21 @@ msgid "None"
msgstr "Không"
#: lib/topposterssection.php:74
#, fuzzy
msgid "Top posters"
msgstr ""
msgstr "Top posters"
#: lib/unblockform.php:120 lib/unblockform.php:150
#, fuzzy
msgid "Unblock this user"
msgstr "Ban user"
msgstr "Bỏ chặn người dùng này"
#: lib/unblockform.php:150
msgid "Unblock"
msgstr ""
msgstr "Bỏ chặn"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
#, fuzzy
msgid "Unsubscribe from this user"
msgstr "Hết theo"
msgstr "Ngừng đăng ký từ người dùng này"
#, fuzzy
#~ msgid "Code not yet ready."

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -31,6 +31,8 @@ if (!defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php';
/**
* Plugin to do realtime updates using Comet
*
@ -41,165 +43,65 @@ if (!defined('LACONICA')) {
* @link http://laconi.ca/
*/
class CometPlugin extends Plugin
class CometPlugin extends RealtimePlugin
{
var $server = null;
public $server = null;
public $username = null;
public $password = null;
public $prefix = null;
protected $bay = null;
function __construct($server=null, $username=null, $password=null)
function __construct($server=null, $username=null, $password=null, $prefix=null)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->prefix = $prefix;
parent::__construct();
}
function onEndShowScripts($action)
function _getScripts()
{
$timeline = null;
$scripts = parent::_getScripts();
$this->log(LOG_DEBUG, 'got action ' . $action->trimmed('action'));
$ours = array('jquery.comet.js', 'cometupdate.js');
switch ($action->trimmed('action')) {
case 'public':
$timeline = '/timelines/public';
break;
case 'tag':
$tag = $action->trimmed('tag');
if (!empty($tag)) {
$timeline = '/timelines/tag/'.$tag;
} else {
return true;
}
break;
default:
return true;
foreach ($ours as $script) {
$scripts[] = common_path('plugins/Comet/'.$script);
}
$scripts = array('jquery.comet.js', 'json2.js', 'updatetimeline.js');
foreach ($scripts as $script) {
$action->element('script', array('type' => 'text/javascript',
'src' => common_path('plugins/Comet/'.$script)),
' ');
}
$user = common_current_user();
if (!empty($user->id)) {
$user_id = $user->id;
} else {
$user_id = 0;
}
$replyurl = common_local_url('newnotice');
$favorurl = common_local_url('favor');
// FIXME: need to find a better way to pass this pattern in
$deleteurl = common_local_url('deletenotice',
array('notice' => '0000000000'));
$action->elementStart('script', array('type' => 'text/javascript'));
$action->raw("$(document).ready(function() { updater.init(\"$this->server\", \"$timeline\", $user_id, \"$replyurl\", \"$favorurl\", \"$deleteurl\"); });");
$action->elementEnd('script');
return true;
return $scripts;
}
function onEndNoticeSave($notice)
function _updateInitialize($timeline, $user_id)
{
$this->log(LOG_INFO, "Called for save notice.");
$timelines = array();
// XXX: Add other timelines; this is just for the public one
if ($notice->is_local ||
($notice->is_local == 0 && !common_config('public', 'localonly'))) {
$timelines[] = '/timelines/public';
}
$tags = $this->getNoticeTags($notice);
if (!empty($tags)) {
foreach ($tags as $tag) {
$timelines[] = '/timelines/tag/' . $tag;
}
}
if (count($timelines) > 0) {
// Require this, since we need it
require_once(INSTALLDIR.'/plugins/Comet/bayeux.class.inc.php');
$json = $this->noticeAsJson($notice);
// Bayeux? Comet? Huh? These terms confuse me
$bay = new Bayeux($this->server, $this->user, $this->password);
foreach ($timelines as $timeline) {
$this->log(LOG_INFO, "Posting notice $notice->id to '$timeline'.");
$bay->publish($timeline, $json);
}
$bay = NULL;
}
return true;
$script = parent::_updateInitialize($timeline, $user_id);
return $script." CometUpdate.init(\"$this->server\", \"$timeline\", $user_id, \"$this->replyurl\", \"$this->favorurl\", \"$this->deleteurl\");";
}
function noticeAsJson($notice)
function _connect()
{
// FIXME: this code should be abstracted to a neutral third
// party, like Notice::asJson(). I'm not sure of the ethics
// of refactoring from within a plugin, so I'm just abusing
// the TwitterApiAction method. Don't do this unless you're me!
require_once(INSTALLDIR.'/lib/twitterapi.php');
$act = new TwitterApiAction('/dev/null');
$arr = $act->twitter_status_array($notice, true);
$arr['url'] = $notice->bestUrl();
$arr['html'] = htmlspecialchars($notice->rendered);
$arr['source'] = htmlspecialchars($arr['source']);
if (!empty($notice->reply_to)) {
$reply_to = Notice::staticGet('id', $notice->reply_to);
if (!empty($reply_to)) {
$arr['in_reply_to_status_url'] = $reply_to->bestUrl();
}
$reply_to = null;
}
$profile = $notice->getProfile();
$arr['user']['profile_url'] = $profile->profileurl;
return $arr;
require_once INSTALLDIR.'/plugins/Comet/bayeux.class.inc.php';
// Bayeux? Comet? Huh? These terms confuse me
$this->bay = new Bayeux($this->server, $this->user, $this->password);
}
function getNoticeTags($notice)
function _publish($timeline, $json)
{
$tags = null;
$nt = new Notice_tag();
$nt->notice_id = $notice->id;
if ($nt->find()) {
$tags = array();
while ($nt->fetch()) {
$tags[] = $nt->tag;
}
}
$nt->free();
$nt = null;
return $tags;
$this->bay->publish($timeline, $json);
}
// Push this up to Plugin
function log($level, $msg)
function _disconnect()
{
common_log($level, get_class($this) . ': '.$msg);
unset($this->bay);
}
function _pathToChannel($path)
{
if (!empty($this->prefix)) {
array_unshift($path, $this->prefix);
}
return '/' . implode('/', $path);
}
}

View File

@ -0,0 +1,30 @@
// update the local timeline from a Comet server
//
var CometUpdate = function()
{
var _server;
var _timeline;
var _userid;
var _replyurl;
var _favorurl;
var _deleteurl;
var _cometd;
return {
init: function(server, timeline, userid, replyurl, favorurl, deleteurl)
{
_cometd = $.cometd; // Uses the default Comet object
_cometd.init(server);
_server = server;
_timeline = timeline;
_userid = userid;
_favorurl = favorurl;
_replyurl = replyurl;
_deleteurl = deleteurl;
_cometd.subscribe(timeline, function(message) { RealtimeUpdate.receive(message.data) });
$(window).unload(function() { _cometd.disconnect(); } );
}
}
}();

View File

@ -0,0 +1,120 @@
<?php
/**
* Laconica, the distributed open-source microblogging tool
*
* Plugin to do "real time" updates using Comet/Bayeux
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Plugin
* @package Laconica
* @author Evan Prodromou <evan@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
if (!defined('LACONICA')) {
exit(1);
}
require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php';
/**
* Plugin to do realtime updates using Meteor
*
* @category Plugin
* @package Laconica
* @author Evan Prodromou <evan@controlyourself.ca>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
class MeteorPlugin extends RealtimePlugin
{
public $webserver = null;
public $webport = null;
public $controlport = null;
public $controlserver = null;
public $channelbase = null;
protected $_socket = null;
function __construct($webserver=null, $webport=4670, $controlport=4671, $controlserver=null, $channelbase='')
{
global $config;
$this->webserver = (empty($webserver)) ? $config['site']['server'] : $webserver;
$this->webport = $webport;
$this->controlport = $controlport;
$this->controlserver = (empty($controlserver)) ? $webserver : $controlserver;
$this->channelbase = $channelbase;
parent::__construct();
}
function _getScripts()
{
$scripts = parent::_getScripts();
$scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js';
$scripts[] = common_path('plugins/Meteor/meteorupdater.js');
return $scripts;
}
function _updateInitialize($timeline, $user_id)
{
$script = parent::_updateInitialize($timeline, $user_id);
return $script." MeteorUpdater.init(\"$this->webserver\", $this->webport, \"{$timeline}\");";
}
function _connect()
{
$controlserver = (empty($this->controlserver)) ? $this->webserver : $this->controlserver;
// May throw an exception.
$this->_socket = stream_socket_client("tcp://{$controlserver}:{$this->controlport}");
if (!$this->_socket) {
throw new Exception("Couldn't connect to {$controlserver} on {$this->controlport}");
}
}
function _publish($channel, $message)
{
$message = json_encode($message);
$message = addslashes($message);
$cmd = "ADDMESSAGE $channel $message\n";
$cnt = fwrite($this->_socket, $cmd);
$result = fgets($this->_socket);
if (preg_match('/^ERR (.*)$/', $result, $matches)) {
throw new Exception('Error adding meteor message "'.$matches[1].'"');
}
// TODO: parse and deal with result
}
function _disconnect()
{
$cnt = fwrite($this->_socket, "QUIT\n");
@fclose($this->_socket);
}
// Meteord flips out with default '/' separator
function _pathToChannel($path)
{
if (!empty($this->channelbase)) {
array_unshift($path, $this->channelbase);
}
return implode('-', $path);
}
}

27
plugins/Meteor/README Normal file
View File

@ -0,0 +1,27 @@
This is a plugin to automatically load notices in the browser no
matter who creates them -- the kind of thing we see with
search.twitter.com, rejaw.com, or FriendFeed's "real time" news.
It requires a meteor server.
http://meteorserver.org/
Note that the controller interface needs to be accessible by the Web
server, and the subscriber interface needs to be accessible by your
Web users. You MUST firewall the controller interface from users;
otherwise anyone will be able to push any message to your subscribers.
Not good!
You can enable the plugin with this line in config.php:
addPlugin('Meteor', array('webserver' => 'meteor server address'));
Available parameters:
* webserver: Web server address. Defaults to site server.
* webport: port to connect to for Web access. Defaults to 4670.
* controlserver: Control server address. Defaults to webserver.
* controlport: port to connect to for control. Defaults to 4671.
* channelbase: a base string to use for channels. Good if you have
multiple sites using the same meteor server.

View File

@ -0,0 +1,21 @@
// update the local timeline from a Meteor server
//
var MeteorUpdater = function()
{
return {
init: function(server, port, timeline)
{
Meteor.callbacks["process"] = function(data) {
RealtimeUpdate.receive(JSON.parse(data));
};
Meteor.host = server;
Meteor.port = port;
Meteor.joinChannel(timeline, 0);
Meteor.connect();
}
}
}();

View File

@ -0,0 +1,229 @@
<?php
/**
* Laconica, the distributed open-source microblogging tool
*
* Superclass for plugins that do "real time" updates of timelines using Ajax
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Plugin
* @package Laconica
* @author Evan Prodromou <evan@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
if (!defined('LACONICA')) {
exit(1);
}
/**
* Superclass for plugin to do realtime updates
*
* Based on experience with the Comet and Meteor plugins,
* this superclass extracts out some of the common functionality
*
* @category Plugin
* @package Laconica
* @author Evan Prodromou <evan@controlyourself.ca>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
class RealtimePlugin extends Plugin
{
protected $replyurl = null;
protected $favorurl = null;
protected $deleteurl = null;
function onInitializePlugin()
{
$this->replyurl = common_local_url('newnotice');
$this->favorurl = common_local_url('favor');
// FIXME: need to find a better way to pass this pattern in
$this->deleteurl = common_local_url('deletenotice',
array('notice' => '0000000000'));
}
function onEndShowScripts($action)
{
$path = null;
switch ($action->trimmed('action')) {
case 'public':
$path = array('public');
break;
case 'tag':
$tag = $action->trimmed('tag');
if (!empty($tag)) {
$path = array('tag', $tag);
} else {
return true;
}
break;
default:
return true;
}
$timeline = $this->_pathToChannel($path);
$scripts = $this->_getScripts();
foreach ($scripts as $script) {
$action->element('script', array('type' => 'text/javascript',
'src' => $script),
' ');
}
$user = common_current_user();
if (!empty($user->id)) {
$user_id = $user->id;
} else {
$user_id = 0;
}
$action->elementStart('script', array('type' => 'text/javascript'));
$action->raw("$(document).ready(function() { ");
$action->raw($this->_updateInitialize($timeline, $user_id));
$action->raw(" });");
$action->elementEnd('script');
return true;
}
function onEndNoticeSave($notice)
{
$paths = array();
// XXX: Add other timelines; this is just for the public one
if ($notice->is_local ||
($notice->is_local == 0 && !common_config('public', 'localonly'))) {
$paths[] = array('public');
}
$tags = $this->getNoticeTags($notice);
if (!empty($tags)) {
foreach ($tags as $tag) {
$paths[] = array('tag', $tag);
}
}
if (count($paths) > 0) {
$json = $this->noticeAsJson($notice);
$this->_connect();
foreach ($paths as $path) {
$timeline = $this->_pathToChannel($path);
$this->_publish($timeline, $json);
}
$this->_disconnect();
}
return true;
}
function noticeAsJson($notice)
{
// FIXME: this code should be abstracted to a neutral third
// party, like Notice::asJson(). I'm not sure of the ethics
// of refactoring from within a plugin, so I'm just abusing
// the TwitterApiAction method. Don't do this unless you're me!
require_once(INSTALLDIR.'/lib/twitterapi.php');
$act = new TwitterApiAction('/dev/null');
$arr = $act->twitter_status_array($notice, true);
$arr['url'] = $notice->bestUrl();
$arr['html'] = htmlspecialchars($notice->rendered);
$arr['source'] = htmlspecialchars($arr['source']);
if (!empty($notice->reply_to)) {
$reply_to = Notice::staticGet('id', $notice->reply_to);
if (!empty($reply_to)) {
$arr['in_reply_to_status_url'] = $reply_to->bestUrl();
}
$reply_to = null;
}
$profile = $notice->getProfile();
$arr['user']['profile_url'] = $profile->profileurl;
return $arr;
}
function getNoticeTags($notice)
{
$tags = null;
$nt = new Notice_tag();
$nt->notice_id = $notice->id;
if ($nt->find()) {
$tags = array();
while ($nt->fetch()) {
$tags[] = $nt->tag;
}
}
$nt->free();
$nt = null;
return $tags;
}
// Push this up to Plugin
function log($level, $msg)
{
common_log($level, get_class($this) . ': '.$msg);
}
function _getScripts()
{
return array(common_path('plugins/Realtime/realtimeupdate.js'),
common_path('plugins/Realtime/json2.js'));
}
function _updateInitialize($timeline, $user_id)
{
return "RealtimeUpdate.init($user_id, \"$this->replyurl\", \"$this->favorurl\", \"$this->deleteurl\"); ";
}
function _connect()
{
}
function _publish($timeline, $json)
{
}
function _disconnect()
{
}
function _pathToChannel($path)
{
return '';
}
}

View File

@ -1,41 +1,24 @@
// update the local timeline from a Comet server
// add a notice encoded as JSON into the current timeline
//
var updater = function()
{
var _server;
var _timeline;
var _userid;
var _replyurl;
var _favorurl;
var _deleteurl;
var _cometd;
RealtimeUpdate = {
return {
init: function(server, timeline, userid, replyurl, favorurl, deleteurl)
{
_cometd = $.cometd; // Uses the default Comet object
_cometd.setLogLevel('debug');
_cometd.init(server);
_server = server;
_timeline = timeline;
_userid = userid;
_favorurl = favorurl;
_replyurl = replyurl;
_deleteurl = deleteurl;
_cometd.subscribe(timeline, receive);
$(window).unload(leave);
}
}
_userid: 0,
_replyurl: '',
_favorurl: '',
_deleteurl: '',
function leave()
init: function(userid, replyurl, favorurl, deleteurl)
{
_cometd.disconnect();
}
RealtimeUpdate._userid = userid;
RealtimeUpdate._replyurl = replyurl;
RealtimeUpdate._favorurl = favorurl;
RealtimeUpdate._deleteurl = deleteurl;
},
function receive(message)
receive: function(data)
{
id = message.data.id;
id = data.id;
// Don't add it if it already exists
@ -43,15 +26,14 @@ var updater = function()
return;
}
var noticeItem = makeNoticeItem(message.data);
var noticeItem = RealtimeUpdate.makeNoticeItem(data);
$("#notices_primary .notices").prepend(noticeItem, true);
$("#notices_primary .notice:first").css({display:"none"});
$("#notices_primary .notice:first").fadeIn(1000);
NoticeHover();
NoticeReply();
}
},
function makeNoticeItem(data)
makeNoticeItem: function(data)
{
user = data['user'];
html = data['html'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
@ -93,26 +75,26 @@ var updater = function()
ni = ni+"</div>"+
"<div class=\"notice-options\">";
if (_userid != 0) {
if (RealtimeUpdate._userid != 0) {
var input = $("form#form_notice fieldset input#token");
var session_key = input.val();
ni = ni+makeFavoriteForm(data['id'], session_key);
ni = ni+makeReplyLink(data['id'], data['user']['screen_name']);
if (_userid == data['user']['id']) {
ni = ni+makeDeleteLink(data['id']);
ni = ni+RealtimeUpdate.makeFavoriteForm(data['id'], session_key);
ni = ni+RealtimeUpdate.makeReplyLink(data['id'], data['user']['screen_name']);
if (RealtimeUpdate._userid == data['user']['id']) {
ni = ni+RealtimeUpdate.makeDeleteLink(data['id']);
}
}
ni = ni+"</div>"+
"</li>";
return ni;
}
},
function makeFavoriteForm(id, session_key)
makeFavoriteForm: function(id, session_key)
{
var ff;
ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+_favorurl+"\">"+
ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+RealtimeUpdate._favorurl+"\">"+
"<fieldset>"+
"<legend>Favor this notice</legend>"+ // XXX: i18n
"<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
@ -121,25 +103,25 @@ var updater = function()
"</fieldset>"+
"</form>";
return ff;
}
},
function makeReplyLink(id, nickname)
makeReplyLink: function(id, nickname)
{
var rl;
rl = "<dl class=\"notice_reply\">"+
"<dt>Reply to this notice</dt>"+
"<dd>"+
"<a href=\""+_replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span>"+
"<a href=\""+RealtimeUpdate._replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span>"+
"</a>"+
"</dd>"+
"</dl>";
return rl;
}
},
function makeDeleteLink(id)
makeDeleteLink: function(id)
{
var dl, delurl;
delurl = _deleteurl.replace("0000000000", id);
delurl = RealtimeUpdate._deleteurl.replace("0000000000", id);
dl = "<dl class=\"notice_delete\">"+
"<dt>Delete this notice</dt>"+
@ -149,6 +131,5 @@ var updater = function()
"</dl>";
return dl;
}
}();
},
}

View File

@ -1028,7 +1028,7 @@ border-radius:7px;
-webkit-border-radius:7px;
}
#jOverlayLoading {
top:22.5%;
top:5%;
left:40%;
}
#attachment_view img {