diff --git a/actions/showstream.php b/actions/showstream.php index dd6c91b004..5a22bdf288 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -66,17 +66,19 @@ class ShowstreamAction extends ProfileAction $base = $this->profile->getFancyName(); if (!empty($this->tag)) { if ($this->page == 1) { - // TRANS: Page title showing tagged notices in one user's stream. Param 1 is the username, 2 is the hash tag. + // TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. return sprintf(_('%1$s tagged %2$s'), $base, $this->tag); } else { - // TRANS: Page title showing tagged notices in one user's stream. Param 1 is the username, 2 is the hash tag, 3 is the page number. + // TRANS: Page title showing tagged notices in one user's stream. + // TRANS: %1$s is the username, %2$s is the hash tag, %1$d is the page number. return sprintf(_('%1$s tagged %2$s, page %3$d'), $base, $this->tag, $this->page); } } else { if ($this->page == 1) { return $base; } else { - // TRANS: Extended page title showing tagged notices in one user's stream. Param 1 is the username, param 2 is the page number. + // TRANS: Extended page title showing tagged notices in one user's stream. + // TRANS: %1$s is the username, %2$d is the page number. return sprintf(_('%1$s, page %2$d'), $base, $this->page); @@ -120,6 +122,8 @@ class ShowstreamAction extends ProfileAction common_local_url('userrss', array('nickname' => $this->user->nickname, 'tag' => $this->tag)), + // TRANS: Title for link to notice feed. + // TRANS: %1$s is a user nickname, %2$s is a hashtag. sprintf(_('Notice feed for %1$s tagged %2$s (RSS 1.0)'), $this->user->nickname, $this->tag))); } @@ -127,6 +131,8 @@ class ShowstreamAction extends ProfileAction return array(new Feed(Feed::RSS1, common_local_url('userrss', array('nickname' => $this->user->nickname)), + // TRANS: Title for link to notice feed. + // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (RSS 1.0)'), $this->user->nickname)), new Feed(Feed::RSS2, @@ -134,6 +140,8 @@ class ShowstreamAction extends ProfileAction array( 'id' => $this->user->id, 'format' => 'rss')), + // TRANS: Title for link to notice feed. + // TRANS: %s is a user nickname. sprintf(_('Notice feed for %s (RSS 2.0)'), $this->user->nickname)), new Feed(Feed::ATOM, @@ -146,6 +154,8 @@ class ShowstreamAction extends ProfileAction new Feed(Feed::FOAF, common_local_url('foaf', array('nickname' => $this->user->nickname)), + // TRANS: Title for link to notice feed. FOAF stands for Friend of a Friend. + // TRANS: More information at http://www.foaf-project.org. %s is a user nickname. sprintf(_('FOAF for %s'), $this->user->nickname))); } @@ -197,17 +207,23 @@ class ShowstreamAction extends ProfileAction function showEmptyListMessage() { - $message = sprintf(_('This is the timeline for %1$s but %2$s hasn\'t posted anything yet.'), $this->user->nickname, $this->user->nickname) . ' '; + // TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. + $message = sprintf(_('This is the timeline for %1$s, but %1$s hasn\'t posted anything yet.'), $this->user->nickname) . ' '; if (common_logged_in()) { $current_user = common_current_user(); if ($this->user->id === $current_user->id) { + // TRANS: Second sentence of empty list message for a stream for the user themselves. $message .= _('Seen anything interesting recently? You haven\'t posted any notices yet, now would be a good time to start :)'); } else { + // TRANS: Second sentence of empty list message for a non-self stream. %1$s is a user nickname, %2$s is a part of a URL. + // TRANS: This message contains a Markdown link. Keep "](" together. $message .= sprintf(_('You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%%?status_textarea=%2$s).'), $this->user->nickname, '@' . $this->user->nickname); } } else { + // TRANS: Second sentence of empty message for anonymous users. %s is a user nickname. + // TRANS: This message contains a Markdown link. Keep "](" together. $message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.'), $this->user->nickname); } @@ -243,11 +259,15 @@ class ShowstreamAction extends ProfileAction function showAnonymousMessage() { if (!(common_config('site','closed') || common_config('site','inviteonly'))) { + // TRANS: Announcement for anonymous users showing a stream if site registrations are open. + // TRANS: This message contains a Markdown link. Keep "](" together. $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . 'based on the Free Software [StatusNet](http://status.net/) tool. ' . '[Join now](%%%%action.register%%%%) to follow **%s**\'s notices and many more! ([Read more](%%%%doc.help%%%%))'), $this->user->nickname, $this->user->nickname); } else { + // TRANS: Announcement for anonymous users showing a stream if site registrations are closed or invite only. + // TRANS: This message contains a Markdown link. Keep "](" together. $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . 'based on the Free Software [StatusNet](http://status.net/) tool. '), $this->user->nickname, $this->user->nickname); @@ -287,7 +307,6 @@ class ProfileNoticeListItem extends DoFollowListItem * * @return void */ - function showRepeat() { if (!empty($this->repeat)) { @@ -298,13 +317,14 @@ class ProfileNoticeListItem extends DoFollowListItem 'class' => 'url'); if (!empty($this->profile->fullname)) { - $attrs['title'] = $this->profile->fullname . ' (' . $this->profile->nickname . ')'; + $attrs['title'] = $this->getFancyName(); } $this->out->elementStart('span', 'repeat'); $text_link = XMLStringer::estring('a', $attrs, $this->profile->nickname); + // TRANS: Link to the author of a repeated notice. %s is a linked nickname. $this->out->raw(sprintf(_('Repeat of %s'), $text_link)); $this->out->elementEnd('span'); diff --git a/lib/action.php b/lib/action.php index 766cfca269..427b85427b 100644 --- a/lib/action.php +++ b/lib/action.php @@ -873,16 +873,17 @@ class Action extends HTMLOutputter // lawsuit // TRANS: Secondary navigation menu option leading to privacy policy. _('Privacy')); $this->menuItem(common_local_url('doc', array('title' => 'source')), - // TRANS: Secondary navigation menu option. + // TRANS: Secondary navigation menu option. Leads to information about StatusNet and its license. _('Source')); $this->menuItem(common_local_url('version'), // TRANS: Secondary navigation menu option leading to version information on the StatusNet site. _('Version')); $this->menuItem(common_local_url('doc', array('title' => 'contact')), - // TRANS: Secondary navigation menu option leading to contact information on the StatusNet site. + // TRANS: Secondary navigation menu option leading to e-mail contact information on the + // TRANS: StatusNet site, where to report bugs, ... _('Contact')); $this->menuItem(common_local_url('doc', array('title' => 'badge')), - // TRANS: Secondary navigation menu option. + // TRANS: Secondary navigation menu option. Leads to information about embedding a timeline widget. _('Badge')); Event::handle('EndSecondaryNav', array($this)); } diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index 90bf671eb1..b43a2b5f11 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -188,10 +188,10 @@ class Ostatus_profile extends Memcached_DataObject } else if ($this->group_id && !$this->profile_id) { return true; } else if ($this->group_id && $this->profile_id) { - // TRANS: Server exception. + // TRANS: Server exception. %s is a URI. throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs set for %s.'),$this->uri)); } else { - // TRANS: Server exception. + // TRANS: Server exception. %s is a URI. throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs empty for %s.'),$this->uri)); } } @@ -405,6 +405,7 @@ class Ostatus_profile extends Memcached_DataObject } else if ($feed->localName == 'rss') { // @fixme check namespace $this->processRssFeed($feed, $source); } else { + // TRANS: Exception. throw new Exception(_m('Unknown feed format.')); } } @@ -428,6 +429,7 @@ class Ostatus_profile extends Memcached_DataObject $channels = $rss->getElementsByTagName('channel'); if ($channels->length == 0) { + // TRANS: Exception. throw new Exception(_m('RSS feed without a channel.')); } else if ($channels->length > 1) { common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed"); @@ -555,7 +557,7 @@ class Ostatus_profile extends Memcached_DataObject $sourceContent = $note->title; } else { // @fixme fetch from $sourceUrl? - // TRANS: Client exception. %s is a source URL. + // TRANS: Client exception. %s is a source URI. throw new ClientException(sprintf(_m('No content for notice %s.'),$sourceUri)); } @@ -589,7 +591,8 @@ class Ostatus_profile extends Memcached_DataObject // so we can fold-out the full version inline. // @fixme I18N this tooltip will be saved with the site's default language - // TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime this will usually be replaced with localized text from StatusNet core messages. + // TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime + // TRANS: this will usually be replaced with localised text from StatusNet core messages. $showMoreText = _m('Show more'); $attachUrl = common_local_url('attachment', array('attachment' => $attachment->id)); @@ -840,7 +843,7 @@ class Ostatus_profile extends Memcached_DataObject return self::ensureFeedURL($feedurl, $hints); } - // TRANS: Exception. + // TRANS: Exception. %s is a URL. throw new Exception(sprintf(_m('Could not find a feed URL for profile page %s.'),$finalUrl)); } @@ -978,6 +981,7 @@ class Ostatus_profile extends Memcached_DataObject } // XXX: make some educated guesses here + // TRANS: Feed sub exception. throw new FeedSubException(_m('Can\'t find enough profile information to make a feed.')); } @@ -1037,6 +1041,7 @@ class Ostatus_profile extends Memcached_DataObject return; } if (!common_valid_http_url($url)) { + // TRANS: Server exception. %s is a URL. throw new ServerException(sprintf(_m("Invalid avatar URL %s."), $url)); } @@ -1047,6 +1052,7 @@ class Ostatus_profile extends Memcached_DataObject } if (!$self) { throw new ServerException(sprintf( + // TRANS: Server exception. %s is a URI. _m("Tried to update avatar for unsaved remote profile %s."), $this->uri)); } @@ -1056,6 +1062,7 @@ class Ostatus_profile extends Memcached_DataObject $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar'); try { if (!copy($url, $temp_filename)) { + // TRANS: Server exception. %s is a URL. throw new ServerException(sprintf(_m("Unable to fetch avatar from %s."), $url)); } @@ -1338,7 +1345,7 @@ class Ostatus_profile extends Memcached_DataObject $oprofile->profile_id = $profile->insert(); if (!$oprofile->profile_id) { - // TRANS: Exception. + // TRANS: Server exception. throw new ServerException(_m('Can\'t save local profile.')); } } else { @@ -1349,7 +1356,7 @@ class Ostatus_profile extends Memcached_DataObject $oprofile->group_id = $group->insert(); if (!$oprofile->group_id) { - // TRANS: Exception. + // TRANS: Server exception. throw new ServerException(_m('Can\'t save local profile.')); } } @@ -1357,7 +1364,7 @@ class Ostatus_profile extends Memcached_DataObject $ok = $oprofile->insert(); if (!$ok) { - // TRANS: Exception. + // TRANS: Server exception. throw new ServerException(_m('Can\'t save OStatus profile.')); } @@ -1796,6 +1803,7 @@ class Ostatus_profile extends Memcached_DataObject if ($file_id === false) { common_log_db_error($file, "INSERT", __FILE__); + // TRANS: Server exception. throw new ServerException(_m('Could not store HTML content of long post as file.')); }