Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Neff <benjamin@coding4coffee.ch>2018-02-09 00:52:29 +0300
committerBenjamin Neff <benjamin@coding4coffee.ch>2018-02-09 00:54:14 +0300
commit1f3ad2fa659952ea84c70fd56cd9f2a967291690 (patch)
tree78c067a091d61cd61d1a06068efb0d1295af75a8
parentcf2bd66005f7fd4397e8e15d666549d430d39d38 (diff)
parentaff4be882194463e20bfb40a26e6e1508fb7d05c (diff)
Merge branch 'release/0.7.3.0'v0.7.3.0
-rw-r--r--Changelog.md24
-rw-r--r--Gemfile8
-rw-r--r--Gemfile.lock30
-rw-r--r--app/assets/javascripts/app/pages/contacts.js2
-rw-r--r--app/assets/javascripts/app/router.js2
-rw-r--r--app/assets/javascripts/app/views/publisher_view.js3
-rw-r--r--app/assets/javascripts/mobile/bookmarklet.js15
-rw-r--r--app/assets/stylesheets/people.scss2
-rw-r--r--app/assets/stylesheets/settings.scss4
-rw-r--r--app/controllers/blocks_controller.rb16
-rw-r--r--app/controllers/streams_controller.rb7
-rw-r--r--app/helpers/interim_stream_hackiness_helper.rb2
-rw-r--r--app/helpers/notifications_helper.rb6
-rw-r--r--app/helpers/notifier_helper.rb2
-rw-r--r--app/models/block.rb5
-rw-r--r--app/models/conversation.rb5
-rw-r--r--app/models/services/twitter.rb2
-rw-r--r--app/models/user.rb6
-rw-r--r--app/views/contacts/_sidebar.html.haml2
-rw-r--r--app/views/contacts/index.html.haml2
-rw-r--r--app/views/shared/_invitations.haml2
-rw-r--r--app/views/users/_close_account_modal.haml3
-rw-r--r--app/views/users/_edit.haml24
-rw-r--r--app/workers/cleanup_old_exports.rb21
-rw-r--r--app/workers/send_base.rb2
-rw-r--r--config/defaults.yml2
-rw-r--r--config/locales/devise/devise.de_formal.yml6
-rw-r--r--config/locales/devise/devise.oc.yml2
-rw-r--r--config/locales/devise/devise.pt-PT.yml4
-rw-r--r--config/locales/diaspora/bg.yml113
-rw-r--r--config/locales/diaspora/de.yml8
-rw-r--r--config/locales/diaspora/de_formal.yml92
-rw-r--r--config/locales/diaspora/en.yml2
-rw-r--r--config/locales/diaspora/es.yml4
-rw-r--r--config/locales/diaspora/fr.yml2
-rw-r--r--config/locales/diaspora/hy.yml57
-rw-r--r--config/locales/diaspora/ia.yml40
-rw-r--r--config/locales/diaspora/it.yml7
-rw-r--r--config/locales/diaspora/nb.yml16
-rw-r--r--config/locales/diaspora/oc.yml2
-rw-r--r--config/locales/diaspora/pt-BR.yml12
-rw-r--r--config/locales/diaspora/pt-PT.yml112
-rw-r--r--config/locales/diaspora/zh-TW.yml8
-rw-r--r--config/locales/javascript/javascript.bg.yml3
-rw-r--r--config/locales/javascript/javascript.de.yml4
-rw-r--r--config/locales/javascript/javascript.de_formal.yml12
-rw-r--r--config/locales/javascript/javascript.ia.yml2
-rw-r--r--config/locales/javascript/javascript.pt-PT.yml10
-rw-r--r--config/schedule.yml4
-rw-r--r--features/desktop/change_settings.feature2
-rw-r--r--features/desktop/invitations.feature6
-rw-r--r--lib/diaspora/federated/contact_retraction.rb4
-rw-r--r--lib/diaspora/federation/entities.rb13
-rw-r--r--lib/diaspora/federation/mappings.rb1
-rw-r--r--lib/diaspora/federation/receive.rb22
-rw-r--r--lib/publisher.rb8
-rw-r--r--lib/stream/multi.rb2
-rwxr-xr-xscript/server16
-rw-r--r--spec/controllers/blocks_controller_spec.rb34
-rw-r--r--spec/controllers/streams_controller_spec.rb14
-rw-r--r--spec/helpers/interim_stream_hackiness_helper_spec.rb15
-rw-r--r--spec/helpers/notifications_helper_spec.rb16
-rw-r--r--spec/helpers/notifier_helper_spec.rb7
-rw-r--r--spec/integration/federation/receive_federation_messages_spec.rb5
-rw-r--r--spec/integration/federation/shared_receive_stream_items.rb9
-rw-r--r--spec/lib/diaspora/federation/entities_spec.rb42
-rw-r--r--spec/lib/diaspora/federation/receive_spec.rb16
-rw-r--r--spec/lib/publisher_spec.rb7
-rw-r--r--spec/lib/stream/multi_spec.rb2
-rw-r--r--spec/models/block_spec.rb9
-rw-r--r--spec/models/services/twitter_spec.rb14
-rw-r--r--spec/models/user_spec.rb13
-rw-r--r--spec/shared_behaviors/receiving.rb73
-rw-r--r--spec/workers/cleanup_old_exports_spec.rb53
-rw-r--r--spec/workers/send_base_spec.rb14
-rw-r--r--spec/workers/send_private_spec.rb17
76 files changed, 878 insertions, 277 deletions
diff --git a/Changelog.md b/Changelog.md
index 1096744f0..3009b368e 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,27 @@
+# 0.7.3.0
+
+## Refactor
+* Work on the data downloads: Fixed general layout of buttons, added a timestamp and implemented auto-deletion of old exports [#7684](https://github.com/diaspora/diaspora/pull/7684)
+* Increase Twitter character limit to 280 [#7694](https://github.com/diaspora/diaspora/pull/7694)
+* Improve password autocomplete with password managers [#7642](https://github.com/diaspora/diaspora/pull/7642)
+* Remove the limit of participants in private conversations [#7705](https://github.com/diaspora/diaspora/pull/7705)
+* Send blocks to the blocked persons pod for better UX [#7705](https://github.com/diaspora/diaspora/pull/7705)
+* Send a dummy participation on all incoming public posts to increase interaction consistency [#7708](https://github.com/diaspora/diaspora/pull/7708)
+
+## Bug fixes
+* Fix invite link on the contacts page when the user has no contacts [#7690](https://github.com/diaspora/diaspora/pull/7690)
+* Fix the mobile bookmarklet when called without parameters [#7698](https://github.com/diaspora/diaspora/pull/7698)
+* Properly build the #newhere message for people who got invited [#7702](https://github.com/diaspora/diaspora/pull/7702)
+* Fix the admin report view for posts without text [#7706](https://github.com/diaspora/diaspora/pull/7706)
+* Upgrade Nokogiri to fix [a disclosed vulnerability in libxml2](https://github.com/sparklemotion/nokogiri/issues/1714)
+
+## Features
+* Check if redis is running in script/server [#7685](https://github.com/diaspora/diaspora/pull/7685)
+
+# 0.7.2.1
+
+Fixes notifications when people remove their birthday date [#7691](https://github.com/diaspora/diaspora/pull/7691)
+
# 0.7.2.0
## Bug fixes
diff --git a/Gemfile b/Gemfile
index 8234f47be..c87f86b7b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -15,8 +15,8 @@ gem "unicorn-worker-killer", "0.4.4"
# Federation
-gem "diaspora_federation-json_schema", "0.2.2"
-gem "diaspora_federation-rails", "0.2.2"
+gem "diaspora_federation-json_schema", "0.2.3"
+gem "diaspora_federation-rails", "0.2.3"
# API and JSON
@@ -137,7 +137,7 @@ gem "leaflet-rails", "1.2.0"
# Parsing
-gem "nokogiri", "1.8.1"
+gem "nokogiri", "1.8.2"
gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.4.0"
gem "ruby-oembed", "0.12.0"
@@ -292,7 +292,7 @@ group :test do
gem "timecop", "0.9.1"
gem "webmock", "3.0.1", require: false
- gem "diaspora_federation-test", "0.2.2"
+ gem "diaspora_federation-test", "0.2.3"
# Coverage
gem "coveralls", "0.8.21", require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 625eff57f..054f1b156 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -166,18 +166,18 @@ GEM
devise
rails (>= 3.0.4)
diaspora-prosody-config (0.0.7)
- diaspora_federation (0.2.2)
- faraday (>= 0.9.0, < 0.14.0)
+ diaspora_federation (0.2.3)
+ faraday (>= 0.9.0, < 0.15.0)
faraday_middleware (>= 0.10.0, < 0.13.0)
nokogiri (~> 1.6, >= 1.6.8)
typhoeus (~> 1.0)
valid (~> 1.0)
- diaspora_federation-json_schema (0.2.2)
- diaspora_federation-rails (0.2.2)
+ diaspora_federation-json_schema (0.2.3)
+ diaspora_federation-rails (0.2.3)
actionpack (>= 4.2, < 6)
- diaspora_federation (= 0.2.2)
- diaspora_federation-test (0.2.2)
- diaspora_federation (= 0.2.2)
+ diaspora_federation (= 0.2.3)
+ diaspora_federation-test (0.2.3)
+ diaspora_federation (= 0.2.3)
fabrication (~> 2.16)
uuid (~> 2.3, >= 2.3.8)
diff-lcs (1.3)
@@ -194,7 +194,7 @@ GEM
rake
et-orbi (1.0.5)
tzinfo
- ethon (0.10.1)
+ ethon (0.11.0)
ffi (>= 1.3.0)
excon (0.59.0)
execjs (2.7.0)
@@ -204,7 +204,7 @@ GEM
sigar (~> 0.7.3)
state_machines
thor
- fabrication (2.16.3)
+ fabrication (2.20.1)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
@@ -389,7 +389,7 @@ GEM
naught (1.1.0)
nenv (0.3.0)
nio4r (2.1.0)
- nokogiri (1.8.1)
+ nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
notiffany (0.1.1)
nenv (~> 0.1)
@@ -783,9 +783,9 @@ DEPENDENCIES
devise (= 4.3.0)
devise_lastseenable (= 0.0.6)
diaspora-prosody-config (= 0.0.7)
- diaspora_federation-json_schema (= 0.2.2)
- diaspora_federation-rails (= 0.2.2)
- diaspora_federation-test (= 0.2.2)
+ diaspora_federation-json_schema (= 0.2.3)
+ diaspora_federation-rails (= 0.2.3)
+ diaspora_federation-test (= 0.2.3)
entypo-rails (= 3.0.0)
eye (= 0.9.2)
factory_girl_rails (= 4.8.0)
@@ -820,7 +820,7 @@ DEPENDENCIES
minitest
mobile-fu (= 1.4.0)
mysql2 (= 0.4.9)
- nokogiri (= 1.8.1)
+ nokogiri (= 1.8.2)
omniauth (= 1.6.1)
omniauth-facebook (= 4.0.0)
omniauth-tumblr (= 1.2)
@@ -904,4 +904,4 @@ DEPENDENCIES
will_paginate (= 3.1.6)
BUNDLED WITH
- 1.15.4
+ 1.16.1
diff --git a/app/assets/javascripts/app/pages/contacts.js b/app/assets/javascripts/app/pages/contacts.js
index 01edab466..9f7b27311 100644
--- a/app/assets/javascripts/app/pages/contacts.js
+++ b/app/assets/javascripts/app/pages/contacts.js
@@ -9,7 +9,7 @@ app.pages.Contacts = Backbone.View.extend({
"click #chat_privilege_toggle" : "toggleChatPrivilege",
"click #change_aspect_name" : "showAspectNameForm",
"click .conversation_button": "showMessageModal",
- "click #invitations-button": "showInvitationsModal"
+ "click .invitations-button": "showInvitationsModal"
},
initialize: function(opts) {
diff --git a/app/assets/javascripts/app/router.js b/app/assets/javascripts/app/router.js
index 905693b99..702edc903 100644
--- a/app/assets/javascripts/app/router.js
+++ b/app/assets/javascripts/app/router.js
@@ -186,7 +186,7 @@ app.Router = Backbone.Router.extend({
},
spotlight: function() {
- $("#invitations-button").click(function() {
+ $(".invitations-button").click(function() {
app.helpers.showModal("#invitationsModal");
});
},
diff --git a/app/assets/javascripts/app/views/publisher_view.js b/app/assets/javascripts/app/views/publisher_view.js
index 19eb92296..84f957395 100644
--- a/app/assets/javascripts/app/views/publisher_view.js
+++ b/app/assets/javascripts/app/views/publisher_view.js
@@ -178,6 +178,9 @@ app.views.Publisher = Backbone.View.extend({
if (gon.preloads.getting_started) {
this.open();
this.viewGettingStarted.show();
+ if (gon.preloads.mentioned_person) {
+ this.mention.addPersonToMentions(gon.preloads.mentioned_person);
+ }
}
},
diff --git a/app/assets/javascripts/mobile/bookmarklet.js b/app/assets/javascripts/mobile/bookmarklet.js
index 94822c2ef..f8a3ba12d 100644
--- a/app/assets/javascripts/mobile/bookmarklet.js
+++ b/app/assets/javascripts/mobile/bookmarklet.js
@@ -6,16 +6,21 @@ $(document).ready(function() {
return params.content;
}
- var content = params.title + " - " + params.url;
- if (params.notes.length > 0) {
- content += " - " + params.notes;
+ var separator = "\n\n";
+ var contents = "### " + params.title + separator;
+ if (params.notes) {
+ var notes = params.notes.toString().replace(/(?:\r\n|\r|\n)/g, "\n> ");
+ contents += "> " + notes + separator;
}
- return content;
+ contents += params.url;
+ return contents;
}
var content = publisherContent(gon.preloads.bookmarklet);
if (content.length > 0) {
- $("#status_message_text").val(content);
+ var textarea = $("#status_message_text");
+ textarea.val(content);
+ autosize.update(textarea);
}
});
// @license-end
diff --git a/app/assets/stylesheets/people.scss b/app/assets/stylesheets/people.scss
index 65a9100ae..2283f8066 100644
--- a/app/assets/stylesheets/people.scss
+++ b/app/assets/stylesheets/people.scss
@@ -3,7 +3,7 @@
.term { font-weight: 700; }
small { margin-left: 15px; }
}
- #invitations-button { padding-left: 0; }
+ .invitations-button { padding-left: 0; }
}
#people-stream {
.media, .media-body {
diff --git a/app/assets/stylesheets/settings.scss b/app/assets/stylesheets/settings.scss
index 11cb5b13f..15a4c6622 100644
--- a/app/assets/stylesheets/settings.scss
+++ b/app/assets/stylesheets/settings.scss
@@ -36,3 +36,7 @@
max-width: 100%;
min-width: 100%;
}
+
+.account-data h6 {
+ color: $text-grey;
+}
diff --git a/app/controllers/blocks_controller.rb b/app/controllers/blocks_controller.rb
index a9bcae865..7256a38c8 100644
--- a/app/controllers/blocks_controller.rb
+++ b/app/controllers/blocks_controller.rb
@@ -6,7 +6,7 @@ class BlocksController < ApplicationController
def create
block = current_user.blocks.new(block_params)
- disconnect_if_contact(block.person) if block.save
+ send_message(block) if block.save
respond_to do |format|
format.json { head :no_content }
@@ -14,7 +14,9 @@ class BlocksController < ApplicationController
end
def destroy
- notice = if current_user.blocks.find_by(id: params[:id])&.delete
+ block = current_user.blocks.find_by(id: params[:id])
+ notice = if block&.delete
+ ContactRetraction.for(block).defer_dispatch(current_user)
{notice: t("blocks.destroy.success")}
else
{error: t("blocks.destroy.failure")}
@@ -28,8 +30,14 @@ class BlocksController < ApplicationController
private
- def disconnect_if_contact(person)
- current_user.contact_for(person).try {|contact| current_user.disconnect(contact) }
+ def send_message(block)
+ contact = current_user.contact_for(block.person)
+
+ if contact
+ current_user.disconnect(contact)
+ elsif block.person.remote?
+ Diaspora::Federation::Dispatcher.defer_dispatch(current_user, block)
+ end
end
def block_params
diff --git a/app/controllers/streams_controller.rb b/app/controllers/streams_controller.rb
index 5e638e80d..89190168c 100644
--- a/app/controllers/streams_controller.rb
+++ b/app/controllers/streams_controller.rb
@@ -30,7 +30,12 @@ class StreamsController < ApplicationController
end
def multi
- gon.preloads[:getting_started] = current_user.getting_started
+ if current_user.getting_started
+ gon.preloads[:getting_started] = true
+ inviter = current_user.invited_by.try(:person)
+ gon.preloads[:mentioned_person] = {name: inviter.name, handle: inviter.diaspora_handle} if inviter
+ end
+
stream_responder(Stream::Multi)
end
diff --git a/app/helpers/interim_stream_hackiness_helper.rb b/app/helpers/interim_stream_hackiness_helper.rb
index 888155b00..b2c7056c7 100644
--- a/app/helpers/interim_stream_hackiness_helper.rb
+++ b/app/helpers/interim_stream_hackiness_helper.rb
@@ -17,7 +17,7 @@ module InterimStreamHackinessHelper
if params[:prefill].present?
params[:prefill]
elsif defined?(@stream)
- @stream.publisher.text
+ @stream.publisher.prefill
else
nil
end
diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb
index dd1a4cf9a..ffe10a951 100644
--- a/app/helpers/notifications_helper.rb
+++ b/app/helpers/notifications_helper.rb
@@ -17,7 +17,7 @@ module NotificationsHelper
.include?(note.type)
opts.merge!(opts_for_post(note.linked_object))
elsif note.is_a?(Notifications::ContactsBirthday)
- opts.merge!(opts_for_birthday(note.linked_object))
+ opts.merge!(opts_for_birthday(note))
end
end
translation(target_type, opts)
@@ -46,8 +46,8 @@ module NotificationsHelper
}
end
- def opts_for_birthday(person)
- {date: locale_date(person.birthday.to_s)}
+ def opts_for_birthday(note)
+ {date: I18n.l(note.created_at, format: I18n.t("date.formats.fullmonth_day"))}
end
def notification_people_link(note, people=nil)
diff --git a/app/helpers/notifier_helper.rb b/app/helpers/notifier_helper.rb
index eaf1ff597..70e780709 100644
--- a/app/helpers/notifier_helper.rb
+++ b/app/helpers/notifier_helper.rb
@@ -7,7 +7,7 @@ module NotifierHelper
# @return [String] The formatted post.
def post_message(post, opts={})
if post.respond_to? :message
- post.message.try(:plain_text_without_markdown) || post_page_title(post)
+ post.message.try(:plain_text_without_markdown).presence || post_page_title(post)
else
I18n.translate 'notifier.a_post_you_shared'
end
diff --git a/app/models/block.rb b/app/models/block.rb
index f0e79b22b..147361cac 100644
--- a/app/models/block.rb
+++ b/app/models/block.rb
@@ -15,4 +15,9 @@ class Block < ApplicationRecord
errors[:person_id] << "stop blocking yourself!"
end
end
+
+ # @return [Array<Person>] The recipient of the block
+ def subscribers
+ [person]
+ end
end
diff --git a/app/models/conversation.rb b/app/models/conversation.rb
index 5197ebd71..bb7cc1f3b 100644
--- a/app/models/conversation.rb
+++ b/app/models/conversation.rb
@@ -9,13 +9,8 @@ class Conversation < ApplicationRecord
has_many :participants, class_name: "Person", through: :conversation_visibilities, source: :person
has_many :messages, -> { order("created_at ASC") }, inverse_of: :conversation
- validate :max_participants
validate :local_recipients
- def max_participants
- errors.add(:max_participants, "too many participants") if participants.count > 20
- end
-
def local_recipients
recipients.each do |recipient|
if recipient.local?
diff --git a/app/models/services/twitter.rb b/app/models/services/twitter.rb
index b14791736..7b54c392e 100644
--- a/app/models/services/twitter.rb
+++ b/app/models/services/twitter.rb
@@ -3,7 +3,7 @@
class Services::Twitter < Service
include Rails.application.routes.url_helpers
- MAX_CHARACTERS = 140
+ MAX_CHARACTERS = 280
SHORTENED_URL_LENGTH = 21
LINK_PATTERN = %r{https?://\S+}
diff --git a/app/models/user.rb b/app/models/user.rb
index ac16de682..e6fa252be 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -539,6 +539,8 @@ class User < ApplicationRecord
:post_default_public].each do |field|
self[field] = false
end
+ self.remove_export = true
+ self.remove_exported_photos_file = true
self[:disable_mail] = true
self[:strip_exif] = true
self[:email] = "deletedaccount_#{self[:id]}@example.org"
@@ -579,7 +581,7 @@ class User < ApplicationRecord
attributes.keys - %w(id username encrypted_password created_at updated_at locked_at
serialized_private_key getting_started
disable_mail show_community_spotlight_in_stream
- strip_exif email remove_after export exporting exported_at
- exported_photos_file exporting_photos exported_photos_at)
+ strip_exif email remove_after export exporting
+ exported_photos_file exporting_photos)
end
end
diff --git a/app/views/contacts/_sidebar.html.haml b/app/views/contacts/_sidebar.html.haml
index 111097bab..a3a637520 100644
--- a/app/views/contacts/_sidebar.html.haml
+++ b/app/views/contacts/_sidebar.html.haml
@@ -11,7 +11,7 @@
class: "btn btn-link"
- if AppConfig.settings.invitations.open?
.text-center
- .btn.btn-link#invitations-button{"data-toggle" => "modal"}
+ .btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t("invitations.new.invite_someone_to_join")
= render "shared/modal",
path: new_user_invitation_path,
diff --git a/app/views/contacts/index.html.haml b/app/views/contacts/index.html.haml
index 217f61c5d..dd81e56fb 100644
--- a/app/views/contacts/index.html.haml
+++ b/app/views/contacts/index.html.haml
@@ -27,7 +27,7 @@
!= t(".no_contacts_message",
community_spotlight: link_to(t(".community_spotlight"), community_spotlight_path))
%p
- .btn.btn-link{"data-toggle" => "modal"}
+ .btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t("invitations.new.invite_someone_to_join")
#paginate
diff --git a/app/views/shared/_invitations.haml b/app/views/shared/_invitations.haml
index b69a18c73..55445bc04 100644
--- a/app/views/shared/_invitations.haml
+++ b/app/views/shared/_invitations.haml
@@ -2,7 +2,7 @@
= invite_link(current_user.invitation_code)
- if AppConfig.mail.enable?
- .invitations-link.btn.btn-link#invitations-button{"data-toggle" => "modal"}
+ .invitations-link.btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t(".by_email")
- content_for :after_content do
diff --git a/app/views/users/_close_account_modal.haml b/app/views/users/_close_account_modal.haml
index 15ef12935..0f95dbe54 100644
--- a/app/views/users/_close_account_modal.haml
+++ b/app/views/users/_close_account_modal.haml
@@ -34,7 +34,8 @@
= f.error_messages
.form-group
= f.label :close_account_password, t("users.edit.current_password"), for: :close_account_password
- = f.password_field :current_password, id: :close_account_password, class: "form-control"
+ = f.password_field :current_password, id: :close_account_password, class: "form-control",
+ autocomplete: "current-password"
.modal-footer
.btn.btn-default{type: "button", data: {dismiss: "modal"}, aria: {hidden: "true"}}
= t("cancel")
diff --git a/app/views/users/_edit.haml b/app/views/users/_edit.haml
index 5b6ad6172..0ec3102b7 100644
--- a/app/views/users/_edit.haml
+++ b/app/views/users/_edit.haml
@@ -39,18 +39,18 @@
= f.label :current_password, t(".current_password"), class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :current_password, placeholder: t(".current_password_expl"),
- class: "form-control"
+ class: "form-control", autocomplete: "current-password"
.form-group
= f.label :password, t(".new_password"), class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :password, placeholder: t(".character_minimum_expl"),
- class: "form-control"
+ class: "form-control", autocomplete: "new-password"
.form-group
= f.label :password_confirmation, t("registrations.new.password_confirmation"),
class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :password_confirmation, placeholder: t(".character_minimum_expl"),
- class: "form-control"
+ class: "form-control", autocomplete: "new-password"
.clearfix
= f.submit t(".change_password"), class: "btn btn-primary pull-right", name: "change_password"
@@ -181,35 +181,33 @@
%hr
.row
- .col-md-6#account_data
+ .col-md-6.account-data
%h3= t(".export_data")
+ %h4= t("profile")
.form-group
- if current_user.exporting
.export-in-progress= t(".export_in_progress")
- elsif current_user.export.present?
- = link_to t(".request_export_update"), export_profile_user_path, method: :post,
- class: "btn btn-default"
- .small-horizontal-spacer
= link_to t(".download_export"), download_profile_user_path,
class: "btn btn-success"
- .small-horizontal-spacer
+ = link_to t(".request_export_update"), export_profile_user_path, method: :post,
+ class: "btn btn-default"
%h6
- = t(".last_exported_at", timestamp: current_user.exported_at)
+ = t(".last_exported_html", timeago: timeago(current_user.exported_at))
- else
= link_to t(".request_export"), export_profile_user_path, method: :post,
class: "btn btn-default"
+ %h4= t("javascripts.profile.photos")
.form-group
- if current_user.exporting_photos
.export-in-progress= t(".export_photos_in_progress")
- elsif current_user.exported_photos_file.present?
+ = link_to t(".download_export_photos"), download_photos_user_path, class: "btn btn-success"
= link_to t(".request_export_photos_update"), export_photos_user_path, method: :post,
class: "btn btn-default"
- .small-horizontal-spacer
- = link_to t(".download_export_photos"), download_photos_user_path, class: "btn btn-success"
- .small-horizontal-spacer
%h6
- = t(".last_exported_at", timestamp: current_user.exported_photos_at)
+ = t(".last_exported_html", timeago: timeago(current_user.exported_photos_at))
- else
= link_to t(".request_export_photos"), export_photos_user_path, method: :post,
class: "btn btn-default"
diff --git a/app/workers/cleanup_old_exports.rb b/app/workers/cleanup_old_exports.rb
new file mode 100644
index 000000000..95b93d30f
--- /dev/null
+++ b/app/workers/cleanup_old_exports.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module Workers
+ class CleanupOldExports < Base
+ sidekiq_options queue: :low
+
+ def perform
+ User.where("exported_at < ?", 14.days.ago).each do |user|
+ user.remove_export = true
+ user.exported_at = nil
+ user.save
+ end
+
+ User.where("exported_photos_at < ?", 14.days.ago).each do |user|
+ user.remove_exported_photos_file = true
+ user.exported_photos_at = nil
+ user.save
+ end
+ end
+ end
+end
diff --git a/app/workers/send_base.rb b/app/workers/send_base.rb
index 4e292de9b..eed2ac19c 100644
--- a/app/workers/send_base.rb
+++ b/app/workers/send_base.rb
@@ -9,7 +9,7 @@ module Workers
protected
def schedule_retry(retry_count, sender_id, obj_str, failed_urls)
- if retry_count < MAX_RETRIES
+ if retry_count < (obj_str.start_with?("Contact") ? MAX_RETRIES + 10 : MAX_RETRIES)
yield(seconds_to_delay(retry_count), retry_count)
else
logger.warn "status=abandon sender=#{sender_id} obj=#{obj_str} failed_urls='[#{failed_urls.join(', ')}]'"
diff --git a/config/defaults.yml b/config/defaults.yml
index d888ddfb3..428039b1f 100644
--- a/config/defaults.yml
+++ b/config/defaults.yml
@@ -4,7 +4,7 @@
defaults:
version:
- number: "0.7.2.0" # Do not touch unless doing a release, do not backport the version number that's in master
+ number: "0.7.3.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"
diff --git a/config/locales/devise/devise.de_formal.yml b/config/locales/devise/devise.de_formal.yml
index 767c60d56..7e6f11bac 100644
--- a/config/locales/devise/devise.de_formal.yml
+++ b/config/locales/devise/devise.de_formal.yml
@@ -10,7 +10,7 @@ de_formal:
confirmed: "Ihre E-Mail-Adresse wurde erfolgreich bestätigt."
new:
resend_confirmation: "Anweisungen zum Bestätigen erneut senden"
- send_instructions: "Sie werden in ein wenigen Minuten eine E-Mail mit Anweisungen zum Bestätigen Ihrer E-Mail-Adresse erhalten."
+ send_instructions: "In Kürze erhalten Sie eine E-Mail mit Hinweisen zur Bestätigung Ihrer E-Mail-Adresse."
send_paranoid_instructions: "Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in wenigen Minuten eine E-Mail mit Anweisungen zur Bestätigung Ihrer E-Mail-Adresse."
failure:
already_authenticated: "Sie sind bereits angemeldet."
@@ -66,7 +66,7 @@ de_formal:
reset_password: "Passwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Sie können auf diese Seite nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls sie von einer E-Mail zur Passwortrücksetzung kommen, vergewissern Sie sich bitte, dass Sie die vollständige angegebene URL verwendet haben."
- send_instructions: "Sie werden in wenigen Minuten eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts erhalten."
+ send_instructions: "Sie werden in wenigen Minuten eine E-Mail mit einer Anleitung zum Rücksetzen Ihres Kennworts erhalten."
send_paranoid_instructions: "Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in wenigen Minuten einen Link zum Zurücksetzen Ihres Passworts an Ihre E-Mail-Adresse."
updated: "Ihr Passwort wurde erfolgreich geändert. Sie sind nun angemeldet."
updated_not_active: "Ihr Passwort wurde erfolgreich geändert."
@@ -105,7 +105,7 @@ de_formal:
unlocked: "Ihr Konto wurde erfolgreich entsperrt. Bitte melden Sie sich an, um fortzufahren."
errors:
messages:
- already_confirmed: "wurde bereits bestätigt, bitte versuchen Sie, sich anzumelden"
+ already_confirmed: "wurde bereits bestätigt, bitte versuchen Sie sich anzumelden"
confirmation_period_expired: "muss innerhalb von %{period} bestätigt werden, bitte erneut anfordern"
expired: "abgelaufen, bitte neu anfordern"
not_found: "nicht gefunden"
diff --git a/config/locales/devise/devise.oc.yml b/config/locales/devise/devise.oc.yml
index 210a3bc0b..aaa1d1c00 100644
--- a/config/locales/devise/devise.oc.yml
+++ b/config/locales/devise/devise.oc.yml
@@ -41,7 +41,7 @@ oc:
subject: "Senhal cambiat"
reset_password_instructions:
change: "Cambiar mon senhal"
- ignore: "Se avètz pas demandat aquò, mercé d'ignorar aqueste corrièl."
+ ignore: "S’avètz pas demandat aquò, mercé d'ignorar aqueste corrièl."
someone_requested: "Qualqu'un a demandat un ligam per cambiar vòstre senhal. S'èretz vos, podètz o far amb lo ligam dejós."
subject: "Instruccions de reïnicializacion del senhal"
wont_change: "Vòstre senhal cambiarà pas tant que n'auretz pas creat un novèl en accedissent al ligam çaijós."
diff --git a/config/locales/devise/devise.pt-PT.yml b/config/locales/devise/devise.pt-PT.yml
index 465dfe850..6398c4cc6 100644
--- a/config/locales/devise/devise.pt-PT.yml
+++ b/config/locales/devise/devise.pt-PT.yml
@@ -54,10 +54,12 @@ pt-PT:
send_password_instructions: "Enviem-me instruções para redefinir a minha palavra-passe"
send_instructions: "Vai receber um email com instruções sobre como alterar a sua palavra-passe dentro de alguns minutos."
updated: "A sua palavra-passe foi alterada com sucesso. A sessão foi iniciada."
+ updated_not_active: "A sua palavra-passe foi alterada com sucesso."
registrations:
destroyed: "Adeus! A sua conta foi cancelada com sucesso. Nós esperamos vê-lo de novo em breve."
signed_up: "Registou-se com sucesso. Caso tenha selecionado essa opção, uma confirmação foi enviada para o seu endereço de email."
- updated: "Atualizou a sua conta com sucesso."
+ update_needs_confirmation: "Atualizou a sua conta com sucesso, mas nós precisamos de verificar o seu novo endereço de e-mail. Por favor, verifique o seu e-mail e siga a hiperligação de confirmação para confirmar o seu novo endereço de e-mail."
+ updated: "A sua conta foi atualizada com sucesso."
sessions:
new:
login: "Iniciar sessão"
diff --git a/config/locales/diaspora/bg.yml b/config/locales/diaspora/bg.yml
index 1107cade7..bb2a56aef 100644
--- a/config/locales/diaspora/bg.yml
+++ b/config/locales/diaspora/bg.yml
@@ -12,6 +12,10 @@ bg:
activerecord:
errors:
models:
+ contact:
+ attributes:
+ person_id:
+ taken: "трябва да бъде уникално сред контактите на този потребител."
person:
attributes:
diaspora_handle:
@@ -29,9 +33,54 @@ bg:
username:
invalid: "не е валидно. Разрешени са само букви, цифри и долна черта."
taken: "е вече заето."
+ admins:
+ admin_bar:
+ pages: "Страници"
+ pod_stats: "Статистики на под-а."
+ user_search: "Търсене на потребители"
+ weekly_user_stats: "Седмични потребителски статистики"
+ stats:
+ 2weeks: "2 седмици"
+ 50_most: "50-те най-популярни тага"
+ comments:
+ one: "%{count} коментар"
+ other: "%{count} коментари"
+ zero: "%{count} коментари"
+ current_segment: "Текущият сегмент съдържа средно %{post_yest} публикации на потребител, от дата %{post_day}"
+ daily: "Ежедневно"
+ display_results: "Показване на резултати от сегмента %{segment}"
+ month: "Месец"
+ posts:
+ one: "%{count} публикация"
+ other: "%{count} публикации"
+ zero: "%{count} публикации"
+ shares:
+ one: "%{count} споделяне"
+ other: "%{count} споделяния"
+ zero: "%{count} споделяния"
+ tag_name: "Име на тага: %{name_tag} Брой: %{count_tag}"
+ usage_statistic: "Статистики на ползване"
+ users:
+ one: "%{count} потребител"
+ other: "%{count} потребители"
+ zero: "%{count} потребители"
+ week: "Седмица"
+ user_search:
+ add_invites: "Добавете покани."
+ email_to: "Електронна поща за покана."
+ users:
+ one: "%{count} открит потребител."
+ other: "%{count} открити потребители."
+ zero: "%{count} открити потребители."
+ you_currently:
+ one: "Имате една останала покана %{link}"
+ other: "В момента имате %{count} оставащи покани %{link}"
+ zero: "Нямате повече покани %{link}"
+ weekly_user_stats:
+ current_server: "Текущата сървърна дата е %{date}"
all_aspects: "Всички аспекти"
are_you_sure: "Сигурни ли сте?"
- are_you_sure_delete_account: "Наистина ли желаете да затворите акаунта си? Няма връщане назад!"
+ are_you_sure_delete_account: "Наистина ли желаете да закриете акаунта си? Няма връщане назад!"
aspect_memberships:
destroy:
failure: "Лицето не бе премахнато от аспекта"
@@ -44,6 +93,7 @@ bg:
aspect_listings:
add_an_aspect: "+ Създаване на аспект"
aspect_stream:
+ make_something: "Създай нещо"
stay_updated: "Останете информирани"
stay_updated_explanation: "Вашият поток се състои от всичките Ви контакти, марки (които следите) и публикации на изявени членове на общността."
destroy:
@@ -69,6 +119,7 @@ bg:
tag_feature: "функция"
tag_question: "въпрос"
introduce_yourself: "Това е вашият поток. Включете се и се представете."
+ keep_pod_running: "Помогнете на %{pod} да работи и купете на сървърите кафе с месечно дарение!"
new_here:
follow: "Следете %{link} и приветствайте новите потребители на Diaspora*!"
learn_more: "Научете повече"
@@ -99,6 +150,7 @@ bg:
success: "Какво ли ще кажат! #sayhello"
bookmarklet:
explanation: "Публикувайте в Diaspora от където и да е, запаметявайки %{link} като отметка."
+ heading: "Книжен пазар"
post_something: "Публикуване в Diaspora"
cancel: "Отказ"
comments:
@@ -108,6 +160,7 @@ bg:
contacts:
index:
all_contacts: "Всички контакти"
+ community_spotlight: "В центъра на вниманието"
my_contacts: "Моите контакти"
no_contacts: "Изглежда трябва да добавите контакти!"
no_contacts_message: "Проверете %{community_spotlight}"
@@ -129,7 +182,7 @@ bg:
subject: "тема"
to: "до"
show:
- delete: "изтриване и блокиране на разговора"
+ delete: "изтриване на разговора"
reply: "отговор"
replying: "Изпращане на отговора..."
date:
@@ -150,8 +203,14 @@ bg:
rejected: "Възникна проблем със следната ел. поща: "
sent: "Покани са изпратени до: "
new:
+ codes_left:
+ one: "%{count} оставащи покани."
+ other: "%{count} оставащи покани."
+ zero: "Няма повече покани."
+ comma_separated_plz: "Можете да въведете няколко и-мейл адреса, разделени със запетая."
invite_someone_to_join: "Поканете някой в Diaspora!"
language: "Език за поканата"
+ paste_link: "Споделете тази връзка с Вашите приятели, за да ги поканите в Диаспора* или им я изпратете директно по електронната поща."
send_an_invitation: "Изпращане на поканата"
layouts:
application:
@@ -197,6 +256,7 @@ bg:
two: "и други %{count}-ма"
zero: "и никой друг"
mark_all_as_read: "Маркиране на всички като прочетени"
+ mark_unread: "Маркирай като непрочетено"
notifications: "Известия"
liked:
one: "%{actors} хареса Ваша %{post_link}."
@@ -240,6 +300,28 @@ bg:
subject: "Моля, акивирайте новия адрес на ел. си поща (%{unconfirmed_email})"
email_sent_by_diaspora: "Ел. писмо е изпратено от Diaspora. Ако вече не желаете да получавате подобни писма,"
hello: "Здравейте %{name}!"
+ invite:
+ message: |-
+ Здравейте!
+
+ Вие бяхте поканени в Диаспора* от %{user}!
+ Натиснете тази връзка, за да започнете
+
+ [%{invite_url}][1]
+
+ или добавете %{diaspora_id} към Вашите контакти, ако вече имате акаунт.
+
+
+
+
+ Поздрави,
+ Пощенският робот на Диаспора*.
+
+ П.С. В случай, че не знаете какво е Диаспора*, отговорът[2] е тук!
+
+ [1]: %{invite_url}
+ [2]: %{diasporafoundation_url}
+ invited_you: "%{name} Ви покани в Диаспора*."
liked:
liked: "%{name} хареса вашата публикация"
view_post: "Преглед на публикацията >"
@@ -259,13 +341,17 @@ bg:
view_profile: "Прегледайте профила на %{name}"
thanks: "Благодаря,"
to_change_your_notification_settings: "за да промените настройките за известяване"
+ nsfw: "Само за пълнолетни"
ok: "Добре"
people:
+ add_contact:
+ invited_by: "Вие бяхте поканени от"
index:
looking_for: "Търсите публикации с марка %{tag_link}?"
no_one_found: "...и никой не е намерен."
no_results: "Хей! Въведете нещо за търсене."
results_for: "резултат от търсенето за"
+ searching: "Търся. Моля, изчакайте..."
person:
thats_you: "Това сте Вие!"
profile_sidebar:
@@ -287,6 +373,8 @@ bg:
new_profile_photo:
upload: "Качете нова снимка за профила!"
posts:
+ presenter:
+ title: "Публикация от %{name}"
show:
photos_by:
few: "%{count} снимки от %{author}"
@@ -295,6 +383,7 @@ bg:
other: "%{count} снимки от %{author}"
two: "2 снимки от %{author}"
zero: "Няма снимки от %{author}"
+ reshare_by: "Споделено от %{author}"
privacy: "Поверителност"
profile: "Профил"
profiles:
@@ -319,11 +408,16 @@ bg:
closed: "Нови регистрации не са възможни на този pod на Diaspora."
create:
success: "Вие се присъединихте към Diaspora!"
+ invalid_invite: "Връзката за покана, която предоставихте, вече не е валидна!"
new:
+ email: "Електронна поща"
enter_email: "Въведете ел. поща"
enter_password: "Въведете парола"
enter_password_again: "Въведете отново същата парола"
enter_username: "Изберете си потребителско име (само букви, цифри и долна черта)"
+ password: "Парола"
+ sign_up: "Създайте акаунт"
+ username: "Потребителско име"
reshares:
comment_email_subject: "Споделена публикация от %{resharer} с автор %{author}'"
reshare:
@@ -359,7 +453,9 @@ bg:
by_email: "по ел. поща"
invite_your_friends: "Поканете приятелите си"
invites: "Покани"
+ share_this: "Споделете тази връзка чрез електронна поща, блог или социална мрежа!"
public_explain:
+ atom_feed: "Новинарски поток"
control_your_audience: "Определете публиката"
logged_in: "вписани сте в %{service}"
manage: "управление на свързаните услуги"
@@ -380,11 +476,14 @@ bg:
whats_on_your_mind: "За какво мислите?"
stream_element:
via: "чрез %{link}"
+ via_mobile: "Чрез мобилно"
status_messages:
new:
mentioning: "Споменаване на %{person}"
too_long: "{\"few\"=>\", моля съкратете съобщението си до %{count} знака\", \"many\"=>\", моля съкратете съобщението си до %{count} знака\", \"one\"=>\", моля съкратете съобщението си до %{count} знака\", \"other\"=>\", моля съкратете съобщението си до %{count} знака\", \"two\"=>\", моля съкратете съобщението си до %{count} знака\", \"zero\"=>\", моля съкратете съобщението си до %{count} знака\"}"
streams:
+ activity:
+ title: "Моята дейност"
aspects:
title: "Вашите аспекти"
aspects_stream: "От вашите аспекти"
@@ -423,21 +522,25 @@ bg:
wrong_password: "Въведената парола не съвпада с текущата парола на акаунта."
edit:
also_commented: "...някой коментира публикация на Ваш контакт?"
+ auto_follow_aspect: "Аспекти за потребители, с които споделяш автоматично."
+ auto_follow_back: "Автоматично споделяй с потребители, които започнат да споделят с теб."
change: "Промяна"
change_email: "Промяна на ел. поща"
change_language: "Промяна на езика"
change_password: "Промяна на паролата"
+ character_minimum_expl: "Трябва да бъде поне 6 символа."
close_account:
dont_go: "Моля, не си отивайте!"
- lock_username: "потребителско ви име се \"заключва\" - ако пожелаете да се върнете отново"
+ lock_username: "Потребителското ви име се \"заключва\". Няма да можете да създадете нов акаунт на този под със същото име."
locked_out: "автоматично ще бъдете отписани, а акаунтът - \"заключен\""
- make_diaspora_better: "Надяваме се да ни помогнете в усилията ни да направим услугата Diaspora по-добра. Ако наистина желаете да напуснете ето какво се случва при напускане:"
+ make_diaspora_better: "Надяваме се да ни помогнете в усилията ни да направим услугата Diaspora по-добра. Ако наистина желаете да напуснете, ето какво се случва при напускане:"
mr_wiggles: "И г-н Wiggles ще се натъжи много"
no_turning_back: "За момента действието е необратимо!"
what_we_delete: "изтриват се всички ваши публикации и данни от профила (възможно най-бързо). Вашите коментари ще останат наоколо, но ще бъдат асоциирани с адреса Ви в Diaspora."
close_account_text: "Затваряне на акаунта"
comment_on_post: "...някой коментира Ваша публикация?"
current_password: "Текуща парола"
+ current_password_expl: "Паролата, с която влизате в акаунта си."
edit_account: "Настройки на акаунта"
email_awaiting_confirmation: "Изпратена е връзка за активиране до %{unconfirmed_email}. Докато не я активирате ще бъде ползвана старата ел. поща (%{email})."
export_data: "Сваляне на..."
@@ -470,6 +573,8 @@ bg:
does_not_exist: "Потребителят %{username} не съществува!"
update:
email_notifications_changed: "Настройките за известяване бяха променени"
+ follow_settings_changed: "Настройките за следване бяха променени."
+ follow_settings_not_changed: "Настройките за следване не бяха променени."
language_changed: "Езикът е сменен"
language_not_changed: "Езикът не бе сменен"
password_changed: "Паролата е променена. Можете да се впишете с новата парола."
diff --git a/config/locales/diaspora/de.yml b/config/locales/diaspora/de.yml
index 0ae7d8df3..04bbb3fc1 100644
--- a/config/locales/diaspora/de.yml
+++ b/config/locales/diaspora/de.yml
@@ -626,9 +626,9 @@ de:
toggle_navigation: "Navigation umschalten"
likes:
create:
- error: "Gefällt mir ist fehlgeschlagen."
+ error: "Mit \"Gefällt mir\" bewerten ist fehlgeschlagen."
destroy:
- error: "Gefällt mir nicht mehr ist fehlgeschlagen."
+ error: "\"Gefällt mir\" entziehen ist gescheitert."
limited: "Begrenzt"
more: "Mehr"
no_results: "Keine Ergebnisse gefunden"
@@ -1143,7 +1143,7 @@ de:
like_stream:
title: "„Gefällt mir“-Stream"
liked:
- title: "Beiträge, die dir gefallen"
+ title: "Mit „Gefällt mir“ bewertete Beiträge"
mentioned_stream: "@Erwähnungen"
mentions:
title: "@Erwähnungen"
@@ -1177,7 +1177,7 @@ de:
success: "Dein Account wurde gesperrt. Es kann bis zu 20 Minuten dauern, bis dein Account endgültig geschlossen ist. Vielen Dank, dass du diaspora* ausprobiert hast."
wrong_password: "Das eingegebene Kennwort stimmt nicht mit deinem aktuellen Kennwort überein."
edit:
- also_commented: "jemand einen Beitrag kommentiert, den du kommentiert hast"
+ also_commented: "jemand kommentierte einen Beitrag, den du kommentiert hast"
auto_follow_aspect: "Aspekt für automatisch gefolgten Benutzern:"
auto_follow_back: "Folge Benutzern automatisch, wenn sie dir folgen"
birthday: "jemand hat Geburtstag"
diff --git a/config/locales/diaspora/de_formal.yml b/config/locales/diaspora/de_formal.yml
index 227e42944..0f082491e 100644
--- a/config/locales/diaspora/de_formal.yml
+++ b/config/locales/diaspora/de_formal.yml
@@ -26,7 +26,7 @@ de_formal:
poll:
attributes:
poll_answers:
- not_enough_poll_answers: "Nicht genügend Auswahloptionen."
+ not_enough_poll_answers: "Nicht genügend Antwortmöglichkeiten."
poll_participation:
attributes:
poll:
@@ -34,7 +34,7 @@ de_formal:
reshare:
attributes:
root_guid:
- taken: "Sie haben diesen Beitrag bereits weitergesagt!"
+ taken: "Ziemlich gut, was? Sie haben diesen Beitrag bereits weitergesagt!"
user:
attributes:
email:
@@ -90,8 +90,8 @@ de_formal:
week: "Woche"
user_entry:
account_closed: "Konto wurde geschlossen."
- diaspora_handle: "diaspora*-Handle"
- email: "E-Mail-Adresse"
+ diaspora_handle: "diaspora* ID"
+ email: "E-Mail"
guid: "GUID"
id: "ID"
invite_token: "Einladungstoken"
@@ -173,7 +173,7 @@ de_formal:
description: "Das ermöglicht der Anwendung, Ihren Stream, Ihre Konversationen und Ihr vollständiges Profil auszulesen"
name: "Profil, Stream und Konversationen lesen"
sub:
- description: "Dies gewährt der Anwendung sub-Berechtigungen"
+ description: "Dies vererbt der Anwendung Berechtigungen"
name: "sub"
write:
description: "Dies ermöglicht der Anwendung, neue Beiträge zu senden, Konversationen zu schreiben und Reaktionen zu senden"
@@ -217,7 +217,7 @@ de_formal:
confirm_remove_aspect: "Sind Sie sich sicher, dass Sie diesen Aspekt löschen möchten?"
rename: "Umbenennen"
update: "Ändern"
- updating: "Ändere…"
+ updating: "Aktualisieren"
index:
donate: "Spenden"
donate_liberapay: "An liberapay spenden"
@@ -267,7 +267,7 @@ de_formal:
failure: "Konnte diesen Benutzer nicht ignorieren. #evasion"
success: "Alles klar, Sie werden diesen Benutzer nicht mehr in ihrem Stream sehen. #silencio!"
destroy:
- failure: "Konnte das Ignorieren dieses Benutzers nicht aufheben. #evasion"
+ failure: "Ich konnte das Ignorieren dieses Benutzers nicht aufheben. #evasion"
success: "Sehen Sie, was diese zu sagen haben! #sayhello"
bookmarklet:
explanation: "Erstellen Sie auf jeder Webseite einen Beitrag für diaspora*, indem Sie %{link} als Lesezeichen speichern."
@@ -279,11 +279,11 @@ de_formal:
dark_green: "Dunkelgrün"
egyptian_blue: "Ägyptisch Blau"
magenta: "Magenta"
- original: "Ursprünglich grau"
- original_white: "Ursprünglich weißer Hintergrund"
+ original: "Original Grau"
+ original_white: "Original weißer Hintergrund"
comments:
create:
- error: "Konnte nicht kommentieren."
+ error: "Kommentieren fehlgeschlagen."
new_comment:
comment: "Kommentieren"
commenting: "Kommentieren …"
@@ -291,7 +291,7 @@ de_formal:
index:
add_contact: "Kontakt hinzufügen"
all_contacts: "Alle Kontakte"
- community_spotlight: "Gemeinschafts-Schaukasten"
+ community_spotlight: "Gemeinschaftsblickpunkt"
my_contacts: "Meine Kontakte"
no_contacts: "Sieht so aus als müssten Sie einige Kontakte hinzufügen!"
no_contacts_in_aspect: "Sie haben noch keine Kontakte in diesem Aspekt. Unten befindet sich eine Liste Ihrer bestehenden Kontakte, die Sie zu diesem Aspekt hinzufügen können."
@@ -328,7 +328,7 @@ de_formal:
fail: "Ungültige Nachricht"
show:
delete: "Konversation löschen"
- hide: "Unterhaltung ausblenden und stummschalten"
+ hide: "Unterhaltung ausblenden und stumm schalten"
last_message: "Letzte Nachricht empfangen %{timeago}"
reply: "Antworten"
replying: "Antworten …"
@@ -364,7 +364,7 @@ de_formal:
change_aspect_of_post_q: "Kann ich die Aspekte eines Beitrags nach dem Senden nochmal verändern?"
contacts_know_aspect_a: "Nein. Sie können den Namen des Aspekts in welchem sie eingeordnet sind nicht sehen."
contacts_know_aspect_q: "Wissen meine Kontakte in welchem Aspekt sie sind?"
- contacts_visible_a: "Wenn Sie diese Option anwählen, werden die Kontakte dieses Aspekts die Möglichkeit haben, auf Ihrer Profilseite im Reiter „Kontakte” zu sehen, wer sonst noch in diesem Aspekt ist. Es ist am besten, diese Option nur anzuwählen, wenn sich alle Kontakte in diesem Aspekt untereinander kennen, zum Beispiel falls der Aspekt für einen Club oder eine Gesellschaft ist, der Sie angehören. Sie werden aber trotzdem nicht erfahren, wie dieser Aspekt heißt."
+ contacts_visible_a: "Wenn Sie diese Option anwählen, werden die Kontakte dieses Aspekts die Möglichkeit haben, auf Ihrer Profilseite im Reiter „Kontakte” zu sehen, wer sonst noch in diesem Aspekt ist. (Im Moment können ausschließlich Ihre Kontakte vom selben Pod, die Registerkarte \"Kontakte\" in Ihrem Profil sehen.) Diese Option sollte idealerweise nur gewählt werden, wenn sich alle Aspekt-Kontakte untereinander kennen. Sie werden dennoch nicht erfahren, wie dieser Aspekt heißt."
contacts_visible_q: "Was bewirkt „Kontakte aus diesem Aspekt öffentlich machen“?"
delete_aspect_a: "Klicken Sie in der Seitenleiste einer Streamansicht auf „Meine Aspekte” und anschließend auf das Stiftsymbol neben dem Aspekt, den Sie löschen möchten, oder gehen Sie zu Ihrer Kontakteseite und wählen Sie den betreffenden Aspekt aus. Klicken Sie dann auf das Mülleimersymbol oben rechts auf der Seite."
delete_aspect_q: "Wie kann ich einen Aspekt löschen?"
@@ -377,7 +377,7 @@ de_formal:
rename_aspect_a: "Klicken Sie in der Seitenleiste einer Streamansicht auf „Meine Aspekte“ und anschließend auf das Stiftsymbol des Aspekts, den Sie umbenennen möchten, oder gehen Sie zu Ihrer „Kontakte“-Seite und wählen Sie den entsprechenden Aspekt aus. Klicken Sie dann auf das Bearbeitungssymbol neben dem Aspektnamen oben auf der Seite, bearbeiten Sie den Namen und drücken Sie auf „Ändern”."
rename_aspect_q: "Wie benenne ich einen Aspekt um?"
restrict_posts_i_see_a: "Ja. Klicken Sie dazu in der Seitenleiste erst auf „Meine Aspekte“ und anschließend auf einzelne Aspekte, um diese abzuwählen. Anschließend werden nur noch Beiträge von Personen aus den ausgewählten Aspekten im Stream angezeigt."
- restrict_posts_i_see_q: "Kann ich die Beiträge in meinem Stream auf die bestimmter Aspekte beschränken?"
+ restrict_posts_i_see_q: "Kann ich die Beiträge in meinem Stream auf bestimmte Aspekte beschränken?"
title: "Aspekte"
what_is_an_aspect_a: "Aspekte sind die Methode, mit der Sie Ihre Kontakte auf diaspora* gruppieren. Zum Beispiel können Sie einen Aspekt für die Leute aus Ihrer Arbeit, einen für die Leute aus Ihrer Familie und einen für Ihre Freunde verwenden."
what_is_an_aspect_q: "Was sind Aspekte?"
@@ -414,7 +414,7 @@ de_formal:
keyboard_shortcuts_li4: "l – Den aktuellen Beitrag mit „Gefällt mir“ markieren"
keyboard_shortcuts_li5: "r – Den aktuellen Beitrag weitersagen"
keyboard_shortcuts_li6: "m – Den aktuellen Beitrag ausklappen"
- keyboard_shortcuts_li7: "o – Den ersten externen Link im Beitrag in einem neuen Fenster öffnen"
+ keyboard_shortcuts_li7: "o – Den ersten externen Link des aktuellen Beitrags öffnen"
keyboard_shortcuts_li8: "Strg+Enter – Die Nachricht, die Sie schreiben, senden"
keyboard_shortcuts_q: "Welche Tastenkürzel gibt es?"
title: "Tastenkürzel"
@@ -443,7 +443,7 @@ de_formal:
find_people_a: "Wenn Sie Freunde zu diaspora* einladen möchten, benutzen Sie den Einladungs- oder E-Mail-Link von der Seitenleiste. Folgen Sie #Tags, um Andere zu entdecken, die Ihre Interessen teilen und fügen Sie sie zu Ihren Aspekten hinzu. Schreiben Sie in einem öffentlichen Post, dass Sie #NeuHier sind."
find_people_q: "Ich bin gerade erst einem Pod beigetreten, wie finde ich nun Leute zum Teilen?"
title: "Pods"
- use_search_box_a: "Wenn Sie deren vollständige diaspora* ID (z.B. benutzername@podname.org) kennen, können Sie sie finden, indem Sie danach suchen. Wenn Sie sich auf dem selben Pod befinden, reicht es, wenn Sie nur nach dem Benutzernamen suchen. Alternativ können Sie auch nach ihrem Profilnamen (dem angezeigten Namen) suchen. Wenn eine Suche beim ersten Mal keine Ergebnisse liefert, dann versuchen Sie es nochmal."
+ use_search_box_a: "Sie können Personen suchen, indem Sie ihren Benutzernamen oder diaspora*-Namen (der in ihrem Profil angezeigt wird) eingeben. Wenn beide Methoden nicht funktionieren, geben Sie ihre volle diaspora*-ID ein (username@podname.org). Wenn Ihre Suche beim ersten Mal nicht funktioniert, kann es an Netz-Latenz liegen. Versuchen Sie es noch mal."
use_search_box_q: "Wie benutze ich das Suchfeld, um bestimmte Personen zu finden?"
what_is_a_pod_a: "Ein Pod ist ein Server, auf dem die diaspora*-Software läuft und der mit dem diaspora*-Netzwerk verbunden ist. „Pod“ ist eine Metapher für Hülsen von Pflanzen, die mehrere Samen enthalten, so wie der Server mehrere Benutzerkonten enthält. Es gibt viele verschiedene Pods. Sie können Kontakte von anderen Pods hinzufügen und mit ihnen kommunizieren. Es ist nicht nötig, Konten auf verschiedenen Pods zu erstellen! Einer reicht – So gesehen können Sie sich einen diaspora*-Pod wie einen E-Mail-Anbieter vorstellen. Es gibt öffentliche Pods, private Pods, und mit ein wenig Aufwand können Sie sogar Ihren eigenen betreiben."
what_is_a_pod_q: "Was ist ein Pod?"
@@ -454,7 +454,7 @@ de_formal:
character_limit_q: "Wie groß ist das Zeichenlimit für Beiträge?"
embed_multimedia_a: "In der Regel können Sie einfach die URL (z.B. http://www.youtube.com/watch?v=nnnnnnnnnnn ) in Ihren Beitrag einfügen und der Video- oder Audio-Inhalt wird automatisch erscheinen. Unter Anderem werden YouTube, Vimeo, SoundCloud, Flickr und noch einige mehr unterstützt. diaspora* benutzt oEmbed für diese Funktion. Es kommen ständig weitere Medienquellen hinzu. Beachten Sie, immer nur einfache, vollständige Links zu posten – keine gekürzten Links; keine zusätzlichen Optionen hinter der Basis-URL – Und warten Sie nach dem Posten einen kleinen Moment, bevor Sie die Seite aktualisieren, um die Vorschau zu sehen."
embed_multimedia_q: "Wie bette ich Video-, Audio- oder andere Multimediainhalte in einen Beitrag ein?"
- format_text_a: "Indem Sie ein vereinfachtes System namens %{markdown} benutzen. Sie können die vollständige Syntax dazu %{here} finden. Die Vorschau-Schaltfläche ist an dieser Stelle sehr hilfreich, da Sie so schon vor dem Posten sehen können, wie Ihr Beitrag aussehen wird."
+ format_text_a: "diaspora* verwendet %{markdown}. Die Oberfläche hat Schaltflächen, um Ihren Text zu formatieren. Sie können auch manuell Ihren Beitrag formatieren, %{here} ist die Markdown-Syntax. Mit der Vorschau-Registerkarte können Sie sehen, wie Ihre Nachricht aussieht, bevor Sie sie teilen. Denken Sie daran, dass Sie einmal gepostetes nicht mehr bearbeiten können. Also, erst prüfen, dann abschicken!"
format_text_q: "Wie kann ich einen Beitrag formatieren (Fett, kursiv, etc.)?"
hide_posts_a: "Wenn Sie Ihren Mauszeiger über einem Beitrag positionieren, erscheint rechts ein kleines ×. Klicken Sie darauf, um den Beitrag zu verstecken und die Benachrichtigungen zu ihm zu deaktivieren. Sie können den Beitrag weiterhin auf der Profilseite der Person betrachten, die ihn gepostet hat."
hide_posts_q: "Wie blende ich einen Beitrag aus?"
@@ -462,7 +462,7 @@ de_formal:
ignore_user_a2: "Klicken Sie auf das \"Ignorieren\"-Symbol (ein diagonal durchgestrichener Kreis), um ein Konto zu ignorieren oben rechts auf einen ihrer Beiträge. Diese Beiträge werden sofort aus Ihrem Stream verschwinden. Alternativ, gehen Sie auf Ihre Profilseite und klicken dort auf das Ignorier-Symbol. Sie können Ihre Beiträge auf Ihrer Profilseite noch sehen oder die Single-View-Ansicht verwenden."
ignore_user_a3: "Eine Liste ignorierter Personen finden Sie in Ihren Kontoeinstellungen unter Datenschutz. Um jemanden nicht mehr zu ignorieren entfernen Sie sie aus der Liste auf dieser Seite."
ignore_user_q: "Wie verhindere ich, dass jemandes Beiträge in meinem Stream erscheinen?"
- insert_images_a: "Klicken Sie auf das kleine Kamera-Symbol, um ein Foto zu einem Beitrag hinzuzufügen. Klicken Sie erneut darauf, um weitere Fotos hinzuzufügen, oder wählen Sie mehrere Fotos aus, um sie alle auf einmal hinzuzufügen."
+ insert_images_a: "Wenn Sie ein auf Ihrem Computer gespeichertes Bild in Ihrem Beitrag verwenden wollen, klicken Sie auf das kleine Kamerasymbol am unteren Rand des Veröffentlichungsfeldes. Auch per Drag&Drop können Sie von Ihrem Computer Bilder auf das Symbol ziehen. Wollen Sie ein Bild aus dem Web in Ihrem Beitrag einfügen, klicken Sie auf die \"Bild\"-Schaltfläche an der Oberseite des Veröffentlichungsfeldes. Diese erstellt für Sie den Markdown-Code."
insert_images_comments_a: "Sie können Markdown verwenden, um ein Bild aus dem Internet in einen Kommentar einzufügen, genau wie in Beiträgen. Sie können allerdings keine Bilder von Ihrem Computer direkt in Kommentare hochladen. Laden Sie sie auf einen Bilder-Hosting-Dienst hoch und fügen Sie sie dann mittels der Bild-Schaltfläche über dem Eingabefeld ein."
insert_images_comments_q: "Kann ich Bilder in Kommentare einfügen?"
insert_images_q: "Wie füge ich zu einem Beitrag Fotos hinzu?"
@@ -472,18 +472,18 @@ de_formal:
post_notification_q: "Wie kann ich Benachrichtigungen über einen Beitrag ein- oder ausschalten?"
post_poll_a: "Klicken Sie auf das Diagrammsymbol, um eine Umfrage zu erstellen. Geben Sie eine Frage und mindestens zwei Antwortmöglichkeiten ein. Vergessen Sie nicht, Ihren Beitrag öffentlich zu machen, wenn jeder daran teilnehmen können soll."
post_poll_q: "Wie füge ich meinem Beitrag eine Umfrage hinzu?"
- post_report_a: "Klicken Sie auf das Warndreieck oben rechts an einem Beitrag, um ihn Ihrem Podmin zu melden. Geben Sie einen Grund für das Melden des Beitrags in der Dialogbox ein."
+ post_report_a: "Klicken Sie auf das Warndreieck-Symbol oben rechts im Beitrag, um es Ihrem Podmin zu melden. Geben Sie im Dialogfenster einen Grund für das Melden dieses Beitrags ein. Bitte melden Sie nur Beiträge, die gegen unsere %{community_guidelines} oder die Nutzungsbedingungen Ihres Pods verstoßen, z.B. Beiträge, die illegale Inhalte enthalten, oder die missbräuchlich oder Spam sind."
post_report_q: "Wie melde ich einen anstößigen Beitrag?"
size_of_images_a: "Nein. Bilder werden automatisch auf eine Größe geändert, die in den Stream oder die Einzelbeitragsansicht passt. Markdown bietet keinen Code, um die Größe eines Bildes anzugeben."
size_of_images_q: "Kann ich die Größe von Bildern in Beiträgen oder Kommentaren anpassen?"
stream_full_of_posts_a1: "Ihr Stream setzt sich aus drei Arten von Beiträgen zusammen:"
stream_full_of_posts_li1: "Beiträge von Leuten, mit denen Sie teilen, von denen es zwei Arten gibt: Öffentliche Beiträge und begrenzte Beiträge, die mit einem Aspekt geteilt wurden, in dem Sie sich befinden. Um diese Beiträge aus deinem Stream zu entfernen, hören Sie einfach auf, mit den jeweiligen Leuten zu teilen."
stream_full_of_posts_li2: "Öffentliche Beiträge, die Tags enthalten, denen Sie folgen. Um diese zu entfernen, müssen Sie aufhören, den entsprechenden Tags zu folgen."
- stream_full_of_posts_li3: "Öffentliche Posts von Leuten, die im Gemeinschafts-Schaukasten gelistet sind. Diese können durch Abwählen der Option „Gemeinschafts-Schaukasten im Stream anzeigen” im Reiter „Konto” in den Einstellungen entfernt werden."
+ stream_full_of_posts_li3: "Öffentliche Posts von Leuten, die im Gemeinschaftsblickpunkt gelistet sind. Diese können durch Abwählen der Option „Gemeinschaftsblickpunkt im Stream anzeigen” im Reiter „Konto” in den Einstellungen entfernt werden."
stream_full_of_posts_q: "Warum ist mein Stream voll mit Beiträgen von Leuten, die ich nicht kenne und mit denen ich nicht teile?"
title: "Beiträge und Posten"
private_posts:
- can_comment_a: "Nur eingeloggte diaspora*-Nutzer, welche Sie in bereits vor dem Verfassen des privaten Beitrags zu dem Aspekt hinzugefügt hatten, können den Beitrag kommentieren oder mit „Gefällt mir” markieren."
+ can_comment_a: "Nur eingeloggte diaspora*-Nutzer, welche Sie vor dem Verfassen des privaten Beitrags zu dem Aspekt hinzugefügt hatten, können den Beitrag kommentieren oder mit „Gefällt mir” markieren."
can_comment_q: "Wer kann private Beiträge kommentieren oder „Gefällt mir“ drücken?"
can_reshare_a: "Niemand. Private Beiträge können nicht weitergesagt werden. Eingeloggte diaspora*-Nutzer aus dem Aspekt können sie aber trotzdem potenziell kopieren und in einen neuen Beitrag einfügen. Es liegt an Ihnen, ob Sie diesen Leuten vertrauen!"
can_reshare_q: "Wer kann meine privaten Beiträge weitersagen?"
@@ -501,10 +501,10 @@ de_formal:
who_sees_profile_a: "Ihr grundlegendes Profil (Name, Profilbild und #Tags) ist öffentlich. Ihr erweitertes Profil ist standardmäßig privat, aber Sie können es komplett öffentlich zugänglich machen, wenn Sie möchten. Nur Leute, mit denen Sie teilen (das heißt Sie haben sie zu einem Ihrer Aspekte hinzugefügt), können Ihr erweitertes Profil sehen, wenn Sie es privat halten. Andere Leute werden nur Ihre öffentlichen Informationen sehen. Jede Profilinformation, die Sie öffentlich machen, kann von jedem im Internet gesehen und von Suchmaschinen indexiert werden"
who_sees_profile_q: "Wer sieht mein Profil?"
public_posts:
- can_comment_reshare_like_a: "Jeder angemeldete diaspora*-Nutzer kann öffentliche Beiträge weitersagen, kommentieren, beziehungsweise „Gefällt mir“ drücken."
+ can_comment_reshare_like_a: "Jeder angemeldete diaspora*-Nutzer kann öffentliche Beiträge weitersagen, kommentieren, beziehungsweise „Gefällt mir“ drücken. Ausgenommen sind die von Ihnen ignorierten Nutzer."
can_comment_reshare_like_q: "Wer kann meinen öffentlichen Beitrag weitersagen, kommentieren oder bei ihm „Gefällt mir“ drücken?"
deselect_aspect_posting_a: "Öffentliche Beiträge werden durch das Abwählen von Aspekten nicht beeinflusst. Sie werden weiterhin öffentlich sein und in den Streams all Ihrer Kontakte angezeigt werden. Um einen Beitrag nur für bestimmte Aspekte sichtbar zu machen, müssen Sie diese mit dem Aspektwähler unter dem Eingabefeld auswählen."
- deselect_aspect_posting_q: "Was passiert, wenn ich bei öffentlichen Beiträgen einen oder mehrere Aspekte abwähle?"
+ deselect_aspect_posting_q: "Was passiert, wenn ich bei öffentlichen Beiträgen einen oder mehrere Aspekte, aus der linken Spalte, abwähle?"
find_public_post_a: "Ihre öffentlichen Beiträge werden in den Streams aller, die Ihnen folgen, erscheinen. Wenn Sie #Tags in Ihren öffentlichen Beitrag einfügen, werden alle, die diesem Tag folgen, Ihren Beitrag in ihren Streams finden. Außerdem hat jeder öffentliche Beitrag eine spezifische URL, die jeder betrachten kann, auch wenn er oder sie nicht angemeldet ist – öffentlichen Beiträge können daher direkt von Twitter, Blogs, etc. verlinkt werden. Öffentliche Beiträge können außerdem von Suchmaschinen indexiert werden."
find_public_post_q: "Wie können andere Nutzer meine öffentlichen Beiträge finden?"
see_comment_reshare_like_a: "Die Kommentare, das Weitersagen und das Bekunden von Gefallen an einem öffentlichen Beitrag sind so öffentlich wie der Beitrag selbst. Jeder angemeldete diaspora*-Benutzer und jeder andere im Internet kann Ihre Interaktionen mit öffentlichen Beiträgen sehen."
@@ -530,7 +530,7 @@ de_formal:
add_to_aspect_li7: "Amy erscheint nun auf Bens Kontakteseite unter „Nur mit Ihnen Teilende“."
add_to_aspect_li8: "Amy wird Ben auch in einem Beitrag @erwähnen können."
add_to_aspect_q: "Was passiert, wenn ich jemanden zu meinen Aspekten hinzufüge oder wenn mich jemand zu seinen Aspekten hinzufügt?"
- list_not_sharing_a: "Nein, aber Sie können nachsehen, ob jemand ihnen folgt, indem sie dessen Profilseite besuchen. Falls das der Fall ist, wird die Schaltfläche, die die Aspekte zeigt, zu dem Sie die Person hinzugefügt haben, grün sein; falls nicht wird sie grau sein."
+ list_not_sharing_a: "Nein, aber Sie können nachsehen, ob jemand ihnen folgt, indem sie dessen Profilseite besuchen. Falls das der Fall ist, wird neben ihrer diaspora* ID eine grüne Markierung sein; falls nicht wird sie grau sein."
list_not_sharing_q: "Gibt es eine Liste mit Leuten, die ich zu einem meiner Aspekte hinzugefügt habe, die mich aber nicht zu einem ihrer Aspekte hinzugefügt haben?"
only_sharing_a: "Das sind Leute, die Sie zu einem ihrer Aspekte hinzugefügt haben, die sich aber (noch) nicht in einem Ihrer Aspekte befinden. Anders gesagt: Sie teilen mit Ihnen, aber Sie nicht mit ihnen: Sie können sich dies so vorstellen, dass sie Ihnen „folgen”. Wenn Sie sie zu einem Aspekt hinzufügen, werden sie in jenem Aspekt und nicht unter „Nur mit Ihnen Teilende“ zu sehen sein. Siehe oben."
only_sharing_q: "Wer sind die Leute, die auf der Kontakteseite unter „Nur mit Ihnen Teilende” gelistet sind?"
@@ -540,9 +540,9 @@ de_formal:
sharing_notification_q: "Wie erfahre ich es, wenn jemand anfängt, mit mir zu teilen?"
title: "Teilen"
tags:
- filter_tags_a: "Dass ist in in diaspora* derzeit nicht möglich, aber einige %{third_party_tools} wurden geschrieben um dies zu ermöglichen."
+ filter_tags_a: "Das ist in diaspora* derzeit nicht möglich, aber einige %{third_party_tools} wurden geschrieben, um dies zu ermöglichen."
filter_tags_q: "Wie kann ich Tags aus meinem Stream herausfiltern?"
- followed_tags_a: "Nachdem Sie nach einem Tag gesucht haben, können Sie die Schaltfläche oben auf der Seite des Tags benutzen, um dem Tag zu „folgen“. Anschließend wird es links in der Liste der von Ihnen gefolgten Tags erscheinen. Wenn Sie auf eines der Tags klicken, gelangen Sie zu dessen Seite und können die Beiträge, die das Tag enthalten, sehen. Klicken Sie auf „#Tags, denen Sie folgen“, um einen Stream mit Beiträgen zu sehen, die irgendeines der von Ihnen gefolgten Tags enthalten."
+ followed_tags_a: "Nachdem Sie einem Tag gesucht haben, können Sie die Schaltfläche oben auf der Seite des Tags benutzen, um dem Tag zu „folgen“. Anschließend wird es links in der Liste der von Ihnen gefolgten Tags erscheinen. Wenn Sie auf eines der Tags klicken, gelangen Sie zu dessen Seite und können die Beiträge, die das Tag enthalten, sehen. Klicken Sie auf „#Tags, denen Sie folgen“, um einen Stream mit Beiträgen zu sehen, die irgendeines der von Ihnen gefolgten Tags enthalten. Beiträge, die diesen Tag enthalten, werden auch in Ihrem Stream angezeigt."
followed_tags_q: "Was sind „#Tags, denen Sie folgen“ und wie folge ich einem Tag?"
people_tag_page_a: "Das sind Leute, welche diesen Tag auf ihrem Profil genutzt haben, um sich selbst zu beschreiben."
people_tag_page_q: "Wer ist auf in der linken Spalte auf einer Tag-Seite zu finden?"
@@ -559,13 +559,13 @@ de_formal:
home:
default:
be_who_you_want_to_be: "Seien Sie, wer Sie sein möchten"
- be_who_you_want_to_be_info: "Viele Netzwerke bestehen darauf, dass Sie Ihre wahre Identität verwenden. diaspora* nicht. Hier können Sie entscheiden, wer Sie sein möchten und so viel oder wenig teilen, wie Sie es wünschen. Es liegt ganz an Ihnen, wie Sie mit anderen Personen interagieren möchten."
+ be_who_you_want_to_be_info: "Viele Netzwerke fordern, dass Sie Ihre wahre Identität verwenden. diaspora* nicht. Hier können Sie entscheiden, wer Sie sein wollen, und so viel oder so wenig über sich selbst preisgeben, wie Sie wollen. Es liegt bei Ihnen, wie Sie mit anderen Menschen interagieren wollen."
byline: "Die soziale Onlinewelt, in der Sie Ihre Daten in der Hand haben"
choose_your_audience: "Wählen Sie Ihr Publikum"
choose_your_audience_info: "diaspora*s Aspekte ermöglichen Ihnen, nur mit Menschen zu teilen, mit denen Sie möchten. Sie können so öffentlich oder privat sein, wie Sie möchten. Teilen Sie ein witziges Foto mit der ganzen Welt oder ein tiefes Geheimnis nur mit Ihren engsten Freunden. Sie haben es in der Hand."
headline: "Willkommen auf %{pod_name}"
own_your_data: "Ihre Daten, Ihr Eigentum"
- own_your_data_info: "Viele Netzwerke nutzen Ihre Daten, um Geld zu verdienen, indem Sie Ihre Interaktionen auswerten und diese Informationen verwenden, um Ihnen Werbung zu zeigen. diaspora* nutzt Ihre Daten zu keinem anderen Zweck, als es Ihnen zu ermöglichen, sich mit anderen zu verbinden und mit ihnen zu teilen."
+ own_your_data_info: "Viele Netzwerke machen mit Ihren Daten Geld, indem sie Ihre Interaktionen analysieren und diese Informationen zum einblenden von Werbung nutzen. diaspora* verwendet Ihre Daten nicht für andere Zwecke als für die Verbindung und den Austausch mit anderen."
podmin:
byline: "Sie sind im Begriff, das Internet zu ändern. Lassen Sie uns gleich alles einrichten, okay?"
configuration_info: "Öffnen Sie %{database_path} und %{diaspora_path} in Ihrem Lieblingstexteditor und sehen Sie sie gründlich durch, sie sind ausführlich kommentiert."
@@ -574,7 +574,7 @@ de_formal:
contribute: "Wirken Sie mit"
contribute_info: "Machen Sie diaspora* noch besser! Falls Sie Fehler finden, bitte %{report_bugs}."
create_an_account: "Erstellen Sie ein Konto"
- create_an_account_info: "Jetzt ein %{sign_up_link}."
+ create_an_account_info: "%{sign_up_link} für ein neues Konto."
faq_for_podmins: "häufig gestellte Fragen für Pod-Verwalter in unserem Wiki"
getting_help: "Erhalten Sie Hilfe"
getting_help_info: "Wir haben einige %{faq} aufgelistet, einschließlich einiger zusätzlicher Tipps und Tricks und Lösungen für die häufigsten Probleme. Kontaktieren Sie uns gerne auch %{irc}."
@@ -611,7 +611,7 @@ de_formal:
application:
back_to_top: "Nach oben"
be_excellent: "Seien Sie nett zueinander! ♥"
- discourse: "Projektdiskussionen und Hilfe"
+ discourse: "Projektdiskussionen und Unterstützung"
powered_by: "Betrieben mit diaspora*"
public_feed: "Öffentlicher diaspora* Feed von %{name}"
source_package: "Quelltextpaket herunterladen"
@@ -626,9 +626,9 @@ de_formal:
toggle_navigation: "Navigation umschalten"
likes:
create:
- error: "Gefällt mir ist fehlgeschlagen."
+ error: "Mit \"Gefällt mir\" bewerten ist fehlgeschlagen."
destroy:
- error: "Gefällt mir nicht mehr ist fehlgeschlagen."
+ error: "\"Gefällt mir\" entziehen ist fehlgeschlagen."
limited: "Begrenzt"
more: "Mehr"
no_results: "Keine Ergebnisse gefunden"
@@ -670,7 +670,7 @@ de_formal:
mark_all_shown_as_read: "Alle angezeigten als gelesen markieren"
mark_read: "Als gelesen markieren"
mark_unread: "als ungelesen markieren"
- mentioned: "Erwähnt"
+ mentioned: "In Beitrag erwähnt"
mentioned_in_comment: "In Kommentar erwähnt"
no_notifications: "Sie haben noch keine Benachrichtigungen."
notifications: "Benachrichtigungen"
@@ -711,7 +711,7 @@ de_formal:
reshared:
one: "%{actors} hat Ihren Beitrag %{post_link} geteilt."
other: "%{actors} haben Ihren Beitrag %{post_link} geteilt."
- zero: "%{actors} haben Ihren Beitrag %{post_link} weitergesagt."
+ zero: "%{actors} haben Ihren Beitrag %{post_link} geteilt."
reshared_post_deleted:
one: "%{actors} hat Ihren gelöschten Beitrag geteilt."
other: "%{actors} haben Ihren gelöschten Beitrag geteilt."
@@ -990,13 +990,13 @@ de_formal:
terms_link: "Nutzungsbedingungen"
username: "Benutzername"
report:
- comment_label: "<b>Kommentar</b>: %{data}"
+ comment_label: "<strong>Kommentar</strong>: %{data}"
confirm_deletion: "Sind Sie sich sicher, dass Sie das Objekt löschen wollen?"
delete_link: "Lösche Objekt"
not_found: "Der Beitrag/Kommentar wurde nicht gefunden. Es sieht so aus, als ob er vom Benutzer gelöscht wurde!"
- post_label: "<b>Beitrag</b>: %{content}"
+ post_label: "<strong>Beitrag</strong>: %{content}"
reason_label: "Grund:"
- reported_label: "<b>Gemeldet von</b> %{person}"
+ reported_label: "<strong>Gemeldet von</strong> %{person}"
reported_user_details: "Details des gemeldeten Benutzers"
review_link: "Als überprüft markieren"
status:
@@ -1054,13 +1054,13 @@ de_formal:
by_email: "Leute per E-Mail einladen"
invite_your_friends: "Laden Sie Ihre Freunde ein"
invites: "Einladungen"
- share_this: "Teilen Sie diesen Link per E-Mail, Blog oder über die sozialen Netzwerke!"
+ share_this: "Teilen Sie diesen Link per E-Mail, Blog oder über soziale Netzwerke!"
public_explain:
atom_feed: "Atom-Feed"
- control_your_audience: "Kontrollieren Sie Ihre Zielgruppe"
+ control_your_audience: "Pflegen Sie Ihre Zielgruppe"
logged_in: "Bei %{service} angemeldet"
manage: "Verbundene Dienste verwalten"
- new_user_welcome_message: "Benutzen Sie #Hashtags, um Ihre Beiträge einzuordnen und um Leute zu finden, die Ihre Interessen teilen. Machen Sie mit @Erwähnungen auf interessante Leute aufmerksam"
+ new_user_welcome_message: "Benutzen Sie #Hashtags, um Ihre Beiträge einzuordnen und um Leute zu finden, die Ihre Interessen teilen. Weisen Sie, mit @Erwähnungen, auf interessante Leute hin."
outside: "Öffentliche Nachrichten werden für andere außerhalb von diaspora* sichtbar sein."
share: "Teilen"
title: "Verbundene Dienste verwalten"
@@ -1077,7 +1077,7 @@ de_formal:
poll:
add_a_poll: "Eine Umfrage hinzufügen"
posting: "Senden …"
- remove_location: "Position entfernen"
+ remove_location: "Ort entfernen"
share: "Teilen"
whats_on_your_mind: "Woran denken Sie gerade?"
stream_element:
@@ -1169,7 +1169,7 @@ de_formal:
success: "Ihr Konto wurde gesperrt. Es kann bis zu 20 Minuten dauern, bis Ihr Konto endgültig geschlossen ist. Vielen Dank, dass Sie diaspora* ausprobiert haben."
wrong_password: "Das eingegebene Passwort stimmte nicht mit Ihrem aktuellen Passwort überein."
edit:
- also_commented: "jemand einen Beitrag kommentiert, den Sie kommentiert haben"
+ also_commented: "jemand hat einen, bereits von Ihnen kommentierten Beitrag, kommentiert"
auto_follow_aspect: "Aspekt für Benutzer mit denen Sie automatisch teilen:"
auto_follow_back: "Automatisch mit Benutzern teilen, die anfangen, mit Ihnen zu teilen"
birthday: "jemand hat Geburtstag"
@@ -1191,7 +1191,7 @@ de_formal:
comment_on_post: "jemand hat Ihren Beitrag kommentiert"
current_password: "Derzeitiges Passwort"
current_password_expl: "das mit dem Sie sich anmelden..."
- default_post_visibility: "Zum Teilen vorausgewählte Aspekte"
+ default_post_visibility: "Vorausgewählte Aspekte beim Erstellen von Beiträgen"
download_export: "Mein Profil herunterladen"
download_export_photos: "Meine Fotos herunterladen"
edit_account: "Konto bearbeiten"
@@ -1212,7 +1212,7 @@ de_formal:
request_export_photos_update: "Meine Fotos aktualisieren"
request_export_update: "Meine Profildaten aktualisieren"
reshared: "jemand hat Ihren Beitrag weitersagt"
- show_community_spotlight: "„Gemeinschafts-Schaukasten” im Stream anzeigen"
+ show_community_spotlight: "„Gemeinschaftsblickpunkt” im Stream anzeigen"
show_getting_started: "„Erste Schritte”-Hinweise anzeigen"
someone_reported: "jemand hat eine Meldung gesendet"
started_sharing: "jemand fängt an mit Ihnen zu teilen"
@@ -1225,7 +1225,7 @@ de_formal:
community_welcome: "diaspora*s Gemeinschaft freut sich, Sie an Bord zu haben!"
connect_to_facebook: "Wir können das Ganze etwas beschleunigen, indem Sie %{link}. So werden Ihr Name und Ihr Profilbild hier eingefügt und die Crossposting-Funktion aktiviert."
connect_to_facebook_link: "Ihr Facebook-Konto mit diaspora* verlinken"
- hashtag_explanation: "Hashtags ermöglichen Ihnen, über Ihre Interessen zu reden und ihnen zu folgen. Sie sind auch ein guter Weg, neue Leute bei diaspora* zu treffen!"
+ hashtag_explanation: "Hashtags ermöglichen Ihnen, über Ihre Interessen zu reden und ihnen zu folgen. Sie sind auch ein guter Weg, neue Leute bei diaspora* zu finden!"
hashtag_suggestions: "Probieren Sie mal Tags wie #kunst, #musik oder #gif zu folgen."
well_hello_there: "Also, Hallöchen!"
what_are_you_in_to: "Was machen Sie so?"
@@ -1235,7 +1235,7 @@ de_formal:
no_user_ignored_message: "Sie ignorieren momentan keine anderen Benutzer"
stop_ignoring: "Ignorieren beenden"
strip_exif: "Metadaten (z. B. Ort, Autor oder Kameramodell) von hochgeladenen Bildern entfernen (empfohlen)"
- title: "Privatsphäre-Einstellungen"
+ title: "Datenschutzeinstellungen"
public:
does_not_exist: "Benutzer %{username} existiert nicht!"
update:
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index 562b52b96..b05035dca 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -1213,7 +1213,7 @@ en:
request_export_update: "Refresh my profile data"
export_data: "Export data"
export_in_progress: "We are currently processing your data. Please check back in a few moments."
- last_exported_at: "(Last updated at %{timestamp})"
+ last_exported_html: "(Last updated %{timeago})"
download_export_photos: "Download my photos"
request_export_photos: "Request my photos"
request_export_photos_update: "Refresh my photos"
diff --git a/config/locales/diaspora/es.yml b/config/locales/diaspora/es.yml
index 978ed49d5..ce0c76929 100644
--- a/config/locales/diaspora/es.yml
+++ b/config/locales/diaspora/es.yml
@@ -414,6 +414,7 @@ es:
mentions:
how_to_mention_a: "Escribe \"@\" y empieza a escribir su(s) nombre(s). Debería aparecer un menú desplegable para ayudarte en la selección. Ten en cuenta que solo es posible mencionar personas a aquellas personas que se encuentren en tus aspectos."
how_to_mention_q: "¿Cómo puedo mencionar a alguien cuando hago una publicación?"
+ mention_in_comment_a: "Desde la versión 0.7.0.0, ¡sí! Puedes mencionar a alguien en un comentario del mismo modo que lo harías en una publicación, escribiendo \"@\" y a continuación su nombre. Por favor, ten en cuenta que cuando comentas en una publicación que no es estrictamente pública, sólo puedes mencionar a usuarios que ya hayan interactuado con la publicación."
mention_in_comment_q: "¿Puedo mencionar a alguien en un comentario?"
see_mentions_a: "Sí, pulsa en \"@menciones\" en la columna izquierda de tu pagina principal."
see_mentions_q: "¿Hay alguna forma de ver las publicaciones en las cuales he sido mencionado?"
@@ -678,6 +679,9 @@ es:
one: "%{actors} te ha mencionado en una publicación eliminada."
other: "%{actors} te han mencionado en una publicación eliminada."
zero: "%{actors} te han mencionado en una publicación eliminada."
+ mentioned_in_comment_deleted:
+ one: "%{actors} te ha mencionado en un comentario eliminado."
+ other: "%{actors} te han mencionado en un comentario eliminado."
private_message:
one: "%{actors} te ha escrito"
other: "%{actors} te han escrito."
diff --git a/config/locales/diaspora/fr.yml b/config/locales/diaspora/fr.yml
index 64c4d17b2..8194cfcbc 100644
--- a/config/locales/diaspora/fr.yml
+++ b/config/locales/diaspora/fr.yml
@@ -727,7 +727,7 @@ fr:
click_link: "Pour activer votre nouvelle adresse électronique %{unconfirmed_email}, merci de suivre ce lien :"
subject: "Merci d'activer votre nouvelle adresse électronique %{unconfirmed_email}"
contacts_birthday:
- birthday: "C'est l'anniversaire de %{name} aujourd'hui. Souhaitez-leur un joyeux anniversaire !"
+ birthday: "C'est l'anniversaire de %{name} aujourd'hui. Souhaitez-lui un joyeux anniversaire !"
subject: "C'est l'anniversaire de %{name} aujourd'hui"
view_profile: "Voir le profil de %{name}"
csrf_token_fail:
diff --git a/config/locales/diaspora/hy.yml b/config/locales/diaspora/hy.yml
index e5753857f..184c63c21 100644
--- a/config/locales/diaspora/hy.yml
+++ b/config/locales/diaspora/hy.yml
@@ -183,7 +183,7 @@ hy:
policy: "Տես հավելվածի գաղտնիության քաղաքականությունը"
revoke_autorization: "Չեղյալ համարել"
tos: "Տես հավելվածի օգտագործման պայմանները"
- are_you_sure: "Համոզվա՞ծ ես"
+ are_you_sure: "Համոզվա՞ծ ես։"
are_you_sure_delete_account: "Համոզվա՞ծ ես, որ ուզում ես փակել հաշիվդ։ Էլ վերականգնել չի լինի։"
aspect_memberships:
destroy:
@@ -197,18 +197,18 @@ hy:
failure: "Չստացվեց այդ խումբ մարդ ավելացնել։"
success: "Բարեհաջող ավելացվեց խմբին։"
aspect_listings:
- add_an_aspect: "+ Ստեղծել նոր խումբ"
+ add_an_aspect: "+ Նոր խումբ ստեղծել"
aspect_stream:
make_something: "Ստեղծիր"
stay_updated: "Եղի՛ր տեղեկացված"
- stay_updated_explanation: "Լրահոսումդ լինելու են ընկերներիդ գործողությունները, այն պիտակներով գրառումները, որոնց հետևում ես, և համայնքի որոշ «ընտրված» անդամների գրառումները։"
+ stay_updated_explanation: "Լրահոսումդ լինելու են կապերիդ գործողությունները, այն պիտակներով գրառումները, որոնց հետեւում ես, ու համայնքի որոշ «ընտրված» անդամների գրառումներ։"
destroy:
failure: "%{name} խումբդ չի կարող ջնջվել։"
success: "%{name} խումբդ բարեհաջող ջնջվեց։"
success_auto_follow_back: "%{name} խումբը հաջողությամբ ջնջվեց։ Այդ խումբ ինքնաբերաբար ավելանում էին քեզ հետ կիսվել սկսած մարդիկ։ Ստուգիր կարգավորումներդ ու նոր խումբ ընտրիր, ուր կավելանան ինքնաբերաբար ավելացվող մարդիկ։"
edit:
- aspect_list_is_not_visible: "Այս խմբի մարդիկ չեն կարող տեսնել միմյանց։"
- aspect_list_is_visible: "Այս խմբի մարդիկ կարող են տեսնել միմյանց։"
+ aspect_list_is_not_visible: "Այս խմբի մարդիկ չեն կարող տեսնել միմյանց"
+ aspect_list_is_visible: "Այս խմբի մարդիկ կարող են տեսնել միմյանց"
confirm_remove_aspect: "Վստա՞հ ես, որ ուզում ես ջնջել այս խումբը։"
rename: "Վերանվանել"
update: "Թարմացնել"
@@ -235,17 +235,17 @@ hy:
introduce_yourself: "Սա քո լրահոսն է։  Ընկղմվիր ու ներկայացրու ինքդ քեզ։"
keep_pod_running: "Փող քցվենք %{pod}-ի առողջության համար։"
new_here:
- follow: "Հետևիր %{link} պիտակը և ողջունիր դիասպորա*յի նոր օգտատերերին։"
+ follow: "Հետեւիր %{link} պիտակը եւ ողջունիր դիասպորա*յի նոր օգտատերերին։"
learn_more: "Իմանալ ավելին"
title: "Ողջունի՛ր նորեկներին"
services:
- content: "Կարող ես միացնել հետևյալ ծառայությունները դիասպորա*յին՝"
+ content: "Կարող ես միացնել հետեւյալ ծառայությունները դիասպորա*յին՝"
heading: "Ծառայություններ միացնել"
welcome_to_diaspora: "Բարի գալուստ դիասպորա*, %{name} ջան։"
no_contacts_message:
- community_spotlight: "համայնքի ակնառու օգտատերերի"
+ community_spotlight: "համայնքի ակնառու օգտատերեր"
invite_link_text: "հրավիրել"
- or_spotlight: "Կամ կարող ես կիսվել %{link} հետ։"
+ or_spotlight: "Կամ կարող ես կիսվել %{link}ի հետ։"
try_adding_some_more_contacts: "Կարող ես էլի մարդկանց փնտրել կամ %{invite_link}։"
you_should_add_some_more_contacts: "Լավ կլինի՝ մի քանի մարդ ավելացնես։"
seed:
@@ -265,7 +265,7 @@ hy:
success: "Եկ տեսնենք՝ ինչ ունեն նրանք ասելու։ #sayhello"
bookmarklet:
explanation: "Գրառիր դիասպորա*յում ցանկացած տեղից` տեղադրելով այս հղումը => %{link}"
- heading: "Նշագրում (Bookmarklet)"
+ heading: "Նշագրում"
post_something: "Գրառել դիասպորա*յում"
cancel: "Չեղարկել"
color_themes:
@@ -285,7 +285,7 @@ hy:
index:
add_contact: "Ավելացնել"
all_contacts: "Բոլորը"
- community_spotlight: "Համայնքի ակնառու օգտատերեր"
+ community_spotlight: "համայնքի ակնառու օգտատերեր"
my_contacts: "Իմ կապերը"
no_contacts: "Երևում է՝ նոր ընկերների կարիք ունես։"
no_contacts_in_aspect: "Այս խմբում դեռ ոչ մեկին չես ավելացրել։ Ներքևում այս պահի քո բոլոր ընկերների ցուցակն է, ում կարող ես ավելացնել այս խմբին։"
@@ -307,7 +307,7 @@ hy:
hide_success: "Խոսակցությունը հաջողությամբ թաքցվեց։"
index:
conversations_inbox: "Խոսակցություններ - մուտքային"
- inbox: "Մուտքային"
+ inbox: "Փոստարկղ"
new_conversation: "Նոր խոսակցություն"
no_messages: "Հաղորդագրություններ չկան, դեռ ;Ճ"
new:
@@ -334,7 +334,7 @@ hy:
email: "Էլ.հասցե"
error_messages:
helper:
- correct_the_following_errors_and_try_again: "Ուղղիր նշված վրիպակները և կրկին փորձիր։"
+ correct_the_following_errors_and_try_again: "Ուղղիր նշված վրիպակները ու կրկին փորձիր։"
need_javascript: "Այս կայքին ՋավաՍքրիփթ է անհրաժեշտ պատշաճ գործելու համար։ Եթե անջատել ես այն, խնդրում ենք ակտիավցնես ու թարմացնես էջը։"
fill_me_out: "Լրացրո՛ւ ինձ"
find_people: "Գտնել մարդկանց կամ #պիտակներ"
@@ -413,7 +413,7 @@ hy:
mentions:
how_to_mention_a: "Հավաքիր «@» և սկսիր հավաքել այդ մարդու անունը։ Բացվող ցանկ կհայտնվի, որտեղից հեշտությամբ կարող ես ընտրել մարդկանց։ Ի դեպ, նշել հնարավոր է միայն այն մարդկանց, ում ավելացրել ես խմբերումդ։"
how_to_mention_q: "Ինչպե՞ս նշեմ ինչ-որ մեկին գրառում անելիս։"
- mention_in_comment_a: "0.7.0.0 վարկածից սկսած՝ այո, դու կարող ես նշել որեւէ մեկին մեկնաբանություններիդ մեջ, ինչպես որ կանես գրառման դեպքում՝ ներմուծելով «@», ապա սկսելով հավաքել նրա անունը։ Հաշվի առ, որ երբ ոչ հրապարակային գրառում ես մեկնաբանում, նշել կարող ես միայն այն օգտատերերին, ովքեր կապ ունեն այդ գրառման հետ։"
+ mention_in_comment_a: "0.7.0.0 վարկածից սկսած՝ այո, դու կարող ես նշել որեւէ մեկին մեկնաբանություններիդ մեջ, ինչպես որ կանես գրառման դեպքում՝ ներմուծելով «@», ապա սկսելով հավաքել նրա անունը։ Հաշվի առ, որ երբ ոչ հրապարակային գրառում ես մեկնաբանում, նշել կարող ես միայն այն օգտատերերին, ովքեր որեւէ կերպ արձագանքել են այդ գրառմանը։"
mention_in_comment_q: "Կարո՞ղ եմ նշել ինչ-որ մեկին մեկնաբանության մեջ։"
see_mentions_a: "Ահա, սեղմիր «@Նշվածները» հիմնական էջի ձախ կողմում։"
see_mentions_q: "Կարո՞ղ եմ տեսնել այն գրառումները, որոնցում նշված եմ։"
@@ -577,25 +577,26 @@ hy:
create:
closed: "Հրավերները հասանելի չեն դիասպորա*յի այս փոդում։"
empty: "Պետք է առնվազն մեկ էլ․հասցե նշես։"
- no_more: "Այլևս հրավեր ուղարկելու իրավունք չունես։"
+ no_more: "Այլեւս հրավեր ուղարկելու իրավունք չունես։"
note_already_sent: "Հրավերները արդեն ուղարկվել են հետևյալ հասցեներին՝ %{emails}"
- rejected: "Հետևյալ էլ.հասցեների հետ կապված խնդիրներ կան՝ %{emails}"
- sent: "Հրավերները ուղարկվեցին հետևյալ հասցեներով՝ %{emails}"
+ rejected: "Հետեւյալ էլ.հասցեների հետ կապված խնդիրներ առաջացան՝ %{emails}"
+ sent: "Հրավերները ուղարկվեցին հետեւյալ հասցեներով՝ %{emails}"
new:
codes_left:
one: "Այս հղումը գործող է մեկ հրավերի համար։"
other: "Այս հղումը գործող է %{count} հրավերի համար։"
zero: "Այս հղմամբ հրավիրել այլևս հնարավոր չէ։"
comma_separated_plz: "Կարող ես մի քանի էլ.հասցե մուտքագրել ՝ բաժանելով դրանք ստորակետներով։"
- invite_someone_to_join: "Հրավիրի՛ր որևիցե մեկին՝ միանալու դիասպորա*յին։"
+ invite_someone_to_join: "Հրավիրի՛ր որեւիցե մեկին՝ միանալու դիասպորա*յին"
language: "Լեզու"
paste_link: "Կիսվիր այս հղումով ընկերներիդ հետ, որպեսզի հրավիրես նրանց դիասպորա*, կամ ուղարկիր այն անմիջապես նրանց էլ.հասցեներին։"
send_an_invitation: "Հրավեր ուղարկել"
sending_invitation: "Հրավերը ուղարկվում է․․․"
layouts:
application:
- back_to_top: "Թռնել վերև"
+ back_to_top: "Թռնել վերեւ"
be_excellent: "Հարգալից եղեք միմյանց նկատմամբ ♥"
+ discourse: "Պրոյեկտի քննարկումներ եւ օգնություն"
powered_by: "Գործում է դիասպորա*յի օգնությամբ"
public_feed: "%{name}-ի` դիասպորա*յի հրապարակային հոսքը"
source_package: "Ներբեռնել սկզբնական կոդի փաթեթը"
@@ -631,9 +632,9 @@ hy:
also_commented: "Նույնպես մեկնաբանել են"
and: "ու"
and_others:
- one: "ու ևս մեկը"
- other: "ու ևս %{count}-ը"
- zero: "ու այլևս ոչ ոք"
+ one: "ու եւս մեկը"
+ other: "ու եւս %{count}-ը"
+ zero: "ու այլեւս ոչ ոք"
comment_on_post: "Մեկնաբանել են գրառումը"
contacts_birthday: "Տարեդարձ"
liked: "Հավանել են"
@@ -702,7 +703,7 @@ hy:
birthday: "Այսօր %{name} օգտատիրոջ ծննդյան օրն է։ Մի լավ բան մաղթիր նրան։"
subject: "Այսօր %{name} օգտատիրոջ ծննդյան օրն է։"
view_profile: "Տեսնել %{name}֊ի էջը"
- email_sent_by_diaspora: "Այս նամակը ուղարկվել է %{pod_name}-ի կողմից։ Եթե այլևս չես ուզում ստանալ նմանատիպ նամակներ,"
+ email_sent_by_diaspora: "Այս նամակը ուղարկվել է %{pod_name}-ի կողմից։ Եթե այլեւս չես ուզում ստանալ նմանատիպ նամակներ,"
export_email:
body: |-
Ողջույն, %{name}։ 
@@ -741,7 +742,7 @@ hy:
Կներես,
դիասպորա*յի էլ․փոստային ժրաջան ռոբոտ։
subject: "%{name}, նկարներիդ հետ կապված ինչ-որ խնդիր առաջացավ"
- hello: "Ողջու՜յն, %{name}։"
+ hello: "Ողջո՜ւյն, %{name}"
invite:
message: |-
Ողջո՜ւյն։ 
@@ -816,7 +817,7 @@ hy:
view_post: "Դիտել գրառումը >"
single_admin:
admin: "դիասպորա*յի քո ադմինիստրատոր"
- subject: "Հաղորդագրություն դիասպորա*յի հաշվիդ վերաբերյալ."
+ subject: "Հաղորդագրություն դիասպորա*յի հաշվիդ վերաբերյալ"
started_sharing:
sharing: "սկսեց կիսվել քո հետ։"
subject: "%{name} սկսեց կիսվել քո հետ դիասպորա*յում"
@@ -830,9 +831,9 @@ hy:
invited_by: "Քեզ հրավիրել է՝"
index:
couldnt_find_them: "Չգտա՞ր նրանց։"
- looking_for: "Քեզ %{tag_link} պիտակով գրառումնե՞ր են պետք։"
- no_one_found: "...և ոչ ոք չգտնվեց։"
- no_results: "Հե՛յ, պետք է կոնկրետ մի բան փնտրես։"
+ looking_for: "Քեզ %{tag_link} պիտակով գրառումնե՞ր են պետք"
+ no_one_found: "...եւ ոչ ոք չգտնվեց։"
+ no_results: "Հե՛յ, պետք է կոնկրետ մի բան փնտրես"
results_for: "%{search_term} որոնմանը համապատասխանող մարդիկ"
search_handle: "Օգտագործիր նրանց դիասպորա*յի ԱյԴի-ն (username@pod.am), որ հաստատ գտնես ընկերներիդ։"
searching: "Փնտրվում է, խնդրում ենք լինել համբերատար..."
diff --git a/config/locales/diaspora/ia.yml b/config/locales/diaspora/ia.yml
index d63d89763..b4e980566 100644
--- a/config/locales/diaspora/ia.yml
+++ b/config/locales/diaspora/ia.yml
@@ -58,6 +58,8 @@ ia:
fetching_diaspora_version: "Determina ultime version de diaspora*..."
pod_status: "Stato del pod"
pods:
+ pod_desktop_link: "vista scriptorio"
+ pod_desktop_view: "Iste pagina non es disponibile in vista mobile. Cambia al %{desktop_link}."
pod_network: "Rete de pods"
stats:
2weeks: "2 septimanas"
@@ -229,6 +231,8 @@ ia:
here_to_help: "Le communitate de diaspora* es a tu disposition!"
mail_podmin: "E-mail del \"podmin\""
need_help: "Require adjuta?"
+ support_forum: "Tu pote etiam participar al %{support_forum}."
+ support_forum_link: "foro de supporto"
tag_bug: "bug"
tag_feature: "functionalitate"
tag_question: "question"
@@ -270,6 +274,13 @@ ia:
heading: "Mini-marcapaginas"
post_something: "Inviar a diaspora*"
cancel: "Cancellar"
+ color_themes:
+ dark: "Obscur"
+ dark_green: "Verde obscur"
+ egyptian_blue: "Blau egyptie"
+ magenta: "Magenta"
+ original: "Gris original"
+ original_white: "Fundo blanc original"
comments:
create:
error: "Commento fallite."
@@ -377,9 +388,11 @@ ia:
add_contact_roster_q: "Como pote io parlar in directo a qualcuno in diaspora*?"
contacts_page: "pagina de contactos"
title: "Chat"
+ community_guidelines: "directivas del communitate"
faq: "FAQ"
foundation_website: "le sito web del fundation diaspora*"
getting_help:
+ get_support_a_discourse: "Cerca discussiones existente que pertine a tu question o aperi un nove discussion in nostre platteforma %{discourse}"
get_support_a_faq: "Lege nostre pagina de %{faq} sur le wiki"
get_support_a_hashtag: "Pone le question in un entrata public de diaspora* adjungente le etiquetta %{question}"
get_support_a_irc: "Visita nos in %{irc} (conversation in directo)"
@@ -409,6 +422,7 @@ ia:
mentions:
how_to_mention_a: "Scribe le signo \"@\" e comencia a scriber su nomine. Un menu disrolante deberea apparer que permitte seliger le nomine plus facilemente. Nota ben que il es solmente possibile mentionar personas que tu ha addite a un aspecto."
how_to_mention_q: "Como mentionar un persona quando io scribe un entrata?"
+ mention_in_comment_a: "A partir del version 0.7.0.0, si! Tu pote mentionar alcuno in un commento del mesme maniera que tu lo facerea in un entrata, scribente un “@” ante su nomine. Nota ben: quando tu commenta un entrata non public, tu pote solmente mentionar usatores que ha jam interagite con le entrata."
mention_in_comment_q: "Pote io mentionar qualcuno in un commento?"
see_mentions_a: "Si, clicca sur \"@Mentiones\" in le columna sinistre in tu pagina principal."
see_mentions_q: "Existe un maniera de vider le entratas in que on me ha mentionate?"
@@ -444,7 +458,12 @@ ia:
format_text_q: "Como pote io formatar le texto in mi entratas (grasse, italic, etc.)?"
hide_posts_a: "Si tu puncta le mouse verso le parte superior de un entrata, un × appare al dextra. Clicca sur illo pro celar le entrata e silentiar le notificationes sur illo. Tu pote ancora vider le entrata si tu visita le pagina de profilo del persona qui lo ha inviate."
hide_posts_q: "Como cela io un entrata?"
+ ignore_user_a1: "Si tu actualmente divide cosas con ille persona, remover la de tote tu aspectos eliminara le majoritate de su entratas de tu fluxo. Un methodo plus complete es \"ignorar\" le conto in question. Isto impedira que alcun entrata sue appare in tu fluxo, e illa non plus potera commentar o appreciar tu entratas. Nonobstante, illa ancora pote repeter tu entratas e commentar le repetitiones de tu entratas, e su commentos sur entratas de altere personas que appare in tu fluxo continuara a esser visibile pro te."
+ ignore_user_a2: "Pro ignorar un conto, clicca sur le icone “ignorar” (un circulo con un linea diagonal que lo transversa) in cyma al dextra de un de su entratas. Su entratas disparera immediatemente de tu fluxo. Alternativemente, visita su pagina de profilo e clicca sur le icone “ignorar” illac. Tu potera ancora vider su entratas sur su pagina de profilo, o per usar le vista de entrata singule."
+ ignore_user_a3: "Le lista de personas que tu ignora se trova in le configuration de tu conto sub Confidentialitate. Pro cessar de ignorar un persona, remove la del lista sur ille pagina."
+ ignore_user_q: "Como impedi io que le entratas de un persona appare in mi fluxo?"
insert_images_a: "Clicca sur le micre icone de camera pro inserer un imagine in un entrata. Preme le icone de camera de novo pro adder un altere photo, o tu pote seliger plure photos a incargar insimul."
+ insert_images_comments_a: "Tu pote usar Markdown pro inserer un imagine ab le web in un commento, como in entratas. Nonobstante, non es possibile incargar imagines ab tu computator directemente in commentos. Incarga los a un servicio hospite de imagines e postea insere los usante le button de imagine supra le publicator."
insert_images_comments_q: "Pote io inserer imagines in commentos?"
insert_images_q: "Como inserer imagines in entratas?"
post_location_a: "Clicca sur le icone de spinula al latere del camera in le quadro de publication. Isto insere tu position geographic ab OpenStreetMap. Tu pote modificar tu position, per exemplo, si tu vole divulgar solmente le citate e non le adresse stratal exacte."
@@ -473,6 +492,14 @@ ia:
title: "Entratas private"
who_sees_post_a: "Solmente le usatores qui ha aperite session in disaspora* e que tu habeva placiate in ille aspecto ante de inviar le entrata private pote vider lo."
who_sees_post_q: "Quando io invia un message a un aspecto (i.e. un entrata private), qui potera vider lo?"
+ profile:
+ title: "Profilo"
+ what_do_tags_do_a: "Illos adjuta le gente a cognoscer te. Le imagine de tu profilo etiam apparera in le columna sinistre del paginas de fluxo correspondente a ille etiquettas, insimul con le imagines del altere personas que ha iste etiquettas in lor profilos basic."
+ what_do_tags_do_q: "Que face le etiquettas in mi profilo basic?"
+ whats_in_profile_a: "Un profilo ha duo partes: le profilo basic e le profilo extendite. Le profilo basic contine tu nomine, le cinque etiquettas que tu ha eligite pro describer te, e tu photo. Le profilo extendite contine tu biographia, loco, genere e die de nascentia. Tote iste information es facultative; a te le decision de fornir lo o non. Tu pote render iste information de profilo tanto personal o tanto anonyme como tu vole. Le profilo extendite appare in le columna sinistre de tu pagina de profilo, sub le imagine del profilo."
+ whats_in_profile_q: "Que es in mi profilo?"
+ who_sees_profile_a: "Le profilo basic (nomine, imagine e #etiquettas) es public. Le profilo extendite es normalmente private, ma tu pote render toto accessibile al publico si tu lo prefere. Solmente le personas con qui tu divide cosas (i.e. que tu ha addite a un de tu aspectos) pote vider tu profilo extendite si tu lo mantene private. Altere personas videra solmente tu information public. Omne information de profilo que tu rende public pote esser vidite per qualcunque usator del web e pote esser indexate per motores de recerca."
+ who_sees_profile_q: "Qui vide mi profilo?"
public_posts:
can_comment_reshare_like_a: "Omne usator qui ha aperite session in diaspora* pote commentar, repeter o appreciar tu entrata public."
can_comment_reshare_like_q: "Qui pote commentar, repeter o appreciar mi entrata public?"
@@ -584,6 +611,7 @@ ia:
application:
back_to_top: "Retornar al cyma"
be_excellent: "Sia benevolente le un verso le altere! ♥"
+ discourse: "Discussion e supporto del projecto"
powered_by: "Actionate per diaspora*"
public_feed: "Fluxo public de diaspora* pro %{name}"
source_package: "Discargar le pacchetto con le codice-fonte"
@@ -617,6 +645,10 @@ ia:
one: "%{actors} commentava tu entrata %{post_link}."
other: "%{actors} commentava tu entrata %{post_link}."
zero: "%{actors} commentava tu entrata %{post_link}."
+ contacts_birthday:
+ one: "%{actors} ha su anniversario le %{date}."
+ other: "%{actors} ha lor anniversario le %{date}."
+ zero: "%{actors} ha lor anniversario le %{date}."
index:
all_notifications: "Tote le notificationes"
also_commented: "Anque commentate"
@@ -626,6 +658,7 @@ ia:
other: "e %{count} alteres"
zero: "e nemo altere"
comment_on_post: "Commentar iste entrata"
+ contacts_birthday: "Anniversario"
liked: "Appreciate"
mark_all_as_read: "Marcar totes como legite"
mark_all_shown_as_read: "Marcar tote le entratas monstrate como legite"
@@ -690,6 +723,10 @@ ia:
confirm_email:
click_link: "Pro activar tu nove adresse de e-mail %{unconfirmed_email}, seque iste ligamine:"
subject: "Per favor activa tu nove adresse de e-mail %{unconfirmed_email}"
+ contacts_birthday:
+ birthday: "%{name} ha su anniversario hodie. Desira le/la un felice anniversario!"
+ subject: "%{name} ha su anniversario hodie"
+ view_profile: "Vider le profilo de %{name}"
csrf_token_fail:
body: |-
Salute %{name},
@@ -1067,6 +1104,8 @@ ia:
streams:
activity:
title: "Mi activitate"
+ admin:
+ title: "Admin"
aspects:
all: "Tote le aspectos"
title: "Mi aspectos"
@@ -1122,6 +1161,7 @@ ia:
also_commented: "un persona commenta un entrata que tu ha commentate"
auto_follow_aspect: "Aspecto pro usatores con que tu divide automaticamente:"
auto_follow_back: "Divider automaticamente con omne persona qui comencia a divider con te"
+ birthday: "un persona ha su anniversario"
change: "Cambiar"
change_color_theme: "Cambiar thema de colores"
change_email: "Cambiar adresse de e-mail"
diff --git a/config/locales/diaspora/it.yml b/config/locales/diaspora/it.yml
index cb514c405..f4ab25ca8 100644
--- a/config/locales/diaspora/it.yml
+++ b/config/locales/diaspora/it.yml
@@ -21,6 +21,10 @@ it:
attributes:
diaspora_handle:
taken: "è già stato preso."
+ poll_participation:
+ attributes:
+ poll:
+ already_participated: "Hai già partecipato a questo sondaggio!"
reshare:
attributes:
root_guid:
@@ -302,6 +306,7 @@ it:
miscellaneous:
back_to_top_a: "Si. Dopo averla fatta scorrere in basso, clicca sulla freccia grigia che appare nell`angolo in basso a destra della finestra del tuo browser."
back_to_top_q: "C`è un modo veloce per tornare in cima ad una pagina una volta che l'ho fatta scorrere in basso?"
+ diaspora_app_a: "Sono state sviluppate varie app Android da parte di membri della community. Alcune sono state abbandonate da tempo e quindi non funzionano bene con la versione attuale di diaspora*. Non aspettatevi molto da queste app per il momento. Non esiste attualmente una app per iOS. Il miglior modo di accedere a diaspora* da un dispositivo mobile è usare un browser, dato che abbiamo implementato una versione mobile del sito che dovrebbe funzionare bene su tutti i dispositivi, anche se per ora non tutte le funzionalità sono attive."
diaspora_app_q: "Esiste l'app diaspora* per Android o iOS?"
photo_albums_a: "Al momento no. Tuttavia puoi vedere uno stream delle loro foto caricate dalla sezione foto nella barra laterale del loro profilo."
photo_albums_q: "Ci sono album di foto o video?"
@@ -548,6 +553,7 @@ it:
report_email:
type:
comment: "commento"
+ post: "post"
reshared:
reshared: "%{name} ha condiviso il tuo post"
view_post: "Leggi il post >"
@@ -610,6 +616,7 @@ it:
allow_search: "Permetti ad altri di trovarti su Diaspora"
first_name: "Nome"
last_name: "Cognome"
+ nsfw_explanation: "NSFW(“not safe fo rwork”) è lo standard di autogoverno della comunità di Diaspora per identificare i contenuti non adatti ad essere visualizzati in un contesto lavorativo. Se pensate di condividere frequentemente materiale di questa natura vi chiediamo di attivare questa opzione in modo che qualsiasi cosa condividiate non verrà visualizzata nei flussi di altri a meno che queste persone stesse abbiano scelto di visualizzarla."
settings: "Impostazioni del profilo"
update_profile: "Aggiorna il profilo"
your_bio: "La tua biografia"
diff --git a/config/locales/diaspora/nb.yml b/config/locales/diaspora/nb.yml
index cd501761b..a63e59c1e 100644
--- a/config/locales/diaspora/nb.yml
+++ b/config/locales/diaspora/nb.yml
@@ -648,6 +648,10 @@ nb:
one: "%{actors} kommenterte ditt %{post_link}."
other: "%{actors} kommenterte ditt %{post_link}."
zero: "%{actors} kommenterte ditt %{post_link}."
+ contacts_birthday:
+ one: "%{actors} har fødselsdag den %{date}."
+ other: "%{actors} har fødselsdag den %{date}."
+ zero: "%{actors} har fødselsdag den %{date}."
index:
all_notifications: "Alle notifikasjoner"
also_commented: "Kommenterte også"
@@ -660,6 +664,7 @@ nb:
two: "og %{count} andre"
zero: "og ingen andre"
comment_on_post: "Kommenter på innlegget"
+ contacts_birthday: "Fødselsdag"
liked: "Likte"
mark_all_as_read: "Merk alle som leste"
mark_all_shown_as_read: "Marker alle som lest"
@@ -736,6 +741,10 @@ nb:
confirm_email:
click_link: "To activate your new e-mail address %{unconfirmed_email}, please click this link:"
subject: "Please activate your new e-mail address %{unconfirmed_email}"
+ contacts_birthday:
+ birthday: "%{name} har fødselsdag i dag. Si «gratulerer med dagen»!"
+ subject: "%{name} har fødselsdag i dag"
+ view_profile: "Se profilen til %{name}"
csrf_token_fail:
body: |-
Hei, %{name}
@@ -1020,12 +1029,12 @@ nb:
error: "feil under tilkobling av tjenesten"
index:
connect: "Koble til"
- disconnect: "koble fra"
+ disconnect: "Koble fra"
edit_services: "Rediger tjenester"
- logged_in_as: "logget inn som"
+ logged_in_as: "Logget inn som %{nickname}"
no_services_available: "Det finnes ingen tjenester tilgjengelig på denne belgen."
not_logged_in: "Ikke logget inn for øyeblikket."
- really_disconnect: "koble fra %{service}?"
+ really_disconnect: "Koble fra %{service}?"
services_explanation: "Ved å koble til andre sosiale tjenester, får du muligheten å publisere til disse tjenestene idet du poster til diaspora*."
share_to: "Del med %{provider}"
title: "Behandle tilkoblede tjenester"
@@ -1165,6 +1174,7 @@ nb:
also_commented: "noen andre har kommentert et innlegg du kommenterte på"
auto_follow_aspect: "Aspekt for automatisk fulgte brukere:"
auto_follow_back: "Del automatisk med brukere som begynner å dele med deg"
+ birthday: "noen har fødselsdag"
change: "Endre"
change_color_theme: "Endre fargetema"
change_email: "Endre e-postadresse"
diff --git a/config/locales/diaspora/oc.yml b/config/locales/diaspora/oc.yml
index 3e5f4bc06..fa4aef330 100644
--- a/config/locales/diaspora/oc.yml
+++ b/config/locales/diaspora/oc.yml
@@ -343,7 +343,7 @@ oc:
csrf_token_fail: "Lo geton CSRF es invalid. Mercés de vos conectar e de tornar ensajar."
helper:
correct_the_following_errors_and_try_again: "Corregissètz las errors seguentas, e tornatz ensajar."
- need_javascript: "Aqueste site Internet requerís JavaScript per foncionar coma cal. Se avètz desactivat JavaScript, mercés de l'activar e d'actualizar aquesta pagina."
+ need_javascript: "Aqueste site Internet requerís JavaScript per foncionar coma cal. S’avètz desactivat JavaScript, mercés de l'activar e d'actualizar aquesta pagina."
fill_me_out: "Escriure aicí"
find_people: "Recercar de personas o de #etiquetas"
help:
diff --git a/config/locales/diaspora/pt-BR.yml b/config/locales/diaspora/pt-BR.yml
index f3bc0341a..d341a9bbb 100644
--- a/config/locales/diaspora/pt-BR.yml
+++ b/config/locales/diaspora/pt-BR.yml
@@ -241,9 +241,9 @@ pt-BR:
introduce_yourself: "Este é seu fluxo. Se apresente!"
keep_pod_running: "Mantenha %{pod} funcionando bem e pague um café para nossos voluntários com uma doação fixa mensal!"
new_here:
- follow: "Siga %{link} e dê boas vindas aos novos usuários de Diaspora*!"
+ follow: "Siga as tags %{link} e #novata e dê as boas-vindas aos novos usuários da diaspora*!"
learn_more: "Saiba mais"
- title: "Dê boas-vindas aos novatos"
+ title: "Diga olá a quem acabou de chegar"
services:
content: "Você pode conectar os seguintes serviços à diaspora*:"
heading: "Conecte-se"
@@ -887,7 +887,7 @@ pt-BR:
no_one_found: "...e ninguém foi encontrado."
no_results: "Ei! Você precisa procurar por alguma coisa."
results_for: "Resultado da busca por %{search_term}"
- search_handle: "Para que você encontre seus amigos, use a diaspora* ID deles (nomedeusuario@nomedopod.org)."
+ search_handle: "Talvez a conta buscada exista, mas ainda não esteja conectada ao pod no qual você se cadastrou. Procure-a inserindo a diaspora* ID completa (nomedeusuário@pod.domínio) na barra de pesquisa."
searching: "Pesquisando, seja paciente..."
send_invite: "Nada ainda? Envie um convite!"
person:
@@ -1158,7 +1158,7 @@ pt-BR:
also_commented: "alguém comentar uma publicação que você tenha comentado"
auto_follow_aspect: "Aspecto para contatos adicionados automaticamente:"
auto_follow_back: "Compartilhar automaticamente com usuários que começam a compartilhar com você"
- birthday: "alguém faz aniversário"
+ birthday: "alguém fizer aniversário"
change: "Alterar"
change_color_theme: "Mudar paleta"
change_email: "Alterar e-mail"
@@ -1189,7 +1189,7 @@ pt-BR:
last_exported_at: "(Atualizado pela última vez às %{timestamp})"
liked: "alguém curtir uma publicação sua"
mentioned: "mencionarem você em uma publicação"
- mentioned_in_comment: "mencionaram você em um comentário"
+ mentioned_in_comment: "mencionarem você em um comentário"
new_password: "Nova senha"
private_message: "você receber uma mensagem privada"
receive_email_notifications: "Receber notificações por e-mail quando:"
@@ -1202,7 +1202,7 @@ pt-BR:
show_getting_started: "Mostrar dicas de \"como começar\""
someone_reported: "alguém envia um relato"
started_sharing: "alguém começar a compartilhar com você"
- stream_preferences: "Preferências do Fluxo"
+ stream_preferences: "Preferências do fluxo"
your_email: "Seu e-mail"
your_email_private: "Seu e-mail não será visto por outros usuários"
your_handle: "Sua diaspora* ID"
diff --git a/config/locales/diaspora/pt-PT.yml b/config/locales/diaspora/pt-PT.yml
index 1a9e0217c..cf0701371 100644
--- a/config/locales/diaspora/pt-PT.yml
+++ b/config/locales/diaspora/pt-PT.yml
@@ -24,7 +24,7 @@ pt-PT:
reshare:
attributes:
root_guid:
- taken: "Assim tão bom? Já repartilhou essa publicação!"
+ taken: "É assim tão bom? Já partilhou essa publicação!"
user:
attributes:
email:
@@ -103,7 +103,7 @@ pt-PT:
aspect_stream:
make_something: "Efetue algo"
stay_updated: "Mantenha-se atualizado"
- stay_updated_explanation: "No seu fluxo geral pode encontrar todos os seus contactos, as etiquetas que segue e as publicações de alguns membros criativos da comunidade."
+ stay_updated_explanation: "O seu fluxo principal é preenchido com todos os seus contactos, etiquetas que segue, e publicações de alguns membros criativos da comunidade."
destroy:
failure: "Não foi possível remover %{name}."
success: "%{name} foi removido(a) com sucesso."
@@ -144,7 +144,7 @@ pt-PT:
no_contacts_message:
community_spotlight: "Destaque da comunidade"
or_spotlight: "Ou pode partilhar com %{link}"
- try_adding_some_more_contacts: "Pode procurar ou convidar mais contactos."
+ try_adding_some_more_contacts: "Pode procurar ou %{invite_link} mais contactos."
you_should_add_some_more_contacts: "Devia adicionar mais alguns contactos!"
seed:
acquaintances: "Conhecidos"
@@ -152,8 +152,8 @@ pt-PT:
friends: "Amigos"
work: "Trabalho"
update:
- failure: "O seu grupo, %{name}, tinha um nome grande demais para ser guardado."
- success: "O seu grupo, %{name}, foi editado com sucesso."
+ failure: "O seu aspeto, %{name}, tinha um nome demasiado grande para ser guardado."
+ success: "O seu aspeto, %{name}, foi editado com sucesso."
blocks:
create:
failure: "Eu não consegui ignorar esse utilizador. #evasão"
@@ -204,7 +204,7 @@ pt-PT:
birthday: "%d de %B"
birthday_with_year: "%d de %B de %Y"
fullmonth_day: "%d de %B"
- delete: "Apagar"
+ delete: "Eliminar"
email: "Correio Eletrónico"
error_messages:
helper:
@@ -239,7 +239,7 @@ pt-PT:
post_multiple_aspects_q: "Posso publicar o conteúdo em múltiplos aspetos em simultâneo?"
remove_notification_a: "Não."
remove_notification_q: "Se eu remover alguém de um ou de todos os meus aspetos, essas pessoas são notificadas?"
- rename_aspect_a: "Clique em \"Meus Aspetos\" na barra lateral de uma visualização do fluxo e clique no ícone lápis junto ao aspeto que deseja renomear, ou vá para a página dos seus Contactos e selecione o aspeto relevante. Depois clique no ícone junto ao nome do aspeto no topo desta página, altere o nome e clique em \"Atualizar\"."
+ rename_aspect_a: "Clique em \"Meus Aspetos\" na barra lateral de um fluxo e clique no ícone lápis junto ao aspeto que deseja renomear, ou vá para a página dos seus 'Contactos' e selecione o aspeto relevante. Depois clique no ícone junto ao nome do aspeto no topo desta página, altere o nome e clique em \"Atualizar\"."
rename_aspect_q: "Eu posso renomear um aspeto?"
restrict_posts_i_see_a: "Sim. Clique em \"Meus Aspetos\" na barra lateral e depois clique em aspetos individuais na lista para selecioná-los ou desmarcá-los. Apenas as publicações por pessoas nos aspetos selecionados irão aparecer no seu fluxo."
restrict_posts_i_see_q: "Eu posso restringir as publicações no meu fluxo para alguns de certos aspetos?"
@@ -250,16 +250,17 @@ pt-PT:
who_sees_post_q: "Quando eu publico num aspeto, quem vê?"
foundation_website: "site da web da fundação diaspora"
getting_help:
- get_support_a_hashtag: "pergunte numa publicação pública no diaspora*, utilizando o cardinal %{question}"
- get_support_a_irc: "junte-se a nós em %{irc} (Chat ao vivo)"
- get_support_a_tutorials: "consulte os nossos %{tutorials}"
- get_support_a_website: "visite o nosso %{link}"
- get_support_a_wiki: "procure em %{link}"
+ get_support_a_faq: "Leia a nossa página de %{faq} na wiki"
+ get_support_a_hashtag: "Pergunte numa publicação pública no diaspora*, utilizando a hashtag %{question}"
+ get_support_a_irc: "Junte-se a nós em %{irc} (Conversação em direto)"
+ get_support_a_tutorials: "Consulte os nossos %{tutorials}"
+ get_support_a_website: "Visite o nosso %{link}"
+ get_support_a_wiki: "Procure em %{link}"
get_support_q: "E se a minha pergunta não tiver resposta nesta FAQ? Onde é que posso obter mais suporte?"
- getting_started_a: "Está com sorte. Experimente %{tutorial_series} no nosso site do projeto. Isto irá guiá-lo passo-a-passo durante o processo de registo e ensina-o sobre todas as coisas básicas que necessita de saber sobre a utilização do diaspora*."
+ getting_started_a: "Está com sorte. Experimente %{tutorial_series} no nosso site do projeto. Este irá guiá-lo passo-a-passo durante o processo de registo e ensina-o sobre todas as coisas básicas que precisa de saber sobre a utilização do diaspora*."
getting_started_q: "Ajuda! Eu preciso de alguma ajuda básica para me iniciar!"
title: "Obter ajuda"
- getting_started_tutorial: "Série de tutoriais sobre 'Iniciação ...'"
+ getting_started_tutorial: "Série de tutoriais sobre 'Iniciação...'"
here: "aqui"
irc: "IRC"
keyboard_shortcuts:
@@ -286,25 +287,25 @@ pt-PT:
what_is_a_pod_q: "O que é um servidor?"
posts_and_posting:
char_limit_services_a: "Neste caso a sua publicação é limitada à menor contagem de caracteres (140 no Twitter; 1000 no Tumblr), e o número de caracteres não utilizados é mostrado quando o ícone daquele serviço é assinalado. Ainda poderá publicar nestes serviços se a sua publicação ultrapassar os respetivos limites, no entanto o texto será truncado nesses serviços."
- char_limit_services_q: "Qual é o limite de carateres para as publicações partilhadas através de um servço conetado com uma contagenm de carateres pequena?"
+ char_limit_services_q: "E se eu estiver a partilhar a minha publicação com um serviço ligado com uma contagem de carateres menor?"
character_limit_a: "65,535 carateres. Isto é, mais de 65,395 carateres do que o que obtém no Twitter! ;)"
character_limit_q: "Qual é o limite de carateres para as publicações?"
embed_multimedia_a: "Geralmente basta colar a hiperligação (por exemplo: http://www.youtube.com/watch?v=nnnnnnnnn) na sua publicação, e o vídeo ou áudio será incorporado automaticamente. Alguns dos sites suportados são: YouTube, Vimeo, SoundCloud e Flickr entre outros. diaspora* utiliza oEmbed para esse efeito. A todo o momento novos sites vão sendo acrescentados a este suporte. Lembre-se de fazer sempre uma publicação de links simples e completos: não utilize links abreviados; nem caracteres depois da hiperligação base; e aguarde um instante antes de refrescar a página para ver a previsão de como ficará depois de publicar."
- embed_multimedia_q: "Como é que eu integro um vídeo, áudio, ou outro conteúdo de multimédia numa publicação?"
- format_text_a: "Ao utilizar um sistema simplificado chamado %{markdown}. Pode encontrar a sintaxe Markdown completa %{here}. O botão de pré-visualização é muito útil aqui, pois permite ver como aparecerá a sua mensagem antes de a compartilhar."
+ embed_multimedia_q: "Como é que eu incorporo um vídeo, áudio, ou outro conteúdo de multimédia numa publicação?"
+ format_text_a: "O diáspora * utiliza um sistema simplificado chamado %{markdown}. O editor tem botões para facilitar o formato do seu texto. Se desejar formatar manualmente a sua publicação, pode encontrar a sintaxe de 'Markdown' completa %{here}. O separador de pré-visualização significa que pode ver como a sua mensagem irá ser exibida antes de a partilhar. Lembre-se que não o pode editar assim que o publicar, por isso, utilize a pré-visualização para se certificar que está perfeito antes de clicar em \"Partilhar\"!"
format_text_q: "Como é que eu formato o texto nas minhas publicações (negrito, itálico, etc.)?"
- hide_posts_a: "Se apontar o seu rato no topo de uma publicação, aparece um X à direita. Clique-o para ocultar a publicação e cancelar as notificações sobre a mesma. Ainda pode continuar a ver a publicação se visitar a página de perfil da pessoas que a publicou."
- hide_posts_q: "Como é que eu oculto uma publicação? Como é que eu deixo de receber notificações sobre uma publicação com o meu comentário?"
- insert_images_a: "Clique no ícone da câmara para inserir uma imagem numa publicação. Clique novamente no ícone da fotografia para adicionar outra fotografia, ou pode selecionar múltiplas fotografias para as enviar de uma vez."
+ hide_posts_a: "Se apontar o seu rato no topo de uma publicação, aparece um X à direita. Clique-o para ocultar a publicação e cancelar as notificações sobre a mesma. Ainda pode continuar a ver a publicação se visitar a página de perfil da pessoa que a publicou."
+ hide_posts_q: "Como é que eu oculto uma publicação?"
+ insert_images_a: "Se desejar incluir uma imagem guardada no seu computador na sua publicação, clique no ícone de câmara pequeno na parte inferior do editor. Também pode arrastar e largar uma imagem, ou várias imagens, do seu computador para esse ícone. Se desejar inserir uma imagem da Web na sua publicação, clique no botão de imagem na parte superior do editor, que irá criar o código 'Markdown' para si."
insert_images_comments_q: "Eu posso inserir imagens nos comentários?"
insert_images_q: "Como é que eu insiro imagens nas publicações?"
- size_of_images_a: "Não. As imagens são redimensionadas automaticamente para se ajustarem ao fluxo. A redução não tem um código para especificar o tamanho de uma imagem."
+ size_of_images_a: "Não. As imagens são redimensionadas automaticamente para se ajustarem ao fluxo ou ver uma única publicação. Markdown não tem um código para especificar o tamanho de uma imagem."
size_of_images_q: "Eu posso personalizar o tamanho das imagens nas publicações ou comentários?"
stream_full_of_posts_a1: "O seu fluxo é constituido até 3 tipos de publicações:"
- stream_full_of_posts_li1: "Publicações de pessoas com quem você está a compartilhar, que podem ser de dois tipos: publicações públicas ou publicações limitadas compartilhadas com um grupo do qual você faz parte. Para remover essas publicações do seu fluxo, basta parar de compartilhar com essa pessoa."
+ stream_full_of_posts_li1: "As publicações das pessoas com quem está a partilhar, que podem ser de dois tipos: publicações públicas e publicações limitadas compartilhadas com um aspeto do qual faz parte. Para remover essas publicações do seu fluxo, basta deixar de partilhar com essa pessoa."
stream_full_of_posts_li2: "Publicações públicas contendo uma das etiquetas que segue. Para as remover, deixe de seguir a etiqueta."
stream_full_of_posts_li3: "Publicações públicas de pessoas listadas em destaque da comunidade. Estas podem ser removidas, desmarcando a opção \"Mostrar destaque da comunidade no fluxo?\" no separador 'Conta' das suas 'Configurações'."
- stream_full_of_posts_q: "Porque é que o meu grupo está cheio de publicações de pessoas que não conheço, e que não compartilho com elas?"
+ stream_full_of_posts_q: "Porque é que o meu fluxo está cheio de publicações de pessoas que eu não conheço e que não partilho com elas?"
title: "Publicações e publicar"
private_posts:
can_comment_a: "Apenas os utilizadores logados em diaspora* que associou a esse grupo podem comentar ou gostar da sua publicação privada."
@@ -331,6 +332,11 @@ pt-PT:
reshare_public_post_aspects_q: "Eu posso voltar a compartilhar uma publicação pública só com alguns aspetos?"
title: "Voltar a compartilhar as publicações"
sharing:
+ add_to_aspect_li7: "Amy irá aparecer em \"Apenas a partilhar comigo\" na página de contactos de Ben."
+ only_sharing_a: "Estas são as pessoas que o adicionaram a um dos seus aspetos, mas que não estão (ainda) em nenhum dos seus aspetos. Em outras palavras, eles estão a partilhar consigo, mas você não está a partilhar com eles: pode pensar nisto, como eles o estão \"a seguir\". Se os adicionar a um aspeto, eles depois irão aparecer nesse aspeto e não em \"Apenas a partilhar comigo'. Veja acima."
+ only_sharing_q: "Quem são as pessoas listadas em \"Apenas a partilhar comigo\" na minha página de contactos?"
+ see_old_posts_a: "Não. Eles só poderão ver as novas publicações nesse aspeto. Eles (e todos os outros) podem ver as suas publicações públicas mais antigas na sua página de perfil, e eles também poderão vê-los no seu fluxo."
+ see_old_posts_q: "Quando eu adiciono alguém a um aspeto, eles podem ver as publicações mais antigas que eu já publiquei nesse aspeto?"
title: "Compartilhar"
tags:
filter_tags_q: "Como é que eu posso filtrar/excluir algumas etiquetas do meu fluxo?"
@@ -341,12 +347,18 @@ pt-PT:
tutorial: "tutorial"
tutorials: "tutoriais"
wiki: "wiki"
+ home:
+ podmin:
+ getting_help: "Obter ajuda"
+ update_instructions: "atualizar as instruções na wiki do diaspora*"
+ update_your_pod: "Atualize o seu servidor"
+ update_your_pod_info: "Pode encontrar %{update_instructions}."
invitations:
create:
empty: "Por favor insira pelo menos um endereço de email."
no_more: "Não tem mais convites."
note_already_sent: "Convites já foram enviados para: %{emails}"
- rejected: "Os seguintes endereços de e-mail tiveram problemas: "
+ rejected: "Os seguintes endereços de e-mail tiveram problemas: %{emails}"
sent: "Convites foram enviados para: %{emails}"
new:
codes_left:
@@ -419,10 +431,10 @@ pt-PT:
mentioned_deleted:
few: "%{actors} mencionaram-no numa publicação apagada."
many: "%{actors} mencionaram-no numa publicação apagada."
- one: "%{actors} mencionou-no numa publicação apagada."
- other: "%{actors} mencionaram-no numa publicação apagada."
+ one: "%{actors} mencionou-o numa publicação eliminada."
+ other: "%{actors} mencionaram-no numa publicação eliminada."
two: "%{actors} mencionaram-no numa publicação apagada."
- zero: "%{actors} mencionaram-no numa publicação apagada."
+ zero: "%{actors} mencionou-o numa publicação eliminada."
private_message:
one: "%{actors} enviou-lhe uma mensagem."
other: "%{actors} enviaram-lhe uma mensagem."
@@ -494,7 +506,7 @@ pt-PT:
add_contact:
invited_by: "foi convidado por"
index:
- looking_for: "À procura de publicações com a etiqueta %{tag_link}?"
+ looking_for: "À procura de publicações etiquetadas %{tag_link}?"
no_one_found: "...e ninguém foi encontrado."
no_results: "Ei! Precisa pesquisar por alguma coisa."
results_for: "Utilizadores que correspondem %{search_term}"
@@ -512,9 +524,9 @@ pt-PT:
has_not_shared_with_you_yet: "%{name} ainda não partilhou quaisquer publicações consigo!"
photos:
create:
- integrity_error: "O envio da fotografia falhou. Tem a certeza de que o ficheiro que selecionou era uma imagem?"
+ integrity_error: "O envio da fotografia falhou. Tem a certeza que isso era uma imagem?"
runtime_error: "O envio da fotografia falhou. Tem a certeza que o seu cinto de segurança está apertado?"
- type_error: "O envio da fotografia falhou. Tem a certeza que uma imagem foi adicionada?"
+ type_error: "O envio da fotografia falhou. Tem a certeza que foi adicionada uma imagem?"
destroy:
notice: "Fotografia apagada."
new_profile_photo:
@@ -548,7 +560,7 @@ pt-PT:
your_tags: "Descreva-se em 5 palavras"
your_tags_placeholder: "Como #filmes #gatos #viagens #professor #lisboa"
update:
- failed: "Falhou ao atualizar o perfil"
+ failed: "Não foi possível atualizar o perfil"
updated: "Perfil atualizado"
public: "Público"
registrations:
@@ -588,7 +600,7 @@ pt-PT:
edit_services: "Editar serviços"
logged_in_as: "Sessão iniciada como %{nickname}."
really_disconnect: "Desligar de %{service}?"
- services_explanation: "Ao conetar aos serviços permite-lhe publicar as suas publicações nos mesmo, ao mesmo tempo que as escreve no diaspora*."
+ services_explanation: "Ao ligar aos serviços de partilha de terceiros, pode publicar as suas publicações nos mesmos, ao mesmo tempo que as escreve no diaspora*."
settings: "Configurações"
shared:
aspect_dropdown:
@@ -597,7 +609,7 @@ pt-PT:
other: "Em %{count} aspetos"
zero: "Adicionar contacto"
invitations:
- by_email: "Por email"
+ by_email: "Convide pessoas por e-mail"
invite_your_friends: "Convide os seus amigos"
invites: "Convites"
share_this: "Compartilhe esta hiperligação via e-mail, blogue, ou redes sociais!"
@@ -672,7 +684,7 @@ pt-PT:
success: "A sua conta foi bloqueada. Poderá demorar até 20 minutos para nós a terminarmos o fecho da sua conta. Obrigado por experimentar o diaspora*."
wrong_password: "A palavra-passe digitada não corresponde à sua palavra-passe actual."
edit:
- also_commented: "alguém comentar numa publicação em que já comentou"
+ also_commented: "alguém comenta numa publicação em que já comentou"
auto_follow_aspect: "Grupo para os contactos adicionados automaticamente:"
auto_follow_back: "Compartilgar automaticamente com os utilizadores que começam a compartilhar consigo"
change: "Alterar"
@@ -687,7 +699,7 @@ pt-PT:
make_diaspora_better: "Nós gostaríamos que ficasse e nos ajude a tornar o diaspora* ainda melhor, em vez de nos deixar. Se realmente desejar deixar-nos, nós queremos que saiba o que irá acontecer a seguir."
mr_wiggles: "Mr Wiggles ficará triste de o(a) ver partir"
no_turning_back: "Atualmente, não há como voltar atrás."
- what_we_delete: "Nós iremos apagar todas as suas publicações e os dados do perfil, assim que seja tão humanamente possível. Os seus comentários irão manter-se, mas estes serão associados com a sua Id. do diaspora*, em vez do seu nome."
+ what_we_delete: "Nós iremos eliminar todas as suas publicações e os dados do perfil assim que possível. Os seus comentários nas publicações de outras pessoas ainda irão aparecer, mas estas serão associadas com a sua Id. do diaspora*, em vez do seu nome."
close_account_text: "Encerrar conta"
comment_on_post: "alguém comenta na sua publicação"
current_password: "Palavra-passe atual"
@@ -701,21 +713,23 @@ pt-PT:
new_password: "Nova palavra-passe"
private_message: "recebe uma mensagem privada"
receive_email_notifications: "Receber notificações por e-mail quando:"
+ request_export_photos_update: "Atualizar as minhas fotografias"
+ request_export_update: "Atualizar os meus dados do perfil"
reshared: "alguém volta a compartilhar a sua publicação"
show_community_spotlight: "Mostrar \"destaques da comunidade\" no seu fluxo?"
- show_getting_started: "Mostrar dicas de 'Iniciação ...'"
+ show_getting_started: "Mostrar dicas de 'Iniciação...'"
started_sharing: "alguém começa a compartilhar consigo"
stream_preferences: "Preferências do Fluxo"
your_email: "O seu endereço de email"
your_handle: "A sua identificação no diaspora*"
getting_started:
- awesome_take_me_to_diaspora: "Fantástico! Leve-me para o Diaspora*"
+ awesome_take_me_to_diaspora: "Fantástico! Leve-me para o diaspora*"
community_welcome: "A comunidade do diaspora* está contente por o ter a bordo!"
connect_to_facebook: "Nós podemos acelerar as coisas um pouco, %{link} para o diaspora*. Isto irá enviar o seu nome e fotografia, e ativar a publicação cruzada."
- connect_to_facebook_link: "a interligar à sua conta do Facebook"
+ connect_to_facebook_link: "A interligar à sua conta do Facebook"
hashtag_explanation: "Os cardinais (#) permitem-lhe falar sobre e seguir os seus interesses. Eles também são uma boa forma para encontrar novas pessoas no diaspora*."
hashtag_suggestions: "Tente seguir as etiquetas, tais como #arte, #cinema, #gif, etc."
- well_hello_there: "Oh! Olá a todos!"
+ well_hello_there: "Bem, olá a todos!"
what_are_you_in_to: "O que gosta mais?"
who_are_you: "Quem é você?"
privacy_settings:
@@ -725,17 +739,17 @@ pt-PT:
public:
does_not_exist: "O utilizador %{username} não existe!"
update:
- email_notifications_changed: "As notificações por email foram alteradas"
- follow_settings_changed: "Definições alteradas"
- follow_settings_not_changed: "Falha na alteração das definições"
- language_changed: "O idioma foi alterado"
- language_not_changed: "Falha ao alterar o idioma"
- password_changed: "A palavra-passe foi alterada. Já pode iniciar sessão com a sua nova palavra-passe."
- password_not_changed: "Falhou ao alterar a palavra-passe"
- settings_not_updated: "Atualização das configurações falhada"
+ email_notifications_changed: "Notificações por e-mail alteradas"
+ follow_settings_changed: "Definições de 'seguir' alteradas"
+ follow_settings_not_changed: "A alteração das definições de 'seguir' falharam."
+ language_changed: "Idioma alterado"
+ language_not_changed: "A alteração do idioma falhou"
+ password_changed: "Palavra-passe alterada. Já pode iniciar a sessão com a sua nova palavra-passe."
+ password_not_changed: "A alteração da palavra-passe falhou"
+ settings_not_updated: "A atualização das configurações falhou"
settings_updated: "Configurações atualizadas"
- unconfirmed_email_changed: "O endereço de email foi alterado. É necessária ativação."
- unconfirmed_email_not_changed: "A mudança de email falhou"
+ unconfirmed_email_changed: "E-mail alterado. É necessária a ativação."
+ unconfirmed_email_not_changed: "A alteração do e-mail falhou"
will_paginate:
next_label: "seguinte &raquo;"
previous_label: "&laquo; anterior" \ No newline at end of file
diff --git a/config/locales/diaspora/zh-TW.yml b/config/locales/diaspora/zh-TW.yml
index 441167cee..3f16e4ce7 100644
--- a/config/locales/diaspora/zh-TW.yml
+++ b/config/locales/diaspora/zh-TW.yml
@@ -634,6 +634,8 @@ zh-TW:
comment_on_post:
other: "%{actors} 留言在你的貼文%{post_link}。"
zero: "%{actors} 留言在你的貼文%{post_link}。"
+ contacts_birthday:
+ other: "%{actors} 的生日是%{date}。"
index:
all_notifications: "全部的通知"
also_commented: "其他人留言"
@@ -646,6 +648,7 @@ zh-TW:
two: "以及其他%{count}個"
zero: "以外沒有其他人"
comment_on_post: "貼文有留言"
+ contacts_birthday: "生日"
liked: "被稱讚"
mark_all_as_read: "全部標示為已讀"
mark_all_shown_as_read: "把目前顯示的都標示成讀過了"
@@ -698,6 +701,10 @@ zh-TW:
confirm_email:
click_link: "請點以下連結,來開通你新的電子信箱 %{unconfirmed_email}:"
subject: "請開通你新的電子信箱 %{unconfirmed_email}"
+ contacts_birthday:
+ birthday: "%{name} 的生日是今天。祝他們生日快樂吧!"
+ subject: "%{name} 的生日是今天"
+ view_profile: "看 %{name} 的個人檔案"
csrf_token_fail:
body: |-
%{name} 你好,
@@ -1110,6 +1117,7 @@ zh-TW:
also_commented: "有人也留言在你留言過的貼文"
auto_follow_aspect: "自動被加入聯絡人的所屬社交面:"
auto_follow_back: "對主動要求跟你分享的使用者自動開始互相分享"
+ birthday: "有人生日到了"
change: "更改"
change_color_theme: "更改色彩主題"
change_email: "更改電子信箱"
diff --git a/config/locales/javascript/javascript.bg.yml b/config/locales/javascript/javascript.bg.yml
index d85caeb57..dc0f1cc3e 100644
--- a/config/locales/javascript/javascript.bg.yml
+++ b/config/locales/javascript/javascript.bg.yml
@@ -45,6 +45,7 @@ bg:
settings: "Настройки"
view_all: "Покажи всички"
ignore: "Игнориране"
+ my_activity: "Моята дейност"
my_stream: "Поток"
photo_uploader:
looking_good: "Леле, изглеждате страхотно!"
@@ -91,7 +92,7 @@ bg:
prefixAgo: "преди"
prefixFromNow: "след"
seconds: "по-малко от минута"
- suffixAgo: "преди"
+ suffixAgo: ""
suffixFromNow: "от сега"
year: "около година"
years:
diff --git a/config/locales/javascript/javascript.de.yml b/config/locales/javascript/javascript.de.yml
index d9075ed19..a9e8bbbd7 100644
--- a/config/locales/javascript/javascript.de.yml
+++ b/config/locales/javascript/javascript.de.yml
@@ -189,7 +189,7 @@ de:
your_vote: "Deine Stimme"
profile:
add_some: "Füge neue hinzu"
- bio: "Bio"
+ bio: "Über"
born: "Geburtstag"
contacts: "Kontakte"
edit: "Bearbeiten"
@@ -274,7 +274,7 @@ de:
original_post_deleted: "Originalbeitrag wurde vom Autor entfernt."
permalink: "Permanentlink"
public: "Öffentlich"
- reshare: "Weitersagen"
+ reshare: "Teilen"
reshares:
few: "<%= count %> mal weitergesagt"
many: "<%= count %> mal weitergesagt"
diff --git a/config/locales/javascript/javascript.de_formal.yml b/config/locales/javascript/javascript.de_formal.yml
index 057cd9e1b..52351b1e0 100644
--- a/config/locales/javascript/javascript.de_formal.yml
+++ b/config/locales/javascript/javascript.de_formal.yml
@@ -59,7 +59,7 @@ de_formal:
aspect_dropdown:
add_to_aspect: "Kontakt hinzufügen"
all_aspects: "Alle Aspekte"
- error: "Konnte nicht anfangen, mit <%= name %> zu teilen. Ignorieren Sie ihn/sie?"
+ error: "Teilen mit <%= name %> nicht möglich. Ignorieren Sie sie/ihn?"
error_remove: "Konnte <%= name %> nicht aus dem Aspekt entfernen :("
mobile_row_checked: "<%= name %> (entfernen)"
mobile_row_unchecked: "<%= name %> (hinzufügen)"
@@ -83,7 +83,7 @@ de_formal:
make_aspect_list_visible: "Kontakte in diesem Aspekt gegenseitig sichtbar machen?"
name: "Name"
bookmarklet:
- post_something: "Erstellen Sie einen Beitrag in diaspora*"
+ post_something: "Auf diaspora* schreiben"
post_submit: "Beitrag einreichen..."
post_success: "Gepostet! Popup-Fenster wird geschlossen..."
cancel: "Abbrechen"
@@ -119,7 +119,7 @@ de_formal:
getting_started:
alright_ill_wait: "Alles klar, ich warte."
hey: "Hey, <%= name %>!"
- no_tags: "Hey, Sie folgen noch keinen Tags! Trotzdem weitermachen?"
+ no_tags: "Hey, Sie folgen noch keinen Tags! Trotzdem weitermachen?"
preparing_your_stream: "Ihr personalisierter Stream wird zusammengestellt..."
header:
admin: "Administration"
@@ -162,7 +162,7 @@ de_formal:
mention: "Erwähnen"
message: "Nachricht"
not_found: "... und niemand wurde gefunden"
- stop_ignoring: "Ignorieren beenden"
+ stop_ignoring: "Nicht weiter ignorieren"
photo_uploader:
completed: "<%= file %> hochgeladen"
empty: "{file} ist leer, bitte wählen Sie erneut Dateien ohne diese aus."
@@ -212,7 +212,7 @@ de_formal:
italic: "kursive Schrift"
list: "Listentext hier"
quote: "Zitattext hier"
- strong: "wichtiger Text"
+ strong: "fetter Text"
tooltips:
bold: "Fett"
cancel: "Nachricht verwerfen"
@@ -286,7 +286,7 @@ de_formal:
following: "Sie folgen #<%= tag %>"
stop_following: "Aufhören #<%= tag %> zu folgen"
stop_following_confirm: "Aufhören, #<%= tag %> zu folgen?"
- stop_following_error: "<%= tag %> konnte nicht entfolgt werden :("
+ stop_following_error: "Konnte nicht aufhören <%= tag %> zu folgen :("
unfollow: "Nicht mehr folgen"
unlike: "Gefällt mir nicht mehr"
via: "via <%= provider %>"
diff --git a/config/locales/javascript/javascript.ia.yml b/config/locales/javascript/javascript.ia.yml
index d8a6884bb..a8859c5d7 100644
--- a/config/locales/javascript/javascript.ia.yml
+++ b/config/locales/javascript/javascript.ia.yml
@@ -185,6 +185,7 @@ ia:
result: "Resultato"
show_result: "Monstrar resultato"
vote: "Votar"
+ your_vote: "Tu voto"
profile:
add_some: "Adder alcunes"
bio: "Bio"
@@ -241,6 +242,7 @@ ia:
reshares:
post: "Repeter le entrata de <%= name %>?"
successful: "Le entrata ha essite repetite con successo."
+ show_all: "Monstrar totes"
show_more: "Monstrar plus"
stream:
comment: "Commentar"
diff --git a/config/locales/javascript/javascript.pt-PT.yml b/config/locales/javascript/javascript.pt-PT.yml
index b3de4295b..6bc896ce8 100644
--- a/config/locales/javascript/javascript.pt-PT.yml
+++ b/config/locales/javascript/javascript.pt-PT.yml
@@ -20,7 +20,7 @@ pt-PT:
other: "Em <%=count %> grupos"
zero: "Selecione os grupos"
aspect_navigation:
- add_an_aspect: "+ Adicionar um grupo"
+ add_an_aspect: "+ Adicionar um aspeto"
deselect_all: "Desmarcar todos"
no_aspects: "Nenhuns aspectos selecionados"
select_all: "Selecionar todos"
@@ -33,9 +33,9 @@ pt-PT:
edit: "Editar"
failed_to_post_message: "Falhou ao publicar a mensagem!"
getting_started:
- alright_ill_wait: "Tudo bem, eu esperarei."
- hey: "Ei, <%= name %>!"
- no_tags: "Ei, não está a seguir nenhuma etiqueta! Continuar mesmo assim?"
+ alright_ill_wait: "Tudo bem, eu irei aguardar."
+ hey: "Olá, <%= name %>!"
+ no_tags: "Olá, não está a seguir quaisquer etiquetas! Mesmo assim, continuar?"
preparing_your_stream: "A preparar o seu fluxo personalizado..."
header:
admin: "Administrador"
@@ -58,7 +58,7 @@ pt-PT:
people:
not_found: "e ninguém foi encontrado..."
photo_uploader:
- completed: "<%= file %> completado"
+ completed: "<%= file %> concluído"
empty: "O {file} não tem dados, por favor, selecione novamente os ficheiros, sem este."
invalid_ext: "O {file} tem uma extensão inválida. Só são permitidas as extensões {extensions}."
looking_good: "OMD, tu estás fantástico(a)!"
diff --git a/config/schedule.yml b/config/schedule.yml
index 88292df2a..8e6f2361f 100644
--- a/config/schedule.yml
+++ b/config/schedule.yml
@@ -17,3 +17,7 @@ recheck_scheduled_pods:
check_birthday:
cron: "0 0 * * *"
class: "Workers::CheckBirthday"
+
+cleanup_old_exports:
+ cron: "0 0 * * *"
+ class: "Workers::CleanupOldExports"
diff --git a/features/desktop/change_settings.feature b/features/desktop/change_settings.feature
index d30f6f137..ce60f7422 100644
--- a/features/desktop/change_settings.feature
+++ b/features/desktop/change_settings.feature
@@ -55,6 +55,6 @@ Feature: Change settings
Then I should see "Public" within ".aspect-dropdown"
Scenario: exporting profile data
- When I click on the first selector "#account_data a"
+ When I click on the first selector ".account-data a"
Then I should see "Download my profile"
And I should have 1 email delivery
diff --git a/features/desktop/invitations.feature b/features/desktop/invitations.feature
index f01e194e3..75a5758ed 100644
--- a/features/desktop/invitations.feature
+++ b/features/desktop/invitations.feature
@@ -36,13 +36,13 @@ Feature: Invitations
And I log out
And I sign in as "alice@alice.alice"
And I click on "Invite your friends" navbar title
- And I click on selector "#invitations-button"
+ And I click on selector ".invitations-button"
Then I should see one less invite
Scenario: sends an invitation from the sidebar
When I sign in as "alice@alice.alice"
And I click on "Invite your friends" navbar title
- And I click on selector "#invitations-button"
+ And I click on selector ".invitations-button"
And I fill in the following:
| email_inviter_emails | alex@example.com |
And I press "Send an invitation"
@@ -67,7 +67,7 @@ Feature: Invitations
When I sign in as "alice@alice.alice"
And I search for "test"
Then I should see "Users matching test" within "#search_title"
- When I click on selector "#invitations-button"
+ When I click on selector ".invitations-button"
And I fill in the following:
| email_inviter_emails | alex@example.com |
And I press "Send an invitation"
diff --git a/lib/diaspora/federated/contact_retraction.rb b/lib/diaspora/federated/contact_retraction.rb
index 57efd2f45..69ec85f7f 100644
--- a/lib/diaspora/federated/contact_retraction.rb
+++ b/lib/diaspora/federated/contact_retraction.rb
@@ -6,11 +6,11 @@ class ContactRetraction < Retraction
end
def self.retraction_data_for(target)
- Diaspora::Federation::Entities.contact(target).to_h
+ Diaspora::Federation::Entities.build(target).to_h
end
def self.for(target)
- target.receiving = false
+ target.receiving = false if target.is_a?(Contact)
super
end
diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb
index e6dbff2a0..f8d8aa1a5 100644
--- a/lib/diaspora/federation/entities.rb
+++ b/lib/diaspora/federation/entities.rb
@@ -31,6 +31,16 @@ module Diaspora
)
end
+ def self.block(block)
+ DiasporaFederation::Entities::Contact.new(
+ author: block.user.diaspora_handle,
+ recipient: block.person.diaspora_handle,
+ sharing: false,
+ following: false,
+ blocking: Block.exists?(user: block.user, person: block.person)
+ )
+ end
+
def self.comment(comment)
DiasporaFederation::Entities::Comment.new(
{
@@ -52,7 +62,8 @@ module Diaspora
author: contact.user.diaspora_handle,
recipient: contact.person.diaspora_handle,
sharing: contact.receiving,
- following: contact.receiving
+ following: contact.receiving,
+ blocking: Block.exists?(user: contact.user, person: contact.person)
)
end
diff --git a/lib/diaspora/federation/mappings.rb b/lib/diaspora/federation/mappings.rb
index 91ccefee6..ac10929c5 100644
--- a/lib/diaspora/federation/mappings.rb
+++ b/lib/diaspora/federation/mappings.rb
@@ -29,6 +29,7 @@ module Diaspora
case diaspora_entity
when AccountMigration then :account_migration
when AccountDeletion then :account_deletion
+ when Block then :block
when Comment then :comment
when Contact then :contact
when Conversation then :conversation
diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb
index d4dcea34d..51954db01 100644
--- a/lib/diaspora/federation/receive.rb
+++ b/lib/diaspora/federation/receive.rb
@@ -153,7 +153,7 @@ module Diaspora
guid: entity.guid,
created_at: entity.created_at,
root_guid: entity.root_guid
- )
+ ).tap {|reshare| send_participation_for(reshare) }
end
end
@@ -193,6 +193,8 @@ module Diaspora
status_message.photos = save_or_load_photos(entity.photos)
status_message.save!
+
+ send_participation_for(status_message)
end
end
end
@@ -328,6 +330,24 @@ module Diaspora
end
end
end
+
+ private_class_method def self.send_participation_for(post)
+ return unless post.public?
+ user = user_for_participation
+ participation = Participation.new(target: post, author: user.person)
+ Diaspora::Federation::Dispatcher.build(user, participation, subscribers: [post.author]).dispatch
+ rescue => e # rubocop:disable Lint/RescueWithoutErrorClass
+ logger.warn "failed to send participation for post #{post.guid}: #{e.class}: #{e.message}"
+ end
+
+ # Use configured admin account if available,
+ # or use first user with admin role if available,
+ # or use first user who isn't closed
+ private_class_method def self.user_for_participation
+ User.find_by(username: AppConfig.admins.account.to_s) ||
+ Role.admins.first&.person&.owner ||
+ User.where(locked_at: nil).first
+ end
end
end
end
diff --git a/lib/publisher.rb b/lib/publisher.rb
index a6c6ab069..fd2808a80 100644
--- a/lib/publisher.rb
+++ b/lib/publisher.rb
@@ -9,12 +9,4 @@ class Publisher
self.prefill = opts[:prefill]
self.public = opts[:public]
end
-
- def text
- return unless prefill.present?
- Diaspora::MessageRenderer.new(
- prefill,
- mentioned_people: Diaspora::Mentionable.people_from_string(prefill)
- ).plain_text
- end
end
diff --git a/lib/stream/multi.rb b/lib/stream/multi.rb
index 3ca27a262..0304e0f1f 100644
--- a/lib/stream/multi.rb
+++ b/lib/stream/multi.rb
@@ -46,7 +46,7 @@ class Stream::Multi < Stream::Base
if inviter = self.user.invited_by.try(:person)
prefill << I18n.t("shared.publisher.new_user_prefill.invited_by")
- prefill << "@{#{inviter.name} ; #{inviter.diaspora_handle}}!"
+ prefill << "@{#{inviter.diaspora_handle}}!"
end
prefill
diff --git a/script/server b/script/server
index 46b492353..bcfda9e2d 100755
--- a/script/server
+++ b/script/server
@@ -108,7 +108,8 @@ vars=$(bin/bundle exec ruby ./script/get_config.rb \
workers=server.sidekiq_workers \
chat=chat.enabled \
chat_server=chat.server.enabled \
- chat_bosh_proxy=chat.server.bosh.proxy
+ chat_bosh_proxy=chat.server.bosh.proxy \
+ redis_url=environment.redis
)
on_failure "Couldn't parse config/diaspora.yml!"
eval "$vars"
@@ -158,6 +159,19 @@ application, run:
bin/rake assets:precompile"
fi
+# Check if redis is running
+if [ "$single_process_mode" = "false" ]
+then
+ if [ -n "$redis_url" ]
+ then
+ redis_param="url: '$redis_url'"
+ fi
+ if [ "$(bin/bundle exec ruby -e "require 'redis'; puts Redis.new($redis_param).ping" 2> /dev/null)" != "PONG" ]
+ then
+ fatal "Can't connect to redis. Please check if it's running and if environment.redis is configured correctly in config/diaspora.yml."
+ fi
+fi
+
# Check for old curl versions (see https://github.com/diaspora/diaspora/issues/4202)
if [ `curl -V | grep AsynchDNS | wc -l` -ne 1 ]
then
diff --git a/spec/controllers/blocks_controller_spec.rb b/spec/controllers/blocks_controller_spec.rb
index b3d7b1567..11acfdccb 100644
--- a/spec/controllers/blocks_controller_spec.rb
+++ b/spec/controllers/blocks_controller_spec.rb
@@ -17,8 +17,8 @@ describe BlocksController, :type => :controller do
expect(response.status).to eq(204)
end
- it "calls #disconnect_if_contact" do
- expect(@controller).to receive(:disconnect_if_contact).with(bob.person)
+ it "calls #send_message" do
+ expect(@controller).to receive(:send_message).with(an_instance_of(Block))
post :create, params: {block: {person_id: bob.person.id}}, format: :json
end
end
@@ -38,6 +38,13 @@ describe BlocksController, :type => :controller do
expect(flash[:notice]).to eq(I18n.t("blocks.destroy.success"))
end
+ it "sends a message" do
+ retraction = double
+ expect(ContactRetraction).to receive(:for).with(@block).and_return(retraction)
+ expect(retraction).to receive(:defer_dispatch).with(alice)
+ delete :destroy, params: {id: @block.id}
+ end
+
it "responds with 204 with json" do
delete :destroy, params: {id: @block.id}, format: :json
expect(response.status).to eq(204)
@@ -60,21 +67,32 @@ describe BlocksController, :type => :controller do
end
end
- describe "#disconnect_if_contact" do
+ describe "#send_message" do
before do
allow(@controller).to receive(:current_user).and_return(alice)
end
- it "calls disconnect with the force option if there is a contact for a given user" do
+ it "calls disconnect if there is a contact for a given user" do
+ block = alice.blocks.create(person: bob.person)
contact = alice.contact_for(bob.person)
- allow(alice).to receive(:contact_for).and_return(contact)
+ expect(alice).to receive(:contact_for).and_return(contact)
expect(alice).to receive(:disconnect).with(contact)
- @controller.send(:disconnect_if_contact, bob.person)
+ expect(Diaspora::Federation::Dispatcher).not_to receive(:defer_dispatch)
+ @controller.send(:send_message, block)
+ end
+
+ it "queues a message with the block if the person is remote and there is no contact for a given user" do
+ block = alice.blocks.create(person: remote_raphael)
+ expect(alice).not_to receive(:disconnect)
+ expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch).with(alice, block)
+ @controller.send(:send_message, block)
end
- it "doesn't call disconnect if there is a contact for a given user" do
+ it "does nothing if the person is local and there is no contact for a given user" do
+ block = alice.blocks.create(person: eve.person)
expect(alice).not_to receive(:disconnect)
- @controller.send(:disconnect_if_contact, eve.person)
+ expect(Diaspora::Federation::Dispatcher).not_to receive(:defer_dispatch)
+ @controller.send(:send_message, block)
end
end
end
diff --git a/spec/controllers/streams_controller_spec.rb b/spec/controllers/streams_controller_spec.rb
index 40f9fdf46..9eb5e56ee 100644
--- a/spec/controllers/streams_controller_spec.rb
+++ b/spec/controllers/streams_controller_spec.rb
@@ -5,6 +5,8 @@
# the COPYRIGHT file.
describe StreamsController, :type => :controller do
+ include_context :gon
+
before do
sign_in alice
end
@@ -26,6 +28,18 @@ describe StreamsController, :type => :controller do
get :multi, :format => :mobile
expect(response).to be_success
end
+
+ context "getting started" do
+ it "add the inviter to gon" do
+ user = FactoryGirl.create(:user, getting_started: true, invited_by: alice)
+ sign_in user
+
+ get :multi
+
+ expect(gon["preloads"][:mentioned_person][:name]).to eq(alice.person.name)
+ expect(gon["preloads"][:mentioned_person][:handle]).to eq(alice.person.diaspora_handle)
+ end
+ end
end
streams = {
diff --git a/spec/helpers/interim_stream_hackiness_helper_spec.rb b/spec/helpers/interim_stream_hackiness_helper_spec.rb
index 890e6e842..69bb04509 100644
--- a/spec/helpers/interim_stream_hackiness_helper_spec.rb
+++ b/spec/helpers/interim_stream_hackiness_helper_spec.rb
@@ -6,14 +6,14 @@ describe InterimStreamHackinessHelper, type: :helper do
before do
sign_in alice
- def user_signed_in?
+ def user_signed_in?
true
end
end
it 'returns true if no user is signed in' do
- def user_signed_in?
- false
+ def user_signed_in?
+ false
end
expect(commenting_disabled?(double)).to eq(true)
end
@@ -22,7 +22,7 @@ describe InterimStreamHackinessHelper, type: :helper do
@commenting_disabled = true
expect(commenting_disabled?(double)).to eq(true)
@commenting_disabled = false
- expect(commenting_disabled?(double)).to eq(false)
+ expect(commenting_disabled?(double)).to eq(false)
end
it 'returns @stream.can_comment? if @stream is set' do
@@ -35,4 +35,11 @@ describe InterimStreamHackinessHelper, type: :helper do
expect(commenting_disabled?(post)).to eq(true)
end
end
+
+ describe "#publisher_formatted_text" do
+ it "returns the prefill text from the stream" do
+ @stream = double(publisher: Publisher.new(alice, prefill: "hello world"))
+ expect(publisher_formatted_text).to eq("hello world")
+ end
+ end
end
diff --git a/spec/helpers/notifications_helper_spec.rb b/spec/helpers/notifications_helper_spec.rb
index 356092b18..dea069ef6 100644
--- a/spec/helpers/notifications_helper_spec.rb
+++ b/spec/helpers/notifications_helper_spec.rb
@@ -123,6 +123,22 @@ describe NotificationsHelper, type: :helper do
expect(link).to include("#{post_path(status_message)}##{comment.guid}")
end
end
+
+ context "for a birthday" do
+ let(:notification) { Notifications::ContactsBirthday.create(recipient: alice, target: bob.person) }
+
+ it "contains the date" do
+ bob.profile.update_attributes(birthday: Time.zone.today)
+ link = object_link(notification, notification_people_link(notification))
+ expect(link).to include(I18n.l(Time.zone.today, format: I18n.t("date.formats.fullmonth_day")))
+ end
+
+ it "doesn't break, when the person removes the birthday date" do
+ bob.profile.update_attributes(birthday: nil)
+ link = object_link(notification, notification_people_link(notification))
+ expect(link).to include(I18n.l(Time.zone.today, format: I18n.t("date.formats.fullmonth_day")))
+ end
+ end
end
describe '#display_year?' do
diff --git a/spec/helpers/notifier_helper_spec.rb b/spec/helpers/notifier_helper_spec.rb
index 5e2499001..946753aa8 100644
--- a/spec/helpers/notifier_helper_spec.rb
+++ b/spec/helpers/notifier_helper_spec.rb
@@ -17,6 +17,13 @@ describe NotifierHelper, :type => :helper do
expect(post_message(@markdown_post)).to eq(@striped_markdown_post)
end
+ it "falls back to the title if the post has no text" do
+ photo = FactoryGirl.build(:photo, public: true)
+ photo_post = FactoryGirl.build(:status_message, author: photo.author, text: "", photos: [photo], public: true)
+ expect(helper.post_message(photo_post))
+ .to eq(I18n.t("posts.show.photos_by", count: 1, author: photo_post.author_name))
+ end
+
it "falls back to the title, if the root post was deleted" do
reshare = FactoryGirl.create(:reshare)
reshare.root.destroy
diff --git a/spec/integration/federation/receive_federation_messages_spec.rb b/spec/integration/federation/receive_federation_messages_spec.rb
index c9a67aeb4..b53bc97c1 100644
--- a/spec/integration/federation/receive_federation_messages_spec.rb
+++ b/spec/integration/federation/receive_federation_messages_spec.rb
@@ -116,6 +116,11 @@ describe "Receive federation messages feature" do
alice, instance_of(Reshare)
).and_return(double(create!: true))
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |_user, participation, _opts|
+ expect(participation.target.guid).to eq(reshare.guid)
+ instance_double(:dispatch)
+ end
+
post_message(generate_payload(reshare, sender))
expect(Reshare.exists?(root_guid: post.guid)).to be_truthy
diff --git a/spec/integration/federation/shared_receive_stream_items.rb b/spec/integration/federation/shared_receive_stream_items.rb
index 347848e35..1431b9e1a 100644
--- a/spec/integration/federation/shared_receive_stream_items.rb
+++ b/spec/integration/federation/shared_receive_stream_items.rb
@@ -8,6 +8,15 @@ shared_examples_for "messages which are indifferent about sharing fact" do
it "treats status message receive correctly" do
entity = Fabricate(:status_message_entity, author: sender_id, public: public)
+ if public
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |_user, participation, _opts|
+ expect(participation.target.guid).to eq(entity.guid)
+ instance_double(:dispatch)
+ end
+ else
+ expect(Diaspora::Federation::Dispatcher).not_to receive(:build)
+ end
+
post_message(generate_payload(entity, sender, recipient), recipient)
expect(StatusMessage.exists?(guid: entity.guid)).to be_truthy
diff --git a/spec/lib/diaspora/federation/entities_spec.rb b/spec/lib/diaspora/federation/entities_spec.rb
index 0b80c1cc8..c0ab1aff8 100644
--- a/spec/lib/diaspora/federation/entities_spec.rb
+++ b/spec/lib/diaspora/federation/entities_spec.rb
@@ -56,6 +56,19 @@ describe Diaspora::Federation::Entities do
expect(federation_entity.recipient).to eq(diaspora_entity.person.diaspora_handle)
expect(federation_entity.sharing).to be_truthy
expect(federation_entity.following).to be_truthy
+ expect(federation_entity.blocking).to be_falsey
+ end
+
+ it "builds a contact for a block" do
+ diaspora_entity = FactoryGirl.create(:block)
+ federation_entity = described_class.build(diaspora_entity)
+
+ expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Contact)
+ expect(federation_entity.author).to eq(diaspora_entity.user.diaspora_handle)
+ expect(federation_entity.recipient).to eq(diaspora_entity.person.diaspora_handle)
+ expect(federation_entity.sharing).to be_falsey
+ expect(federation_entity.following).to be_falsey
+ expect(federation_entity.blocking).to be_truthy
end
context "Conversation" do
@@ -237,6 +250,35 @@ describe Diaspora::Federation::Entities do
expect(federation_entity.recipient).to eq(target.person.diaspora_handle)
expect(federation_entity.sharing).to be_falsey
expect(federation_entity.following).to be_falsey
+ expect(federation_entity.blocking).to be_falsey
+ end
+
+ it "builds a Contact for a Contact retraction with block" do
+ target = FactoryGirl.create(:contact, receiving: false)
+ FactoryGirl.create(:block, user: target.user, person: target.person)
+ retraction = ContactRetraction.for(target)
+ federation_entity = described_class.build(retraction)
+
+ expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Contact)
+ expect(federation_entity.author).to eq(target.user.diaspora_handle)
+ expect(federation_entity.recipient).to eq(target.person.diaspora_handle)
+ expect(federation_entity.sharing).to be_falsey
+ expect(federation_entity.following).to be_falsey
+ expect(federation_entity.blocking).to be_truthy
+ end
+
+ it "builds a Contact for a Block retraction" do
+ target = FactoryGirl.create(:block)
+ target.delete
+ retraction = ContactRetraction.for(target)
+ federation_entity = described_class.build(retraction)
+
+ expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Contact)
+ expect(federation_entity.author).to eq(target.user.diaspora_handle)
+ expect(federation_entity.recipient).to eq(target.person.diaspora_handle)
+ expect(federation_entity.sharing).to be_falsey
+ expect(federation_entity.following).to be_falsey
+ expect(federation_entity.blocking).to be_falsey
end
end
diff --git a/spec/lib/diaspora/federation/receive_spec.rb b/spec/lib/diaspora/federation/receive_spec.rb
index 2c2e7e110..767e67796 100644
--- a/spec/lib/diaspora/federation/receive_spec.rb
+++ b/spec/lib/diaspora/federation/receive_spec.rb
@@ -541,6 +541,10 @@ describe Diaspora::Federation::Receive do
it_behaves_like "it ignores existing object received twice", Reshare do
let(:entity) { reshare_entity }
end
+
+ it_behaves_like "it sends a participation to the author" do
+ let(:entity) { reshare_entity }
+ end
end
describe ".retraction" do
@@ -766,6 +770,18 @@ describe Diaspora::Federation::Receive do
expect(status_message.photos.map(&:guid)).to include(photo1.guid, photo2.guid)
expect(status_message.photos.map(&:text)).to include(received_photo.text, photo2.text)
end
+
+ it_behaves_like "it sends a participation to the author" do
+ let(:entity) { status_message_entity }
+ end
+
+ it "doesn't send participations for a private post" do
+ status_message_entity = Fabricate(:status_message_entity, author: sender.diaspora_handle, public: false)
+
+ expect(Diaspora::Federation::Dispatcher).not_to receive(:build)
+
+ Diaspora::Federation::Receive.perform(status_message_entity)
+ end
end
end
end
diff --git a/spec/lib/publisher_spec.rb b/spec/lib/publisher_spec.rb
index 55d9fdea8..22bd7360d 100644
--- a/spec/lib/publisher_spec.rb
+++ b/spec/lib/publisher_spec.rb
@@ -15,13 +15,6 @@ describe Publisher do
end
end
- describe '#text' do
- it 'is a formatted version of the prefill' do
- p = Publisher.new(alice, prefill: "@{alice; #{alice.diaspora_handle}}")
- expect(p.text).to eq("@alice")
- end
- end
-
%w(open public).each do |property|
describe "##{property}" do
it 'defaults to closed' do
diff --git a/spec/lib/stream/multi_spec.rb b/spec/lib/stream/multi_spec.rb
index 04dbd153d..3ef7e604a 100644
--- a/spec/lib/stream/multi_spec.rb
+++ b/spec/lib/stream/multi_spec.rb
@@ -62,7 +62,7 @@ describe Stream::Multi do
end
it 'includes a mention of the inviter' do
- mention = "@{#{@inviter.name} ; #{@inviter.diaspora_handle}}"
+ mention = "@{#{@inviter.diaspora_handle}}"
expect(@stream.send(:publisher_prefill)).to include(mention)
end
end
diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb
index e3ee01c42..27f12848e 100644
--- a/spec/models/block_spec.rb
+++ b/spec/models/block_spec.rb
@@ -1,10 +1,17 @@
# frozen_string_literal: true
-describe Block, :type => :model do
+describe Block, type: :model do
describe "validations" do
it "doesnt allow you to block yourself" do
block = alice.blocks.create(person: alice.person)
expect(block.errors[:person_id].size).to eq(1)
end
end
+
+ describe "#subscribers" do
+ it "returns an array with recipient of the block" do
+ block = alice.blocks.create(person: eve.person)
+ expect(block.subscribers).to match_array([eve.person])
+ end
+ end
end
diff --git a/spec/models/services/twitter_spec.rb b/spec/models/services/twitter_spec.rb
index a2b10c617..28c9d2aaf 100644
--- a/spec/models/services/twitter_spec.rb
+++ b/spec/models/services/twitter_spec.rb
@@ -41,8 +41,8 @@ describe Services::Twitter, :type => :model do
describe "message size limits" do
before :each do
- @long_message_start = SecureRandom.hex(25)
- @long_message_end = SecureRandom.hex(25)
+ @long_message_start = SecureRandom.hex(165)
+ @long_message_end = SecureRandom.hex(165)
end
it "should not truncate a short message" do
@@ -52,7 +52,7 @@ describe Services::Twitter, :type => :model do
end
it "should truncate a long message" do
- long_message = SecureRandom.hex(220)
+ long_message = SecureRandom.hex(360)
long_post = double(message: double(plain_text_without_markdown: long_message), id: 1, photos: [])
expect(@service.send(:build_twitter_post, long_post).length).to be < long_message.length
end
@@ -67,7 +67,9 @@ describe Services::Twitter, :type => :model do
end
it "should not cut links when truncating a post" do
- long_message = SecureRandom.hex(40) + " http://joindiaspora.com/a-very-long-url-name-that-will-be-shortened.html " + SecureRandom.hex(55)
+ long_message = SecureRandom.hex(40) +
+ " http://joindiaspora.com/a-very-long-url-name-that-will-be-shortened.html " +
+ SecureRandom.hex(195)
long_post = double(message: double(plain_text_without_markdown: long_message), id: 1, photos: [])
answer = @service.send(:build_twitter_post, long_post)
@@ -76,7 +78,9 @@ describe Services::Twitter, :type => :model do
end
it "should append the otherwise-cut link when truncating a post" do
- long_message = "http://joindiaspora.com/a-very-long-decoy-url.html " + SecureRandom.hex(20) + " http://joindiaspora.com/a-very-long-url-name-that-will-be-shortened.html " + SecureRandom.hex(55) + " http://joindiaspora.com/a-very-long-decoy-url-part-2.html"
+ long_message = "http://joindiaspora.com/a-very-long-decoy-url.html " + SecureRandom.hex(20) +
+ " http://joindiaspora.com/a-very-long-url-name-that-will-be-shortened.html " + SecureRandom.hex(195) +
+ " http://joindiaspora.com/a-very-long-decoy-url-part-2.html"
long_post = double(message: double(plain_text_without_markdown: long_message), id: 1, photos: [])
answer = @service.send(:build_twitter_post, long_post)
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 913e3c735..d264493a8 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -944,6 +944,17 @@ describe User, :type => :model do
expect(@user.reload.show_community_spotlight_in_stream).to be false
expect(@user.reload.post_default_public).to be false
end
+
+ it "removes export archives" do
+ @user.perform_export!
+ @user.perform_export_photos!
+ @user.clear_account!
+ @user.reload
+ expect(@user.export).not_to be_present
+ expect(@user.exported_at).to be_nil
+ expect(@user.exported_photos_file).not_to be_present
+ expect(@user.exported_photos_at).to be_nil
+ end
end
describe "#clearable_attributes" do
@@ -970,6 +981,8 @@ describe User, :type => :model do
last_seen
color_theme
post_default_public
+ exported_at
+ exported_photos_at
)
)
end
diff --git a/spec/shared_behaviors/receiving.rb b/spec/shared_behaviors/receiving.rb
index 6a563e237..8c2c8da65 100644
--- a/spec/shared_behaviors/receiving.rb
+++ b/spec/shared_behaviors/receiving.rb
@@ -73,3 +73,76 @@ shared_examples_for "it relays relayables" do |klass|
Diaspora::Federation::Receive.perform(entity)
end
end
+
+shared_examples_for "it sends a participation to the author" do
+ it "sends a participation for the post to the author" do
+ dispatcher = double
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |user, participation, opts|
+ expect(user).to be_a(User)
+ expect(participation.target.guid).to eq(entity.guid)
+
+ subscribers = opts[:subscribers]
+ expect(subscribers.size).to eq(1)
+ expect(subscribers.first.diaspora_handle).to eq(entity.author)
+
+ dispatcher
+ end
+ expect(dispatcher).to receive(:dispatch)
+
+ Diaspora::Federation::Receive.perform(entity)
+ end
+
+ it "doesn't save the participation in the database" do
+ participation_guid = nil
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |_user, participation, _opts|
+ participation_guid = participation.guid
+ instance_double(:dispatch)
+ end
+
+ Diaspora::Federation::Receive.perform(entity)
+
+ expect(Participation.where(guid: participation_guid)).not_to exist
+ end
+
+ it "uses the configured admin as sender for the participation" do
+ AppConfig.admins.account = bob.username
+
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |user, _participation, _opts|
+ expect(user.username).to eq(bob.username)
+ instance_double(:dispatch)
+ end
+
+ Diaspora::Federation::Receive.perform(entity)
+ end
+
+ it "uses the first user with an admin role if no admin is configured in the config" do
+ AppConfig.admins.account = nil
+ admin_role = FactoryGirl.create(:role, name: "admin")
+
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |user, _participation, _opts|
+ expect(user.username).to eq(admin_role.person.owner.username)
+ instance_double(:dispatch)
+ end
+
+ Diaspora::Federation::Receive.perform(entity)
+ end
+
+ it "uses the first open account if no admin is available" do
+ AppConfig.admins.account = nil
+ expect(Role.admins).to be_empty
+ User.first.close_account!
+
+ expect(Diaspora::Federation::Dispatcher).to receive(:build) do |user, _participation, _opts|
+ expect(user.username).to eq(User.second.username)
+ instance_double(:dispatch)
+ end
+
+ Diaspora::Federation::Receive.perform(entity)
+ end
+
+ it "still receives the entity successfully if there is an error while sending the participation" do
+ expect(Diaspora::Federation::Dispatcher).to receive(:build).and_raise "FooBar"
+
+ Diaspora::Federation::Receive.perform(entity)
+ end
+end
diff --git a/spec/workers/cleanup_old_exports_spec.rb b/spec/workers/cleanup_old_exports_spec.rb
new file mode 100644
index 000000000..9c5df7ea0
--- /dev/null
+++ b/spec/workers/cleanup_old_exports_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+describe Workers::CleanupOldExports do
+ let(:user) { FactoryGirl.create(:user) }
+
+ context "with profile data" do
+ before do
+ user.perform_export!
+ end
+
+ it "removes old archives" do
+ Timecop.travel(Time.zone.today + 15.days) do
+ Workers::CleanupOldExports.new.perform
+ user.reload
+ expect(user.export).not_to be_present
+ expect(user.exported_at).to be_nil
+ end
+ end
+
+ it "does not remove new archives" do
+ Timecop.travel(Time.zone.today + 1.day) do
+ Workers::CleanupOldExports.new.perform
+ user.reload
+ expect(user.export).to be_present
+ expect(user.exported_at).to be_present
+ end
+ end
+ end
+
+ context "with photos" do
+ before do
+ user.perform_export_photos!
+ end
+
+ it "removes old archives" do
+ Timecop.travel(Time.zone.today + 15.days) do
+ Workers::CleanupOldExports.new.perform
+ user.reload
+ expect(user.exported_photos_file).not_to be_present
+ expect(user.exported_photos_at).to be_nil
+ end
+ end
+
+ it "does not remove new archives" do
+ Timecop.travel(Time.zone.today + 1.day) do
+ Workers::CleanupOldExports.new.perform
+ user.reload
+ expect(user.exported_photos_file).to be_present
+ expect(user.exported_photos_at).to be_present
+ end
+ end
+ end
+end
diff --git a/spec/workers/send_base_spec.rb b/spec/workers/send_base_spec.rb
index c7961451b..7a3b77a98 100644
--- a/spec/workers/send_base_spec.rb
+++ b/spec/workers/send_base_spec.rb
@@ -8,13 +8,13 @@ describe Workers::SendBase do
end
it "increases the interval for each retry" do
- expect(Workers::SendBase.new.send(:seconds_to_delay, 2)).to be >= 625
- expect(Workers::SendBase.new.send(:seconds_to_delay, 3)).to be >= 1_296
- expect(Workers::SendBase.new.send(:seconds_to_delay, 4)).to be >= 2_401
- expect(Workers::SendBase.new.send(:seconds_to_delay, 5)).to be >= 4_096
- expect(Workers::SendBase.new.send(:seconds_to_delay, 6)).to be >= 6_561
- expect(Workers::SendBase.new.send(:seconds_to_delay, 7)).to be >= 10_000
- expect(Workers::SendBase.new.send(:seconds_to_delay, 8)).to be >= 14_641
+ (2..19).each do |count|
+ expect(Workers::SendBase.new.send(:seconds_to_delay, count)).to be >= ((count + 3)**4)
+ end
+
+ # lets make some tests with explicit numbers to make sure the formula above works correctly
+ # and increases the delay with the expected result
expect(Workers::SendBase.new.send(:seconds_to_delay, 9)).to be >= 20_736
+ expect(Workers::SendBase.new.send(:seconds_to_delay, 19)).to be >= 234_256
end
end
diff --git a/spec/workers/send_private_spec.rb b/spec/workers/send_private_spec.rb
index 622c1e93e..1817c5983 100644
--- a/spec/workers/send_private_spec.rb
+++ b/spec/workers/send_private_spec.rb
@@ -41,4 +41,21 @@ describe Workers::SendPrivate do
Workers::SendPrivate.new.perform(sender_id, obj_str, targets, 9)
}.to raise_error Workers::SendBase::MaxRetriesReached
end
+
+ it "retries contact entities 20 times" do
+ contact = Fabricate(:contact_entity, author: sender_id, recipient: alice.diaspora_handle)
+ obj_str = contact.to_s
+ targets = {"https://example.org/receive/user/guid" => "<xml>post</xml>"}
+ expect(DiasporaFederation::Federation::Sender).to receive(:private).with(
+ sender_id, obj_str, targets
+ ).and_return(targets).twice
+
+ expect(Workers::SendPrivate).to receive(:perform_in).with(a_kind_of(Numeric), sender_id, obj_str, targets, 19)
+ Workers::SendPrivate.new.perform(sender_id, obj_str, targets, 18)
+
+ expect(Workers::SendPrivate).not_to receive(:perform_in)
+ expect {
+ Workers::SendPrivate.new.perform(sender_id, obj_str, targets, 19)
+ }.to raise_error Workers::SendBase::MaxRetriesReached
+ end
end