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:
-rw-r--r--.eslintrc1
-rw-r--r--.gitignore5
-rw-r--r--.rubocop.yml5
-rw-r--r--.travis.yml10
-rw-r--r--Changelog.md39
-rw-r--r--Gemfile75
-rw-r--r--Gemfile.lock367
-rw-r--r--app/assets/config/manifest.js1
-rw-r--r--app/assets/javascripts/app/pages/contacts.js18
-rw-r--r--app/assets/javascripts/app/views/help_view.js59
-rw-r--r--app/assets/javascripts/jsxc.js50
-rw-r--r--app/assets/stylesheets/_application.scss2
-rw-r--r--app/assets/stylesheets/base.scss3
-rw-r--r--app/assets/stylesheets/chat.scss14
-rw-r--r--app/assets/stylesheets/contacts.scss3
-rw-r--r--app/assets/stylesheets/forms.scss5
-rw-r--r--app/assets/stylesheets/help.scss12
-rw-r--r--app/assets/stylesheets/home.scss8
-rw-r--r--app/assets/stylesheets/login.scss1
-rw-r--r--app/assets/stylesheets/markdown-content.scss24
-rw-r--r--app/assets/stylesheets/registration.scss23
-rw-r--r--app/assets/templates/faq_chat_tpl.jst.hbs6
-rw-r--r--app/assets/templates/help_tpl.jst.hbs6
-rw-r--r--app/controllers/application_controller.rb8
-rw-r--r--app/controllers/aspects_controller.rb42
-rw-r--r--app/controllers/registrations_controller.rb12
-rw-r--r--app/controllers/sessions_controller.rb50
-rw-r--r--app/controllers/two_factor_authentications_controller.rb55
-rw-r--r--app/controllers/users_controller.rb2
-rw-r--r--app/helpers/application_helper.rb5
-rw-r--r--app/helpers/jsxc_helper.rb15
-rw-r--r--app/models/open_graph_cache.rb4
-rw-r--r--app/models/photo.rb1
-rw-r--r--app/models/user.rb14
-rw-r--r--app/presenters/node_info_presenter.rb5
-rw-r--r--app/serializers/export/aspect_serializer.rb2
-rw-r--r--app/services/diaspora_link_service.rb20
-rw-r--r--app/views/contacts/_header.html.haml7
-rw-r--r--app/views/devise/passwords/edit.haml1
-rw-r--r--app/views/devise/passwords/new.haml4
-rw-r--r--app/views/home/default.haml4
-rw-r--r--app/views/layouts/_header_not_connected.haml2
-rw-r--r--app/views/registrations/_form.haml2
-rw-r--r--app/views/registrations/_registrations_closed.haml11
-rw-r--r--app/views/registrations/new.haml15
-rw-r--r--app/views/registrations/registrations_closed.haml8
-rw-r--r--app/views/registrations/registrations_closed.mobile.haml10
-rw-r--r--app/views/sessions/_form.haml1
-rw-r--r--app/views/sessions/two_factor.html.haml31
-rw-r--r--app/views/shared/_settings_nav.haml2
-rw-r--r--app/views/streams/main_stream.html.haml5
-rw-r--r--app/views/two_factor_authentications/_activate.haml11
-rw-r--r--app/views/two_factor_authentications/_confirm.haml33
-rw-r--r--app/views/two_factor_authentications/_deactivate.haml27
-rw-r--r--app/views/two_factor_authentications/_recovery.haml18
-rw-r--r--app/views/two_factor_authentications/_token_form.haml4
-rw-r--r--app/views/two_factor_authentications/confirm_2fa.html.haml11
-rw-r--r--app/views/two_factor_authentications/recovery_codes.html.haml12
-rw-r--r--app/views/two_factor_authentications/show.html.haml15
-rw-r--r--app/workers/cleanup_pending_photos.rb11
-rw-r--r--config/certs/README7
-rw-r--r--config/defaults.yml15
-rw-r--r--config/diaspora.yml.example66
-rw-r--r--config/eye.rb9
-rw-r--r--config/initializers/devise.rb6
-rw-r--r--config/initializers/filter_parameter_logging.rb1
-rw-r--r--config/initializers/prosody.rb24
-rw-r--r--config/initializers/secure_headers.rb8
-rw-r--r--config/initializers/sidekiq_scheduled.rb5
-rw-r--r--config/locales/devise/devise.ar.yml1
-rw-r--r--config/locales/devise/devise.art-nvi.yml1
-rw-r--r--config/locales/devise/devise.bg.yml1
-rw-r--r--config/locales/devise/devise.br.yml1
-rw-r--r--config/locales/devise/devise.bs.yml1
-rw-r--r--config/locales/devise/devise.cs.yml1
-rw-r--r--config/locales/devise/devise.cy.yml1
-rw-r--r--config/locales/devise/devise.da.yml1
-rw-r--r--config/locales/devise/devise.de-moo.yml1
-rw-r--r--config/locales/devise/devise.de.yml1
-rw-r--r--config/locales/devise/devise.de_formal.yml1
-rw-r--r--config/locales/devise/devise.el.yml1
-rw-r--r--config/locales/devise/devise.en.yml1
-rw-r--r--config/locales/devise/devise.en_1337.yml1
-rw-r--r--config/locales/devise/devise.en_shaw.yml1
-rw-r--r--config/locales/devise/devise.en_valspeak.yml1
-rw-r--r--config/locales/devise/devise.eo.yml1
-rw-r--r--config/locales/devise/devise.es-AR.yml1
-rw-r--r--config/locales/devise/devise.es-CL.yml1
-rw-r--r--config/locales/devise/devise.es-MX.yml1
-rw-r--r--config/locales/devise/devise.es.yml1
-rw-r--r--config/locales/devise/devise.et.yml1
-rw-r--r--config/locales/devise/devise.eu.yml1
-rw-r--r--config/locales/devise/devise.fi.yml1
-rw-r--r--config/locales/devise/devise.fr.yml1
-rw-r--r--config/locales/devise/devise.he.yml1
-rw-r--r--config/locales/devise/devise.hu.yml1
-rw-r--r--config/locales/devise/devise.hye-classical.yml1
-rw-r--r--config/locales/devise/devise.hye.yml1
-rw-r--r--config/locales/devise/devise.ia.yml1
-rw-r--r--config/locales/devise/devise.id.yml1
-rw-r--r--config/locales/devise/devise.is.yml1
-rw-r--r--config/locales/devise/devise.it.yml1
-rw-r--r--config/locales/devise/devise.ja.yml1
-rw-r--r--config/locales/devise/devise.ka.yml1
-rw-r--r--config/locales/devise/devise.ko.yml1
-rw-r--r--config/locales/devise/devise.lt.yml1
-rw-r--r--config/locales/devise/devise.mk.yml1
-rw-r--r--config/locales/devise/devise.ms.yml1
-rw-r--r--config/locales/devise/devise.nb.yml1
-rw-r--r--config/locales/devise/devise.nds.yml1
-rw-r--r--config/locales/devise/devise.nl.yml1
-rw-r--r--config/locales/devise/devise.nn.yml1
-rw-r--r--config/locales/devise/devise.oc.yml1
-rw-r--r--config/locales/devise/devise.pa.yml1
-rw-r--r--config/locales/devise/devise.pl.yml1
-rw-r--r--config/locales/devise/devise.pt-BR.yml3
-rw-r--r--config/locales/devise/devise.pt-PT.yml1
-rw-r--r--config/locales/devise/devise.ro.yml1
-rw-r--r--config/locales/devise/devise.ru.yml1
-rw-r--r--config/locales/devise/devise.sc.yml1
-rw-r--r--config/locales/devise/devise.sk.yml1
-rw-r--r--config/locales/devise/devise.sl.yml1
-rw-r--r--config/locales/devise/devise.sr.yml1
-rw-r--r--config/locales/devise/devise.sv.yml1
-rw-r--r--config/locales/devise/devise.te.yml1
-rw-r--r--config/locales/devise/devise.tr.yml1
-rw-r--r--config/locales/devise/devise.uk.yml1
-rw-r--r--config/locales/devise/devise.vi.yml1
-rw-r--r--config/locales/devise/devise.zh-CN.yml1
-rw-r--r--config/locales/devise/devise.zh-TW.yml1
-rw-r--r--config/locales/diaspora/ar.yml1
-rw-r--r--config/locales/diaspora/be.yml88
-rw-r--r--config/locales/diaspora/bg.yml36
-rw-r--r--config/locales/diaspora/br.yml1
-rw-r--r--config/locales/diaspora/bs.yml1
-rw-r--r--config/locales/diaspora/cs.yml1
-rw-r--r--config/locales/diaspora/da.yml56
-rw-r--r--config/locales/diaspora/de-CH.yml1
-rw-r--r--config/locales/diaspora/de-moo.yml71
-rw-r--r--config/locales/diaspora/de.yml55
-rw-r--r--config/locales/diaspora/de_formal.yml69
-rw-r--r--config/locales/diaspora/el.yml1
-rw-r--r--config/locales/diaspora/en.yml49
-rw-r--r--config/locales/diaspora/en_1337.yml1
-rw-r--r--config/locales/diaspora/en_pirate.yml1
-rw-r--r--config/locales/diaspora/en_shaw.yml1
-rw-r--r--config/locales/diaspora/en_valspeak.yml1
-rw-r--r--config/locales/diaspora/eo.yml1
-rw-r--r--config/locales/diaspora/es-AR.yml1
-rw-r--r--config/locales/diaspora/es-CL.yml15
-rw-r--r--config/locales/diaspora/es-MX.yml1
-rw-r--r--config/locales/diaspora/es.yml110
-rw-r--r--config/locales/diaspora/eu.yml1
-rw-r--r--config/locales/diaspora/fi.yml1
-rw-r--r--config/locales/diaspora/fr.yml45
-rw-r--r--config/locales/diaspora/he.yml1
-rw-r--r--config/locales/diaspora/hu.yml5
-rw-r--r--config/locales/diaspora/hye-classical.yml1
-rw-r--r--config/locales/diaspora/hye.yml1
-rw-r--r--config/locales/diaspora/ia.yml32
-rw-r--r--config/locales/diaspora/is.yml1
-rw-r--r--config/locales/diaspora/it.yml35
-rw-r--r--config/locales/diaspora/ja.yml44
-rw-r--r--config/locales/diaspora/ka.yml1
-rw-r--r--config/locales/diaspora/ko.yml1
-rw-r--r--config/locales/diaspora/la.yml2
-rw-r--r--config/locales/diaspora/lt.yml1
-rw-r--r--config/locales/diaspora/mk.yml1
-rw-r--r--config/locales/diaspora/ml.yml1
-rw-r--r--config/locales/diaspora/nb.yml1
-rw-r--r--config/locales/diaspora/nds.yml1
-rw-r--r--config/locales/diaspora/nl.yml1
-rw-r--r--config/locales/diaspora/nn.yml1
-rw-r--r--config/locales/diaspora/oc.yml29
-rw-r--r--config/locales/diaspora/pl.yml1
-rw-r--r--config/locales/diaspora/pt-BR.yml45
-rw-r--r--config/locales/diaspora/pt-PT.yml1
-rw-r--r--config/locales/diaspora/ro.yml236
-rw-r--r--config/locales/diaspora/ru.yml1
-rw-r--r--config/locales/diaspora/sc.yml1
-rw-r--r--config/locales/diaspora/sk.yml1
-rw-r--r--config/locales/diaspora/sl.yml1
-rw-r--r--config/locales/diaspora/sr.yml1
-rw-r--r--config/locales/diaspora/sv.yml89
-rw-r--r--config/locales/diaspora/te.yml1
-rw-r--r--config/locales/diaspora/tr.yml37
-rw-r--r--config/locales/diaspora/uk.yml1
-rw-r--r--config/locales/diaspora/vi.yml1
-rw-r--r--config/locales/diaspora/zh-CN.yml1
-rw-r--r--config/locales/diaspora/zh-TW.yml1
-rw-r--r--config/locales/javascript/javascript.da.yml1
-rw-r--r--config/locales/javascript/javascript.de-moo.yml1
-rw-r--r--config/locales/javascript/javascript.de.yml1
-rw-r--r--config/locales/javascript/javascript.de_formal.yml1
-rw-r--r--config/locales/javascript/javascript.en.yml2
-rw-r--r--config/locales/javascript/javascript.es.yml10
-rw-r--r--config/locales/javascript/javascript.ja.yml10
-rw-r--r--config/locales/javascript/javascript.sv.yml3
-rw-r--r--config/routes.rb8
-rw-r--r--db/migrate/20171229175654_add_devise_two_factor_to_users.rb13
-rw-r--r--db/migrate/20180302105225_add_two_factor_backupable_to_user.rb7
-rw-r--r--db/migrate/20190509125709_fix_missing_remote_photo_fields.rb11
-rw-r--r--db/migrate/20190511150503_decrypt_two_factor_secret.rb52
-rw-r--r--db/migrate/20190701234716_photos_remove_comment_count.rb14
-rw-r--r--db/migrate/20190703231700_fix_pending_profile_photos.rb9
-rw-r--r--db/migrate/20191018014242_remove_chat.rb10
-rw-r--r--features/desktop/change_password.feature7
-rw-r--r--features/desktop/getting_started.feature (renamed from features/desktop/signs_up.feature)6
-rw-r--r--features/desktop/likes.feature13
-rw-r--r--features/desktop/registrations.feature24
-rw-r--r--features/desktop/two_factor_authentication.feature80
-rw-r--r--features/mobile/change_password.feature9
-rw-r--r--features/mobile/registrations.feature (renamed from features/mobile/signs_up.feature)3
-rw-r--r--features/step_definitions/custom_web_steps.rb82
-rw-r--r--features/step_definitions/left_navbar_steps.rb23
-rw-r--r--features/step_definitions/posts_steps.rb72
-rw-r--r--features/step_definitions/publisher_steps.rb75
-rw-r--r--features/step_definitions/session_steps.rb10
-rw-r--r--features/step_definitions/stream_steps.rb76
-rw-r--r--features/step_definitions/two_factor_steps.rb51
-rw-r--r--features/step_definitions/user_steps.rb8
-rw-r--r--features/support/paths.rb2
-rw-r--r--features/support/webmock.rb2
-rw-r--r--lib/archive_importer.rb4
-rw-r--r--lib/archive_importer/entity_importer.rb2
-rw-r--r--lib/configuration_methods.rb12
-rw-r--r--lib/diaspora/federation/receive.rb41
-rw-r--r--lib/schemas/archive-format.json3
-rwxr-xr-xscript/server16
-rw-r--r--spec/controllers/jasmine_fixtures/contacts_spec.rb1
-rw-r--r--spec/controllers/passwords_controller_spec.rb2
-rw-r--r--spec/controllers/photos_controller_spec.rb8
-rw-r--r--spec/controllers/registrations_controller_spec.rb17
-rw-r--r--spec/controllers/two_factor_authentications_controller_spec.rb119
-rw-r--r--spec/helpers/jsxc_helper_spec.rb21
-rw-r--r--spec/integration/exporter_spec.rb6
-rw-r--r--spec/integration/migration_service_spec.rb4
-rw-r--r--spec/javascripts/app/pages/contacts_spec.js23
-rw-r--r--spec/javascripts/app/views/help_view_spec.js27
-rw-r--r--spec/javascripts/jasmine_helpers/SpecHelper.js1
-rw-r--r--spec/lib/archive_importer/entity_importer_spec.rb22
-rw-r--r--spec/lib/archive_importer_spec.rb2
-rw-r--r--spec/lib/diaspora/federation/receive_spec.rb8
-rw-r--r--spec/models/open_graph_cache_spec.rb21
-rw-r--r--spec/models/photo_spec.rb2
-rw-r--r--spec/models/user_spec.rb5
-rw-r--r--spec/presenters/node_info_presenter_spec.rb12
-rw-r--r--spec/serializers/export/aspect_serializer_spec.rb3
-rw-r--r--spec/services/diaspora_link_service_spec.rb28
-rw-r--r--spec/workers/cleanup_pending_photos_spec.rb31
250 files changed, 2475 insertions, 1271 deletions
diff --git a/.eslintrc b/.eslintrc
index fd80c6478..5a45c4f49 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -16,7 +16,6 @@
"Handlebars": false,
"HandlebarsTemplates": false,
"ImagePaths": false,
- "jsxc": false,
"L": false,
"OSM": false,
"PerfectScrollbar": false,
diff --git a/.gitignore b/.gitignore
index 65d3c2649..c18b96c64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,3 @@
-# XMPP certificates, keys and user data
-config/certs/*.crt
-config/certs/*.key
-config/prosody.cfg.lua
-
# Trademark sillyness
app/views/home/_show.*
app/views/terms/terms.*
diff --git a/.rubocop.yml b/.rubocop.yml
index 0647b5e48..28f9edea4 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,3 +1,5 @@
+require: rubocop-rails
+
AllCops:
TargetRubyVersion: 2.3
Exclude:
@@ -5,9 +7,6 @@ AllCops:
- "db/schema.rb"
- "config/locales/cldr/plurals.rb"
-Rails:
- Enabled: true
-
# Disable for rails 4
Rails/HttpPositionalArguments:
Enabled: false
diff --git a/.travis.yml b/.travis.yml
index 6df40becc..e32431bdd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,6 +17,16 @@ cache:
- app/assets/images
- tmp/cache/assets
+addons:
+ apt:
+ packages:
+ - libidn11-dev
+ - ghostscript
+
+services:
+ - postgresql
+ - mysql
+
branches:
only:
- 'master'
diff --git a/Changelog.md b/Changelog.md
index 9336f4075..3b30ba4d4 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,9 +1,17 @@
# 0.8.0.0
+## The chat integration has been removed
+
+After [a discussion with our community on Discourse](https://discourse.diasporafoundation.org/t/2718), we decided to remove the pieces of XMPP chat integration that were put in place a while ago. When we first added the chat support, we merged the implementation in an unfinished state in the hopes that the open issues will be addressed eventually, and the implementation would end up more polished. This ended up not being the case. After careful consideration and discussion, we did not manage to come up with clear reasons why we need a chat implementation, so we decided that the best way forward would be to remove it.
+
+Although the chat was never enabled per default and was marked as experimental, some production pods did set up the integration and offered an XMPP service to their users. After this release, diaspora\* will no longer contain a chat applet, so users will no longer be able to use the webchat inside diaspora\*. The existing module that is used to enable users to authenticate to Prosody using their diaspora\* credentials will continue to work, but contact list synchronization might not work without further changes to the Prosody module, which is developed independently from this project.
+
## Refactor
* Add bootstrapping for using ECMAScript 6 with automatic transpiling for compatibility [#7581](https://github.com/diaspora/diaspora/pull/7581)
* Remove backporting of mention syntax [#7788](https://github.com/diaspora/diaspora/pull/7788)
* Enable Content-Security-Policy header by default [#7781](https://github.com/diaspora/diaspora/pull/7781)
+* Do not show getting started after account import [#8036](https://github.com/diaspora/diaspora/pull/8036)
+* Remove the JSXC/Prosody integration [#8069](https://github.com/diaspora/diaspora/pull/8069)
## Bug fixes
* Fix multiple photos upload progress bar [#7655](https://github.com/diaspora/diaspora/pull/7655)
@@ -13,14 +21,43 @@
* Add client-site rescaling of post images if they exceed the maximum possible size [#7734](https://github.com/diaspora/diaspora/pull/7734)
* Add backend for archive import [#7660](https://github.com/diaspora/diaspora/pull/7660)
+# 0.7.13.0
+
+## Refactor
+* Set better example values for unicorn stdout/stderr log settings [#8058](https://github.com/diaspora/diaspora/pull/8058)
+
+## Bug fixes
+* Fix error while trying to fetch some sites with invalid OpenGraph data [#8049](https://github.com/diaspora/diaspora/pull/8049)
+
+## Features
+* Add cronjob to cleanup pending photos which were never posted [#8041](https://github.com/diaspora/diaspora/pull/8041)
+
+# 0.7.12.0
+
+## Refactor
+* Harmonize markdown titles sizes [#8029](https://github.com/diaspora/diaspora/pull/8029)
+
+## Bug fixes
+* Improve handling of mixed case hostnames while fetching OpenGraph data [#8021](https://github.com/diaspora/diaspora/pull/8021)
+* Fix "remember me" with two factor authentication enabled [#8031](https://github.com/diaspora/diaspora/pull/8031)
+
+## Features
+* Add line mentioning diaspora\* on the splash page [#7966](https://github.com/diaspora/diaspora/pull/7966)
+* Improve communication about signing up on closed pods [#7896](https://github.com/diaspora/diaspora/pull/7896)
+
# 0.7.11.0
## Refactor
+* Enable paranoid mode for devise [#8003](https://github.com/diaspora/diaspora/pull/8003)
+* Refactor likes cucumber test [#8002](https://github.com/diaspora/diaspora/pull/8002)
## Bug fixes
+* Fix old photos without remote url for export [#8012](https://github.com/diaspora/diaspora/pull/8012)
## Features
-* Add a manifest.json file as a first step to make diaspora* a Progressive Web App [#7998](https://github.com/diaspora/diaspora/pull/7998)
+* Add a manifest.json file as a first step to make diaspora\* a Progressive Web App [#7998](https://github.com/diaspora/diaspora/pull/7998)
+* Allow `web+diaspora://` links to link to a profile with only the diaspora ID [#8000](https://github.com/diaspora/diaspora/pull/8000)
+* Support TOTP two factor authentication [#7751](https://github.com/diaspora/diaspora/pull/7751)
# 0.7.10.0
diff --git a/Gemfile b/Gemfile
index e593c2e24..fc1062884 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,7 +2,7 @@
source "https://rubygems.org"
-gem "rails", "5.1.6.2"
+gem "rails", "5.1.7"
# Legacy Rails features, remove me!
# responders (class level)
@@ -10,13 +10,13 @@ gem "responders", "2.4.1"
# Appserver
-gem "unicorn", "5.5.0", require: false
+gem "unicorn", "5.5.1", require: false
gem "unicorn-worker-killer", "0.4.4"
# Federation
-gem "diaspora_federation-json_schema", "0.2.5"
-gem "diaspora_federation-rails", "0.2.5"
+gem "diaspora_federation-json_schema", "0.2.6"
+gem "diaspora_federation-rails", "0.2.6"
# API and JSON
@@ -28,7 +28,9 @@ gem "yajl-ruby", "1.4.1"
# Authentication
gem "devise", "4.6.1"
+gem "devise-two-factor", "3.0.3"
gem "devise_lastseenable", "0.0.6"
+gem "rqrcode", "0.10.1"
# Captcha
@@ -37,7 +39,7 @@ gem "simple_captcha2", "0.4.3", require: "simple_captcha"
# Background processing
gem "redis", "3.3.5" # Pinned to 3.3.x because of https://github.com/antirez/redis/issues/4272
-gem "sidekiq", "5.2.5"
+gem "sidekiq", "5.2.7"
# Scheduled processing
@@ -53,7 +55,7 @@ gem "configurate", "0.3.1"
# Cross-origin resource sharing
-gem "rack-cors", "1.0.2", require: "rack/cors"
+gem "rack-cors", "1.0.3", require: "rack/cors"
# CSS
@@ -74,12 +76,12 @@ group :postgresql, optional: true do
end
-gem "activerecord-import", "1.0.1"
+gem "activerecord-import", "1.0.2"
# File uploading
gem "carrierwave", "1.3.1"
-gem "fog-aws", "3.4.0"
+gem "fog-aws", "3.5.1"
gem "mini_magick", "4.9.3"
# GUID generation
@@ -91,14 +93,14 @@ gem "entypo-rails", "3.0.0"
# JavaScript
-gem "handlebars_assets", "0.23.3"
-gem "jquery-rails", "4.3.3"
-gem "js-routes", "1.4.4"
+gem "handlebars_assets", "0.23.4"
+gem "jquery-rails", "4.3.5"
+gem "js-routes", "1.4.7"
gem "js_image_paths", "0.1.1"
gem "sprockets-es6", "0.9.2"
source "https://rails-assets.org" do
- gem "rails-assets-jquery", "3.3.1" # Should be kept in sync with jquery-rails
+ gem "rails-assets-jquery", "3.4.1" # Should be kept in sync with jquery-rails
gem "rails-assets-jquery.ui", "1.11.4"
gem "rails-assets-highlightjs", "9.12.0"
@@ -140,12 +142,12 @@ gem "rails-i18n", "5.1.3"
gem "markerb", "1.1.0"
# Map
-gem "leaflet-rails", "1.3.1"
+gem "leaflet-rails", "1.5.1"
# Parsing
-gem "nokogiri", "1.10.1"
-gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
+gem "nokogiri", "1.10.3"
+gem "open_graph_reader", "0.7.0" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.4.0"
gem "ruby-oembed", "0.12.0"
gem "twitter-text", "3.0.0"
@@ -156,7 +158,7 @@ gem "string-direction", "1.2.1"
# Security Headers
-gem "secure_headers", "6.1.0"
+gem "secure_headers", "6.1.1"
# Services
@@ -167,32 +169,28 @@ gem "omniauth-wordpress", "0.2.2"
gem "twitter", "6.2.0"
# OpenID Connect
-gem "openid_connect", "1.1.6"
+gem "openid_connect", "1.1.8"
# Serializers
gem "active_model_serializers", "0.9.7"
-# XMPP chat dependencies
-gem "diaspora-prosody-config", "0.0.7"
-gem "rails-assets-diaspora_jsxc", "0.1.5.develop.7", source: "https://rails-assets.org"
-
# Tags
gem "acts-as-taggable-on", "6.0.0"
# URIs and HTTP
-gem "addressable", "2.5.2", require: "addressable/uri"
+gem "addressable", "2.6.0", require: "addressable/uri"
gem "faraday", "0.15.4"
-gem "faraday_middleware", "0.12.2"
+gem "faraday_middleware", "0.13.1"
gem "faraday-cookie_jar", "0.0.6"
gem "typhoeus", "1.3.1"
# Views
gem "gon", "6.2.1"
-gem "hamlit", "2.9.2"
+gem "hamlit", "2.9.3"
gem "mobile-fu", "1.4.0"
gem "rails-timeago", "2.17.1"
gem "will_paginate", "3.1.7"
@@ -212,7 +210,7 @@ gem "rubyzip", "1.2.2", require: "zip"
# https://github.com/discourse/discourse/pull/238
gem "minitest"
-gem "versionist", "1.7.0"
+gem "versionist", "2.0.0"
# Windows and OSX have an execjs compatible runtime built-in, Linux users should
# install Node.js or use "therubyracer".
@@ -251,12 +249,13 @@ group :development do
# Linters
gem "haml_lint", "0.28.0", require: false
- gem "pronto", "0.9.5", require: false
- gem "pronto-eslint", "0.9.1", require: false
- gem "pronto-haml", "0.9.0", require: false
- gem "pronto-rubocop", "0.9.1", require: false
- gem "pronto-scss", "0.9.1", require: false
- gem "rubocop", "0.66.0", require: false
+ gem "pronto", "0.10.0", require: false
+ gem "pronto-eslint", "0.10.0", require: false
+ gem "pronto-haml", "0.10.0", require: false
+ gem "pronto-rubocop", "0.10.0", require: false
+ gem "pronto-scss", "0.10.0", require: false
+ gem "rubocop", "0.72.0", require: false
+ gem "rubocop-rails", "2.1.0", require: false
# Preloading environment
@@ -278,7 +277,7 @@ group :test do
# RSpec (unit tests, some integration tests)
gem "fixture_builder", "0.5.2.rc3"
- gem "fuubar", "2.3.2"
+ gem "fuubar", "2.4.1"
gem "json-schema-rspec", "0.0.4"
gem "rspec-json_expectations", "~> 2.1"
@@ -295,12 +294,12 @@ group :test do
gem "factory_girl_rails", "4.8.0"
gem "shoulda-matchers", "4.0.1"
gem "timecop", "0.9.1"
- gem "webmock", "3.5.1", require: false
+ gem "webmock", "3.6.0", require: false
- gem "diaspora_federation-test", "0.2.5"
+ gem "diaspora_federation-test", "0.2.6"
# Coverage
- gem "coveralls", "0.8.22", require: false
+ gem "coveralls", "0.8.23", require: false
end
group :development, :test do
@@ -308,12 +307,12 @@ group :development, :test do
gem "rspec-rails", "3.8.2"
# Cucumber (integration tests)
- gem "cucumber-rails", "1.6.0", require: false
+ gem "cucumber-rails", "1.7.0", require: false
# Jasmine (client side application tests (JS))
- gem "jasmine", "3.3.0"
+ gem "jasmine", "3.4.0"
gem "jasmine-jquery-rails", "2.0.3"
- gem "rails-assets-jasmine-ajax", "3.4.0", source: "https://rails-assets.org"
+ gem "rails-assets-jasmine-ajax", "4.0.0", source: "https://rails-assets.org"
gem "sinon-rails", "1.15.0"
# For `assigns` in controller specs
diff --git a/Gemfile.lock b/Gemfile.lock
index 3957cdb48..56cd3defe 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -2,25 +2,25 @@ GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
- actioncable (5.1.6.2)
- actionpack (= 5.1.6.2)
+ actioncable (5.1.7)
+ actionpack (= 5.1.7)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
- actionmailer (5.1.6.2)
- actionpack (= 5.1.6.2)
- actionview (= 5.1.6.2)
- activejob (= 5.1.6.2)
+ actionmailer (5.1.7)
+ actionpack (= 5.1.7)
+ actionview (= 5.1.7)
+ activejob (= 5.1.7)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
- actionpack (5.1.6.2)
- actionview (= 5.1.6.2)
- activesupport (= 5.1.6.2)
+ actionpack (5.1.7)
+ actionview (= 5.1.7)
+ activesupport (= 5.1.7)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (5.1.6.2)
- activesupport (= 5.1.6.2)
+ actionview (5.1.7)
+ activesupport (= 5.1.7)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
@@ -28,18 +28,18 @@ GEM
active_model_serializers (0.9.7)
activemodel (>= 3.2)
concurrent-ruby (~> 1.0)
- activejob (5.1.6.2)
- activesupport (= 5.1.6.2)
+ activejob (5.1.7)
+ activesupport (= 5.1.7)
globalid (>= 0.3.6)
- activemodel (5.1.6.2)
- activesupport (= 5.1.6.2)
- activerecord (5.1.6.2)
- activemodel (= 5.1.6.2)
- activesupport (= 5.1.6.2)
+ activemodel (5.1.7)
+ activesupport (= 5.1.7)
+ activerecord (5.1.7)
+ activemodel (= 5.1.7)
+ activesupport (= 5.1.7)
arel (~> 8.0)
- activerecord-import (1.0.1)
+ activerecord-import (1.0.2)
activerecord (>= 3.2)
- activesupport (5.1.6.2)
+ activesupport (5.1.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@@ -50,7 +50,7 @@ GEM
activemodel (>= 3.0.0)
activesupport (>= 3.0.0)
rack (>= 1.1.0)
- addressable (2.5.2)
+ addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
arel (8.0.0)
@@ -60,6 +60,8 @@ GEM
mime-types (>= 2.99)
unf
ast (2.4.0)
+ attr_encrypted (3.1.0)
+ encryptor (~> 3.0.0)
attr_required (1.0.1)
autoprefixer-rails (8.6.5)
execjs
@@ -67,8 +69,8 @@ GEM
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
- backports (3.12.0)
- bcrypt (3.1.12)
+ backports (3.15.0)
+ bcrypt (3.1.13)
bindata (2.4.4)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
@@ -132,11 +134,11 @@ GEM
concurrent-ruby (1.1.5)
configurate (0.3.1)
connection_pool (2.2.2)
- coveralls (0.8.22)
+ coveralls (0.8.23)
json (>= 1.8, < 3)
simplecov (~> 0.16.1)
term-ansicolor (~> 1.3)
- thor (~> 0.19.4)
+ thor (>= 0.19.4, < 2.0)
tins (~> 1.6)
crack (0.4.3)
safe_yaml (~> 1.0.0)
@@ -158,12 +160,12 @@ GEM
cucumber-tag_expressions (~> 1.1.0)
gherkin (~> 5.0)
cucumber-expressions (6.0.1)
- cucumber-rails (1.6.0)
- capybara (>= 1.1.2, < 4)
+ cucumber-rails (1.7.0)
+ capybara (>= 2.3.0, < 4)
cucumber (>= 3.0.2, < 4)
mime-types (>= 1.17, < 4)
nokogiri (~> 1.8)
- railties (>= 4, < 6)
+ railties (>= 4.2, < 7)
cucumber-tag_expressions (1.1.1)
cucumber-wire (0.0.1)
database_cleaner (1.7.0)
@@ -173,28 +175,34 @@ GEM
railties (>= 4.1.0, < 6.0)
responders
warden (~> 1.2.3)
+ devise-two-factor (3.0.3)
+ activesupport (< 5.3)
+ attr_encrypted (>= 1.3, < 4, != 2)
+ devise (~> 4.0)
+ railties (< 5.3)
+ rotp (~> 2.0)
devise_lastseenable (0.0.6)
devise
rails (>= 3.0.4)
- diaspora-prosody-config (0.0.7)
- diaspora_federation (0.2.5)
+ diaspora_federation (0.2.6)
faraday (>= 0.9.0, < 0.16.0)
- faraday_middleware (>= 0.10.0, < 0.13.0)
+ faraday_middleware (>= 0.10.0, < 0.14.0)
nokogiri (~> 1.6, >= 1.6.8)
typhoeus (~> 1.0)
valid (~> 1.0)
- diaspora_federation-json_schema (0.2.5)
- diaspora_federation-rails (0.2.5)
+ diaspora_federation-json_schema (0.2.6)
+ diaspora_federation-rails (0.2.6)
actionpack (>= 4.2, < 6)
- diaspora_federation (= 0.2.5)
- diaspora_federation-test (0.2.5)
- diaspora_federation (= 0.2.5)
+ diaspora_federation (= 0.2.6)
+ diaspora_federation-test (0.2.6)
+ diaspora_federation (= 0.2.6)
fabrication (~> 2.16)
uuid (~> 2.3, >= 2.3.8)
diff-lcs (1.3)
- docile (1.3.1)
+ docile (1.3.2)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
+ encryptor (3.0.0)
entypo-rails (3.0.0)
railties (>= 4.1, < 6)
equalizer (0.0.11)
@@ -203,11 +211,11 @@ GEM
execjs
multi_json (>= 1.3)
rake
- et-orbi (1.1.7)
+ et-orbi (1.2.1)
tzinfo
ethon (0.12.0)
ffi (>= 1.3.0)
- excon (0.62.0)
+ excon (0.64.0)
execjs (2.7.0)
eye (0.10.0)
celluloid (~> 0.17.3)
@@ -215,7 +223,7 @@ GEM
kostya-sigar (~> 2.0.0)
state_machines
thor
- fabrication (2.20.1)
+ fabrication (2.20.2)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
@@ -226,14 +234,14 @@ GEM
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
- faraday_middleware (0.12.2)
+ faraday_middleware (0.13.1)
faraday (>= 0.7.4, < 1.0)
- ffi (1.10.0)
+ ffi (1.11.1)
fixture_builder (0.5.2.rc3)
activerecord (>= 2)
activesupport (>= 2)
hashdiff
- fog-aws (3.4.0)
+ fog-aws (3.5.1)
fog-core (~> 2.1)
fog-json (~> 1.1)
fog-xml (~> 0.1)
@@ -250,15 +258,15 @@ GEM
fog-core
nokogiri (>= 1.5.11, < 2.0.0)
formatador (0.2.5)
- fugit (1.1.8)
- et-orbi (~> 1.1, >= 1.1.7)
+ fugit (1.2.2)
+ et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.1)
- fuubar (2.3.2)
+ fuubar (2.4.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
get_process_mem (0.2.3)
gherkin (5.1.0)
- gitlab (4.10.0)
+ gitlab (4.11.0)
httparty (~> 0.14, >= 0.14.0)
terminal-table (~> 1.5, >= 1.5.1)
globalid (0.4.2)
@@ -293,15 +301,15 @@ GEM
rake (>= 10, < 13)
rubocop (>= 0.50.0)
sysexits (~> 1.1)
- hamlit (2.9.2)
+ hamlit (2.9.3)
temple (>= 0.8.0)
thor
tilt
- handlebars_assets (0.23.3)
+ handlebars_assets (0.23.4)
execjs (~> 2.0)
sprockets (>= 2.0.0)
tilt (>= 1.2)
- hashdiff (0.3.8)
+ hashdiff (0.4.0)
hashie (3.6.0)
http (3.3.0)
addressable (~> 2.3)
@@ -313,7 +321,7 @@ GEM
http-form_data (2.1.1)
http_accept_language (2.1.1)
http_parser.rb (0.6.0)
- httparty (0.16.4)
+ httparty (0.17.0)
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
httpclient (2.8.3)
@@ -327,26 +335,26 @@ GEM
railties (>= 3.0.0)
idn-ruby (0.1.0)
ipaddress (0.8.3)
- jaro_winkler (1.5.2)
- jasmine (3.3.0)
- jasmine-core (~> 3.3.0)
+ jaro_winkler (1.5.3)
+ jasmine (3.4.0)
+ jasmine-core (~> 3.4.0)
phantomjs
rack (>= 1.2.1)
rake
- jasmine-core (3.3.0)
+ jasmine-core (3.4.0)
jasmine-jquery-rails (2.0.3)
- jquery-rails (4.3.3)
+ jquery-rails (4.3.5)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- js-routes (1.4.4)
- railties (>= 3.2)
+ js-routes (1.4.7)
+ railties (>= 4)
sprockets-rails
js_image_paths (0.1.1)
rails (>= 4.0, < 6.0)
sprockets (>= 3.0.0)
json (2.2.0)
- json-jwt (1.10.0)
+ json-jwt (1.10.2)
activesupport (>= 4.2)
aes_key_wrap
bindata
@@ -355,13 +363,13 @@ GEM
json-schema-rspec (0.0.4)
json-schema (~> 2.5)
rspec
- jsonpath (1.0.1)
+ jsonpath (1.0.4)
multi_json
to_regexp (~> 0.2.1)
- jwt (2.1.0)
+ jwt (2.2.1)
kgio (2.11.2)
kostya-sigar (2.0.6)
- leaflet-rails (1.3.1)
+ leaflet-rails (1.5.1)
rails (>= 4.2.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
@@ -377,8 +385,8 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
lumberjack (1.0.13)
- macaddr (1.7.1)
- systemu (~> 2.6.2)
+ macaddr (1.7.2)
+ systemu (~> 2.6.5)
mail (2.7.1)
mini_mime (>= 0.1.1)
markdown-it-html5-embed (1.0.0)
@@ -388,7 +396,7 @@ GEM
method_source (0.9.2)
mime-types (3.2.2)
mime-types-data (~> 3.2015)
- mime-types-data (3.2018.0812)
+ mime-types-data (3.2019.0331)
mini_magick (4.9.3)
mini_mime (1.0.1)
mini_portile2 (2.4.0)
@@ -399,12 +407,12 @@ GEM
multi_json (1.13.1)
multi_test (0.1.2)
multi_xml (0.6.0)
- multipart-post (2.0.0)
+ multipart-post (2.1.1)
mysql2 (0.5.2)
naught (1.1.0)
nenv (0.3.0)
nio4r (2.3.1)
- nokogiri (1.10.1)
+ nokogiri (1.10.3)
mini_portile2 (~> 2.4.0)
notiffany (0.1.1)
nenv (~> 0.1)
@@ -416,7 +424,7 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
- octokit (4.13.0)
+ octokit (4.14.0)
sawyer (~> 0.8.0, >= 0.5.3)
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
@@ -435,10 +443,10 @@ GEM
rack
omniauth-wordpress (0.2.2)
omniauth-oauth2 (>= 1.1.0)
- open_graph_reader (0.6.2)
+ open_graph_reader (0.7.0)
faraday (>= 0.9.0)
nokogiri (~> 1.6)
- openid_connect (1.1.6)
+ openid_connect (1.1.8)
activemodel
attr_required (>= 1.0.0)
json-jwt (>= 1.5.0)
@@ -449,8 +457,8 @@ GEM
validate_url
webfinger (>= 1.0.1)
orm_adapter (0.5.0)
- parallel (1.14.0)
- parser (2.6.2.0)
+ parallel (1.17.0)
+ parser (2.6.3.0)
ast (~> 2.4.0)
pg (1.1.4)
phantomjs (2.1.1.0)
@@ -458,24 +466,24 @@ GEM
capybara (>= 2.1, < 4)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
- pronto (0.9.5)
+ pronto (0.10.0)
gitlab (~> 4.0, >= 4.0.0)
httparty (>= 0.13.7)
octokit (~> 4.7, >= 4.7.0)
- rainbow (~> 2.1)
+ rainbow (>= 2.2, < 4.0)
rugged (~> 0.24, >= 0.23.0)
- thor (~> 0.19.0)
- pronto-eslint (0.9.1)
+ thor (~> 0.20.0)
+ pronto-eslint (0.10.0)
eslintrb (~> 2.0, >= 2.0.0)
- pronto (~> 0.9.0)
- pronto-haml (0.9.0)
+ pronto (~> 0.10.0)
+ pronto-haml (0.10.0)
haml_lint (~> 0.23)
- pronto (~> 0.9.0)
- pronto-rubocop (0.9.1)
- pronto (~> 0.9.0)
+ pronto (~> 0.10.0)
+ pronto-rubocop (0.10.0)
+ pronto (~> 0.10.0)
rubocop (~> 0.50, >= 0.49.1)
- pronto-scss (0.9.1)
- pronto (~> 0.9.0)
+ pronto-scss (0.10.0)
+ pronto (~> 0.10.0)
scss_lint (~> 0.43, >= 0.43.0)
pry (0.12.2)
coderay (~> 1.1.0)
@@ -483,17 +491,16 @@ GEM
pry-byebug (3.7.0)
byebug (~> 11.0)
pry (~> 0.10)
- psych (3.1.0)
- public_suffix (3.0.3)
+ public_suffix (3.1.1)
raabro (1.1.6)
- rack (2.0.6)
- rack-cors (1.0.2)
+ rack (2.0.7)
+ rack-cors (1.0.3)
rack-google-analytics (1.2.0)
actionpack
activesupport
rack-mobile-detect (0.4.0)
rack
- rack-oauth2 (1.9.3)
+ rack-oauth2 (1.10.0)
activesupport
attr_required
httpclient
@@ -507,54 +514,41 @@ GEM
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
- rails (5.1.6.2)
- actioncable (= 5.1.6.2)
- actionmailer (= 5.1.6.2)
- actionpack (= 5.1.6.2)
- actionview (= 5.1.6.2)
- activejob (= 5.1.6.2)
- activemodel (= 5.1.6.2)
- activerecord (= 5.1.6.2)
- activesupport (= 5.1.6.2)
+ rails (5.1.7)
+ actioncable (= 5.1.7)
+ actionmailer (= 5.1.7)
+ actionpack (= 5.1.7)
+ actionview (= 5.1.7)
+ activejob (= 5.1.7)
+ activemodel (= 5.1.7)
+ activerecord (= 5.1.7)
+ activesupport (= 5.1.7)
bundler (>= 1.3.0)
- railties (= 5.1.6.2)
+ railties (= 5.1.7)
sprockets-rails (>= 2.0.0)
rails-assets-autosize (4.0.2)
rails-assets-backbone (1.3.3)
rails-assets-underscore (>= 1.8.3)
rails-assets-blueimp-gallery (2.33.0)
- rails-assets-bootstrap (3.3.7)
+ rails-assets-bootstrap (3.4.1)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-corejs-typeahead (1.2.1)
rails-assets-jquery (>= 1.11)
rails-assets-cropperjs (1.4.3)
- rails-assets-diaspora_jsxc (0.1.5.develop.7)
- rails-assets-emojione (~> 2.0.1)
- rails-assets-favico.js (>= 0.3.10, < 0.4)
- rails-assets-jquery-colorbox (~> 1.6.3)
- rails-assets-jquery-fullscreen-plugin (~> 0.5.0)
- rails-assets-jquery.slimscroll (~> 1.3.6)
- rails-assets-jquery.ui (~> 1.11.4)
- rails-assets-emojione (2.0.1)
- rails-assets-favico.js (0.3.10)
rails-assets-fine-uploader (5.13.0)
rails-assets-highlightjs (9.12.0)
- rails-assets-jasmine (3.3.0)
- rails-assets-jasmine-ajax (3.4.0)
+ rails-assets-jasmine (3.4.0)
+ rails-assets-jasmine-ajax (4.0.0)
rails-assets-jasmine (~> 3)
- rails-assets-jquery (3.3.1)
- rails-assets-jquery-colorbox (1.6.4)
- rails-assets-jquery (>= 1.3.2)
- rails-assets-jquery-fullscreen-plugin (0.5.0)
+ rails-assets-jquery (3.4.1)
rails-assets-jquery-placeholder (2.3.1)
rails-assets-jquery (>= 1.6)
rails-assets-jquery-textchange (0.2.3)
rails-assets-jquery
rails-assets-jquery.are-you-sure (1.9.0)
rails-assets-jquery (>= 1.4.2)
- rails-assets-jquery.slimscroll (1.3.8)
rails-assets-jquery.ui (1.11.4)
rails-assets-jquery (>= 1.6)
rails-assets-markdown-it--markdown-it-for-inline (0.1.1)
@@ -582,14 +576,13 @@ GEM
rails-timeago (2.17.1)
actionpack (>= 3.1)
activesupport (>= 3.1)
- railties (5.1.6.2)
- actionpack (= 5.1.6.2)
- activesupport (= 5.1.6.2)
+ railties (5.1.7)
+ actionpack (= 5.1.7)
+ activesupport (= 5.1.7)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- rainbow (2.2.2)
- rake
+ rainbow (3.0.0)
raindrops (0.19.0)
rake (12.3.2)
rb-fsevent (0.10.3)
@@ -597,23 +590,26 @@ GEM
ffi (~> 1.0)
redcarpet (3.4.0)
redis (3.3.5)
- regexp_parser (1.3.0)
+ regexp_parser (1.5.1)
request_store (1.4.1)
rack (>= 1.4)
responders (2.4.1)
actionpack (>= 4.2.0, < 6.0)
railties (>= 4.2.0, < 6.0)
+ rotp (2.1.2)
+ rqrcode (0.10.1)
+ chunky_png (~> 1.0)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
- rspec-core (3.8.0)
+ rspec-core (3.8.2)
rspec-support (~> 3.8.0)
- rspec-expectations (3.8.2)
+ rspec-expectations (3.8.4)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
- rspec-json_expectations (2.1.0)
- rspec-mocks (3.8.0)
+ rspec-json_expectations (2.2.0)
+ rspec-mocks (3.8.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-rails (3.8.2)
@@ -624,20 +620,22 @@ GEM
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
- rspec-support (3.8.0)
- rubocop (0.66.0)
+ rspec-support (3.8.2)
+ rubocop (0.72.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
- parser (>= 2.5, != 2.5.1.1)
- psych (>= 3.1.0)
+ parser (>= 2.6)
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
- unicode-display_width (>= 1.4.0, < 1.6)
+ unicode-display_width (>= 1.4.0, < 1.7)
+ rubocop-rails (2.1.0)
+ rack (>= 1.1)
+ rubocop (>= 0.72.0)
ruby-oembed (0.12.0)
- ruby-progressbar (1.10.0)
+ ruby-progressbar (1.10.1)
ruby_dep (1.5.0)
rubyzip (1.2.2)
- rugged (0.28.1)
+ rugged (0.28.2)
safe_yaml (1.0.5)
sass (3.4.25)
sass-rails (5.0.7)
@@ -649,17 +647,17 @@ GEM
sassc (2.0.1)
ffi (~> 1.9)
rake
- sawyer (0.8.1)
- addressable (>= 2.3.5, < 2.6)
- faraday (~> 0.8, < 1.0)
+ sawyer (0.8.2)
+ addressable (>= 2.3.5)
+ faraday (> 0.8, < 2.0)
scss_lint (0.55.0)
rake (>= 0.9, < 13)
sass (~> 3.4.20)
- secure_headers (6.1.0)
+ secure_headers (6.1.1)
shellany (0.0.1)
shoulda-matchers (4.0.1)
activesupport (>= 4.2.0)
- sidekiq (5.2.5)
+ sidekiq (5.2.7)
connection_pool (~> 2.2, >= 2.2.2)
rack (>= 1.5.0)
rack-protection (>= 1.5.0)
@@ -707,12 +705,12 @@ GEM
tins (~> 1.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- thor (0.19.4)
+ thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.9)
timecop (0.9.1)
timers (4.3.0)
- tins (1.20.2)
+ tins (1.20.3)
to_regexp (0.2.1)
turbo_dev_assets (0.0.2)
twitter (6.2.0)
@@ -737,9 +735,9 @@ GEM
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
- unf_ext (0.0.7.5)
- unicode-display_width (1.5.0)
- unicorn (5.5.0)
+ unf_ext (0.0.7.6)
+ unicode-display_width (1.6.0)
+ unicorn (5.5.1)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
@@ -751,10 +749,10 @@ GEM
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
- validate_url (1.0.6)
+ validate_url (1.0.8)
activemodel (>= 3.0.0)
public_suffix
- versionist (1.7.0)
+ versionist (2.0.0)
activesupport (>= 3)
railties (>= 3)
yard (~> 0.9.11)
@@ -763,28 +761,28 @@ GEM
webfinger (1.1.0)
activesupport
httpclient (>= 2.4)
- webmock (3.5.1)
+ webmock (3.6.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
- hashdiff
+ hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
- websocket-extensions (0.1.3)
+ websocket-extensions (0.1.4)
will_paginate (3.1.7)
xpath (3.2.0)
nokogiri (~> 1.8)
yajl-ruby (1.4.1)
- yard (0.9.18)
+ yard (0.9.20)
PLATFORMS
ruby
DEPENDENCIES
active_model_serializers (= 0.9.7)
- activerecord-import (= 1.0.1)
+ activerecord-import (= 1.0.2)
acts-as-taggable-on (= 6.0.0)
acts_as_api (= 1.0.1)
- addressable (= 2.5.2)
+ addressable (= 2.6.0)
asset_sync (= 2.7.0)
autoprefixer-rails (= 8.6.5)
bootstrap-sass (= 3.4.1)
@@ -793,43 +791,43 @@ DEPENDENCIES
carrierwave (= 1.3.1)
compass-rails (= 3.1.0)
configurate (= 0.3.1)
- coveralls (= 0.8.22)
+ coveralls (= 0.8.23)
cucumber-api-steps (= 0.14)
- cucumber-rails (= 1.6.0)
+ cucumber-rails (= 1.7.0)
database_cleaner (= 1.7.0)
devise (= 4.6.1)
+ devise-two-factor (= 3.0.3)
devise_lastseenable (= 0.0.6)
- diaspora-prosody-config (= 0.0.7)
- diaspora_federation-json_schema (= 0.2.5)
- diaspora_federation-rails (= 0.2.5)
- diaspora_federation-test (= 0.2.5)
+ diaspora_federation-json_schema (= 0.2.6)
+ diaspora_federation-rails (= 0.2.6)
+ diaspora_federation-test (= 0.2.6)
entypo-rails (= 3.0.0)
eye (= 0.10.0)
factory_girl_rails (= 4.8.0)
faraday (= 0.15.4)
faraday-cookie_jar (= 0.0.6)
- faraday_middleware (= 0.12.2)
+ faraday_middleware (= 0.13.1)
fixture_builder (= 0.5.2.rc3)
- fog-aws (= 3.4.0)
- fuubar (= 2.3.2)
+ fog-aws (= 3.5.1)
+ fuubar (= 2.4.1)
gon (= 6.2.1)
guard (= 2.15.0)
guard-rspec (= 4.7.3)
guard-rubocop (= 1.3.0)
haml_lint (= 0.28.0)
- hamlit (= 2.9.2)
- handlebars_assets (= 0.23.3)
+ hamlit (= 2.9.3)
+ handlebars_assets (= 0.23.4)
http_accept_language (= 2.1.1)
i18n-inflector-rails (= 1.0.7)
- jasmine (= 3.3.0)
+ jasmine (= 3.4.0)
jasmine-jquery-rails (= 2.0.3)
- jquery-rails (= 4.3.3)
- js-routes (= 1.4.4)
+ jquery-rails (= 4.3.5)
+ js-routes (= 1.4.7)
js_image_paths (= 0.1.1)
json (= 2.2.0)
json-schema (= 2.8.1)
json-schema-rspec (= 0.0.4)
- leaflet-rails (= 1.3.1)
+ leaflet-rails (= 1.5.1)
logging-rails (= 0.6.0)
markdown-it-html5-embed (= 1.0.0)
markerb (= 1.1.0)
@@ -837,39 +835,38 @@ DEPENDENCIES
minitest
mobile-fu (= 1.4.0)
mysql2 (= 0.5.2)
- nokogiri (= 1.10.1)
+ nokogiri (= 1.10.3)
omniauth (= 1.9.0)
omniauth-tumblr (= 1.2)
omniauth-twitter (= 1.4.0)
omniauth-wordpress (= 0.2.2)
- open_graph_reader (= 0.6.2)
- openid_connect (= 1.1.6)
+ open_graph_reader (= 0.7.0)
+ openid_connect (= 1.1.8)
pg (= 1.1.4)
poltergeist (= 1.18.1)
- pronto (= 0.9.5)
- pronto-eslint (= 0.9.1)
- pronto-haml (= 0.9.0)
- pronto-rubocop (= 0.9.1)
- pronto-scss (= 0.9.1)
+ pronto (= 0.10.0)
+ pronto-eslint (= 0.10.0)
+ pronto-haml (= 0.10.0)
+ pronto-rubocop (= 0.10.0)
+ pronto-scss (= 0.10.0)
pry
pry-byebug
- rack-cors (= 1.0.2)
+ rack-cors (= 1.0.3)
rack-google-analytics (= 1.2.0)
rack-piwik (= 0.3.0)
rack-rewrite (= 1.5.1)
rack-ssl (= 1.4.1)
- rails (= 5.1.6.2)
+ rails (= 5.1.7)
rails-assets-autosize (= 4.0.2)!
rails-assets-backbone (= 1.3.3)!
rails-assets-blueimp-gallery (= 2.33.0)!
rails-assets-bootstrap-markdown (= 2.10.0)!
rails-assets-corejs-typeahead (= 1.2.1)!
rails-assets-cropperjs (= 1.4.3)!
- rails-assets-diaspora_jsxc (= 0.1.5.develop.7)!
rails-assets-fine-uploader (= 5.13.0)!
rails-assets-highlightjs (= 9.12.0)!
- rails-assets-jasmine-ajax (= 3.4.0)!
- rails-assets-jquery (= 3.3.1)!
+ rails-assets-jasmine-ajax (= 4.0.0)!
+ rails-assets-jquery (= 3.4.1)!
rails-assets-jquery-placeholder (= 2.3.1)!
rails-assets-jquery-textchange (= 0.2.3)!
rails-assets-jquery.are-you-sure (= 1.9.0)!
@@ -891,15 +888,17 @@ DEPENDENCIES
redcarpet (= 3.4.0)
redis (= 3.3.5)
responders (= 2.4.1)
+ rqrcode (= 0.10.1)
rspec-json_expectations (~> 2.1)
rspec-rails (= 3.8.2)
- rubocop (= 0.66.0)
+ rubocop (= 0.72.0)
+ rubocop-rails (= 2.1.0)
ruby-oembed (= 0.12.0)
rubyzip (= 1.2.2)
sass-rails (= 5.0.7)
- secure_headers (= 6.1.0)
+ secure_headers (= 6.1.1)
shoulda-matchers (= 4.0.1)
- sidekiq (= 5.2.5)
+ sidekiq (= 5.2.7)
sidekiq-cron (= 1.1.0)
simple_captcha2 (= 0.4.3)
simplecov (= 0.16.1)
@@ -916,11 +915,11 @@ DEPENDENCIES
twitter-text (= 3.0.0)
typhoeus (= 1.3.1)
uglifier (= 4.1.20)
- unicorn (= 5.5.0)
+ unicorn (= 5.5.1)
unicorn-worker-killer (= 0.4.4)
uuid (= 2.3.9)
- versionist (= 1.7.0)
- webmock (= 3.5.1)
+ versionist (= 2.0.0)
+ webmock (= 3.6.0)
will_paginate (= 3.1.7)
yajl-ruby (= 1.4.1)
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
index fc75a31f6..04515b804 100644
--- a/app/assets/config/manifest.js
+++ b/app/assets/config/manifest.js
@@ -2,7 +2,6 @@
//= link jquery3.js
//= link jquery_ujs.js
//= link main.js
-//= link jsxc.js
//= link bookmarklet.js
//= link mobile/bookmarklet.js
//= link mobile/mobile.js
diff --git a/app/assets/javascripts/app/pages/contacts.js b/app/assets/javascripts/app/pages/contacts.js
index 0035951c0..8c8d34654 100644
--- a/app/assets/javascripts/app/pages/contacts.js
+++ b/app/assets/javascripts/app/pages/contacts.js
@@ -5,14 +5,12 @@ app.pages.Contacts = Backbone.View.extend({
el: "#contacts_container",
events: {
- "click #chat_privilege_toggle" : "toggleChatPrivilege",
"click #change_aspect_name" : "showAspectNameForm",
"click .conversation_button": "showMessageModal",
"click .invitations-button": "showInvitationsModal"
},
initialize: function(opts) {
- this.chatToggle = $("#chat_privilege_toggle i");
this.stream = opts.stream;
this.stream.render();
$("#people-stream.contacts .header i").tooltip({"placement": "bottom"});
@@ -27,22 +25,6 @@ app.pages.Contacts = Backbone.View.extend({
this.setupAspectSorting();
},
- toggleChatPrivilege: function() {
- if (this.chatToggle.hasClass("enabled")) {
- this.chatToggle.tooltip("destroy")
- .removeClass("enabled")
- .removeAttr("data-original-title")
- .attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_not_enabled"))
- .tooltip({"placement": "bottom"});
- } else {
- this.chatToggle.tooltip("destroy")
- .addClass("enabled")
- .removeAttr("data-original-title")
- .attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_enabled"))
- .tooltip({"placement": "bottom"});
- }
- },
-
showAspectNameForm: function() {
$(".header > h3").hide();
var aspectName = $.trim($(".header h3 #aspect_name").text());
diff --git a/app/assets/javascripts/app/views/help_view.js b/app/assets/javascripts/app/views/help_view.js
index 24052f09f..619395b6e 100644
--- a/app/assets/javascripts/app/views/help_view.js
+++ b/app/assets/javascripts/app/views/help_view.js
@@ -9,8 +9,7 @@ app.views.Help = app.views.StaticContentView.extend({
"click .faq-link-sharing": "sharing",
"click .faq-link-posts-and-posting": "postsAndPosting",
"click .faq-link-tags": "tags",
- "click .faq-link-keyboard-shortcuts": "keyboardShortcuts",
- "click .faq-link-chat": "chat"
+ "click .faq-link-keyboard-shortcuts": "keyboardShortcuts"
},
initialize : function() {
@@ -39,31 +38,22 @@ app.views.Help = app.views.StaticContentView.extend({
}
};
- this.CHAT_SUBS = {
- add_contact_roster_a: {
- toggle_privilege: this.getChatIcons(),
- contacts_page: this.linkHtml(Routes.contacts(), Diaspora.I18n.t("chat.contacts_page"))
- }
- };
-
this.data = {
- title_header: Diaspora.I18n.t( 'title_header' ),
- title_getting_help: Diaspora.I18n.t( 'getting_help.title' ),
- title_account_and_data_management: Diaspora.I18n.t( 'account_and_data_management.title' ),
- title_aspects: Diaspora.I18n.t( 'aspects.title' ),
- title_mentions: Diaspora.I18n.t( 'mentions.title' ),
- title_pods: Diaspora.I18n.t( 'pods.title' ),
- title_posts_and_posting: Diaspora.I18n.t( 'posts_and_posting.title' ),
- title_private_posts: Diaspora.I18n.t( 'private_posts.title' ),
- title_public_posts: Diaspora.I18n.t( 'public_posts.title' ),
- title_resharing_posts: Diaspora.I18n.t( 'resharing_posts.title' ),
+ title_header: Diaspora.I18n.t("title_header"),
+ title_getting_help: Diaspora.I18n.t("getting_help.title"),
+ title_account_and_data_management: Diaspora.I18n.t("account_and_data_management.title"),
+ title_aspects: Diaspora.I18n.t("aspects.title"),
+ title_mentions: Diaspora.I18n.t("mentions.title"),
+ title_pods: Diaspora.I18n.t("pods.title"),
+ title_posts_and_posting: Diaspora.I18n.t("posts_and_posting.title"),
+ title_private_posts: Diaspora.I18n.t("private_posts.title"),
+ title_public_posts: Diaspora.I18n.t("public_posts.title"),
+ title_resharing_posts: Diaspora.I18n.t("resharing_posts.title"),
title_profile: Diaspora.I18n.t("profile.title"),
- title_sharing: Diaspora.I18n.t( 'sharing.title' ),
- title_tags: Diaspora.I18n.t( 'tags.title' ),
- title_keyboard_shortcuts: Diaspora.I18n.t( 'keyboard_shortcuts.title' ),
- title_miscellaneous: Diaspora.I18n.t( 'miscellaneous.title' ),
- title_chat: Diaspora.I18n.t( 'chat.title' ),
- chat_enabled: this.chatEnabled()
+ title_sharing: Diaspora.I18n.t("sharing.title"),
+ title_tags: Diaspora.I18n.t("tags.title"),
+ title_keyboard_shortcuts: Diaspora.I18n.t("keyboard_shortcuts.title"),
+ title_miscellaneous: Diaspora.I18n.t("miscellaneous.title")
};
return this;
@@ -199,27 +189,8 @@ app.views.Help = app.views.StaticContentView.extend({
e.preventDefault();
},
- chat: function(e){
- this.renderStaticSection("chat", "faq_chat", this.CHAT_SUBS);
- this.menuClicked(e);
-
- e.preventDefault();
- },
-
linkHtml: function(url, text) {
return "<a href=\"" + url + "\" target=\"_blank\">" + text + "</a>";
- },
-
- chatEnabled: function(){
- return gon.appConfig.chat.enabled;
- },
-
- getChatIcons: function(){
- return "<div class=\"help-chat-icons\">" +
- " <i class=\"entypo-lock-open\"></i>" +
- " <i class=\"entypo-chat\"></i>" +
- " <i class=\"entypo-trash\"></i>" +
- "</div>";
}
});
// @license-end
diff --git a/app/assets/javascripts/jsxc.js b/app/assets/javascripts/jsxc.js
deleted file mode 100644
index 66ed5d622..000000000
--- a/app/assets/javascripts/jsxc.js
+++ /dev/null
@@ -1,50 +0,0 @@
-//= require emojione
-//= require favico.js/favico
-
-//= require jquery.ui/ui/resizable
-//= require jquery.ui/ui/draggable
-//= require jquery.slimscroll/jquery.slimscroll
-//= require jquery-colorbox
-//= require jquery-fullscreen-plugin
-
-//= require diaspora_jsxc
-
-// initialize jsxc xmpp client
-$(document).ready(function() {
- if (app.currentUser.authenticated()) {
- $.post("/user/auth_token", null, function(data) {
- if (jsxc && data['token']) {
- var jid = app.currentUser.get('diaspora_id');
- jsxc.init({
- root: '/assets/diaspora_jsxc',
- rosterAppend: 'body',
- otr: {
- debug: true,
- SEND_WHITESPACE_TAG: true,
- WHITESPACE_START_AKE: true
- },
- onlineHelp: "/help/chat",
- priority: {
- online: 1,
- chat: 1
- },
- displayRosterMinimized: function() {
- return false;
- },
- xmpp: {
- url: $('script#jsxc').data('endpoint'),
- username: jid.replace(/@.*?$/g, ''),
- domain: jid.replace(/^.*?@/g, ''),
- jid: jid,
- password: data.token,
- resource: 'diaspora-jsxc',
- overwrite: true,
- onlogin: true
- }
- });
- } else {
- console.error('No token found! Authenticated!?');
- }
- }, 'json');
- }
-});
diff --git a/app/assets/stylesheets/_application.scss b/app/assets/stylesheets/_application.scss
index 2eb0c4810..ae8ca9c06 100644
--- a/app/assets/stylesheets/_application.scss
+++ b/app/assets/stylesheets/_application.scss
@@ -84,8 +84,6 @@
@import 'stream';
@import 'stream_element';
@import 'comments';
-@import 'diaspora_jsxc';
-@import 'chat';
@import 'markdown-content';
@import 'oembed';
@import 'media-embed';
diff --git a/app/assets/stylesheets/base.scss b/app/assets/stylesheets/base.scss
index 3de954947..a4c3a5d96 100644
--- a/app/assets/stylesheets/base.scss
+++ b/app/assets/stylesheets/base.scss
@@ -10,14 +10,15 @@ body {
.page-contacts,
.page-conversations,
.page-notifications,
-.page-people.action-show,
.page-people.action-contacts,
+.page-people.action-show,
.page-photos,
.page-posts,
.page-profiles.action-edit,
.page-services.action-index,
.page-streams,
.page-tags,
+.page-two_factor_authentications,
.page-user_applications,
.page-users.action-edit,
.page-users.action-update,
diff --git a/app/assets/stylesheets/chat.scss b/app/assets/stylesheets/chat.scss
deleted file mode 100644
index 8adb9dd52..000000000
--- a/app/assets/stylesheets/chat.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-body > .container-fluid.chat-roster-shown {
- padding-right: 224px;
- #back-to-top { right: 244px; }
-}
-body > .container-fluid.chat-roster-hidden {
- #back-to-top { right: 54px; }
-}
-
-// This element is instanciated by JSXC. Does not have to follow naming conventions
-// scss-lint:disable IdSelector, SelectorFormat
-#jsxc_roster {
- top: $navbar-height;
-}
-// scss-lint:enable IdSelector, SelectorFormat
diff --git a/app/assets/stylesheets/contacts.scss b/app/assets/stylesheets/contacts.scss
index 8a35dbe48..2773f92d3 100644
--- a/app/assets/stylesheets/contacts.scss
+++ b/app/assets/stylesheets/contacts.scss
@@ -37,9 +37,6 @@
text-decoration: none;
margin-right: 25px;
}
- #chat_privilege_toggle > .enabled {
- color: $text-color-active;
- }
.contacts-header-icon {
font-size: 24.5px;
line-height: 40px;
diff --git a/app/assets/stylesheets/forms.scss b/app/assets/stylesheets/forms.scss
index 2f0717bba..27be8a013 100644
--- a/app/assets/stylesheets/forms.scss
+++ b/app/assets/stylesheets/forms.scss
@@ -93,5 +93,10 @@ textarea {
}
::placeholder { text-transform: uppercase; }
+
+ p {
+ margin-top: .5rem;
+ text-align: center;
+ }
}
}
diff --git a/app/assets/stylesheets/help.scss b/app/assets/stylesheets/help.scss
index c19e09439..f6075d679 100644
--- a/app/assets/stylesheets/help.scss
+++ b/app/assets/stylesheets/help.scss
@@ -91,18 +91,6 @@ ul#help_nav {
border-radius: 0px 0px 4px 4px;
background-color: white;
padding: 10px 20px;
-
- div.help-chat-icons{
- text-align: center;
- font-size: 50px;
- line-height: 70px;
-
- [class^="entypo-"], [class*="entypo-"] {
- color: $text-color-pale;
-
- &.entypo-chat { color: $text-color-active; }
- }
- }
}
}
}
diff --git a/app/assets/stylesheets/home.scss b/app/assets/stylesheets/home.scss
index 1dd6555ad..147f4386a 100644
--- a/app/assets/stylesheets/home.scss
+++ b/app/assets/stylesheets/home.scss
@@ -42,6 +42,14 @@
padding: 15px;
}
+ .part-of-diaspora {
+ font-style: italic;
+
+ a {
+ color: $white;
+ }
+ }
+
.login-form {
fieldset { background: none; }
diff --git a/app/assets/stylesheets/login.scss b/app/assets/stylesheets/login.scss
index b0336a8e0..bdb62a343 100644
--- a/app/assets/stylesheets/login.scss
+++ b/app/assets/stylesheets/login.scss
@@ -1,4 +1,5 @@
.page-sessions.action-new,
+.page-sessions.action-create,
.page-passwords.action-new,
.page-passwords.action-edit {
padding-top: 25px;
diff --git a/app/assets/stylesheets/markdown-content.scss b/app/assets/stylesheets/markdown-content.scss
index 6b092dbdb..c5813de21 100644
--- a/app/assets/stylesheets/markdown-content.scss
+++ b/app/assets/stylesheets/markdown-content.scss
@@ -16,6 +16,30 @@
}
}
+ h1 {
+ font-size: 2.7rem;
+ }
+
+ h2 {
+ font-size: 2.3rem;
+ }
+
+ h3 {
+ font-size: 2rem;
+ }
+
+ h4 {
+ font-size: 1.8rem;
+ }
+
+ h5 {
+ font-size: 1.6rem;
+ }
+
+ h6 {
+ font-size: 1.4rem;
+ }
+
.img-responsive {
display: inline;
}
diff --git a/app/assets/stylesheets/registration.scss b/app/assets/stylesheets/registration.scss
index 123161d6a..6fd755464 100644
--- a/app/assets/stylesheets/registration.scss
+++ b/app/assets/stylesheets/registration.scss
@@ -1,5 +1,4 @@
-.page-registrations.action-new,
-.page-registrations.action-create {
+.page-registrations {
.ball {
background: image-url('branding/ball.png') no-repeat;
background-size: contain;
@@ -12,19 +11,24 @@
height: 633px;
}
+ @media (max-width: $screen-xs-max) {
+ .v-center {
+ height: auto;
+ }
+ }
+
.content {
display: table-cell;
vertical-align: middle;
- h2 {
+ h1 {
font-size: 35px;
- margin: 12px;
- text-align: center;
+ margin: 12px 0;
}
}
form {
- max-width: 400px;
+ max-width: 500px;
}
.captcha-img {
@@ -34,16 +38,13 @@
width: 120px;
}
- .captcha-input {
+ .form-control.captcha-input {
border-bottom: 1px solid $input-border;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
box-sizing: border-box;
- font-size: 16px;
- height: 40px;
line-height: $line-height-base;
- padding: 10px 10px 10px 130px;
- width: 100%;
+ padding-left: 130px;
}
.terms > a {
diff --git a/app/assets/templates/faq_chat_tpl.jst.hbs b/app/assets/templates/faq_chat_tpl.jst.hbs
deleted file mode 100644
index fb3633345..000000000
--- a/app/assets/templates/faq_chat_tpl.jst.hbs
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class='question opened collapsible'>
- <a class='toggle' href='#'>
- <h4>{{ add_contact_roster_q }}</h4>
- </a>
- <div class='answer hideable'>{{{ add_contact_roster_a }}}</div>
-</div> \ No newline at end of file
diff --git a/app/assets/templates/help_tpl.jst.hbs b/app/assets/templates/help_tpl.jst.hbs
index 16dc93075..ee88469e7 100644
--- a/app/assets/templates/help_tpl.jst.hbs
+++ b/app/assets/templates/help_tpl.jst.hbs
@@ -64,12 +64,6 @@
<a href="#" class="section-unselected faq-link" data-section="miscellaneous" data-items="back_to_top photo_albums subscribe_feed diaspora_app">{{ title_miscellaneous }}</a>
<span class="section-selected">{{ title_miscellaneous }}</span>
</li>
- {{#if chat_enabled }}
- <li>
- <a href="#" class="section-unselected faq-link-chat" data-section="chat" data-items="add_contact_roster i_m_a_podmin">{{ title_chat }}</a>
- <span class="section-selected">{{ title_chat }}</span>
- </li>
- {{/if}}
</ul>
</div>
</div>
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 89411fb4e..c1a16ff94 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -27,6 +27,7 @@ class ApplicationController < ActionController::Base
before_action :gon_set_current_user
before_action :gon_set_appconfig
before_action :gon_set_preloads
+ before_action :configure_permitted_parameters, if: :devise_controller?
inflection_method grammatical_gender: :gender
@@ -161,7 +162,6 @@ class ApplicationController < ActionController::Base
def gon_set_appconfig
gon.push(appConfig: {
- chat: {enabled: AppConfig.chat.enabled?},
settings: {podname: AppConfig.settings.pod_name},
map: {mapbox: {
enabled: AppConfig.map.mapbox.enabled?,
@@ -182,4 +182,10 @@ class ApplicationController < ActionController::Base
return unless gon.preloads.nil?
gon.preloads = {}
end
+
+ protected
+
+ def configure_permitted_parameters
+ devise_parameter_sanitizer.permit(:sign_in, keys: [:otp_attempt])
+ end
end
diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb
index b970f7596..f0ebe9373 100644
--- a/app/controllers/aspects_controller.rb
+++ b/app/controllers/aspects_controller.rb
@@ -29,21 +29,19 @@ class AspectsController < ApplicationController
end
def destroy
- @aspect = current_user.aspects.where(id: params[:id]).first
-
begin
- if current_user.auto_follow_back && @aspect.id == current_user.auto_follow_back_aspect.id
+ if current_user.auto_follow_back && aspect.id == current_user.auto_follow_back_aspect.id
current_user.update(auto_follow_back: false, auto_follow_back_aspect: nil)
- flash[:notice] = I18n.t "aspects.destroy.success_auto_follow_back", name: @aspect.name
+ flash[:notice] = I18n.t "aspects.destroy.success_auto_follow_back", name: aspect.name
else
- flash[:notice] = I18n.t "aspects.destroy.success", name: @aspect.name
+ flash[:notice] = I18n.t "aspects.destroy.success", name: aspect.name
end
- @aspect.destroy
+ aspect.destroy
rescue ActiveRecord::StatementInvalid => e
- flash[:error] = I18n.t "aspects.destroy.failure", name: @aspect.name
+ flash[:error] = I18n.t "aspects.destroy.failure", name: aspect.name
end
- if request.referer.include?('contacts')
+ if request.referer.include?("contacts")
redirect_to contacts_path
else
redirect_to aspects_path
@@ -51,41 +49,35 @@ class AspectsController < ApplicationController
end
def show
- if @aspect = current_user.aspects.where(:id => params[:id]).first
- redirect_to aspects_path('a_ids[]' => @aspect.id)
+ if aspect
+ redirect_to aspects_path("a_ids[]" => aspect.id)
else
redirect_to aspects_path
end
end
def update
- @aspect = current_user.aspects.where(:id => params[:id]).first
-
- if @aspect.update_attributes!(aspect_params)
- flash[:notice] = I18n.t 'aspects.update.success', :name => @aspect.name
+ if aspect.update!(aspect_params)
+ flash[:notice] = I18n.t "aspects.update.success", name: aspect.name
else
- flash[:error] = I18n.t 'aspects.update.failure', :name => @aspect.name
+ flash[:error] = I18n.t "aspects.update.failure", name: aspect.name
end
- render :json => { :id => @aspect.id, :name => @aspect.name }
+ render json: {id: aspect.id, name: aspect.name}
end
def update_order
params[:ordered_aspect_ids].each_with_index do |id, i|
- current_user.aspects.find(id).update_attributes(order_id: i)
+ current_user.aspects.find(id).update(order_id: i)
end
head :no_content
end
- def toggle_chat_privilege
- @aspect = current_user.aspects.where(:id => params[:aspect_id]).first
+ private
- @aspect.chat_enabled = !@aspect.chat_enabled
- @aspect.save
- head :no_content
+ def aspect
+ @aspect ||= current_user.aspects.where(id: params[:id]).first
end
- private
-
def connect_person_to_aspect(aspecting_person_id)
@person = Person.find(aspecting_person_id)
if @contact = current_user.contact_for(@person)
@@ -97,6 +89,6 @@ class AspectsController < ApplicationController
end
def aspect_params
- params.require(:aspect).permit(:name, :chat_enabled, :order_id)
+ params.require(:aspect).permit(:name, :order_id)
end
end
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index 1224160fd..7ba743756 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -5,9 +5,9 @@
# the COPYRIGHT file.
class RegistrationsController < Devise::RegistrationsController
- before_action :check_registrations_open_or_valid_invite!
+ before_action :check_registrations_open_or_valid_invite!, except: :registrations_closed
- layout -> { request.format == :mobile ? "application" : "with_header" }
+ layout -> { request.format == :mobile ? "application" : "with_header_with_footer" }
def create
@user = User.build(user_params)
@@ -28,13 +28,17 @@ class RegistrationsController < Devise::RegistrationsController
end
end
+ def registrations_closed
+ render "registrations/registrations_closed"
+ end
+
private
def check_registrations_open_or_valid_invite!
return true if AppConfig.settings.enable_registrations? || invite.try(:can_be_used?)
- flash[:error] = params[:invite] ? t("registrations.invalid_invite") : t("registrations.closed")
- redirect_to new_user_session_path
+ flash[:error] = t("registrations.invalid_invite") if params[:invite]
+ redirect_to registrations_closed_path
end
def invite
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index 0f3bd1c46..e679c85a4 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -5,10 +5,54 @@
# the COPYRIGHT file.
class SessionsController < Devise::SessionsController
- after_action :reset_authentication_token, only: [:create]
- before_action :reset_authentication_token, only: [:destroy]
+ # rubocop:disable Rails/LexicallyScopedActionFilter
+ before_action :authenticate_with_2fa, only: :create
+ after_action :reset_authentication_token, only: :create
+ before_action :reset_authentication_token, only: :destroy
+ # rubocop:enable Rails/LexicallyScopedActionFilter
+
+ def find_user
+ return User.find_for_authentication(username: params[:user][:username]) if params[:user][:username]
+
+ User.find(session[:otp_user_id]) if session[:otp_user_id]
+ end
+
+ def authenticate_with_2fa
+ self.resource = find_user
+
+ return true unless resource&.otp_required_for_login?
+
+ if params[:user][:otp_attempt].present? && session[:otp_user_id]
+ authenticate_with_two_factor_via_otp(resource)
+ else
+ strategy = Warden::Strategies[:database_authenticatable].new(warden.env, :user)
+ prompt_for_two_factor(strategy.user) if strategy.valid? && strategy._run!.successful?
+ end
+ end
+
+ def valid_otp_attempt?(user)
+ user.validate_and_consume_otp!(params[:user][:otp_attempt]) ||
+ user.invalidate_otp_backup_code!(params[:user][:otp_attempt])
+ rescue OpenSSL::Cipher::CipherError => _error
+ false
+ end
+
+ def authenticate_with_two_factor_via_otp(user)
+ if valid_otp_attempt?(user)
+ session.delete(:otp_user_id)
+ sign_in(user)
+ else
+ flash.now[:alert] = "Invalid token"
+ prompt_for_two_factor(user)
+ end
+ end
+
+ def prompt_for_two_factor(user)
+ session[:otp_user_id] = user.id
+ render :two_factor
+ end
def reset_authentication_token
- current_user.reset_authentication_token! unless current_user.nil?
+ current_user&.reset_authentication_token!
end
end
diff --git a/app/controllers/two_factor_authentications_controller.rb b/app/controllers/two_factor_authentications_controller.rb
new file mode 100644
index 000000000..8dafbf3c4
--- /dev/null
+++ b/app/controllers/two_factor_authentications_controller.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+class TwoFactorAuthenticationsController < ApplicationController
+ before_action :authenticate_user!
+ before_action :verify_otp_required, only: [:create]
+
+ def show
+ @user = current_user
+ end
+
+ def create
+ current_user.otp_secret = User.generate_otp_secret(32)
+ current_user.save!
+ redirect_to confirm_two_factor_authentication_path
+ end
+
+ def confirm_2fa
+ redirect_to two_factor_authentication_path if current_user.otp_required_for_login?
+ end
+
+ def confirm_and_activate_2fa
+ if current_user.validate_and_consume_otp!(params[:user][:code])
+ current_user.otp_required_for_login = true
+ current_user.save!
+
+ flash[:notice] = t("two_factor_auth.flash.success_activation")
+ redirect_to recovery_codes_two_factor_authentication_path
+ else
+ flash[:alert] = t("two_factor_auth.flash.error_token")
+ redirect_to confirm_two_factor_authentication_path
+ end
+ end
+
+ def recovery_codes
+ @recovery_codes = current_user.generate_otp_backup_codes!
+ current_user.save!
+ end
+
+ def destroy
+ if current_user.valid_password?(params[:two_factor_authentication][:password])
+ current_user.otp_required_for_login = false
+ current_user.save!
+ flash[:notice] = t("two_factor_auth.flash.success_deactivation")
+ else
+ flash[:alert] = t("users.destroy.wrong_password")
+ end
+ redirect_to two_factor_authentication_path
+ end
+
+ private
+
+ def verify_otp_required
+ redirect_to two_factor_authentication_path if current_user.otp_required_for_login?
+ end
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 1f10ebfc2..726f46f2e 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -152,6 +152,8 @@ class UsersController < ApplicationController
:auto_follow_back_aspect_id,
:getting_started,
:post_default_public,
+ :otp_required_for_login,
+ :otp_secret,
email_preferences: UserPreference::VALID_EMAIL_TYPES.map(&:to_sym)
)
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 213d034b6..36cce9bce 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -72,4 +72,9 @@ module ApplicationHelper
buf << [nonced_javascript_tag("$.fx.off = true;")] if Rails.env.test?
buf.join("\n").html_safe
end
+
+ def qrcode_uri
+ label = current_user.username
+ current_user.otp_provisioning_uri(label, issuer: AppConfig.environment.url)
+ end
end
diff --git a/app/helpers/jsxc_helper.rb b/app/helpers/jsxc_helper.rb
deleted file mode 100644
index d94597d55..000000000
--- a/app/helpers/jsxc_helper.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-module JsxcHelper
- def get_bosh_endpoint
- proto = AppConfig.chat.server.bosh.proto
- port = AppConfig.chat.server.bosh.port
- bind = AppConfig.chat.server.bosh.bind
- host = AppConfig.pod_uri.host
-
- unless AppConfig.chat.server.bosh.proxy?
- return "#{proto}://#{host}:#{port}#{bind}"
- end
- AppConfig.url_to bind
- end
-end
diff --git a/app/models/open_graph_cache.rb b/app/models/open_graph_cache.rb
index dc297f25b..e23fe9c7b 100644
--- a/app/models/open_graph_cache.rb
+++ b/app/models/open_graph_cache.rb
@@ -33,7 +33,9 @@ class OpenGraphCache < ApplicationRecord
end
def fetch_and_save_opengraph_data!
- object = OpenGraphReader.fetch!(self.url)
+ uri = URI.parse(url.start_with?("http") ? url : "http://#{url}")
+ uri.normalize!
+ object = OpenGraphReader.fetch!(uri)
return unless object
diff --git a/app/models/photo.rb b/app/models/photo.rb
index 75d7f83a8..5552aefed 100644
--- a/app/models/photo.rb
+++ b/app/models/photo.rb
@@ -6,7 +6,6 @@
class Photo < ApplicationRecord
include Diaspora::Federated::Base
- include Diaspora::Commentable
include Diaspora::Shareable
# NOTE API V1 to be extracted
diff --git a/app/models/user.rb b/app/models/user.rb
index 069b0ac77..8ab4f9be6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -19,7 +19,14 @@ class User < ApplicationRecord
scope :halfyear_actives, ->(time = Time.now) { logged_in_since(time - 6.month) }
scope :active, -> { joins(:person).where(people: {closed_account: false}) }
- devise :database_authenticatable, :registerable,
+ attr_encrypted :otp_secret, if: false, prefix: "plain_"
+
+ devise :two_factor_authenticatable,
+ :two_factor_backupable,
+ otp_backup_code_length: 16,
+ otp_number_of_backup_codes: 10
+
+ devise :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:lockable, :lastseenable, :lock_strategy => :none, :unlock_strategy => :none
@@ -42,6 +49,7 @@ class User < ApplicationRecord
validate :no_person_with_same_username
serialize :hidden_shareables, Hash
+ serialize :otp_backup_codes, Array
has_one :person, inverse_of: :owner, foreign_key: :owner_id
has_one :profile, through: :person
@@ -583,6 +591,10 @@ class User < ApplicationRecord
end
end
+ def remember_me
+ true
+ end
+
private
def clearable_fields
diff --git a/app/presenters/node_info_presenter.rb b/app/presenters/node_info_presenter.rb
index e0c2c579b..f2f1566eb 100644
--- a/app/presenters/node_info_presenter.rb
+++ b/app/presenters/node_info_presenter.rb
@@ -23,7 +23,6 @@ class NodeInfoPresenter
doc.services.outbound = available_services
doc.open_registrations = open_registrations?
doc.metadata["nodeName"] = name
- doc.metadata["xmppChat"] = chat_enabled?
doc.metadata["camo"] = camo_config
doc.metadata["adminAccount"] = admin_account
end
@@ -70,10 +69,6 @@ class NodeInfoPresenter
AppConfig.settings.enable_registrations?
end
- def chat_enabled?
- AppConfig.chat.enabled?
- end
-
def camo_config
{
markdown: AppConfig.privacy.camo.proxy_markdown_images?,
diff --git a/app/serializers/export/aspect_serializer.rb b/app/serializers/export/aspect_serializer.rb
index 938939ad9..478bef3fa 100644
--- a/app/serializers/export/aspect_serializer.rb
+++ b/app/serializers/export/aspect_serializer.rb
@@ -2,6 +2,6 @@
module Export
class AspectSerializer < ActiveModel::Serializer
- attributes :name, :chat_enabled
+ attributes :name
end
end
diff --git a/app/services/diaspora_link_service.rb b/app/services/diaspora_link_service.rb
index 1923aa01d..ca8ffea76 100644
--- a/app/services/diaspora_link_service.rb
+++ b/app/services/diaspora_link_service.rb
@@ -10,7 +10,11 @@ class DiasporaLinkService
end
def find_or_fetch_entity
- entity_finder.find || fetch_entity
+ if type && guid
+ entity_finder.find || fetch_entity
+ elsif author
+ find_or_fetch_person
+ end
end
private
@@ -28,6 +32,12 @@ class DiasporaLinkService
@entity_finder ||= Diaspora::EntityFinder.new(type, guid)
end
+ def find_or_fetch_person
+ Person.find_or_fetch_by_identifier(author)
+ rescue DiasporaFederation::Discovery::DiscoveryError
+ nil
+ end
+
def normalize
link.gsub!(%r{^web\+diaspora://}, "diaspora://") ||
link.gsub!(%r{^//}, "diaspora://") ||
@@ -38,8 +48,10 @@ class DiasporaLinkService
def parse
normalize
match = DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX.match(link)
- @author = match[1]
- @type = match[2]
- @guid = match[3]
+ if match
+ @author, @type, @guid = match.captures
+ else
+ @author = %r{^diaspora://(#{Validation::Rule::DiasporaId::DIASPORA_ID_REGEX})$}u.match(link)&.captures&.first
+ end
end
end
diff --git a/app/views/contacts/_header.html.haml b/app/views/contacts/_header.html.haml
index 4348e0dea..7acc2e93a 100644
--- a/app/views/contacts/_header.html.haml
+++ b/app/views/contacts/_header.html.haml
@@ -4,13 +4,6 @@
- if @aspect.contacts.size > 0 && @aspect.contacts.size < 20
= start_a_conversation_link(@aspect, @aspect.contacts.size)
- -if AppConfig.chat.enabled?
- = link_to aspect_toggle_chat_privilege_path(@aspect), id: "chat_privilege_toggle", class: "contacts_button", method: :put, remote: true do
- -if @aspect.chat_enabled?
- %i.entypo-chat.enabled.contacts-header-icon{title: t("javascripts.contacts.aspect_chat_is_enabled")}
- -else
- %i.entypo-chat.contacts-header-icon{title: t("javascripts.contacts.aspect_chat_is_not_enabled")}
-
= link_to @aspect, method: "delete", data: { confirm: t("aspects.edit.confirm_remove_aspect") }, class: "delete contacts_button", id: "delete_aspect" do
%i.entypo-trash.contacts-header-icon{title: t("delete")}
.pull-right.contact-list-search
diff --git a/app/views/devise/passwords/edit.haml b/app/views/devise/passwords/edit.haml
index 126ae62f4..28e2126ea 100644
--- a/app/views/devise/passwords/edit.haml
+++ b/app/views/devise/passwords/edit.haml
@@ -37,7 +37,6 @@
autocorrect: "off",
aria: {labelledby: "passwordConfirmationLabel"}
- = hidden_field(:user, :remember_me, value: 1)
= f.submit t("devise.passwords.edit.change_password"), class: "btn btn-block btn-primary"
.text-center
diff --git a/app/views/devise/passwords/new.haml b/app/views/devise/passwords/new.haml
index 9a5683b63..c62fe9aaa 100644
--- a/app/views/devise/passwords/new.haml
+++ b/app/views/devise/passwords/new.haml
@@ -9,10 +9,6 @@
= AppConfig.settings.pod_name
= form_for(resource, as: resource_name, url: password_path(resource_name), html: {class: "form-horizontal block-form"}, autocomplete: 'off') do |f|
- - unless resource.errors.empty?
- %legend
- %i
- = t('devise.passwords.new.no_account') # this is an error message and should not be displayed as a legend
%fieldset
%label#emailLabel.sr-only{for: "user_email"}
= t("devise.passwords.new.email")
diff --git a/app/views/home/default.haml b/app/views/home/default.haml
index 2a7a789c7..bf948f68a 100644
--- a/app/views/home/default.haml
+++ b/app/views/home/default.haml
@@ -4,6 +4,10 @@
.row
.col-md-8.text-center
%h1= t("home.default.headline", pod_name: pod_name)
+ - if pod_name != "diaspora*"
+ %h2.part-of-diaspora
+ != t("home.default.part_of_diaspora",
+ diaspora_site_link: link_to(t("home.default.diaspora_site_link"), "https://diasporafoundation.org/"))
%h2= t("home.default.byline")
.col-md-4.login-form
= render partial: "sessions/form", locals: {mobile: false, resource: User.new, resource_name: :user}
diff --git a/app/views/layouts/_header_not_connected.haml b/app/views/layouts/_header_not_connected.haml
index c8760e3cb..4ed08291c 100644
--- a/app/views/layouts/_header_not_connected.haml
+++ b/app/views/layouts/_header_not_connected.haml
@@ -1,5 +1,5 @@
%ul.nav.navbar-nav.navbar-right
- - if AppConfig.settings.enable_registrations? && !current_page?(controller: "/registrations", action: :new)
+ - unless current_page?(controller: "/registrations", action: :new)
%li= link_to t("devise.shared.links.sign_up"), new_user_registration_path, class: "login"
- unless current_page?(controller: "/sessions", action: :new)
%li= link_to t("devise.shared.links.sign_in"), new_user_session_path, class: "login"
diff --git a/app/views/registrations/_form.haml b/app/views/registrations/_form.haml
index 56bbb04fb..9cd6ce0f7 100644
--- a/app/views/registrations/_form.haml
+++ b/app/views/registrations/_form.haml
@@ -4,7 +4,7 @@
- if mobile
%legend
= image_tag("branding/logos/header-logo2x.png", height: 40, width: 40)
- = t("aspects.aspect_stream.make_something")
+ = AppConfig.settings.pod_name
- if mobile
= f.label :email, t("registrations.new.email"), class: "control-label", id: "emailLabel"
diff --git a/app/views/registrations/_registrations_closed.haml b/app/views/registrations/_registrations_closed.haml
new file mode 100644
index 000000000..c1b9b3a8f
--- /dev/null
+++ b/app/views/registrations/_registrations_closed.haml
@@ -0,0 +1,11 @@
+%h2
+ = t("devise.shared.links.sign_up_closed")
+
+!= t("registrations.closed.closed_pod",
+ wiki: link_to(t("registrations.closed.another_pod"), "https://diasporafoundation.org/getting_started/sign_up"))
+
+!= t("registrations.closed.find_pods",
+ poduptime: link_to("Poduptime", "https://podupti.me/"))
+
+!= t("registrations.closed.other_questions",
+ wiki: link_to("Wiki", "https://wiki.diasporafoundation.org/Choosing_a_pod"))
diff --git a/app/views/registrations/new.haml b/app/views/registrations/new.haml
index 96f9c2733..bf034f9da 100644
--- a/app/views/registrations/new.haml
+++ b/app/views/registrations/new.haml
@@ -1,12 +1,11 @@
#registration
.container
.row
- .col-md-10.offset1
- .col-md-7.hidden-phone
- %h1.ball
- .col-md-5.v-center
- .content.text-center
- %h2#pod-name
- = AppConfig.settings.pod_name
+ .col-sm-6.hidden-xs
+ .ball
+ .col-sm-6.col-xs-12.v-center
+ .content.text-center
+ %h1#pod-name
+ = AppConfig.settings.pod_name
- = render partial: "form", locals: {mobile: false}
+ = render partial: "form", locals: {mobile: false}
diff --git a/app/views/registrations/registrations_closed.haml b/app/views/registrations/registrations_closed.haml
new file mode 100644
index 000000000..c84db60f6
--- /dev/null
+++ b/app/views/registrations/registrations_closed.haml
@@ -0,0 +1,8 @@
+#registration
+ .container
+ .row
+ .col-sm-6.hidden-xs
+ .ball
+ .col-sm-6.col-xs-12.v-center
+ .content
+ = render partial: "registrations_closed"
diff --git a/app/views/registrations/registrations_closed.mobile.haml b/app/views/registrations/registrations_closed.mobile.haml
new file mode 100644
index 000000000..255620aca
--- /dev/null
+++ b/app/views/registrations/registrations_closed.mobile.haml
@@ -0,0 +1,10 @@
+
+.stream#main-stream
+ - flash.each do |name, msg|
+ .expose#flash-container
+ .flash-message{class: "message alert alert-#{flash_class name}", role: "alert"}
+ = msg
+
+ .login-form
+ .login-container
+ = render partial: "registrations_closed"
diff --git a/app/views/sessions/_form.haml b/app/views/sessions/_form.haml
index ba56cbf04..a4e608386 100644
--- a/app/views/sessions/_form.haml
+++ b/app/views/sessions/_form.haml
@@ -40,5 +40,4 @@
autocorrect: "off",
aria: {labelledby: "passwordLabel"}
- = f.hidden_field :remember_me, value: 1
= f.submit t("devise.sessions.new.sign_in"), class: "btn btn-large btn-block btn-primary"
diff --git a/app/views/sessions/two_factor.html.haml b/app/views/sessions/two_factor.html.haml
new file mode 100644
index 000000000..76c29bbd4
--- /dev/null
+++ b/app/views/sessions/two_factor.html.haml
@@ -0,0 +1,31 @@
+- content_for :page_title do
+ = AppConfig.settings.pod_name + " - " + t("two_factor_auth.title")
+
+.container#twofa
+ .text-center
+ .logos-asterisk
+ %h1
+ = t("two_factor_auth.title")
+
+
+ = form_for resource, as: resource_name,
+ url: session_path(resource_name),
+ html: {class: "block-form"},
+ method: :post do |f|
+ %fieldset
+ %label.sr-only#otp-label{for: "otp_attempt"}
+ = t("two_factor_auth.input_token.label")
+ %i.entypo-lock
+ = f.text_field :otp_attempt,
+ type: :text,
+ placeholder: t("two_factor_auth.input_token.placeholder"),
+ required: true,
+ autofocus: true,
+ class: "input-block-level form-control"
+ %p= t "two_factor_auth.recovery.reminder"
+
+
+ .actions
+ = f.button t("devise.sessions.new.sign_in"),
+ type: :submit,
+ class: "btn btn-large btn-block btn-primary"
diff --git a/app/views/shared/_settings_nav.haml b/app/views/shared/_settings_nav.haml
index e54f3e424..c5e5a3d6c 100644
--- a/app/views/shared/_settings_nav.haml
+++ b/app/views/shared/_settings_nav.haml
@@ -9,6 +9,8 @@
class: request.path == edit_user_path ? "list-group-item active" : "list-group-item"
= link_to t("privacy"), privacy_settings_path,
class: current_page?(privacy_settings_path) ? "list-group-item active" : "list-group-item"
+ = link_to t("two_factor_auth.title"), two_factor_authentication_path,
+ class: current_page?(two_factor_authentication_path) ? "list-group-item active" : "list-group-item"
= link_to t("_services"), services_path,
class: current_page?(services_path) ? "list-group-item active" : "list-group-item"
= link_to t("_applications"), api_openid_connect_user_applications_path,
diff --git a/app/views/streams/main_stream.html.haml b/app/views/streams/main_stream.html.haml
index abc6f1f36..f69edd2d3 100644
--- a/app/views/streams/main_stream.html.haml
+++ b/app/views/streams/main_stream.html.haml
@@ -2,11 +2,6 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
-- content_for :head do
- - if AppConfig.chat.enabled?
- = javascript_include_tag :jsxc, id: 'jsxc',
- data: { endpoint: get_bosh_endpoint }
-
- if current_user&.getting_started?
#welcome-to-diaspora
.container-fluid
diff --git a/app/views/two_factor_authentications/_activate.haml b/app/views/two_factor_authentications/_activate.haml
new file mode 100644
index 000000000..ef6b0a7ff
--- /dev/null
+++ b/app/views/two_factor_authentications/_activate.haml
@@ -0,0 +1,11 @@
+.col-md-12
+ .row
+ .col-md-12
+ %h3= t("two_factor_auth.title")
+ %p= t("two_factor_auth.explanation")
+
+ .well= t("two_factor_auth.deactivated.status")
+ = form_for "user", url: two_factor_authentication_path, html: {method: :post} do |f|
+ = f.hidden_field :otp_required_for_login, value: true
+ .clearfix.form-group= f.submit t("two_factor_auth.deactivated.change_button"),
+ class: "btn btn-primary pull-right"
diff --git a/app/views/two_factor_authentications/_confirm.haml b/app/views/two_factor_authentications/_confirm.haml
new file mode 100644
index 000000000..b2ec2af90
--- /dev/null
+++ b/app/views/two_factor_authentications/_confirm.haml
@@ -0,0 +1,33 @@
+.col-md-12
+ .row
+ .col-md-12
+ %h3= t("two_factor_auth.confirm.title")
+ %p= t("two_factor_auth.confirm.status")
+ .small-horizontal-spacer
+ %h4= t("two_factor_auth.confirm.scan_title")
+ .row
+ .col-md-6
+ %p= t("two_factor_auth.confirm.scan_explanation")
+ .two-factor-qr
+ != RQRCode::QRCode.new(qrcode_uri).as_svg(offset: 10, fill: "ffffff", module_size: 5)
+
+ .col-md-6
+ %p= t("two_factor_auth.confirm.manual_explanation")
+ %p!= t("two_factor_auth.confirm.manual_explanation_cont")
+ %pre.well= current_user.otp_secret.scan(/.{4}/).join(" ")
+
+ .row
+ .col-md-12
+ .small-horizontal-spacer
+ %h4= t("two_factor_auth.confirm.input_title")
+ = t("two_factor_auth.confirm.input_explanation")
+ = form_for "user", url: confirm_two_factor_authentication_path,
+ html: {method: :post, class: "form-horizontal"} do |f|
+ .form-group
+ = f.label :code, t("two_factor_auth.input_token.label"), class: "control-label col-sm-6"
+ .col-sm-6
+ = f.text_field :code, placeholder: t("two_factor_auth.input_token.placeholder"), class: "form-control"
+ .form-group
+ .col-sm-12
+ = link_to t("cancel"), two_factor_authentication_path, class: "btn btn-default"
+ = f.submit t("two_factor_auth.confirm.activate_button"), class: "btn btn-primary pull-right"
diff --git a/app/views/two_factor_authentications/_deactivate.haml b/app/views/two_factor_authentications/_deactivate.haml
new file mode 100644
index 000000000..501f2cb2c
--- /dev/null
+++ b/app/views/two_factor_authentications/_deactivate.haml
@@ -0,0 +1,27 @@
+.col-md-12
+ .row
+ .col-md-12
+ %h3= t("two_factor_auth.title")
+ %p= t("two_factor_auth.explanation")
+ .well= t("two_factor_auth.activated.status")
+
+ %hr
+
+ %h4= t("two_factor_auth.activated.change_button")
+ %p= t("two_factor_auth.activated.change_label")
+
+ = form_for "two_factor_authentication", url: two_factor_authentication_path,
+ html: {method: :delete, class: "form-horizontal"} do |f|
+ .form-group
+ = f.label :password, t("users.edit.current_password"), class: "control-label col-sm-6"
+ .col-sm-6
+ = f.password_field :password, class: "form-control"
+ .clearfix= f.submit t("two_factor_auth.activated.change_button"), class: "btn btn-primary pull-right"
+
+ %hr
+
+ %h4= t("two_factor_auth.recovery.title")
+ %p= t("two_factor_auth.recovery.explanation_short")
+ %p= t("two_factor_auth.recovery.invalidation_notice")
+ %p= link_to t("two_factor_auth.recovery.button"),
+ recovery_codes_two_factor_authentication_path, class: "btn btn-default"
diff --git a/app/views/two_factor_authentications/_recovery.haml b/app/views/two_factor_authentications/_recovery.haml
new file mode 100644
index 000000000..3f192e7d3
--- /dev/null
+++ b/app/views/two_factor_authentications/_recovery.haml
@@ -0,0 +1,18 @@
+.col-md-12
+ .row
+ .col-md-12
+ %h3= t("two_factor_auth.title")
+ .well= t("two_factor_auth.activated.status")
+
+ %hr
+
+ %h3= t("two_factor_auth.recovery.title")
+ %p= t("two_factor_auth.recovery.explanation")
+
+ %ol.recovery-codes
+ - @recovery_codes.each do |code|
+ %li<
+ %samp= code
+
+ .form-group.submit_block.clearfix
+ = link_to t("ok"), two_factor_authentication_path, class: "btn btn-primary pull-right"
diff --git a/app/views/two_factor_authentications/_token_form.haml b/app/views/two_factor_authentications/_token_form.haml
new file mode 100644
index 000000000..616cd7a67
--- /dev/null
+++ b/app/views/two_factor_authentications/_token_form.haml
@@ -0,0 +1,4 @@
+.form-group
+ = f.label :code, t("two_factor_auth.input_token.label"), class: "control-label col-sm-6"
+ .col-sm-6
+ = f.text_field :code, placeholder: t("two_factor_auth.input_token.placeholder"), class: "form-control"
diff --git a/app/views/two_factor_authentications/confirm_2fa.html.haml b/app/views/two_factor_authentications/confirm_2fa.html.haml
new file mode 100644
index 000000000..36a8dcb08
--- /dev/null
+++ b/app/views/two_factor_authentications/confirm_2fa.html.haml
@@ -0,0 +1,11 @@
+- content_for :page_title do
+ = t("two_factor_auth.confirm.title")
+
+.container-fluid
+ .row
+ .col-md-3
+ .sidebar
+ = render "shared/settings_nav"
+ .col-md-9
+ .framed-content.clearfix
+ = render "confirm"
diff --git a/app/views/two_factor_authentications/recovery_codes.html.haml b/app/views/two_factor_authentications/recovery_codes.html.haml
new file mode 100644
index 000000000..98b4490d5
--- /dev/null
+++ b/app/views/two_factor_authentications/recovery_codes.html.haml
@@ -0,0 +1,12 @@
+- content_for :page_title do
+ = t("two_factor_auth.title")
+ = t("two_factor_auth.recovery.title")
+
+.container-fluid
+ .row
+ .col-md-3
+ .sidebar
+ = render "shared/settings_nav"
+ .col-md-9
+ .framed-content.clearfix
+ = render "recovery"
diff --git a/app/views/two_factor_authentications/show.html.haml b/app/views/two_factor_authentications/show.html.haml
new file mode 100644
index 000000000..a68902ac9
--- /dev/null
+++ b/app/views/two_factor_authentications/show.html.haml
@@ -0,0 +1,15 @@
+- content_for :page_title do
+ = t("two_factor_auth.title")
+
+.container-fluid
+ .row
+ .col-md-3
+ .sidebar
+ = render "shared/settings_nav"
+ .col-md-9
+ .framed-content.clearfix
+
+ - if @user.otp_required_for_login
+ = render "deactivate"
+ - else
+ = render "activate"
diff --git a/app/workers/cleanup_pending_photos.rb b/app/workers/cleanup_pending_photos.rb
new file mode 100644
index 000000000..e7cabf54b
--- /dev/null
+++ b/app/workers/cleanup_pending_photos.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module Workers
+ class CleanupPendingPhotos < Base
+ sidekiq_options queue: :low
+
+ def perform
+ Photo.where(pending: true).where("created_at < ?", 1.day.ago).destroy_all
+ end
+ end
+end
diff --git a/config/certs/README b/config/certs/README
deleted file mode 100644
index 2e8573574..000000000
--- a/config/certs/README
+++ /dev/null
@@ -1,7 +0,0 @@
-If you want to encrypt your chat streams with prosody.
-Add to `config/certs` your server certificate and key.
-
-The domain name should be included in the file name e.g.:
-
-* example.com.crt
-* example.com.key
diff --git a/config/defaults.yml b/config/defaults.yml
index be7dc1dc1..619c43a0c 100644
--- a/config/defaults.yml
+++ b/config/defaults.yml
@@ -49,21 +49,6 @@ defaults:
unicorn_timeout: 90
embed_sidekiq_worker: false
sidekiq_workers: 1
- chat:
- enabled: false
- server:
- enabled: true
- certs: "config/certs"
- bosh:
- proxy: false
- proto: 'http'
- address: '0.0.0.0'
- port: 5280
- bind: '/http-bind'
- log:
- info: 'log/prosody.log'
- error: 'log/prosody.err'
- debug: false
map:
mapbox:
enabled: false
diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example
index 746f0685d..ef863f136 100644
--- a/config/diaspora.yml.example
+++ b/config/diaspora.yml.example
@@ -186,8 +186,8 @@ configuration: ## Section
#rails_environment: 'development'
## Write unicorn stderr and stdout log.
- #stderr_log: '/usr/local/app/diaspora/log/unicorn-stderr.log'
- #stdout_log: '/usr/local/app/diaspora/log/unicorn-stdout.log'
+ #stderr_log: 'log/unicorn-stderr.log'
+ #stdout_log: 'log/unicorn-stdout.log'
## Number of Unicorn worker processes (default=2).
## Increase this if you have many users.
@@ -208,68 +208,6 @@ configuration: ## Section
## increase environment.sidekiq.concurrency instead!
#sidekiq_workers: 1
- ## Diaspora has an internal XMPP web-client. If you want to enable the chat
- ## functionality or want to use a custom XMPP server, then you should edit
- ## the following configuration.
- chat: ## Section
-
- ## Enable the chat service and all its components.
- ##
- ## Please make sure that you followed the Installation-Instructions first:
- ## https://wiki.diasporafoundation.org/Integration/Chat#Installation.2FUpdate
- #enabled: true
-
- ## Custom XMPP server configuration goes here.
- server: ## Section
-
- ## Use the configuration bridge to prosody (default=true).
- ## In case you want to run your own server or want to configure
- ## prosody on your own, you should disable it.
- #enabled: false
-
- ## Set the directory in which to look for virtual hosts TLS certificates.
- #certs: 'config/certs'
-
- ## XEP-0124 BOSH requests
- ## The easiest way of avoiding certificate and mixed-content issues
- ## is to use a proxy, e.g.:
- ##
- ## Apache: https://wiki.diasporafoundation.org/Integration/Chat#Apache2
- ## Nginx: https://wiki.diasporafoundation.org/Integration/Chat#Nginx
- ##
- ## If you configured your proxy correctly,
- ## you should set the proxy option to 'true'
- bosh: ## Section
-
- ## If you'd like to use a proxy, you should set the proxy
- ## option to true, otherwise jsxc always tries to
- ## connect directly to the port specified below.
- #proxy: true
-
- ## Configure the protocol used to access the BOSH endpoint
- #proto: http
-
- ## Configure the address that prosody should listen on.
- #address: '0.0.0.0'
-
- ## Configure the BOSH port.
- #port: 5280
-
- ## Configure the bind endpoint.
- #bind: '/http-bind'
-
- ## Specify log behaviour here.
- log: ## Section
-
- ## Log file location.
- #info: 'log/prosody.log'
-
- ## Error log file location.
- #error: 'log/prosody.err'
-
- ## The debug level logs all XML sent and received by the server.
- #debug: false
-
## Displays the location of a post in a map. Per default we are using the map
## tiles of the Heidelberg University (http://giscience.uni-hd.de).
## You also have the possibility to use the map tiles of https://www.mapbox.com
diff --git a/config/eye.rb b/config/eye.rb
index a7d54e308..20dfe9c86 100644
--- a/config/eye.rb
+++ b/config/eye.rb
@@ -50,13 +50,4 @@ Eye.application("diaspora") do
end
end
end
-
- with_condition(AppConfig.chat.enabled? && AppConfig.chat.server.enabled?) do
- process :xmpp do
- start_command "bin/bundle exec rails runner Prosody.start"
- daemonize true
- pid_file "tmp/pids/xmpp.pid"
- stop_signals [:TERM, 10.seconds, :KILL]
- end
- end
end
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index bdd334b26..5cb23cc6d 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -92,7 +92,7 @@ Devise.setup do |config|
# It will change confirmation, password recovery and other workflows
# to behave the same regardless if the e-mail provided was right or wrong.
# Does not affect registerable.
- # config.paranoid = true
+ config.paranoid = true
# By default Devise will store the user in session. You can skip storage for
# particular strategies by setting this option.
@@ -270,4 +270,8 @@ Devise.setup do |config|
# When using omniauth, Devise cannot automatically set Omniauth path,
# so you need to do it manually. For the users scope, it would be:
# config.omniauth_path_prefix = '/my_engine/users/auth'
+
+ # if a user enables 2fa this would log them in without requiring them
+ # to enter a token
+ config.sign_in_after_reset_password = false
end
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index 2a915d470..791647716 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -4,3 +4,4 @@
# Configure sensitive parameters which will be filtered from the log file.
Rails.application.config.filter_parameters += %i[password message text bio]
+Rails.application.config.filter_parameters += [:otp_attempt]
diff --git a/config/initializers/prosody.rb b/config/initializers/prosody.rb
deleted file mode 100644
index df179e5c0..000000000
--- a/config/initializers/prosody.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-if AppConfig.chat.enabled? && AppConfig.chat.server.enabled?
- db = Rails.application.config
- .database_configuration[Rails.env]
-
- Prosody.update_configuration(
- bosh_port: AppConfig.chat.server.bosh.port, bosh_path: AppConfig.chat.server.bosh.bind,
- bosh_interface: AppConfig.chat.server.bosh.address,
-
- log_debug: (AppConfig.chat.server.log.debug? ? "debug" : "info"),
- log_info: "#{Dir.pwd}/#{AppConfig.chat.server.log.info}",
- log_error: "#{Dir.pwd}/#{AppConfig.chat.server.log.error}",
-
- certs: "#{Dir.pwd}/#{AppConfig.chat.server.certs}",
- hostname: AppConfig.environment.url,
-
- virtualhost_driver: db["adapter"],
- virtualhost_database: db["database"],
- virtualhost_username: db["username"],
- virtualhost_password: db["password"],
- virtualhost_host: db["host"]
- )
-end
diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb
index c02d9cd94..967df9c84 100644
--- a/config/initializers/secure_headers.rb
+++ b/config/initializers/secure_headers.rb
@@ -29,14 +29,6 @@ SecureHeaders::Configuration.default do |config|
csp[:style_src] << asset_host
end
- if AppConfig.chat.enabled?
- csp[:media_src] << "data:"
-
- unless AppConfig.chat.server.bosh.proxy?
- csp[:connect_src] << "#{AppConfig.pod_uri.host}:#{AppConfig.chat.server.bosh.port}"
- end
- end
-
csp[:script_src] << "code.jquery.com" if AppConfig.privacy.jquery_cdn?
csp[:form_action] << "www.paypal.com" if AppConfig.settings.paypal_donations.enable?
diff --git a/config/initializers/sidekiq_scheduled.rb b/config/initializers/sidekiq_scheduled.rb
index ac9140e38..46fc92adb 100644
--- a/config/initializers/sidekiq_scheduled.rb
+++ b/config/initializers/sidekiq_scheduled.rb
@@ -29,6 +29,11 @@ def default_job_config
"class": "Workers::CleanupOldExports"
},
+ cleanup_pending_photos: {
+ "cron": "#{random_minute.call} #{random_hour.call} * * *",
+ "class": "Workers::CleanupPendingPhotos"
+ },
+
queue_users_for_removal: {
"cron": "#{random_minute.call} #{random_hour.call} * * *",
"class": "Workers::QueueUsersForRemoval"
diff --git a/config/locales/devise/devise.ar.yml b/config/locales/devise/devise.ar.yml
index da3745647..fb2d0cdbf 100644
--- a/config/locales/devise/devise.ar.yml
+++ b/config/locales/devise/devise.ar.yml
@@ -54,7 +54,6 @@ ar:
new:
email: "البريد الإلكترونيّ"
forgot_password: "أنسيت كلمة المرور؟"
- no_account: "ليس هناك حساب بهذا البريد الإلكترونيّ"
reset_password: "صفّر كلمة المرور"
send_password_instructions: "أرسل لي إرشادات تصفير كلمة المرور"
send_instructions: "سيصلك بريد إلكترونيّ قريبًا فيه إرشادات تصفير كلمة المرور."
diff --git a/config/locales/devise/devise.art-nvi.yml b/config/locales/devise/devise.art-nvi.yml
index 8ea0dc560..a15ca9cdf 100644
--- a/config/locales/devise/devise.art-nvi.yml
+++ b/config/locales/devise/devise.art-nvi.yml
@@ -28,7 +28,6 @@ art-nvi:
change_password: "Leykatem oeyä ftemlì'ut"
new:
forgot_password: "Ngal tswama' ngeyä ftemlì'uti srak?"
- no_account: "Kea Diaspora a hu fìImeyl fkeytok. Diasporari txo perey, ayoe terìng ayDiasporat ye'rìn"
send_password_instructions: "Fpe' oeru aysänumet fte oe tsivun leykivatem oeyä ftemlì'ut"
send_instructions: "Ngal tayel Imeylit a wìntxu ngaru fya'ot a ngal leykatem ngeyä ftemlì'ut."
updated: "Ngeyä ftemlì'u lìmatem. Nga tung fìtsengmì set."
diff --git a/config/locales/devise/devise.bg.yml b/config/locales/devise/devise.bg.yml
index c06f9406e..fc711e86c 100644
--- a/config/locales/devise/devise.bg.yml
+++ b/config/locales/devise/devise.bg.yml
@@ -50,7 +50,6 @@ bg:
change_password: "Промяна на паролата"
new:
forgot_password: "Забравена парола?"
- no_account: "Не съществува акаунт с въведената ел. поща. Ако очаквате покана, знайте че ние ги раздаваме възможно най-бързо"
send_password_instructions: "Изпращане на инструкции за възстановяване на паролата"
send_instructions: "Ще получите ел. писмо с инструкции за промяна на паролата."
updated: "Паролата е променена успешно. Сега сте вписани."
diff --git a/config/locales/devise/devise.br.yml b/config/locales/devise/devise.br.yml
index 7a69f754d..5304bc37f 100644
--- a/config/locales/devise/devise.br.yml
+++ b/config/locales/devise/devise.br.yml
@@ -54,7 +54,6 @@ br:
new:
email: "Chomlec'h postel"
forgot_password: "Ankouaet ho ker-tremen ganeoc'h?"
- no_account: "N'eus kont ebet stag ouzh ar postel-mañ."
reset_password: "Adtermeniñ ar ger-tremen"
send_password_instructions: "Kas din an titouroù evit adsevel ma ger-tremen"
send_instructions: "Emaoc'h o vont da resev ur postel a-raok pell gant titouroù evit gouzout an doare da adsevel ho ker-tremen."
diff --git a/config/locales/devise/devise.bs.yml b/config/locales/devise/devise.bs.yml
index 54c2d9d98..8397de68c 100644
--- a/config/locales/devise/devise.bs.yml
+++ b/config/locales/devise/devise.bs.yml
@@ -51,7 +51,6 @@ bs:
change_password: "Promjeni moju šifru"
new:
forgot_password: "Zaboravili ste šifru?"
- no_account: "Ne postoji račun sa ovom e-mail adresom. Ako očekujete pozivnicu, šaljemo ih čim prije."
send_password_instructions: "Pošalji mi uputstva za resetovanje šifre"
send_instructions: "Dobit ćete e-mail sa uputstvima kako da resetujete vašu šifru za par minuta."
updated: "Vaša šifra je uspješno promijenjena. Sada ste prijavljeni."
diff --git a/config/locales/devise/devise.cs.yml b/config/locales/devise/devise.cs.yml
index 9273ef7d3..7988eda06 100644
--- a/config/locales/devise/devise.cs.yml
+++ b/config/locales/devise/devise.cs.yml
@@ -62,7 +62,6 @@ cs:
new:
email: "E-mailová adresa"
forgot_password: "Zapomněli jste heslo?"
- no_account: "Neexistuje žádný účet s touto e-mailovou adresou. Pokud čekáte na pozvání, budeme je vydávat, co nejdříve to bude možné"
reset_password: "Znovunastavit heslo"
send_password_instructions: "Zaslat instrukce k nastavení nového hesla."
no_token: "Na tuto stránku se nemůžete dostat, pokud nepřicházíte z e-mailu pro obnovení hesla. Pokud z e-mailu přicházíte, ujistěte se, že používáte celé poskytnuté URL."
diff --git a/config/locales/devise/devise.cy.yml b/config/locales/devise/devise.cy.yml
index 97dfae845..ec5fa7e31 100644
--- a/config/locales/devise/devise.cy.yml
+++ b/config/locales/devise/devise.cy.yml
@@ -37,7 +37,6 @@ cy:
change_password: "Newid fy nghyfrinair"
new:
forgot_password: "Wedi anghofio eich cyfrinair?"
- no_account: "Dim cyfrif gyda e-bost hwn yn bodoli. Os ydych yn aros am wahodd, rhaid i chi aros hwyrach bach..."
send_instructions: "Byddwch yn derbyn e-bost â chyfarwyddiadau ar sut i gadarnhau eich cyfrif mewn ychydig funudau."
updated: "Newidiwyd eich cyfrinair yn llwyddiannus. Rydych chi wedi arwyddo i fewn."
registrations:
diff --git a/config/locales/devise/devise.da.yml b/config/locales/devise/devise.da.yml
index 8243f6d7d..eb68bee89 100644
--- a/config/locales/devise/devise.da.yml
+++ b/config/locales/devise/devise.da.yml
@@ -62,7 +62,6 @@ da:
new:
email: "E-mail adresse"
forgot_password: "Glemt din adgangskode?"
- no_account: "Ingen konto med denne email adresse eksisterer."
reset_password: "Nulstil adgangskode"
send_password_instructions: "Send mig instruktioner til nulstilning af adgangskode"
no_token: "Du kan ikke tilgå denne side uden at komme fra en e-mail med nulstilling af dit kodeord. Hvis du kommer fra sådan en e-mail, undersøg venligst at du har brugt hele den URL der stod i mailen."
diff --git a/config/locales/devise/devise.de-moo.yml b/config/locales/devise/devise.de-moo.yml
index 78e47d7e5..689f20c70 100644
--- a/config/locales/devise/devise.de-moo.yml
+++ b/config/locales/devise/devise.de-moo.yml
@@ -62,7 +62,6 @@ de-moo:
new:
email: "Email-Adresse"
forgot_password: "Passwort vergessen?"
- no_account: "Es existiert keine Kuh mit dieser E-Mail-Adresse"
reset_password: "Passwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Du kannst auf diese Weide nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls du von einer E-Mail zur Passwortrücksetzung kommst, vergewissere dich bitte, dass du die vollständige angegebene URL verwendet hast."
diff --git a/config/locales/devise/devise.de.yml b/config/locales/devise/devise.de.yml
index a07c3d995..8c2148a60 100644
--- a/config/locales/devise/devise.de.yml
+++ b/config/locales/devise/devise.de.yml
@@ -62,7 +62,6 @@ de:
new:
email: "E-Mail-Adresse"
forgot_password: "Kennwort vergessen?"
- no_account: "Es existiert kein Benutzerkonto mit dieser E-Mail-Adresse"
reset_password: "Kennwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Du kannst auf diese Seite nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls du von einer E-Mail zur Passwortrücksetzung kommst, vergewissere dich bitte, dass du die vollständige angegebene URL verwendet hast."
diff --git a/config/locales/devise/devise.de_formal.yml b/config/locales/devise/devise.de_formal.yml
index 5e836020e..116d5f9ca 100644
--- a/config/locales/devise/devise.de_formal.yml
+++ b/config/locales/devise/devise.de_formal.yml
@@ -62,7 +62,6 @@ de_formal:
new:
email: "E-Mail-Adresse"
forgot_password: "Passwort vergessen?"
- no_account: "Es existiert kein Benutzerkonto mit dieser E-Mail-Adresse"
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."
diff --git a/config/locales/devise/devise.el.yml b/config/locales/devise/devise.el.yml
index a3092ad6b..24f5fe522 100644
--- a/config/locales/devise/devise.el.yml
+++ b/config/locales/devise/devise.el.yml
@@ -54,7 +54,6 @@ el:
new:
email: "Διεύθυνση email"
forgot_password: "Ξεχάσατε τον κωδικό σας;"
- no_account: "Δεν υπάρχει λογαριασμός με αυτό το email. Αν περιμένετε για πρόσκληση, θα γίνουν αποστολές το συντομότερο δυνατόν"
reset_password: "Επαναφορά κωδικού"
send_password_instructions: "Στείλτε μου οδηγίες επαναφοράς κωδικού"
send_instructions: "Θα λάβετε ένα email με οδηγίες για το πως να επαναφέρετε τον κωδικό πρόσβασης σας σε λίγα λεπτά."
diff --git a/config/locales/devise/devise.en.yml b/config/locales/devise/devise.en.yml
index 45f35a238..47f78cf2d 100644
--- a/config/locales/devise/devise.en.yml
+++ b/config/locales/devise/devise.en.yml
@@ -66,7 +66,6 @@ en:
confirm_password: Confirm password
new:
forgot_password: Forgot your password?
- no_account: No account with this email exists
reset_password: Reset password
email: Email address
send_password_instructions: Send me reset password instructions
diff --git a/config/locales/devise/devise.en_1337.yml b/config/locales/devise/devise.en_1337.yml
index c9d9f584e..3f78ebae3 100644
--- a/config/locales/devise/devise.en_1337.yml
+++ b/config/locales/devise/devise.en_1337.yml
@@ -48,7 +48,6 @@ en_1337:
change_password: "CH4NG3 MY *****"
new:
forgot_password: "F0RG07 Y0UR *****?"
- no_account: "404 - N07 F0UND!"
send_password_instructions: "R3537 MY *****!!"
send_instructions: "G0NN4 R3C113V3 R3537 1N57RUC71ON5 BY M41L!"
updated: "***** CH4NG3D"
diff --git a/config/locales/devise/devise.en_shaw.yml b/config/locales/devise/devise.en_shaw.yml
index c3403e868..bcc5e08d0 100644
--- a/config/locales/devise/devise.en_shaw.yml
+++ b/config/locales/devise/devise.en_shaw.yml
@@ -46,7 +46,6 @@ en_shaw:
change_password: "𐑗𐑱𐑯𐑡 𐑥𐑲 𐑐𐑨𐑕𐑢𐑼𐑛"
new:
forgot_password: "𐑓𐑹𐑜𐑪𐑑 𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛?"
- no_account: "𐑯𐑴 𐑩𐑒𐑬𐑯𐑑 𐑢𐑦𐑞 𐑞𐑦𐑕 𐑦-𐑥𐑱𐑤 𐑧𐑜𐑟𐑦𐑕𐑑𐑕. 𐑦𐑓 𐑿 𐑸 𐑢𐑱𐑑𐑦𐑙 𐑓𐑹 𐑩𐑯 𐑦𐑯𐑝𐑲𐑑, 𐑢𐑰 𐑸 𐑮𐑴𐑤𐑦𐑙 𐑞𐑧𐑥 𐑬𐑑 𐑨𐑟 𐑕𐑵𐑯 𐑨𐑟 𐑐𐑪𐑕𐑦𐑚𐑩𐑤"
send_password_instructions: "𐑕𐑧𐑯𐑛 𐑥𐑰 𐑮𐑦𐑕𐑧𐑑 𐑐𐑨𐑕𐑢𐑼𐑛 𐑦𐑯𐑕𐑑𐑮𐑳𐑒𐑖𐑩𐑯𐑟"
send_instructions: "𐑿 𐑢𐑦𐑤 𐑮𐑦𐑕𐑰𐑝 𐑩𐑯 𐑦-𐑥𐑱𐑤 𐑢𐑦𐑞 𐑦𐑯𐑕𐑑𐑮𐑳𐑒𐑖𐑩𐑯𐑟 𐑩𐑚𐑬𐑑 𐑣𐑬 𐑑 𐑮𐑦𐑕𐑧𐑑 𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛 𐑦𐑯 𐑩 𐑓𐑿 𐑥𐑦𐑯𐑩𐑑𐑕."
updated: "𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛 𐑢𐑪𐑟 𐑗𐑱𐑯𐑡𐑛 𐑕𐑩𐑒𐑕𐑧𐑕𐑓𐑫𐑤𐑦. 𐑿 𐑸 𐑯𐑬 𐑕𐑲𐑯𐑛 𐑦𐑯."
diff --git a/config/locales/devise/devise.en_valspeak.yml b/config/locales/devise/devise.en_valspeak.yml
index 052b6572f..51159c2d4 100644
--- a/config/locales/devise/devise.en_valspeak.yml
+++ b/config/locales/devise/devise.en_valspeak.yml
@@ -57,7 +57,6 @@ en_valspeak:
new:
email: "Email addy"
forgot_password: "Oh noes!? did u like, forget ur passwerd? D:"
- no_account: "sry but liek, no account that has this email existz... sry bout that :\\"
reset_password: "Reset passwerd"
send_password_instructions: "Send meh stuff on how 2 reset mah passwerd plz! Kthxbye <3"
send_instructions: "U will like, receive an email wit some txt on how 2 liek... reset ur passwerd in a few min, kay? So just chillax till then, kay? Kay. <3"
diff --git a/config/locales/devise/devise.eo.yml b/config/locales/devise/devise.eo.yml
index a11e2af00..8244a70cf 100644
--- a/config/locales/devise/devise.eo.yml
+++ b/config/locales/devise/devise.eo.yml
@@ -50,7 +50,6 @@ eo:
change_password: "Ŝanĝi mian pasvorton"
new:
forgot_password: "Ĉu vi forgesis vian pasvorton?"
- no_account: "Ne ekzistas konto kun ĉi tiu retpoŝtadreso. Se vi atendas inviton, ni plej rapide sendos ilin"
send_password_instructions: "Sendi al mi instrukciojn por restartigi pasvorton"
send_instructions: "Post kelkaj minutoj vi ricevos retpoŝton kun instrukcioj pri kiel restartigi vian pasvorton."
updated: "Vi sukcese ŝanĝis vian pasvorton. Vi nun estas ensalutinta."
diff --git a/config/locales/devise/devise.es-AR.yml b/config/locales/devise/devise.es-AR.yml
index 3b39eecf1..c22f4d628 100644
--- a/config/locales/devise/devise.es-AR.yml
+++ b/config/locales/devise/devise.es-AR.yml
@@ -62,7 +62,6 @@ es-AR:
new:
email: "Correo electrónico"
forgot_password: "¿Olvidaste tu contraseña?"
- no_account: "No hay ninguna cuenta con esta dirección de correo electrónico. Si estás esperando una invitación, te la enviaremos tan pronto como sea posible."
reset_password: "Resetear contraseña"
send_password_instructions: "Enviame instrucciones para cambiar mi contraseña."
no_token: "No puedes acceder a esta página si no vienes de un mensaje de restablecimiento de contraseña. Si vienes de un mensaje de restablecimiento de contraseña, por favor asegúrate de que has utilizado la URL completa proporcionada en el mensaje."
diff --git a/config/locales/devise/devise.es-CL.yml b/config/locales/devise/devise.es-CL.yml
index a0c900776..1f2e1a2d5 100644
--- a/config/locales/devise/devise.es-CL.yml
+++ b/config/locales/devise/devise.es-CL.yml
@@ -58,7 +58,6 @@ es-CL:
change_password: "Cambiar mi contraseña"
new:
forgot_password: "¿Olvidaste tu contraseña?"
- no_account: "No existe una cuenta asociada con ese email. Si estas esperando una invitación, la enviaremos a la brevedad"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña"
no_token: "No puedes acceder a esta página sino viene de un correo electrónico de restablecimiento de contraseña. Si viene de un correo electrónico de restablecimiento de contraseña, por favor asegúrese de que utilizó la URL completa proporcionada."
send_instructions: "Recibirás un correo con instrucciones para restablecer tu contraseña en pocos minutos."
diff --git a/config/locales/devise/devise.es-MX.yml b/config/locales/devise/devise.es-MX.yml
index afb2b5481..398ea72e6 100644
--- a/config/locales/devise/devise.es-MX.yml
+++ b/config/locales/devise/devise.es-MX.yml
@@ -52,7 +52,6 @@ es-MX:
new:
email: "Dirección de correo electrónico"
forgot_password: "¿Olvidaste tu contraseña?"
- no_account: "No existe una cuenta con este correo electrónico."
reset_password: "Restablecer contraseña"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña."
send_instructions: "Recibirás un correo electrónico con instrucciones para restablecer tu contraseña dentro de pocos minutos."
diff --git a/config/locales/devise/devise.es.yml b/config/locales/devise/devise.es.yml
index cbf73e3a9..797f02f9d 100644
--- a/config/locales/devise/devise.es.yml
+++ b/config/locales/devise/devise.es.yml
@@ -62,7 +62,6 @@ es:
new:
email: "Dirección de correo"
forgot_password: "¿Has olvidado tu contraseña?"
- no_account: "No existe una cuenta con ese correo"
reset_password: "Resetear contraseña"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña"
no_token: "No puedes acceder a esta página sin venir un correo de reseteo de contraseña. Si vienes de uno de estos correos, por favor asegúrate de utilizar la URL proporcionada."
diff --git a/config/locales/devise/devise.et.yml b/config/locales/devise/devise.et.yml
index 132ebbbbb..fdb805020 100644
--- a/config/locales/devise/devise.et.yml
+++ b/config/locales/devise/devise.et.yml
@@ -42,7 +42,6 @@ et:
change_password: "Muuda parooli"
new:
forgot_password: "Unustasid parooli?"
- no_account: "Sellise e-mailiga kontot pole. Kui sa ootad kutset, siis saadame selle esimesel võimalusel"
send_password_instructions: "Saada mulle juhised salasõna lähtestamiseks."
send_instructions: "Mõne minuti jooksul saad e-kirja juhistega oma parooli muutmiseks."
updated: "Sinu parool on edukalt muudetud. Oled nüüd sisse logitud."
diff --git a/config/locales/devise/devise.eu.yml b/config/locales/devise/devise.eu.yml
index b855e8124..80e01cefc 100644
--- a/config/locales/devise/devise.eu.yml
+++ b/config/locales/devise/devise.eu.yml
@@ -50,7 +50,6 @@ eu:
change_password: "Nire pasahitza aldatu"
new:
forgot_password: "Pasahitza ahaztu duzu?"
- no_account: "Ez da konturik e-posta horrekin. Gonbidapen baten zain bazaude, ahal dugun azkarren bidaliko dizugu bat"
send_password_instructions: "Bidali iezadazu pasahitzaren berrezarpenerako argibideak"
send_instructions: "Hurrengo minutuetan email bat jasoko dituzu pasahitza berrezartzeko argibideekin."
updated: "Zure pasahitza arrakastaz aldatu duzu. Autentikatuta zaude orain."
diff --git a/config/locales/devise/devise.fi.yml b/config/locales/devise/devise.fi.yml
index d0030e248..d102a6455 100644
--- a/config/locales/devise/devise.fi.yml
+++ b/config/locales/devise/devise.fi.yml
@@ -59,7 +59,6 @@ fi:
new:
email: "Sähköpostiosoite"
forgot_password: "Unohditko salasanasi?"
- no_account: "Tunnusta tälle sähköpostiosoitteelle ei ole olemassa."
reset_password: "Vaihda salasana"
send_password_instructions: "Lähetä minulle salasanan uudelleenasettamisohjeet"
send_instructions: "Saat hetken päästä sähköpostiisi ohjeet siitä, miten voit asettaa salasanasi uudelleen."
diff --git a/config/locales/devise/devise.fr.yml b/config/locales/devise/devise.fr.yml
index 7855c95f9..c50dcf6d9 100644
--- a/config/locales/devise/devise.fr.yml
+++ b/config/locales/devise/devise.fr.yml
@@ -62,7 +62,6 @@ fr:
new:
email: "Adresse E-mail"
forgot_password: "Mot de passe oublié ?"
- no_account: "Aucun compte n'est associé à cette adresse de courrier électronique."
reset_password: "Réinitialiser le mot de passe"
send_password_instructions: "Envoyer les instructions de réinitialisation de mot de passe"
no_token: "Vous ne pouvez accéder à cette page sans venir d'un e-mail de réinitialisation du mot de passe. Veuillez vérifier que vous avez utiliser l'URL en entier."
diff --git a/config/locales/devise/devise.he.yml b/config/locales/devise/devise.he.yml
index ecc0c8f05..d17dae6ac 100644
--- a/config/locales/devise/devise.he.yml
+++ b/config/locales/devise/devise.he.yml
@@ -54,7 +54,6 @@ he:
new:
email: "כתובת דוא\"ל"
forgot_password: "שכחת את סיסמתך?"
- no_account: "לא קיים חשבון עם כתובת דוא״ל זו"
reset_password: "איפוס סיסמה"
send_password_instructions: "שליחת הנחיות איפוס הססמה אלי"
send_instructions: "בעוד מספר דקות תתקבל בתיבת הדוא״ל שלך הודעה עם הנחיות כיצד לאפס את סיסמתך."
diff --git a/config/locales/devise/devise.hu.yml b/config/locales/devise/devise.hu.yml
index f0e29db72..e7730cba2 100644
--- a/config/locales/devise/devise.hu.yml
+++ b/config/locales/devise/devise.hu.yml
@@ -54,7 +54,6 @@ hu:
new:
email: "E-mail cím"
forgot_password: "Elfelejtetted a jelszavad?"
- no_account: "Ehhez az e-mail címhez nem tartozik fiók."
reset_password: "Jelszó visszaállítása"
send_password_instructions: "Új jelszót igénylek"
send_instructions: "Néhány perc múlva kapsz egy e-mailt arról, hogyan állíthatod alaphelyzetbe a jelszavadat."
diff --git a/config/locales/devise/devise.hye-classical.yml b/config/locales/devise/devise.hye-classical.yml
index c71e60362..50a0953c0 100644
--- a/config/locales/devise/devise.hye-classical.yml
+++ b/config/locales/devise/devise.hye-classical.yml
@@ -61,7 +61,6 @@ hye-classical:
new:
email: "Էլ․ հասցէ"
forgot_password: "Մոռացե՞լ ես գաղտնաբառդ"
- no_account: "Այս էլ.հասցէով հաշիւ չկայ։"
reset_password: "Վերականգնել գաղտնաբառը"
send_password_instructions: "Ուղարկէք ինձ գաղտնաբառը փոխելու ցուցումները"
no_token: "Այս էջը հասանելի է միայն գաղտնաբառը վերականգնելու յղումով նամակից գալու դէպքում։ Եթէ հէնց այդտեղից է, որ եկել ես, հաւաստիացիր, որ ամբողջական յղումն ես օգտագործել։"
diff --git a/config/locales/devise/devise.hye.yml b/config/locales/devise/devise.hye.yml
index 0f7810430..a16917e5d 100644
--- a/config/locales/devise/devise.hye.yml
+++ b/config/locales/devise/devise.hye.yml
@@ -59,7 +59,6 @@ hye:
new:
email: "Էլ․հասցե"
forgot_password: "Մոռացե՞լ ես գաղտնաբառդ"
- no_account: "Այս էլ.հասցեով հաշիվ չկա։"
reset_password: "Վերականգնել գաղտնաբառը"
send_password_instructions: "Ուղարկեք ինձ գաղտնաբառը փոխելու ցուցումները"
no_token: "Այս էջը հասանելի է միայն գաղնաբառը վերականգնելու հղումով նամակից գալու դեպքում։ Եթե հենց այդտեղից է, որ եկել ես, հավաստիացիր, որ ամբողջական հղումն ես օգտագործել։"
diff --git a/config/locales/devise/devise.ia.yml b/config/locales/devise/devise.ia.yml
index a136688b2..b950b6a63 100644
--- a/config/locales/devise/devise.ia.yml
+++ b/config/locales/devise/devise.ia.yml
@@ -62,7 +62,6 @@ ia:
new:
email: "Adresse de e-mail"
forgot_password: "Contrasigno oblidate?"
- no_account: "Nulle conto con iste adresse de e-mail existe."
reset_password: "Reinitialisar contrasigno"
send_password_instructions: "Inviar instructiones pro reinitialisar contrasigno"
no_token: "Tu non pote acceder a iste pagina sin venir ab un e-mail pro reinitialisar contrasigno. Si tu de facto veni ab un e-mail pro reinitialisar contrasigno, per favor assecura te de usar le totalitate del URL fornite."
diff --git a/config/locales/devise/devise.id.yml b/config/locales/devise/devise.id.yml
index d05e206a5..ba9c6d945 100644
--- a/config/locales/devise/devise.id.yml
+++ b/config/locales/devise/devise.id.yml
@@ -50,7 +50,6 @@ id:
change_password: "Ubah kata sandi saya"
new:
forgot_password: "Lupa kata sandi anda?"
- no_account: "Tidak ditemukan akun dengan E-mail ini. Jika anda menunggu invitasi (undangan), kami akan menyebarkannya secepatnya"
send_password_instructions: "Kirimkan saya instruksi untuk membuat ulang kata sandi"
send_instructions: "Anda akan menerima email berisi petunjuk cara membuat ulang kata sandi Anda dalam beberapa menit."
updated: "Kata kunci Anda telah berhasil diubah. Anda sekarang sudah masuk."
diff --git a/config/locales/devise/devise.is.yml b/config/locales/devise/devise.is.yml
index 5e3b06edb..9ffef47bb 100644
--- a/config/locales/devise/devise.is.yml
+++ b/config/locales/devise/devise.is.yml
@@ -54,7 +54,6 @@ is:
new:
email: "Netfang"
forgot_password: "Gleymdirðu lykilorðinu þínu?"
- no_account: "Enginn notandi með þetta netfang ert til"
reset_password: "Endurstilla lykilorð"
send_password_instructions: "Senda mér leiðbeiningar um hvernig ég get endurstillt lykilorðið mitt"
send_instructions: "Þú munt fá tölvupóst innan fárra mínútna, með leiðbeiningum um hvernig þú getur endurstillt lykilorð þitt."
diff --git a/config/locales/devise/devise.it.yml b/config/locales/devise/devise.it.yml
index d98fc1a09..ad7e1a328 100644
--- a/config/locales/devise/devise.it.yml
+++ b/config/locales/devise/devise.it.yml
@@ -56,7 +56,6 @@ it:
new:
email: "Indirizzo email"
forgot_password: "Hai dimenticato la password?"
- no_account: "Non esiste un account con questo indirizzo email"
reset_password: "Azzera password"
send_password_instructions: "Inviami le istruzioni per reimpostare la password."
send_instructions: "Tra pochi minuti riceverai una email con le istruzioni su come cambiare la tua password."
diff --git a/config/locales/devise/devise.ja.yml b/config/locales/devise/devise.ja.yml
index 17bb41697..3cd4aaf70 100644
--- a/config/locales/devise/devise.ja.yml
+++ b/config/locales/devise/devise.ja.yml
@@ -62,7 +62,6 @@ ja:
new:
email: "メールアドレス"
forgot_password: "パスワードを忘れましたか?"
- no_account: "このメールアドレスに一致するアカウントは存在しません"
reset_password: "パスワードの再設定"
send_password_instructions: "パスワード再発行の手続きメールを送ってください。"
no_token: "パスワードリセットのメールからではないと、このページにアクセスすることはできません。パスワードリセットのメールから来た場合は、提供された完全なURLを使用していることを確認してください。"
diff --git a/config/locales/devise/devise.ka.yml b/config/locales/devise/devise.ka.yml
index ee749762a..abe1c3e0e 100644
--- a/config/locales/devise/devise.ka.yml
+++ b/config/locales/devise/devise.ka.yml
@@ -50,7 +50,6 @@ ka:
change_password: "ჩემი პაროლის შეცვლა"
new:
forgot_password: "დაგავიწყდათ თქვენი პაროლი?"
- no_account: "ამ ელ-ფოსტით ანგარიში არ არსებობს. თუ თქვენ მოსაწვევს ელოდებით, ჩვენ მათ დაგზავნას რაც შეიძლება მალე მოვახდენთ"
send_password_instructions: "გამომიგზავნეთ პაროლის განახლების ინსტრუქცია"
send_instructions: "თქვენ რამდენიმე წუთში მიიღებთ ელ-ფოსტას ინსტრუქციებით თუ როგორ უნდა შეცვალოთ თქვენი პაროლი."
updated: "პაროლი წარამტებით შეიცვალა. თქვენ ახლა შემოსული ხართ."
diff --git a/config/locales/devise/devise.ko.yml b/config/locales/devise/devise.ko.yml
index 6a027fcb2..576f65508 100644
--- a/config/locales/devise/devise.ko.yml
+++ b/config/locales/devise/devise.ko.yml
@@ -54,7 +54,6 @@ ko:
new:
email: "이메일"
forgot_password: "암호를 잊었습니까?"
- no_account: "등록되지 않은 이메일 주소입니다."
reset_password: "암호 재설정"
send_password_instructions: "암호 재설정 메일 보내기"
send_instructions: "몇 분 안으로 암호를 초기화하기 위한 이메일이 도착합니다."
diff --git a/config/locales/devise/devise.lt.yml b/config/locales/devise/devise.lt.yml
index 34e27ae0a..2461cb093 100644
--- a/config/locales/devise/devise.lt.yml
+++ b/config/locales/devise/devise.lt.yml
@@ -50,7 +50,6 @@ lt:
change_password: "Keisti mano slaptažodį"
new:
forgot_password: "Pamiršai slaptažodį?"
- no_account: "Tokio el. pašto mūsų sistemoje nėra užregistruota. Laukiančius pakvietimo įspėjame, kad išsiųsime juos kai tik galėsime."
send_password_instructions: "Siųsti nurodymus, kaip atstatyti slaptažodį"
send_instructions: "Netrukus gausite el. laišką su nurodymais, kaip atstatyti slaptažodį."
updated: "Slaptažodis sėkmingai pakeistas. Prisijungta."
diff --git a/config/locales/devise/devise.mk.yml b/config/locales/devise/devise.mk.yml
index 4813fd490..2c648a3ed 100644
--- a/config/locales/devise/devise.mk.yml
+++ b/config/locales/devise/devise.mk.yml
@@ -46,7 +46,6 @@ mk:
change_password: "Промена на лозинка"
new:
forgot_password: "Ја заборавивте лозинката?"
- no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible"
send_password_instructions: "Испрати ми ги инструкциите за ресетирање на лозинката"
send_instructions: "За неколку минути ќе добиете е-маил со инструкции за начинот на кој може да ја ресетирате вашата лозинка."
updated: "Вашата лозинка беше успешно променета. Сега сте најавени."
diff --git a/config/locales/devise/devise.ms.yml b/config/locales/devise/devise.ms.yml
index b5cc36d6c..bb90cd9bd 100644
--- a/config/locales/devise/devise.ms.yml
+++ b/config/locales/devise/devise.ms.yml
@@ -53,7 +53,6 @@ ms:
new:
email: "Alamat emel"
forgot_password: "Lupa kata laluan anda?"
- no_account: "Tiada akaun dengan e-mel ini wujud. Jika anda sedang menunggu untuk jemputan, kami memusing mereka secepat mungkin"
reset_password: "Tetapkan semula kata laluan"
send_password_instructions: "Hantar saya arahan menetap semula kata laluan"
send_instructions: "Anda akan menerima e-mel dengan arahan mengenai cara untuk menetapkan semula kata laluan anda dalam beberapa minit."
diff --git a/config/locales/devise/devise.nb.yml b/config/locales/devise/devise.nb.yml
index fca18e624..acea84092 100644
--- a/config/locales/devise/devise.nb.yml
+++ b/config/locales/devise/devise.nb.yml
@@ -62,7 +62,6 @@ nb:
new:
email: "E-post"
forgot_password: "Glemt passordet?"
- no_account: "Det finnes ingen bruker med denne e-post adressen. Hvis du venter på en invitasjon, sender vi dem ut så snart vi kan."
reset_password: "Resett passord"
send_password_instructions: "Send meg instruksjoner for å tilbakestille passordet"
no_token: "Du kan ikke se denne siden uten å komme fra en e-post for å tilbakestille passord. Dersom du kom fra en e-post for å tilbakestille passord, sørg for at du bruker den fullstendige URL-en som ble oppgitt i e-posten."
diff --git a/config/locales/devise/devise.nds.yml b/config/locales/devise/devise.nds.yml
index 60e950217..d3ef320d4 100644
--- a/config/locales/devise/devise.nds.yml
+++ b/config/locales/devise/devise.nds.yml
@@ -37,7 +37,6 @@ nds:
new:
email: "E-Mail-Adress"
forgot_password: "Hest du dien Passwoort vergeten?"
- no_account: "Dat gift keen Konto mit disse E-Mail-Adress"
reset_password: "Passwoort trüchsetten"
send_password_instructions: "Schick mi Anwiesungen ton Trüchsetten von mien Passwoort"
updated: "Dien Passwoort is erfolgriek ännert worn. Du bist nu anmeld."
diff --git a/config/locales/devise/devise.nl.yml b/config/locales/devise/devise.nl.yml
index 1aa3f9783..6106d5a8d 100644
--- a/config/locales/devise/devise.nl.yml
+++ b/config/locales/devise/devise.nl.yml
@@ -57,7 +57,6 @@ nl:
new:
email: "E-mailadres"
forgot_password: "Wachtwoord vergeten?"
- no_account: "Er bestaat geen account met dit e-mailadres"
reset_password: "Herstel wachtwoord"
send_password_instructions: "Stuur mij instructies om mijn wachtwoord te resetten"
send_instructions: "Je ontvangt binnen enkele minuten een e-mail met instructies om je wachtwoord opnieuw in te stellen."
diff --git a/config/locales/devise/devise.nn.yml b/config/locales/devise/devise.nn.yml
index 938ab4d33..f7a936c0f 100644
--- a/config/locales/devise/devise.nn.yml
+++ b/config/locales/devise/devise.nn.yml
@@ -50,7 +50,6 @@ nn:
change_password: "Endra passordet mitt"
new:
forgot_password: "Har du gløymt passordet ditt?"
- no_account: "Det finst ingen konto med denne e-postadressa. Om du ventar på ein invitasjon, skal du veta at vi sender dei ut så fort vi kan."
send_password_instructions: "Send meg opplysningar om korleis nullstilla passordet"
send_instructions: "Om ei lita stund vil du få ein e-post med opplysningar om korleis du kan nullstilla passordet ditt."
updated: "Passordet ditt vart endra. Du er no pålogga."
diff --git a/config/locales/devise/devise.oc.yml b/config/locales/devise/devise.oc.yml
index aaa1d1c00..7c3d8d285 100644
--- a/config/locales/devise/devise.oc.yml
+++ b/config/locales/devise/devise.oc.yml
@@ -62,7 +62,6 @@ oc:
new:
email: "Adreça de corrièl"
forgot_password: "Avètz oblidat vòstre senhal ?"
- no_account: "Cap de compte es pas associat a aquesta adreça de corrièr electronic."
reset_password: "Reïnicializar lo senhal"
send_password_instructions: "Mandar las instruccions de reïnicializacion de senhal"
no_token: "Podètz pas accedir a aquesta pagina sens venir d'un corrièl de reïnicializacion de senhal. S'es lo cas, mercés de vos assegurar qu'avètz utilizat l'URL completa."
diff --git a/config/locales/devise/devise.pa.yml b/config/locales/devise/devise.pa.yml
index 36f3cc881..90d4af823 100644
--- a/config/locales/devise/devise.pa.yml
+++ b/config/locales/devise/devise.pa.yml
@@ -40,7 +40,6 @@ pa:
change_password: "ਮੇਰਾ ਪਾਸਵਰਡ ਬਦਲੋ"
new:
forgot_password: "ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?"
- no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible"
updated: "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਠੀਕ ਤਹ੍ਹਾਂ ਬਦਲਿਆ ਗਿਆ ਹੈ। ਹੁਣ ਤੁਸੀਂ ਸਾਈਨ ਇਨ ਕਰ ਸਕਦੇ ਹੋ।"
sessions:
new:
diff --git a/config/locales/devise/devise.pl.yml b/config/locales/devise/devise.pl.yml
index ce7dbc522..9c420e58e 100644
--- a/config/locales/devise/devise.pl.yml
+++ b/config/locales/devise/devise.pl.yml
@@ -62,7 +62,6 @@ pl:
new:
email: "Adres e-mail"
forgot_password: "Nie pamiętasz hasła?"
- no_account: "Konto z podanym adresem e-mail nie istnieje"
reset_password: "Resetuj hasło"
send_password_instructions: "Wyślij mi instrukcję resetowania hasła"
no_token: "Nie możesz pomyślnie odwiedzić tej strony w inny sposób niż poprzez kliknięcie odnośnika w e-mailu resetu hasła. Jeśli znalazłeś się tutaj właśnie przez tego typu e-mail, upewnij się, że kliknąłeś lub wkleiłeś pełny adres URL."
diff --git a/config/locales/devise/devise.pt-BR.yml b/config/locales/devise/devise.pt-BR.yml
index 10a698c59..dcfce4184 100644
--- a/config/locales/devise/devise.pt-BR.yml
+++ b/config/locales/devise/devise.pt-BR.yml
@@ -62,7 +62,6 @@ pt-BR:
new:
email: "Endereço de email"
forgot_password: "Esqueceu sua senha?"
- no_account: "Não há nenhuma conta com este email"
reset_password: "Resetar senha"
send_password_instructions: "Envie-me instruções para redefinir minha senha."
no_token: "Você só pode acessar esta página a partir de um e-mail de recuperação de senha. Se esse é o caso, certifique-se que usou o URL fornecido completo."
@@ -87,7 +86,7 @@ pt-BR:
remember_me: "Lembre-se de mim"
sign_in: "Entrar"
username: "Nome de usuário"
- signed_in: "Você entrou com sucesso."
+ signed_in: "Você entrou."
signed_out: "Você saiu com sucesso."
shared:
links:
diff --git a/config/locales/devise/devise.pt-PT.yml b/config/locales/devise/devise.pt-PT.yml
index f0a1cbbc0..b617786ae 100644
--- a/config/locales/devise/devise.pt-PT.yml
+++ b/config/locales/devise/devise.pt-PT.yml
@@ -53,7 +53,6 @@ pt-PT:
new:
email: "Endereço de e-mail"
forgot_password: "Esqueceu a sua palavra-passe?"
- no_account: "Não existe nenhuma conta com este e-mail."
reset_password: "Redefinir palavra-passe"
send_password_instructions: "Enviem-me instruções para redefinir a minha palavra-passe"
send_instructions: "Dentro de alguns minutos irá receber uma mensagem com as instruções sobre como redefinir a sua palavra-passe."
diff --git a/config/locales/devise/devise.ro.yml b/config/locales/devise/devise.ro.yml
index e748a7a6e..3060240e8 100644
--- a/config/locales/devise/devise.ro.yml
+++ b/config/locales/devise/devise.ro.yml
@@ -51,7 +51,6 @@ ro:
change_password: "Schimbă-mi parola"
new:
forgot_password: "Aţi uitat parola?"
- no_account: "Nici un cont cu acest e-mail există. Dacă sunteţi în aşteptare pentru o invitaţie, le vom trimite cât mai curând posibil.\n"
send_password_instructions: "Trimite-mi instrucţiunile pentru a reseta parola"
send_instructions: "În scurt timp veți primi un email cu instrucțiuni pentru resetarea parolei."
updated: "Parolă schimbată cu success. Sunteți acum autentificat(ă)."
diff --git a/config/locales/devise/devise.ru.yml b/config/locales/devise/devise.ru.yml
index da78c65de..8e4721f5d 100644
--- a/config/locales/devise/devise.ru.yml
+++ b/config/locales/devise/devise.ru.yml
@@ -62,7 +62,6 @@ ru:
new:
email: "E-mail"
forgot_password: "Забыли пароль?"
- no_account: "Аккаунт с таким E-mail не существует"
reset_password: "Сброс пароля"
send_password_instructions: "Отправить мне инструкции по сбросу пароля"
no_token: "Эта страница доступна только из письма по сбросу пароля. Если вы пришли по ссылке из такого письма, то удостоверьтесь, что использовали полный путь, указаный в ссылке."
diff --git a/config/locales/devise/devise.sc.yml b/config/locales/devise/devise.sc.yml
index 5bec014de..3df2ef529 100644
--- a/config/locales/devise/devise.sc.yml
+++ b/config/locales/devise/devise.sc.yml
@@ -62,7 +62,6 @@ sc:
new:
email: "Indiritzu de p. eletrònica"
forgot_password: "As ismentigadu sa crae tua?"
- no_account: "Non b'est unu contu cun custu indiritzu de p. eletrònica"
reset_password: "Torra a impostare sa crae"
send_password_instructions: "Imbia·mi sas istrutziones pro torrare a impostare sa crae"
no_token: "Non podes intrare in custa pàgina chene partire dae una lìtera de posta eletrònica pro s'impostatzione de sa crae. Si benis dae una de cussas lìteras ista atentu a impreare s'URL intreu frunidu."
diff --git a/config/locales/devise/devise.sk.yml b/config/locales/devise/devise.sk.yml
index bdb57702d..5f8a5f94b 100644
--- a/config/locales/devise/devise.sk.yml
+++ b/config/locales/devise/devise.sk.yml
@@ -55,7 +55,6 @@ sk:
new:
email: "E-mailová adresa"
forgot_password: "Zabudol (-la) si heslo?"
- no_account: "Účet s takouto e-mailovou adresou neexistuje"
reset_password: "Obnoviť heslo"
send_password_instructions: "Pošlite mi pokyny na zmenu hesla"
no_token: "Na túto stránku sa môžeš dostať iba z e-mailu na obnovenie hesla. Ak ideš z neho, skontroluj, či si zadal/a/ celú URL adresu."
diff --git a/config/locales/devise/devise.sl.yml b/config/locales/devise/devise.sl.yml
index ec82852d2..93ce69bea 100644
--- a/config/locales/devise/devise.sl.yml
+++ b/config/locales/devise/devise.sl.yml
@@ -50,7 +50,6 @@ sl:
change_password: "Spremeni geslo"
new:
forgot_password: "Ste pozabili geslo?"
- no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor še čakate na povabilo, vas prosimo za potrpljenje."
send_password_instructions: "Pošlji navodila za ponastavitev gesla"
send_instructions: "V nekaj minutah boste prejeli e-pošto z navodili za ponastavitev vašega gesla."
updated: "Vaše geslo je bilo uspešno spremenjeno. Zdaj ste prijavljeni."
diff --git a/config/locales/devise/devise.sr.yml b/config/locales/devise/devise.sr.yml
index 7b30bcb74..004f438e9 100644
--- a/config/locales/devise/devise.sr.yml
+++ b/config/locales/devise/devise.sr.yml
@@ -50,7 +50,6 @@ sr:
change_password: "Промени лозинку"
new:
forgot_password: "Заборавили сте лозинку?"
- no_account: "Не постоји налог са овим имејлом.  Ако чекаш позивницу, послаћемо је што пре можемо."
send_password_instructions: "Пошаљите ми упутство за промену лозинке."
send_instructions: "За пар минута ћеш примити имејл са упутством како да промениш лозинку."
updated: "Успешно сте променили лозинку. Сада сте пријављени."
diff --git a/config/locales/devise/devise.sv.yml b/config/locales/devise/devise.sv.yml
index 1d61a9201..c06282c09 100644
--- a/config/locales/devise/devise.sv.yml
+++ b/config/locales/devise/devise.sv.yml
@@ -62,7 +62,6 @@ sv:
new:
email: "E-postadress"
forgot_password: "Har du glömt ditt lösenord?"
- no_account: "Det finns inget konto med den här e-postadressen."
reset_password: "Återställ lösenord"
send_password_instructions: "Skicka information om hur jag återställer lösenordet"
no_token: "Du får inte tillgång till den här sidan utan en länk för att ställa in ett nytt lösenord via e-post. Om du kom hit genom en sådan, kontrollera att de använde hela URL:en som angavs."
diff --git a/config/locales/devise/devise.te.yml b/config/locales/devise/devise.te.yml
index 86209d875..5d48241d1 100644
--- a/config/locales/devise/devise.te.yml
+++ b/config/locales/devise/devise.te.yml
@@ -54,7 +54,6 @@ te:
new:
email: "ఈమెయిలు చిరునామా"
forgot_password: "మీ సంకేతపదాన్ని మర్చిపోయారా?"
- no_account: "ఈ ఈమెయిలుతో ఎటువంటి ఖాతా లేదు"
reset_password: "సంకేతపదం మళ్ళీపెట్టు"
send_password_instructions: "నాకు పాస్వర్డ్ను పునరుద్ధరించడానికి సూచనలను పంపండి"
send_instructions: "మీకు కొన్ని నిమిషాల్లో మీ సంకేతపదాన్ని పునరుద్ధరించడానికి సూచనలతో ఈమెయిల్ వస్తుంది."
diff --git a/config/locales/devise/devise.tr.yml b/config/locales/devise/devise.tr.yml
index 84b08e113..0e2da8375 100644
--- a/config/locales/devise/devise.tr.yml
+++ b/config/locales/devise/devise.tr.yml
@@ -50,7 +50,6 @@ tr:
change_password: "Parola değiştirme"
new:
forgot_password: "Parolanızı mı unuttunuz?"
- no_account: "Bu e-posta adresiyle alınmış hesap bulunmamaktadır. Eğer bir davetiye için bekliyorsanız, en kısa zamanda size ulaştıracağız."
send_password_instructions: "Bana parola yenileme talimatları gönder"
send_instructions: "Bir kaç dakika içerisinde parolanızı nasıl sıfırlayacağınızı açıklayan bir e-posta alacaksınız."
updated: "Parolanız değiştirilmiştir. Şu anda giriş yapmış bulunuyorsunuz."
diff --git a/config/locales/devise/devise.uk.yml b/config/locales/devise/devise.uk.yml
index 0dc4c8487..7ffdf12af 100644
--- a/config/locales/devise/devise.uk.yml
+++ b/config/locales/devise/devise.uk.yml
@@ -62,7 +62,6 @@ uk:
new:
email: "E-mail"
forgot_password: "Забули пароль?"
- no_account: "Аккаунт з таким E-mail не існує"
reset_password: "Зміна паролю"
send_password_instructions: "Відправити мені інструкції зі скидання пароля"
no_token: "Ви не можете отримати доступ до цієї сторінки, не прийшовши скидання пароля з електронної пошти. Якщо ви прийшли з електронної пошти для скидання пароля, будь ласка, переконайтеся, що ви використовували повний URL."
diff --git a/config/locales/devise/devise.vi.yml b/config/locales/devise/devise.vi.yml
index 09a40f957..f78be7f0b 100644
--- a/config/locales/devise/devise.vi.yml
+++ b/config/locales/devise/devise.vi.yml
@@ -50,7 +50,6 @@ vi:
change_password: "Đổi mật khẩu"
new:
forgot_password: "Quên mật khẩu?"
- no_account: "Không có tài khoản nào với địa chỉ thư điện tử này. Nếu bạn đang chờ để được mời, chúng tôi sẽ cố gắng sớm nhất có thể"
send_password_instructions: "Gửi cho tôi hướng dẫn thiết đặt lại mật khẩu"
send_instructions: "Bạn sẽ nhận được thư chứa chỉ dẫn cách thiết lập lại mật khẩu trong ít phút nữa."
updated: "Đã đổi mật khẩu. Bạn đã đăng nhập."
diff --git a/config/locales/devise/devise.zh-CN.yml b/config/locales/devise/devise.zh-CN.yml
index 531f6fe6e..58bf44649 100644
--- a/config/locales/devise/devise.zh-CN.yml
+++ b/config/locales/devise/devise.zh-CN.yml
@@ -50,7 +50,6 @@ zh-CN:
change_password: "修改密码"
new:
forgot_password: "忘记密码?"
- no_account: "暂无与此邮箱关联的帐号。如果您在等待邀请函, 我们将尽快寄出."
send_password_instructions: "请向我发送密码重置步骤"
send_instructions: "几分钟内您将收到一封包含密码重置步骤的邮件。"
updated: "密码修改成功。您已经登入了。"
diff --git a/config/locales/devise/devise.zh-TW.yml b/config/locales/devise/devise.zh-TW.yml
index b34378975..44f636034 100644
--- a/config/locales/devise/devise.zh-TW.yml
+++ b/config/locales/devise/devise.zh-TW.yml
@@ -62,7 +62,6 @@ zh-TW:
new:
email: "電子信箱"
forgot_password: "忘記密碼了嗎?"
- no_account: "沒有和這個電子信箱關聯的帳號"
reset_password: "重設密碼"
send_password_instructions: "傳送密碼重設的步驟給我"
no_token: "這個頁面只給重設密碼的電子郵件使用。如果你真的是點密碼重設信件過來的,請確定用的是信件中完整的網址。"
diff --git a/config/locales/diaspora/ar.yml b/config/locales/diaspora/ar.yml
index 3040692d0..32ac565f1 100644
--- a/config/locales/diaspora/ar.yml
+++ b/config/locales/diaspora/ar.yml
@@ -442,7 +442,6 @@ ar:
updated: "تم تحديث ملفك الشخصى"
public: "عامّ"
registrations:
- closed: "التسجيلات مغلقة على هذه المنصة"
create:
success: "لقد انضممت الى دياسبرا "
new:
diff --git a/config/locales/diaspora/be.yml b/config/locales/diaspora/be.yml
index bea5c8758..f8d08b687 100644
--- a/config/locales/diaspora/be.yml
+++ b/config/locales/diaspora/be.yml
@@ -15,7 +15,7 @@ be:
contact:
attributes:
person_id:
- taken: "павінна быць унікальным у кантактах гэтага карыстальніка."
+ taken: "мусіць быць унікальным у кантактах гэтага карыстальніка."
person:
attributes:
diaspora_handle:
@@ -23,7 +23,7 @@ be:
reshare:
attributes:
root_guid:
- taken: "Добра, але гэта ты ўжо перапосціў!"
+ taken: "Падабаецца? Але ты ўжо падзяліуся гэтым!"
user:
attributes:
email:
@@ -33,42 +33,52 @@ be:
username:
invalid: "Памылка. Дазваляюцца літары, лічбы і падкрэсліванні."
taken: "ужо існуе."
- all_aspects: "усе катыгорыі"
+ all_aspects: "Усе аспекты"
are_you_sure: "сапраўды?"
- are_you_sure_delete_account: "Вы сапраўды хочаце выдаліць Ваш акаўнт? Гэта не магчыма будзе адмяніць!"
+ are_you_sure_delete_account: "Вы сапраўды жадаеце выдаліць Ваш акаўнт? Гэта не магчыма будзе адмяніць!"
aspects:
add_to_aspect:
failure: "Памылка пры спробе дадаць кантакты да аспекта."
success: "Кантакты паспяхова дададзены ў аспект."
aspect_listings:
add_an_aspect: "+ дадаць катыгорыю"
+ aspect_stream:
+ stay_updated: "Заўжды на сувязі"
destroy:
- failure: "%{name} не пустая і не можа быць выдалена."
+ failure: "%{name} не магчыма выдаліць."
success: "%{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: "абнавіць"
- updating: "абнаўляю ..."
+ update: "аднавіць"
+ updating: "аднаўляю ..."
index:
donate: "падзяка"
help:
do_you: "Гэта тычыцца:"
- here_to_help: "Супольнасці Diaspora тут!"
- need_help: "дапамога патрэбна?"
+ feature_suggestion: "... жадаеце нешта %{link} прапанаваць?"
+ find_a_bug: "... знайшлі %{link}?"
+ have_a_question: "... маеце %{link}?"
+ here_to_help: "Суполка Дыаспара* заўсёды побач!"
+ need_help: "Патрэбна дапамога?"
tag_bug: "памылка"
+ tag_feature: "функцыя"
tag_question: "пытанне"
+ introduce_yourself: "Гэта ваша ручаіна. Скокайце ды пакажыце сябе."
new_here:
follow: "Сачы за %{link} і вітай новых карыстальнікаў diaspora*!"
learn_more: "паказаць больш"
- title: "Прывітанне, Новы Ўдзельнік!(чалавек)"
+ title: "Прывітай новых удзельнікаў"
+ services:
+ content: "Вы можаце дадаць наступныя паслугі ў diaspora*:"
+ heading: "Далучыць паслугі"
welcome_to_diaspora: "Вітаем ў Diaspora, %{name}!"
no_contacts_message:
- community_spotlight: "супольны прагляд"
+ community_spotlight: "Рэкамендуемыя удзельнікі"
or_spotlight: "ты можаш таксама падзяліцца %{link}"
- try_adding_some_more_contacts: "ты можаш знайсці ці дадаць новыя катракты"
+ try_adding_some_more_contacts: "ты можаш знайсці ці %{invite_link} новыя кантакты."
you_should_add_some_more_contacts: "спачатку дадай пару кантактаў"
seed:
acquaintances: "знаёмыя"
@@ -79,13 +89,31 @@ be:
failure: "не магчыма захаваць катыгорыю %{name}, занадта дліная назва."
success: "катыгорыя %{name} была паспяхова выдалена"
cancel: "адмяніць"
+ comments:
+ new_comment:
+ comment: "Каментарыі"
+ commenting: "Каменціраванне"
contacts:
index:
- all_contacts: "усе кантакты"
+ all_contacts: "Усе кантакты"
+ my_contacts: "Мае кантакты"
+ start_a_conversation: "Пачаць гутарку"
+ title: "Кантакты"
conversations:
+ create:
+ fail: "Памылковае паведамленне"
+ sent: "Паведамленне даслана"
+ index:
+ inbox: "Уваходныя"
+ no_messages: "Няма паведамленняў"
new:
send: "даслаць"
sending: "адсылаю ..."
+ subject: "Тэма"
+ show:
+ delete: "Выдаліць гутарку"
+ reply: "Адачаць"
+ replying: "Адказваем..."
delete: "выдаліць"
email: "Email"
error_messages:
@@ -93,16 +121,33 @@ be:
correct_the_following_errors_and_try_again: "спраўляй памылкі і паспрабуй зноў."
fill_me_out: "запоўні мяне"
find_people: "Пошук людзей ці #тэгаў"
+ help:
+ aspects:
+ title: "Аспекты"
+ what_is_an_aspect_q: "Што такое аспект?"
invitations:
+ create:
+ no_more: "Больш няма запрашенняў"
new:
- invite_someone_to_join: "запрасі каго-небудзь да Diaspora!"
+ invite_someone_to_join: "Запрасі яшчэ кагосці да Diaspora*!"
language: "мова"
+ send_an_invitation: "Даслаць запрашэнне"
layouts:
+ application:
+ powered_by: "Заснавана на diaspora*"
+ whats_new: "Што новага?"
header:
+ code: "Код"
+ logout: "Выйсці"
+ profile: "Профіль"
settings: "налады"
limited: "абмежавана"
more: "больш"
- no_results: "нічога не знайшлось"
+ no_results: "Нічога не знайшлось"
+ notifier:
+ click_here: "Націсні сюды"
+ hello: "Вітаем, %{name}!"
+ thanks: "Дзякуй,"
nsfw: "не дзеля ўсіх вачэй"
ok: "ok"
privacy: "Прыватнасць"
@@ -110,4 +155,11 @@ be:
public: "адкрыта"
search: "Пошук"
settings: "Налады"
- username: "Імя карыстальніка" \ No newline at end of file
+ streams:
+ aspects:
+ title: "Мае аспекты"
+ aspects_stream: "Аспекты"
+ username: "Імя карыстальніка"
+ users:
+ edit:
+ auto_follow_aspect: "Дадаваць гэтых карыстальнікаў у аспект:" \ No newline at end of file
diff --git a/config/locales/diaspora/bg.yml b/config/locales/diaspora/bg.yml
index ea39a0833..4ec918514 100644
--- a/config/locales/diaspora/bg.yml
+++ b/config/locales/diaspora/bg.yml
@@ -404,7 +404,6 @@ bg:
updated: "Профилът е обновен"
public: "Публична"
registrations:
- closed: "Нови регистрации не са възможни на този pod на Diaspora."
create:
success: "Вие се присъединихте към Diaspora!"
invalid_invite: "Връзката за покана, която предоставихте, вече не е валидна!"
@@ -510,6 +509,41 @@ bg:
follow: "Следете #%{tag}"
none: "Не съществува празна марка!"
stop_following: "Прекратяване следването на #%{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Деактивирай"
+ change_label: "Деактивирайте двуфакторното удостоверяване, като въведете Вашата парола"
+ status: "Двуфакторното удостоверяване е активирано."
+ confirm:
+ activate_button: "Потвърди и активирай"
+ input_explanation: "След като сканирате или въведете тайната, въведете 6-цифровия код, който виждате и потвърдете настройката."
+ input_title: "Потвърди с ВБЕП ключ."
+ manual_explanation: "В случай, че не можете да сканирате QR кода автоматично, можете ръчно да въведете тайната във Вашето приложение."
+ manual_explanation_cont: "Ние използваме времево-базирани еднократни пароли (ВБЕП) с 6-цифрови ключове. В случай, че Вашето приложение поиска времеви интервал и алгоритъм, въведете съответно 30 секунди и sha1. <br /> Интервалите са просто за по-лесно четене, моля, въведете кода без тях."
+ scan_explanation: "Моля, сканирайте QR кода с ВБЕП приложение, като andOTP (Андроид), FreeOTP (iOS), SailOTP (SailfishOS)."
+ scan_title: "Сканирай QR кода"
+ status: "Двуфакторното удостоверяване все още не е напълно активирано. Трябва да потвърдите активацията с ВБЕП ключ."
+ title: "Потвърждение на активирането"
+ deactivated:
+ change_button: "Активирай"
+ change_label: "Активиране на двуфакторно удостоверяване"
+ status: "Двуфакторното удостоверяване не е активирано."
+ explanation: "Двуфакторното удостоверяване е мощен начин да сте сигурни, че Вие сте единственият, който може да се вписва във Вашия акаунт. Когато се вписвате, ще въвеждате 6-цифрен код заедно с Вашата парола, за да докажете, че сте Вие. Но внимавайте: ако изгубите телефона си и кодовете за възстановяване, които сте създали, когато активирате тази услига, достъпът до Вашия акаунт в Диаспора ще бъде блокиран завинаги."
+ flash:
+ error_token: "Ключът е неправилен или невалиден"
+ success_activation: "Успешно активирано двуфакторно удостоверяване"
+ success_deactivation: "Успешно деактивирано двуфакторно удостоверяване"
+ input_token:
+ label: "Двуфакторен ключ"
+ placeholder: "6-цифров двуфакторен ключ"
+ recovery:
+ button: "Генерирай нови кодове за възстановяване"
+ explanation: "Ако някога изгубите достъп до телефона си, можете да ползвате някой от кодовете за възстановяване по-долу, за да получите достъп до акаунта си. Пазете кодовете за възстановяване на сигурно място. Например, можете да ги разпечатате на принтер и да ги съхранявате заедно с други важни документи."
+ explanation_short: "Кодовете за възстановяване Ви позволяват да получите достъп до акаунта си, ако изгубите Вашия телефон. Помнете, че можете да използвате всеки код за възстановяване само по веднъж."
+ invalidation_notice: "Ако сте изгубили Вашите кодове за възстановяване, можете да генерирате нови тук. Старите Ви кодове ще бъдат анулирани."
+ reminder: "Като алтернатива, можете да ползвате някой от кодовете за възстановяване."
+ title: "Кодове за възстановяване"
+ title: "Двуфакторно удостоверяване"
username: "Потребителско име"
users:
confirm_email:
diff --git a/config/locales/diaspora/br.yml b/config/locales/diaspora/br.yml
index 10d0ccdf5..6a06c708c 100644
--- a/config/locales/diaspora/br.yml
+++ b/config/locales/diaspora/br.yml
@@ -505,7 +505,6 @@ br:
updated: "Patrom nevesaet"
public: "A-wel d'an holl"
registrations:
- closed: "Stanket eo an enskrivadur war ar pod diaspora*-mañ"
create:
success: "Enskrivet oc'h war diaspora* !"
invalid_invite: "Al liamm pedadenn roet ganeoc'h n'eo ket mat ken"
diff --git a/config/locales/diaspora/bs.yml b/config/locales/diaspora/bs.yml
index ecca3b459..0e53ec6c3 100644
--- a/config/locales/diaspora/bs.yml
+++ b/config/locales/diaspora/bs.yml
@@ -495,7 +495,6 @@ bs:
updated: "Profil ažuriran"
public: "Javno"
registrations:
- closed: "Prijave su zatvorene na ovom Diaspora podu."
create:
success: "Pridružili ste se Diaspori!"
invalid_invite: "Veza pozivnice koji ste obezbijedili više nije važeća!"
diff --git a/config/locales/diaspora/cs.yml b/config/locales/diaspora/cs.yml
index 9d2946e5e..72f614f31 100644
--- a/config/locales/diaspora/cs.yml
+++ b/config/locales/diaspora/cs.yml
@@ -1017,7 +1017,6 @@ cs:
updated: "Profil aktualizován"
public: "Veřejné"
registrations:
- closed: "Přihlášky nejsou na tomto podu diaspory* otevřeny."
create:
success: "Připojili jste se k diaspoře*!"
invalid_invite: "Odkaz na pozvánku, který jste poskytli, již neplatí!"
diff --git a/config/locales/diaspora/da.yml b/config/locales/diaspora/da.yml
index 1ba72e8bc..9215ea650 100644
--- a/config/locales/diaspora/da.yml
+++ b/config/locales/diaspora/da.yml
@@ -117,7 +117,7 @@ da:
are_you_sure_lock_account: "Er du sikker på at du vil låse denne konto?"
are_you_sure_unlock_account: "Er du sikker på at du vil genåbne denne konto?"
close_account: "Luk konto"
- delete_admin: "%{name} er blevet fjernet fra admin-listen"
+ delete_admin: "%{name} er blevet fjernet fra admin-listen."
delete_moderator: "%{name} er blevet fjernet fra moderator-listen."
delete_spotlight: "%{name} er blevet fjernet fra community spotlight."
does_not_exist: "Brugeren eksisterer ikke!"
@@ -169,6 +169,9 @@ da:
login_required: "Du skal logge ind for at kunne autorisere denne applikation"
title: "Ups! Noget gik galt :("
scopes:
+ aud:
+ description: "Dette giver aud tilladelser til applicationen"
+ name: "aud"
name:
description: "Dette giver applikationen adgang til dit navn"
name: "navn"
@@ -205,7 +208,7 @@ da:
tos: "Se applikationens servicevilkår"
are_you_sure: "Er du sikker?"
are_you_sure_delete_account: "Er du helt sikker på at du ønsker at lukke din konto? Det kan ikke fortrydes!"
- are_you_sure_ignore_user: "Vil du ignorere denne bruger. Er du sikker?"
+ are_you_sure_ignore_user: "Du er ved at ignorere denne bruger. Er du sikker?"
aspect_memberships:
destroy:
failure: "Kunne ikke fjerne person fra aspekt."
@@ -485,7 +488,7 @@ da:
format_text_q: "Hvordan kan jeg formatere teksten i mine indlæg (fed, kursiv, osv.)?"
hide_posts_a: "Hvis du peger med musen på toppen af et indlæg vil et X dukke op til højre. Tryk på det for at skjule indlægget og fjerne notifikationer om det. Du kan stadig se indlægget hvis du besøger den person der lavede indlæggets profilside."
hide_posts_q: "Hvordan skjuler jeg et indlæg?"
- ignore_user_a1: "Hvis du deler med den pågældende person, vil det at fjerne dem fra dine aspekter stoppe de fleste af deres indlæg fra at vises i din strøm. En mere gennemgribende metode er at \"ignorere\" denne konto. Dette forhindrer, at deres indlæg vises i din strøm, og de kan ikke længere lide eller kommentere dine indlæg. De vil dog stadig være i stand til at videresende dine indlæg, kommentere videredelinger af dine indlæg, og deres kommentarer til indlæg fra andre personer der vises i din strøm, vil stadig være synlige for dig."
+ ignore_user_a1: "Hvis du deler med den pågældende person, vil det at fjerne dem fra dine aspekter stoppe de fleste af deres indlæg fra at vises i din strøm. En mere gennemgribende metode er at \"ignorere\" denne konto. Dette forhindrer, at deres indlæg vises i din strøm, og de kan ikke længere synes om eller kommentere dine indlæg. De vil dog stadig være i stand til at videredele dine indlæg, kommentere videredelinger af dine indlæg, og deres kommentarer til indlæg fra andre personer der vises i din strøm, vil stadig være synlige for dig."
ignore_user_a2: "For at ignorere en konto skal du klikke på ikonet \"ignorér\" (en cirkel med en diagonal linje gennem) øverst til højre for et af deres indlæg. Deres indlæg forsvinder øjeblikkeligt fra din strøm. Alternativt kan du gå til deres profilside og klikke på ignoreringsikonet der. Du kan stadig se deres indlæg på deres profilside eller ved at bruge single-postvisningen."
ignore_user_a3: "En liste over personer, du ignorerer, findes i dine kontoindstillinger under Privatliv. Hvis du vil stoppe med at ignorere nogen, skal du fjerne dem fra listen på den pågældende side."
ignore_user_q: "Hvordan sørger jeg for at en brugers indlæg ikke optræder i min strøm?"
@@ -590,9 +593,11 @@ da:
byline: "Det sociale netværk hvor det er dig der har kontrollen"
choose_your_audience: "Vælg dit publikum"
choose_your_audience_info: "Ved hjælp af Diasporas aspekter kan du vælge de mennesker du vil dele med. Du kan privat eller offentlig som du har lyst til. Del et sjovt foto med hele verden, eller en dyb hemmelighed kun med dine nærmeste. Du bestemmer."
+ diaspora_site_link: "Diaspora fødereret netværk"
headline: "Velkommen til %{pod_name}"
own_your_data: "Vær i besiddelse af dine egne data"
own_your_data_info: "Mange sociale netværk tjener penge på dine data ved at analysere din opførsel og derefter bruge informationen til at sælge reklamer. Diaspora bruger ikke dine data til noget, men står til rådighed så du kan kommunikere og dele med andre."
+ part_of_diaspora: "Del af %{diaspora_site_link}"
podmin:
byline: "Du er i gang med at ændre internettet. Lad os komme i gang."
configuration_info: "Åben %{database_path} og %{diaspora_path} i din favorit editor og gennemgå dem omhyggeligt. De er udførligt kommenteret."
@@ -643,6 +648,8 @@ da:
public_feed: "Offentligt Diaspora-nyhedsfeed for %{name}"
source_package: "Download kildekoden"
statistics_link: "Pod statistik"
+ switch_to_standard_mode: "Skift til standard tilstand"
+ switch_to_touch_optimized_mode: "Skift til touch-optimeret tilstand"
whats_new: "Hvad er nyt?"
header:
code: "Kode"
@@ -1006,7 +1013,11 @@ da:
updated: "Profil opdateret"
public: "Offentlig"
registrations:
- closed: "Der er lukket for tilmeldinger på denne Diaspora server."
+ closed:
+ another_pod: "en anden pod"
+ closed_pod: "Denne pod er for tiden lukket for tilgang. Du kan dog stadig blive en del af Diaspora-netværket ved at tilmelde dig på %{wiki}. Fordi alle Diasporas pods er forbundet, vil du stadig have adgang til det samme indhold der."
+ find_pods: "Der er en liste over de pods du kan tilmelde dig på %{poduptime}."
+ other_questions: "Har du nogen spørgsmål vedrørende valg af pod, se vores %{wiki}."
create:
success: "Du er nu en del af Diaspora!"
invalid_invite: "Det invitations-link som du anvendte er ikke længere gyldigt!"
@@ -1193,6 +1204,41 @@ da:
one: "En person har brugt %{tag} tag"
other: "%{count} personer har brugt %{tag} tag"
zero: "Ingen har brugt %{tag} tag"
+ two_factor_auth:
+ activated:
+ change_button: "Deaktiver"
+ change_label: "Deaktiver to-faktor godkendelse ved at indtaste dit kodeord"
+ status: "To-faktor godkendelse aktiveret"
+ confirm:
+ activate_button: "Bekræft og aktiver"
+ input_explanation: "Efter at have skannet eller indtastet hemmeligheden skal du indtaste den sekscifrede kode du ser og bekræfte opsætningen."
+ input_title: "Bekræft med TOTP token"
+ manual_explanation: "Hvis du ikke kan scanne QR-koden automatisk, kan du manuelt indtaste hemmeligheden i din app."
+ manual_explanation_cont: "Vi bruger tidsbaserede engangsadgangskoder (TOTP) med sekscifrede symboler. Hvis din app beder dig om et tidsinterval og en algoritme, indtaster du 30 sekunder og sha1. <br /> Mellemrummene er der kun for bedre læsbarhed. Indtast koden uden dem."
+ scan_explanation: "Skan venligst QR-koden med en TOTP-kompatibel app, f.eks. OgOTP (Android), FreeOTP (iOS), SailOTP (SailfishOS)."
+ scan_title: "Skan QR koden"
+ status: "To-faktor godkendelse er ikke fuldt aktiveret endnu. Du skal bekræfte aktivering med et TOTP-token"
+ title: "Bekræft aktivering"
+ deactivated:
+ change_button: "Aktiver"
+ change_label: "Aktiver to-faktor godkendelse"
+ status: "To-faktor godkendelse ikke aktiveret"
+ explanation: "To-faktor godkendelse er en effektiv måde at sikre, at du er den eneste, der kan logge ind på din konto. Når du logger ind, indtaster du en 6-cifret kode sammen med dit kodeord for at bevise din identitet. Husk dog at være forsigtig: hvis du mister din telefon og genoprettelseskoderne der oprettes når du aktiverer denne funktion, vil adgang til din Diaspora-konto blive blokeret for altid."
+ flash:
+ error_token: "Token var forkert eller ugyldigt"
+ success_activation: "Vellykket aktivering af to-faktor godkendelse"
+ success_deactivation: "Vellykket deaktivering af to-faktor godkendelse"
+ input_token:
+ label: "To-faktor token"
+ placeholder: "sekscifret to-faktor token"
+ recovery:
+ button: "Generer nye gendannelseskoder"
+ explanation: "Hvis du mister adgang til din telefon, kan du bruge en af genoprettelseskoderne nedenfor for at genvinde adgangen til din konto. Hold genoprettelseskoderne sikre. Du kan f.eks. udskrive dem og gemme dem sammen med andre vigtige dokumenter."
+ explanation_short: "Gendannelseskoder giver dig mulighed for at få adgang til din konto hvis du mister din telefon. Bemærk at du kun kan bruge hver genopretningskode én gang."
+ invalidation_notice: "Hvis du har mistet dine gendannelseskoder, kan du regenerere dem her. Dine gamle gendannelseskoder bliver herefter gjort ugyldige."
+ reminder: "Alternativt kan du bruge en af gendannelseskoderne."
+ title: "Gendannelseskoder"
+ title: "To-faktor godkendelse"
username: "Brugernavn"
users:
confirm_email:
@@ -1241,7 +1287,7 @@ da:
new_password: "Nyt adgangskode"
private_message: "... du har modtaget en privat besked."
protocol_handler:
- browser: "Denne protokol er i øjeblikket i den eksperimentelle fase, og om de interaktioner der bruger protokollen virker er afhængigt af din browser. Hvis du vil styre eller fjerne denne handler, gør du det via dine browserindstillinger. Knappen nedenfor vil altid være aktiveret, og du skal sætte handleren separat i hver browser du bruger."
+ browser: "Denne protokol er i øjeblikket i den eksperimentelle fase, og om de interaktioner der bruger protokollen virker, er afhængigt af din browser. Hvis du vil styre eller fjerne denne handler, gør du det via dine browserindstillinger. Knappen nedenfor vil altid være aktiveret, og du skal sætte handleren separat i hver browser du bruger."
description: "web + diaspora: // er en ny webprotokol, som vi har introduceret. Ethvert link til en Diaspora-side på et eksternt websted der bruger denne protokol, kan åbnes i den pod hvor din Diaspora-konto er registreret. Klik på knappen nedenfor for at indstille din browser til at bruge %{pod_url} for at genkende eksterne web + diaspora: // links."
register: "Registrer web+diaspora:// handler i denne browser"
title: "web+diaspora:// protokol handler"
diff --git a/config/locales/diaspora/de-CH.yml b/config/locales/diaspora/de-CH.yml
index 82cac40d6..49f5aa339 100644
--- a/config/locales/diaspora/de-CH.yml
+++ b/config/locales/diaspora/de-CH.yml
@@ -592,7 +592,6 @@ de-CH:
updated: "Pofil aktualisiert"
public: "Öffentlich"
registrations:
- closed: "Uf dem pod isch d'Registrierig deaktiviert"
create:
success: "Du bisch ez volle Hahne bi diaspora* debii!"
invalid_invite: "De Iiladigslink wo'd benutzt hesch isch nüme gültig!"
diff --git a/config/locales/diaspora/de-moo.yml b/config/locales/diaspora/de-moo.yml
index 5ce0be51a..61f2e569c 100644
--- a/config/locales/diaspora/de-moo.yml
+++ b/config/locales/diaspora/de-moo.yml
@@ -90,15 +90,18 @@ de-moo:
week: "Woche"
user_entry:
account_closed: "Konto wurde geschlossen"
+ admin: "Leitkuh"
diaspora_handle: "diaspora* ID"
email: "E-Mail"
guid: "GUID"
id: "ID"
invite_token: "Einladungstoken"
last_seen: "Zuletzt gesehen"
+ moderator: "Moderierkuh"
? "no"
: Nein
nsfw: "#nsfw"
+ spotlight: "Schaukasten"
unknown: "Unbekannt"
? "yes"
: Ja
@@ -106,14 +109,29 @@ de-moo:
account_closing_scheduled: "Das Konto von %{name} soll geschlossen werden. Dies dauert ein paar Augenblicke..."
account_locking_scheduled: "Das Konto von %{name} ist zur Sperrung vorgesehen. Es wird in wenigen Augenblicken verarbeitet..."
account_unlocking_scheduled: "Das Konto von %{name} ist zur Entsperrung vorgesehen. Es wird in wenigen Augenblicken verarbeitet..."
+ add_admin: "%{name} wurde zur Leitkuh befördert."
add_invites: "Einladungen hinzufügen"
+ add_moderator: "%{name} wurde zur Moderierkuh befördert."
+ add_spotlight: "%{name} wurde in den Gemeinschafts-Schaukasten gestellt."
are_you_sure: "Willst du dein Konto wirklich schließen?"
are_you_sure_lock_account: "Bist du dir sicher, dass du dieses Konto sperren willst?"
are_you_sure_unlock_account: "Bist du sicher, dass du dieses Konto entsperren willst?"
close_account: "Konto schließen"
+ delete_admin: "%{name} wurde von der Liste der Leitkühe entfernt."
+ delete_moderator: "%{name} wurde von der Liste der Moderierkühe entfernt."
+ delete_spotlight: "%{name} wurde vom Gemeinschafts-Schaukasten entfernt."
+ does_not_exist: "Kuh existiert nicht!"
email_to: "per E-Mail einladen"
invite: "Einladen"
lock_account: "Konto sperren"
+ make_admin: "Zur Leitkuh befördern"
+ make_moderator: "Zur Moderierkuh befördern"
+ make_spotlight: "In den Gemeinschafts-Schaukasten stellen"
+ remove_admin: "Als Leitkuh absetzen"
+ remove_moderator: "Als Moderierkuh absetzen"
+ remove_spotlight: "Aus dem Gemeinschafts-Schaukasten entfernen"
+ role_implemented: "%{name} hat diese Rolle bereits erhalten!"
+ role_removal_implemented: "%{name} wurde diese Rolle bereits entzogen!"
under_13: "Zeige Kühe, die unter 13 Jahre alt sind (COPPA)"
unlock_account: "Konto entsperren"
users:
@@ -190,6 +208,7 @@ de-moo:
tos: "Die Nutzungsbedingungen der Anwendung ansehen"
are_you_sure: "Bist du dir sicher?"
are_you_sure_delete_account: "Möchtest du dein Konto wirklich schließen? Dieser Schritt kann nicht rückgängig gemacht werden!"
+ are_you_sure_ignore_user: "Bist du sicher, dass du diese Kuh ignorieren möchtest?"
aspect_memberships:
destroy:
failure: "Die Kuh konnte nicht aus der Herde entfernt werden."
@@ -364,7 +383,7 @@ de-moo:
close_account_a: "Gehe an das Ende deiner Kontoeinstellungen und drücke auf die Schaltfläche „Konto schließen“. Um den Vorgang abzuschließen, wirst du dann aufgefordert, dein Kennwort einzugeben. Denk dran: Wenn du dein Konto schließt, kannst du dich auf diesem Bauernhof <strong>nie wieder</strong> mit dem gleichen Benutzernamen registrieren."
close_account_q: "Wie kann ich mein Konto löschen?"
data_other_podmins_a: "Wenn du mit jemandem auf einem anderen Bauernhof teilst, werden alle Beiträge, die du teilst, und eine Kopie deiner Profildaten auf dessen Bauernhof gespeichert („gecached“) und sind der Datenbankleitkuh des Bauernhofs zugänglich. Wenn du einen Beitrag oder deine Profildaten löschst, geschieht dies auch auf allen anderen Bauernhöfen, auf denen die Daten bisher gespeichert waren. Deine Bilder werden nur auf deinen eigenen Bauernhof gespeichert; nur Links, die zu ihnen führen, werden anderen Bauernhöfen übermittelt."
- data_other_podmins_q: "Kann die Leitkuh meines Bauernhofs meine Informationen sehen?"
+ data_other_podmins_q: "Können die Leitkühe anderer Bauernhöfe meine Informationen sehen?"
data_visible_to_podmin_a: "Kurzum: alles. Die Kommunikation zwischen Bauernhöfen läuft immer verschlüsselt ab (mittels SSL und diaspora*s eigener Übertragungsverschlüsselung), aber gespeichert werden die Daten unverschlüsselt. Wenn sie wollte, könnte die Leitkuh deines Bauernhofs (normalerweise die Kuh, die den Bauernhofs betreibt) auf deine gesamten Kontodaten und alles, was du postest, zugreifen (wie auch bei den meisten anderen Webseiten, die Benutzerdaten speichern). Das ist der Grund dafür, dass wir dich auswählen lassen, auf welchem Bauernhof du dich registrierst, damit du einen Bauernhof auswählen kannst, dessen Leitkuh du deine Daten gerne anvertraust. Das Betreiben eines eigenen Bauernhofs gibt dir mehr Sicherheit, weil du dann den Zugriff auf die Datenbank kontrollierst."
data_visible_to_podmin_q: "Wie viele Informationen kann die Leitkuh meines Bauernhofs sehen?"
download_data_a: "Ja. Unten im Bereich „Konto“ deiner Einstellungen sind zwei Schaltflächen, mit denen du deine Daten oder Fotos herunterladen kannst."
@@ -574,9 +593,11 @@ de-moo:
byline: "Die soziale Onlinewelt, in der du deine Daten in der Hand hast."
choose_your_audience: "Wähle dein Publikum"
choose_your_audience_info: "diaspora*s Herden ermöglichen dir, nur mit den Kühen zu teilen, mit denen du möchtest. Du kannst so öffentlich oder privat sein, wie du willst. Teile ein witziges Foto mit der ganzen Welt oder ein tiefes Geheimnis nur mit deinen engsten Freunden. Es ist deine Entscheidung."
+ diaspora_site_link: "föderierten diaspora*-Netzwerks"
headline: "Willkommen auf %{pod_name}"
own_your_data: "Deine Daten, dein Eigentum"
own_your_data_info: "Viele Netzwerke nutzen deine Daten, um Geld zu verdienen, indem sie deine Interaktionen auswerten und diese Informationen verwenden, um dir Werbung zu zeigen. diaspora* nutzt deine Daten zu keinem anderen Zweck, als es dir zu ermöglichen, dich mit anderen zu verbinden und mit ihnen zu teilen."
+ part_of_diaspora: "Teil des %{diaspora_site_link}"
podmin:
byline: "Du bist drauf und dran, das Internet zu ändern. Lass uns gleich alles einrichten, okay?"
configuration_info: "Öffne %{database_path} und %{diaspora_path} in deinem Lieblingstexteditor und sieh sie gründlich durch, sie sind ausführlich kommentiert."
@@ -627,6 +648,8 @@ de-moo:
public_feed: "Öffentlicher diaspora* Feed von %{name}"
source_package: "Quellcodepaket herunterladen"
statistics_link: "Bauernhof-Statistiken"
+ switch_to_standard_mode: "In den Standardmodus wechseln"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
whats_new: "Was gibt's Neues?"
header:
code: "Code"
@@ -1004,7 +1027,11 @@ de-moo:
updated: "Profil aktualisiert"
public: "Öffentlich"
registrations:
- closed: "Neuregistrierungen sind auf diesem Bauernhof geschlossen."
+ closed:
+ another_pod: "einem anderen Bauernhof"
+ closed_pod: "Dieser Bauernhof ist derzeit für Neuanmeldungen geschlossen. Du kannst dem diaspora*-Netzwerk trotzdem beitreten, indem du sich auf %{wiki} registrierst. Da alle Bauernhöfe miteinander verbunden sind, hast du von dort aus Zugriff auf dieselben Inhalte."
+ find_pods: "Es gibt eine Liste von Bauernhöfen, auf denen du dich registrieren kannst, auf %{poduptime}."
+ other_questions: "Wenn du noch weitere Fragen dazu hast, wie du einen Bauernhof auswählst, lies unser %{wiki}."
create:
success: "Du bist diaspora* beigetreten!"
invalid_invite: "Der von dir erstellte Einladungs-Link ist nicht mehr gültig!"
@@ -1195,6 +1222,41 @@ de-moo:
one: "Eine Kuh ist mit %{tag} getaggt"
other: "%{count} Kühe sind mit %{tag} getaggt"
zero: "Keine Kuh ist mit %{tag} getaggt"
+ two_factor_auth:
+ activated:
+ change_button: "Deaktivieren"
+ change_label: "Die Zwei-Faktor-Authentifizierung deaktivieren durch Eingabe deines Passworts"
+ status: "Zwei-Faktor-Authentifizierung aktiviert"
+ confirm:
+ activate_button: "Bestätigen und aktivieren"
+ input_explanation: "Nach dem Scan oder der Eingabe des Schlüssels, gib den sechsstelligen Code ein, der dir angezeigt wird und bestätige die Einstellungen."
+ input_title: "Bestätige mit dem TOTP-Token"
+ manual_explanation: "Falls du den QR-Code nicht automatisch scannen kannst, kannst du den Schlüssel manuell in deiner App eingeben."
+ manual_explanation_cont: "Wir nutzen ein zeitgesteuertes Einmalpasswortverfahren (Time-based One-time Passwords, TOTP) mit sechsstelligen Tokens. Falls deine App dich nach einem Zeitintervall und Algorithmus fragt, gib 30 Sekunden und sha1 ein. <br /> Die Leerzeichen dienen nur der besseren Lesbarkeit, gib den Code ohne diese ein."
+ scan_explanation: "Bitte scanne den QR-Code mit einer TOTP-fähigen App, wie andOTP (Android), FreeOTP (iOS), oder SailOTP (SailfishOS)."
+ scan_title: "Scanne den QR-Code"
+ status: "Die Zwei-Faktor-Authentifizierung wurde noch nicht vollständig aktiviert. Du musst die Aktivierung mit einem TOTP-Token bestätigen."
+ title: "Aktivierung bestätigen"
+ deactivated:
+ change_button: "Aktivieren"
+ change_label: "Zwei-Faktor-Authentifizierung aktivieren"
+ status: "Zwei-Faktor-Authentifizierung nicht aktiviert"
+ explanation: "Die Zwei-Faktor-Authentifizierung ist eine wirkungsvolle Methode, um sicherzustellen, dass du die einzige Kuh bist, die sich in deinem Konto anmelden kann. Bei der Anmeldung gibst du einen 6-stelligen Code zusammen mit deinem Passwort ein, um deine Identität zu bestätigen. Achtung: Wenn du dein Telefon verlierst und die bei Aktivierung dieser Funktion erstellten Wiederherstellungscodes verloren gehen, wird der Zugriff auf dein diaspora*-Konto für immer gesperrt."
+ flash:
+ error_token: "Token war falsch oder ungültig"
+ success_activation: "Zwei-Faktor-Authentifizierung erfolgreich aktiviert"
+ success_deactivation: "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert"
+ input_token:
+ label: "Zwei-Faktor Token"
+ placeholder: "sechsstelliges Zwei-Faktor-Token"
+ recovery:
+ button: "Neue Wiederherstellungscodes generieren"
+ explanation: "Wenn du jemals den Zugriff auf dein Telefon verlierst, kannst du einen der folgenden Wiederherstellungscodes verwenden, um wieder auf dein Konto zuzugreifen. Bewahre die Wiederherstellungscodes sicher auf. Du kannst sie beispielsweise ausdrucken und zusammen mit anderen wichtigen Dokumenten ablegen."
+ explanation_short: "Mithilfe von Wiederherstellungscodes kannst du den Zugriff auf dein Konto wiederherstellen, wenn du dein Telefon verlierst. Beachte, dass du jeden Wiederherstellungscode nur einmal verwenden kannst."
+ invalidation_notice: "Wenn du deine Wiederherstellungscodes verloren hast, kannst du diese hier neu generieren. Deine alten Wiederherstellungscodes werden ungültig."
+ reminder: "Alternativ kannst du einen der Wiederherstellungscodes benutzen."
+ title: "Wiederherstellungscodes"
+ title: "Zwei-Faktor-Authentifizierung"
username: "Benutzername"
users:
confirm_email:
@@ -1243,8 +1305,9 @@ de-moo:
new_password: "Neues Kennwort"
private_message: "… du eine private Nachricht erhältst?"
protocol_handler:
- description: "Beim Klick auf diese Schaltfläche wird dein Browser aufgefordert, einen Handler zu installieren, wodurch web+diaspora:// URLs auf deinem Heimatbauernhof geöffnet werden können. Diese Funktion ist derzeit experimentell und die Interaktionen sind abhängig von Ihrem Browser."
- register: "Registrieren"
+ browser: "Dieses Protokoll befindet sich derzeit in einer experimentellen Phase und der Erfolg der Interaktionen damit ist von deinem Browser abhängig. Möchtest du diesen Handler verwalten oder entfernen, tust du dies über deine Browsereinstellungen. Die Schaltfläche unten ist immer aktiviert und du musst den Handler in jedem von dir verwendeten Browser separat setzen."
+ description: "web+diaspora:// ist ein neues Webprotokoll, das wir eingeführt haben. Jeder Link nach diaspora* von einer externen Webseite, die dieses Protokoll nutzt, kann auf dem Bauernhof geöffnet werden, auf dem dein Konto registriert ist. Klicke auf die untenstehende Schaltfläche, um deinen Browser so einzustellen, dass er %{pod_url} zur Erkennung von externen web+diaspora:// Links nutzt."
+ register: "Registriere den web+diaspora:// Handler auf diesem Browser"
title: "web+diaspora:// protocol handler"
receive_email_notifications: "E-Mail-Benachrichtigungen empfangen, wenn …"
request_export: "Meine Profildaten anfordern"
diff --git a/config/locales/diaspora/de.yml b/config/locales/diaspora/de.yml
index 662b22e6a..88c146b4b 100644
--- a/config/locales/diaspora/de.yml
+++ b/config/locales/diaspora/de.yml
@@ -118,7 +118,7 @@ de:
are_you_sure_unlock_account: "Bist du dir sicher, dass du dieses Konto entsperren möchtest?"
close_account: "Konto schließen"
delete_admin: "%{name} wurde von der Liste der Administratoren entfernt."
- delete_moderator: "%{name} wurde von der Liste der Moderatoren entfernt."
+ delete_moderator: "%{name} wurde von der Liste der Moderatoren entfernt."
delete_spotlight: "%{name} wurde vom Gemeinschafts-Schaukasten entfernt."
does_not_exist: "Benutzer existiert nicht!"
email_to: "per E-Mail einladen"
@@ -208,6 +208,7 @@ de:
tos: "Die Nutzungsbedingungen der Anwendung ansehen"
are_you_sure: "Bist du dir sicher?"
are_you_sure_delete_account: "Möchtest du dein Konto wirklich schließen? Dieser Schritt kann nicht rückgängig gemacht werden!"
+ are_you_sure_ignore_user: "Bist du sicher, dass du den Nutzer ignorieren möchtest?"
aspect_memberships:
destroy:
failure: "Die Person konnte nicht aus dem Aspekt entfernt werden."
@@ -592,9 +593,11 @@ de:
byline: "Die soziale Onlinewelt, in der du deine Daten in der Hand hast."
choose_your_audience: "Wähle dein Publikum"
choose_your_audience_info: "diaspora*s Aspekte ermöglichen dir, nur mit den Menschen zu teilen, mit denen du möchtest. Du kannst so öffentlich oder privat sein, wie du willst. Teile ein witziges Foto mit der ganzen Welt oder ein tiefes Geheimnis nur mit deinen engsten Freunden. Es ist deine Entscheidung."
+ diaspora_site_link: "föderierten diaspora*-Netzwerks"
headline: "Willkommen auf %{pod_name}"
own_your_data: "Deine Daten, dein Eigentum"
own_your_data_info: "Viele Netzwerke nutzen deine Daten, um Geld zu verdienen, indem Sie deine Interaktionen auswerten und diese Informationen verwenden, um dir Werbung zu zeigen. diaspora* nutzt deine Daten zu keinem anderen Zweck, als es dir zu ermöglichen, dich mit anderen zu verbinden und mit ihnen zu teilen."
+ part_of_diaspora: "Teil des %{diaspora_site_link}"
podmin:
byline: "Du bist drauf und dran, das Internet zu ändern. Lass uns gleich alles einrichten, okay?"
configuration_info: "Öffne %{database_path} und %{diaspora_path} in deinem Lieblingstexteditor und sieh sie gründlich durch, sie sind ausführlich kommentiert."
@@ -645,7 +648,8 @@ de:
public_feed: "Öffentlicher diaspora* Feed von %{name}"
source_package: "Quelltextpaket runterladen"
statistics_link: "Pod-Statistiken"
- switch_to_touch_optimized_mode: "Wechseln zum touch-optimierten Modus"
+ switch_to_standard_mode: "In den Standardmodus wechseln"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
whats_new: "Was gibt’s Neues?"
header:
code: "Code"
@@ -1006,7 +1010,11 @@ de:
updated: "Profil aktualisiert"
public: "Öffentlich"
registrations:
- closed: "Neuregistrierungen sind auf diesem diaspora*-Pod geschlossen."
+ closed:
+ another_pod: "einem anderen Pod"
+ closed_pod: "Dieser Pod ist derzeit für Neuanmeldungen geschlossen. Du kannst dem diaspora*-Netzwerk trotzdem beitreten, indem du dich auf %{wiki} registrierst. Da alle Pods miteinander verbunden sind, hast du von dort aus Zugriff auf dieselben Inhalte."
+ find_pods: "Es gibt eine Liste von Pods, auf denen du dich registrieren kannst, auf %{poduptime}."
+ other_questions: "Wenn du noch weitere Fragen dazu hast, wie du einen Pod auswählst, lies unser %{wiki}."
create:
success: "Du bist diaspora* beigetreten!"
invalid_invite: "Der von dir erstellte Einladungs-Link ist nicht mehr gültig!"
@@ -1193,6 +1201,41 @@ de:
one: "1 Person ist mit %{tag} getaggt"
other: "%{count} Personen sind mit %{tag} getaggt"
zero: "Niemand ist mit %{tag} getaggt"
+ two_factor_auth:
+ activated:
+ change_button: "Deaktivieren"
+ change_label: "Die Zwei-Faktor-Authentifizierung deaktivieren durch Eingabe deines Passworts"
+ status: "Zwei-Faktor-Authentifizierung aktiviert"
+ confirm:
+ activate_button: "Bestätigen und aktivieren"
+ input_explanation: "Nach dem Scan oder der Eingabe des Schlüssels, gib den sechsstelligen Code ein, der dir angezeigt wird und bestätige die Einstellungen."
+ input_title: "Bestätige mit dem TOTP-Token"
+ manual_explanation: "Falls du den QR-Code nicht automatisch scannen kannst, kannst du den Schlüssel manuell in deiner App eingeben."
+ manual_explanation_cont: "Wir nutzen ein zeitgesteuertes Einmalpasswortverfahren (Time-based One-time Passwords, TOTP) mit sechsstelligen Tokens. Falls deine App dich nach einem Zeitintervall und Algorithmus fragt, gib 30 Sekunden und sha1 ein. <br /> Die Leerzeichen dienen nur der besseren Lesbarkeit, gib den Code ohne diese ein."
+ scan_explanation: "Bitte scanne den QR-Code mit einer TOTP-fähigen App, wie andOTP (Android), FreeOTP (iOS), oder SailOTP (SailfishOS)."
+ scan_title: "Scanne den QR-Code"
+ status: "Die Zwei-Faktor-Authentifizierung wurde noch nicht vollständig aktiviert. Du musst die Aktivierung mit einem TOTP-Token bestätigen."
+ title: "Aktivierung bestätigen"
+ deactivated:
+ change_button: "Aktivieren"
+ change_label: "Zwei-Faktor-Authentifizierung aktivieren"
+ status: "Zwei-Faktor-Authentifizierung nicht aktiviert"
+ explanation: "Die Zwei-Faktor-Authentifizierung ist eine wirkungsvolle Methode, um sicherzustellen, dass du die einzige Person bist, die sich in deinem Konto anmelden kann. Bei der Anmeldung gibst du einen 6-stelligen Code zusammen mit deinem Passwort ein, um deine Identität zu bestätigen. Achtung: Wenn du dein Telefon verlierst und die bei Aktivierung dieser Funktion erstellten Wiederherstellungscodes verloren gehen, wird der Zugriff auf dein diaspora*-Konto für immer gesperrt."
+ flash:
+ error_token: "Token war falsch oder ungültig"
+ success_activation: "Zwei-Faktor-Authentifizierung erfolgreich aktiviert"
+ success_deactivation: "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert"
+ input_token:
+ label: "Zwei-Faktor-Token"
+ placeholder: "sechsstelliges Zwei-Faktor-Token"
+ recovery:
+ button: "Neue Wiederherstellungscodes generieren"
+ explanation: "Wenn du jemals den Zugriff auf dein Telefon verlierst, kannst du einen der folgenden Wiederherstellungscodes verwenden, um wieder auf dein Konto zuzugreifen. Bewahre die Wiederherstellungscodes sicher auf. Du kannst sie beispielsweise ausdrucken und zusammen mit anderen wichtigen Dokumenten ablegen."
+ explanation_short: "Mithilfe von Wiederherstellungscodes kannst du den Zugriff auf dein Konto wiederherstellen, wenn du dein Telefon verlierst. Beachte, dass du jeden Wiederherstellungscode nur einmal verwenden kannst."
+ invalidation_notice: "Wenn du deine Wiederherstellungscodes verloren hast, kannst du diese hier neu generieren. Deine alten Wiederherstellungscodes werden ungültig."
+ reminder: "Alternativ kannst du einen der Wiederherstellungscodes benutzen."
+ title: "Wiederherstellungscodes"
+ title: "Zwei-Faktor-Authentifizierung"
username: "Benutzername"
users:
confirm_email:
@@ -1241,9 +1284,9 @@ de:
new_password: "Neues Kennwort"
private_message: "du eine private Nachricht erhältst"
protocol_handler:
- browser: "Dieses Protokoll befindet sich derzeit in einer experimentellen Phase und der Erfolg der Interaktionen, die es verwenden, ist von deinem Browser abhängig. Möchtest du diesen Handler verwalten oder entfernen, tust du dies mit deinen Browser-Einstellungen. Die untere Schaltfläche ist immer aktiviert und du musst den Handler in jedem von dir verwendeten Browser separat setzen."
- description: "Beim Klick auf diese Schaltfläche wird dein Browser aufgefordert, einen Handler zu installieren, wodurch web+diaspora:// URLs auf deinem Heimatpod geöffnet werden können. Diese Funktion ist derzeit experimentell und die Interaktionen sind abhängig von deinem Browser."
- register: "Registrieren"
+ browser: "Dieses Protokoll befindet sich derzeit in einer experimentellen Phase und der Erfolg der Interaktionen damit ist von deinem Browser abhängig. Möchtest du diesen Handler verwalten oder entfernen, tust du dies über deine Browsereinstellungen. Die Schaltfläche unten ist immer aktiviert und du musst den Handler in jedem von dir verwendeten Browser separat setzen."
+ description: "web+diaspora:// ist ein neues Webprotokoll, das wir eingeführt haben. Jeder Link nach diaspora* von einer externen Webseite, die dieses Protokoll nutzt, kann auf dem Pod geöffnet werden, auf dem dein Konto registriert ist. Klicke auf die untenstehende Schaltfläche, um deinen Browser so einzustellen, dass er %{pod_url} zur Erkennung von externen web+diaspora:// Links nutzt."
+ register: "Registriere den web+diaspora:// Handler auf diesem Browser"
title: "web+diaspora:// protocol handler"
receive_email_notifications: "E-Mail-Benachrichtigungen empfangen, wenn …"
request_export: "Meine Profildaten anfordern"
diff --git a/config/locales/diaspora/de_formal.yml b/config/locales/diaspora/de_formal.yml
index 2753af7de..4cdca0599 100644
--- a/config/locales/diaspora/de_formal.yml
+++ b/config/locales/diaspora/de_formal.yml
@@ -90,15 +90,18 @@ de_formal:
week: "Woche"
user_entry:
account_closed: "Konto wurde geschlossen."
+ admin: "Administrator"
diaspora_handle: "diaspora* ID"
email: "E-Mail"
guid: "GUID"
id: "ID"
invite_token: "Einladungstoken"
last_seen: "Zuletzt gesehen"
+ moderator: "Moderator"
? "no"
: Nein
nsfw: "NSFW (unangemessen für den Arbeitsplatz)"
+ spotlight: "Schaukasten"
unknown: "Unbekannt"
? "yes"
: Ja
@@ -106,14 +109,29 @@ de_formal:
account_closing_scheduled: "Das Konto von %{name} soll geschlossen werden. Dies dauert ein paar Augenblicke..."
account_locking_scheduled: "Das Konto von %{name} ist zur Sperrung vorgesehen. Es wird in wenigen Augenblicken verarbeitet..."
account_unlocking_scheduled: "Das Konto von %{name} ist zur Entsperrung vorgesehen. Es wird in wenigen Augenblicken verarbeitet..."
+ add_admin: "%{name} wurde zum Administrator befördert."
add_invites: "Einladungen hinzufügen"
+ add_moderator: "%{name} wurde zum Moderator befördert."
+ add_spotlight: "%{name} wurde in den Gemeinschafts-Schaukasten gestellt"
are_you_sure: "Möchten Sie Ihr Konto wirklich schließen?"
are_you_sure_lock_account: "Sind Sie sicher, dass Sie dieses Konto sperren möchten?"
are_you_sure_unlock_account: "Sind Sie sicher, dass Sie dieses Konto entsperren möchten?"
close_account: "Konto schließen"
+ delete_admin: "%{name} wurde von der Liste der Administratoren entfernt."
+ delete_moderator: "%{name} wurde von der Liste der Moderatoren entfernt."
+ delete_spotlight: "%{name} wurde vom Gemeinschafts-Schaukasten entfernt."
+ does_not_exist: "Benutzer existiert nicht!"
email_to: "per E-Mail einladen"
invite: "Einladen"
lock_account: "Konto sperren"
+ make_admin: "Zum Administrator befördern"
+ make_moderator: "Zum Moderator befördern"
+ make_spotlight: "In den Gemeinschafts-Schaukasten stellen"
+ remove_admin: "Als Administrator entfernen"
+ remove_moderator: "Als Moderator entfernen"
+ remove_spotlight: "Aus dem Gemeinschafts-Schaukasten entfernen"
+ role_implemented: "%{name} hat diese Rolle bereits erhalten!"
+ role_removal_implemented: "%{name} wurde diese Rolle bereits entzogen!"
under_13: "Zeige Benutzer, die unter 13 Jahre alt sind (COPPA)"
unlock_account: "Konto entsperren"
users:
@@ -190,6 +208,7 @@ de_formal:
tos: "Die Nutzungsbedingungen der Anwendung ansehen"
are_you_sure: "Sind Sie sicher?"
are_you_sure_delete_account: "Möchten Sie Ihr Konto wirklich schließen? Dieser Schritt kann nicht rückgängig gemacht werden!"
+ are_you_sure_ignore_user: "Sind Sie sicher, dass Sie den Nutzer ignorieren möchten?"
aspect_memberships:
destroy:
failure: "Die Person konnte nicht aus dem Aspekt entfernt werden."
@@ -574,9 +593,11 @@ de_formal:
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 den 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. Es ist Ihre Entscheidung."
+ diaspora_site_link: "föderierten diaspora*-Netzwerks"
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 anzuzeigen. diaspora* nutzt Ihre Daten zu keinem anderen Zweck, als es Ihnen zu ermöglichen, sich mit anderen zu verbinden und mit ihnen zu teilen."
+ part_of_diaspora: "Teil des %{diaspora_site_link}"
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."
@@ -627,6 +648,8 @@ de_formal:
public_feed: "Öffentlicher diaspora* Feed von %{name}"
source_package: "Quelltextpaket herunterladen"
statistics_link: "Pod-Statistiken"
+ switch_to_standard_mode: "In den Standardmodus wechseln"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
whats_new: "Was gibt’s Neues?"
header:
code: "Code"
@@ -979,7 +1002,11 @@ de_formal:
updated: "Profil aktualisiert"
public: "Öffentlich"
registrations:
- closed: "Neuregistrierungen sind auf diesem Pod geschlossen."
+ closed:
+ another_pod: "einem anderen Pod"
+ closed_pod: "Dieser Pod ist derzeit für Neuanmeldungen geschlossen. Sie können dem diaspora*-Netzwerk trotzdem beitreten, indem Sie sich auf %{wiki} registrieren. Da alle Pods miteinander verbunden sind, haben Sie von dort aus Zugriff auf dieselben Inhalte."
+ find_pods: "Es gibt eine Liste von Pods, auf denen Sie sich registrieren können, auf %{poduptime}."
+ other_questions: "Wenn Sie noch weitere Fragen dazu haben, wie Sie einen Pod auswählen, lesen Sie unser %{wiki}."
create:
success: "Sie sind diaspora* beigetreten!"
invalid_invite: "Der von Ihnen erstellte Einladungs-Link ist nicht mehr gültig!"
@@ -1166,6 +1193,41 @@ de_formal:
one: "1 Person getaggt mit %{tag}"
other: "%{count} Personen getaggt mit %{tag}"
zero: "Keiner getaggt mit %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Deaktivieren"
+ change_label: "Die Zwei-Faktor-Authentifizierung deaktivieren durch Eingabe Ihres Passworts"
+ status: "Zwei-Faktor-Authentifizierung aktiviert"
+ confirm:
+ activate_button: "Bestätigen und aktivieren"
+ input_explanation: "Nach dem Scan oder der Eingabe des Schlüssels, geben Sie den sechsstelligen Code ein, der Ihnen angezeigt wird und bestätigen Sie die Einstellungen."
+ input_title: "Bestätigen Sie mit dem TOTP-Token"
+ manual_explanation: "Falls Sie den QR-Code nicht automatisch scannen können, können Sie den Schlüssel manuell in Ihrer App eingeben."
+ manual_explanation_cont: "Wir nutzen ein zeitgesteuertes Einmalpasswortverfahren (Time-based One-time Passwords, TOTP) mit sechsstelligen Tokens. Falls Ihre App Sie nach einem Zeitintervall und Algorithmus fragt, geben Sie 30 Sekunden und sha1 ein. <br /> Die Leerzeichen dienen nur der besseren Lesbarkeit, geben Sie den Code ohne diese ein."
+ scan_explanation: "Bitte scannen Sie den QR-Code mit einer TOTP-fähigen App, wie andOTP (Android), FreeOTP (iOS), oder SailOTP (SailfishOS)."
+ scan_title: "Scannen Sie den QR-Code"
+ status: "Die Zwei-Faktor-Authentifizierung wurde noch nicht vollständig aktiviert. Sie müssen die Aktivierung mit einem TOTP-Token bestätigen."
+ title: "Aktivierung bestätigen"
+ deactivated:
+ change_button: "Aktivieren"
+ change_label: "Zwei-Faktor-Authentifizierung aktivieren"
+ status: "Zwei-Faktor-Authentifizierung nicht aktiviert"
+ explanation: "Die Zwei-Faktor-Authentifizierung ist eine wirkungsvolle Methode, um sicherzustellen, dass Sie die einzige Person sind, die sich in Ihrem Konto anmelden kann. Bei der Anmeldung geben Sie einen 6-stelligen Code zusammen mit Ihrem Passwort ein, um Ihre Identität zu bestätigen. Achtung: Wenn Sie Ihr Telefon verlieren und die bei Aktivierung dieser Funktion erstellten Wiederherstellungscodes verlieren, wird der Zugriff auf Ihr diaspora*-Konto für immer gesperrt."
+ flash:
+ error_token: "Token war falsch oder ungültig"
+ success_activation: "Zwei-Faktor-Authentifizierung erfolgreich aktiviert"
+ success_deactivation: "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert"
+ input_token:
+ label: "Zwei-Faktor-Token"
+ placeholder: "sechsstelliges Zwei-Faktor-Token"
+ recovery:
+ button: "Neue Wiederherstellungscodes generieren"
+ explanation: "Wenn Sie jemals den Zugriff auf Ihr Telefon verlieren, können Sie einen der folgenden Wiederherstellungscodes verwenden, um wieder auf Ihr Konto zuzugreifen. Bewahren Sie die Wiederherstellungscodes sicher auf. Sie können sie beispielsweise ausdrucken und zusammen mit anderen wichtigen Dokumenten ablegen."
+ explanation_short: "Mithilfe von Wiederherstellungscodes können Sie den Zugriff auf Ihr Konto wiederherstellen, wenn Sie Ihr Telefon verlieren. Beachten Sie, dass Sie jeden Wiederherstellungscode nur einmal verwenden können."
+ invalidation_notice: "Wenn Sie Ihre Wiederherstellungscodes verloren haben, können Sie diese hier neu generieren. Ihre alten Wiederherstellungscodes werden ungültig."
+ reminder: "Alternativ können Sie einen der Wiederherstellungscodes benutzen."
+ title: "Wiederherstellungscodes"
+ title: "Zwei-Faktor-Authentifizierung"
username: "Benutzername"
users:
confirm_email:
@@ -1214,8 +1276,9 @@ de_formal:
new_password: "Neues Passwort"
private_message: "Sie eine private Nachricht erhalten"
protocol_handler:
- description: "Beim Klick auf diese Schaltfläche wird Ihr Browser aufgefordert, einen Handler zu installieren, wodurch web+diaspora:// URLs auf Ihrem Heimatpod geöffnet werden können. Diese Funktion ist derzeit experimentell und die Interaktionen sind abhängig von Ihrem Browser."
- register: "Registrieren"
+ browser: "Dieses Protokoll befindet sich derzeit in einer experimentellen Phase und der Erfolg der Interaktionen damit ist von Ihrem Browser abhängig. Möchten Sie diesen Handler verwalten oder entfernen, tun Sie dies über Ihre Browsereinstellungen. Die Schaltfläche unten ist immer aktiviert und Sie müssen den Handler in jedem von Ihnen verwendeten Browser separat setzen."
+ description: "web+diaspora:// ist ein neues Webprotokoll, das wir eingeführt haben. Jeder Link nach diaspora* von einer externen Webseite, die dieses Protokoll nutzt, kann auf dem Pod geöffnet werden, auf dem Ihr Konto registriert ist. Klicken Sie auf die untenstehende Schaltfläche, um Ihren Browser so einzustellen, dass er %{pod_url} zur Erkennung von externen web+diaspora:// Links nutzt."
+ register: "Registriere den web+diaspora:// Handler auf diesem Browser"
title: "web+diaspora:// protocol handler"
receive_email_notifications: "E-Mail-Benachrichtigungen empfangen, wenn:"
request_export: "Meine Profildaten anfordern"
diff --git a/config/locales/diaspora/el.yml b/config/locales/diaspora/el.yml
index d3dd49eba..68b38f9f7 100644
--- a/config/locales/diaspora/el.yml
+++ b/config/locales/diaspora/el.yml
@@ -469,7 +469,6 @@ el:
updated: "Το προφίλ ενημερώθηκε"
public: "Δημόσιο"
registrations:
- closed: "Οι εγγραφές είναι κλειστές σε αυτό το pod του diaspora*."
create:
success: "Έγινες μέλος στο diaspora*!"
invalid_invite: "Ο σύνδεσμος που έδωσες δεν είναι πια έγκυρος!"
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index a2cac0ccc..5fea36f0a 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -407,11 +407,6 @@ en:
rename_aspect_a: "Click “My aspects” in the side-bar from a stream view and click the pencil icon by the aspect you want to rename, or go to your Contacts page and select the relevant aspect. Then click the edit icon next to the aspect name at the top of this page, change the name and press “Update”."
delete_aspect_q: "How do I delete an aspect?"
delete_aspect_a: "Click “My aspects” in the side-bar from a stream view and click the pencil icon by the aspect you want to delete, or go to your Contacts page and select the relevant aspect. Then click the trash icon in the top right of the page."
- chat:
- title: "Chat"
- contacts_page: "contacts page"
- add_contact_roster_q: "How do I chat with someone in diaspora*?"
- add_contact_roster_a: "First, you need to enable chat for one of the aspects that person is in. To do so, go to the %{contacts_page}, select the aspect you want and click on the chat icon to enable chat for the aspect. %{toggle_privilege} You could, if you prefer, create a special aspect called “Chat” and add the people you want to chat with to that aspect. Once you’ve done this, open the chat interface and select the person you want to chat with."
mentions:
title: "Mentions"
what_is_a_mention_q: "What is a “mention”?"
@@ -560,6 +555,8 @@ en:
home:
default:
headline: "Welcome to %{pod_name}"
+ part_of_diaspora: "Part of the %{diaspora_site_link}"
+ diaspora_site_link: "diaspora* federated network"
byline: "The online social world where you are in control"
be_who_you_want_to_be: "Be who you want to be"
be_who_you_want_to_be_info: "A lot of networks insist that you use your real identity. Not diaspora*. Here you can choose who you want to be, and share as much or as little about yourself as you want. It really is up to you how you want to interact with other people."
@@ -1154,7 +1151,11 @@ en:
terms_link: "terms of service"
create:
success: "You’ve joined diaspora*!"
- closed: "Signups are closed on this diaspora* pod."
+ closed:
+ closed_pod: "This pod is currently closed to new registrations. However, you can still join the diaspora* network by registering on %{wiki}. Because all pods are interconnected, you will have access to the same content there."
+ another_pod: "another pod"
+ find_pods: "There’s a list of pods you can sign up to at %{poduptime}."
+ other_questions: "If you have any other questions regarding choosing a pod, check out our %{wiki}."
invalid_invite: "The invite link you provided is no longer valid!"
reshares:
@@ -1415,6 +1416,42 @@ en:
email_confirmed: "Email %{email} activated"
email_not_confirmed: "Email could not be activated. Wrong link?"
+ two_factor_auth:
+ title: "Two-factor authentication"
+ explanation: "Two-factor authentication is a powerful way to ensure you are the only one able to sign in to your account. When signing in, you will enter a 6-digit code along with your password to prove your identity. Be careful though: if you lose your phone and the recovery codes created when you activate this feature, access to your diaspora* account will be blocked forever."
+ activated:
+ status: "Two-factor authentication activated"
+ change_label: "Deactivate two-factor authentication by entering your password"
+ change_button: "Deactivate"
+ deactivated:
+ status: "Two-factor authentication not activated"
+ change_label: "Activate two-factor authentication"
+ change_button: "Activate"
+ confirm:
+ title: "Confirm activation"
+ status: "Two-factor authentication is not fully activated yet, you need to confirm activation with a TOTP token"
+ scan_title: "Scan the QR code"
+ scan_explanation: "Please scan the QR code with a TOTP capable app, such as andOTP (Android), FreeOTP (iOS), SailOTP (SailfishOS)."
+ manual_explanation: "In case you can’t scan the QR code automatically you can manually enter the secret in your app."
+ manual_explanation_cont: "We are using time-based one-time passwords (TOTP) with six-digit tokens. In case your app prompts you for a time interval and algorithm enter 30 seconds and sha1 respectively. <br /> The spaces are just for readability, please enter the code without them."
+ input_title: "Confim with TOTP token"
+ input_explanation: "After scanning or entering the secret, enter the six-digit code you see and confirm the setup."
+ activate_button: "Confirm and activate"
+ input_token:
+ label: "Two-factor token"
+ placeholder: "six-digit two-factor token"
+ recovery:
+ title: "Recovery codes"
+ reminder: "Alternatively, you can use one of the recovery codes."
+ explanation: "If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe. For example, you may print them and store them with other important documents."
+ explanation_short: "Recovery codes allow you to regain access to your account if you lose your phone. Note that you can use each recovery code only once."
+ invalidation_notice: "If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated."
+ button: "Generate new recovery codes"
+ flash:
+ success_activation: "Successfully activated two-factor authentication"
+ success_deactivation: "Successfully deactivated two-factor authentication"
+ error_token: "Token was incorrect or invalid"
+
will_paginate:
previous_label: "&laquo; previous"
next_label: "next &raquo;"
diff --git a/config/locales/diaspora/en_1337.yml b/config/locales/diaspora/en_1337.yml
index f547e499c..ae7605555 100644
--- a/config/locales/diaspora/en_1337.yml
+++ b/config/locales/diaspora/en_1337.yml
@@ -440,7 +440,6 @@ en_1337:
updated: "PR0F1L3 UPD473D"
public: "pub1!c"
registrations:
- closed: "51GNUP5 4R3 CL053D 0N 7H15 D* P0D!"
create:
success: "U H4V3 J01N3D D*"
invalid_invite: "7H3 1NV173 L1NK U PR0V1D3D 15 N0 L0N63R V4L1D!"
diff --git a/config/locales/diaspora/en_pirate.yml b/config/locales/diaspora/en_pirate.yml
index cdd026664..ac63d8060 100644
--- a/config/locales/diaspora/en_pirate.yml
+++ b/config/locales/diaspora/en_pirate.yml
@@ -408,7 +408,6 @@ en_pirate:
updated: "Ye profile updated"
public: "The Sea can see this"
registrations:
- closed: "Signups be closed on this ship!"
create:
success: "Ye've joined diaspora*! YARGH!"
invalid_invite: "The invite link ye provided is no longer valid ye scalawag! Yar!"
diff --git a/config/locales/diaspora/en_shaw.yml b/config/locales/diaspora/en_shaw.yml
index a06872275..3088871c8 100644
--- a/config/locales/diaspora/en_shaw.yml
+++ b/config/locales/diaspora/en_shaw.yml
@@ -304,7 +304,6 @@ en_shaw:
updated: "𐑐𐑮𐑴𐑓𐑲𐑤 𐑳𐑐𐑛𐑱𐑑𐑩𐑛"
public: "𐑐𐑳𐑚𐑤𐑦𐑒"
registrations:
- closed: "𐑕𐑲𐑯𐑩𐑐𐑕 𐑸 𐑒𐑤𐑴𐑟𐑛 𐑪𐑯 𐑞𐑦𐑕 ·𐑛𐑦𐑨𐑕𐑐𐑹𐑩 𐑐𐑪𐑛."
create:
success: "𐑿'𐑝 𐑡𐑶𐑯𐑛 ·𐑛𐑦𐑨𐑕𐑐𐑹𐑩!"
new:
diff --git a/config/locales/diaspora/en_valspeak.yml b/config/locales/diaspora/en_valspeak.yml
index 5bd4e3c83..305e5df24 100644
--- a/config/locales/diaspora/en_valspeak.yml
+++ b/config/locales/diaspora/en_valspeak.yml
@@ -765,7 +765,6 @@ en_valspeak:
updated: "Profie updated!!! <3"
public: "like, every1 can c this"
registrations:
- closed: "Signups r like... closed on here... sry bout that :\\ totally lame, right?"
create:
success: "u've joined d*!!! OMFG YAAAAAYYY!! :DDD"
invalid_invite: "OMG, dude, ur invite link is like... SOOOO old... like... gross. so like, sry but its no longer valid. Kthxbye<3"
diff --git a/config/locales/diaspora/eo.yml b/config/locales/diaspora/eo.yml
index b51ad479c..f8aa1db3b 100644
--- a/config/locales/diaspora/eo.yml
+++ b/config/locales/diaspora/eo.yml
@@ -529,7 +529,6 @@ eo:
updated: "Profilo ĝisdatigita"
public: "Publika"
registrations:
- closed: "Registrado estas fermita ĉe tiu ĉi DIASPORA* 'pod' (servilo)."
create:
success: "Vi aniĝis al DIASPORA*!"
invalid_invite: "La invitoligilo, kiun vi donis, ne plu validas!"
diff --git a/config/locales/diaspora/es-AR.yml b/config/locales/diaspora/es-AR.yml
index 7041e8082..8b52739b3 100644
--- a/config/locales/diaspora/es-AR.yml
+++ b/config/locales/diaspora/es-AR.yml
@@ -965,7 +965,6 @@ es-AR:
updated: "Perfil actualizado"
public: "Público"
registrations:
- closed: "Los registros están cerrados en este servidor de diaspora*."
create:
success: "¡Te has unido a diaspora*!"
invalid_invite: "¡El enlace de la invitación ya no es válido!"
diff --git a/config/locales/diaspora/es-CL.yml b/config/locales/diaspora/es-CL.yml
index b111fe1fc..7c47f7894 100644
--- a/config/locales/diaspora/es-CL.yml
+++ b/config/locales/diaspora/es-CL.yml
@@ -563,7 +563,6 @@ es-CL:
updated: "Perfil actualizado"
public: "Publico"
registrations:
- closed: "Los registros están cerrados en este servidor de Diaspora."
create:
success: "¡Te has unido a Diaspora!"
invalid_invite: "¡El enlace de invitación ya no es válido!"
@@ -673,6 +672,20 @@ es-CL:
follow: "Seguir a #%{tag}"
none: "¡La etiqueta vacía no existe!"
stop_following: "Dejar de seguir a #%{tag}"
+ two_factor_auth:
+ activated:
+ change_label: "Desactiva la verificación en dos pasos ingresando tu contraseña"
+ status: "Verificación en dos pasos activada"
+ confirm:
+ status: "La verificación en dos pasos no está completamente activada. Necesitas confirmar la activación con un token TOTP."
+ deactivated:
+ change_label: "Activar la verificación en dos pasos"
+ status: "La verificación en dos pasos no está activada"
+ explanation: "La verificación en dos pasos es una forma poderosa de asegurar que seas el único que puede acceder a tu cuenta. Al iniciar sesión, ingresarás un código de 6 dígitos junto a tu contraseña para demostrar tu identidad. Ten cuidado: si pierdes tu teléfono y los códigos de recuperación creados cuando actives esta característica, el acceso a tu cuenta de diaspora* será bloquedo para siempre."
+ flash:
+ success_activation: "Verificación en dos pasos activada exitosamente"
+ success_deactivation: "Verificación en dos pasos desactivada exitosamente"
+ title: "Verificación en dos pasos"
username: "Nombre de usuario"
users:
confirm_email:
diff --git a/config/locales/diaspora/es-MX.yml b/config/locales/diaspora/es-MX.yml
index bd87397be..77b3a49bd 100644
--- a/config/locales/diaspora/es-MX.yml
+++ b/config/locales/diaspora/es-MX.yml
@@ -560,7 +560,6 @@ es-MX:
updated: "Perfil actualizado"
public: "Público"
registrations:
- closed: "Los registros están cerrados en este servidor de Diaspora."
create:
success: "¡Te has unido a Diaspora!"
invalid_invite: "¡El enlace de invitación que proporcionaste ya no es válido!"
diff --git a/config/locales/diaspora/es.yml b/config/locales/diaspora/es.yml
index 00929b83a..c7b804b1c 100644
--- a/config/locales/diaspora/es.yml
+++ b/config/locales/diaspora/es.yml
@@ -33,7 +33,7 @@ es:
reshare:
attributes:
root_guid:
- taken: "Es buena, ¿eh? ¡Ya habías compartido esa publicación!"
+ taken: "Genial pero... ¡ya has compartido esa publicación!"
user:
attributes:
email:
@@ -69,7 +69,7 @@ es:
zero: "%{count} comentarios"
current_segment: "El período actual tiene un promedio de <b>%{post_yest}</b> publicaciones por usuario, de <b>%{post_day}</b>"
daily: "Diario"
- display_results: "Mostrando resultados del período %{segment}"
+ display_results: "Mostrando resultados en el espacio de tiempo %{segment}"
go: "Adelante"
month: "Mes"
posts:
@@ -94,6 +94,7 @@ es:
email: "Correo Electrónico"
guid: "GUID"
id: "identificador"
+ invite_token: "Token de invitación"
last_seen: "visto por última vez"
moderator: "Moderador"
? "no"
@@ -170,18 +171,18 @@ es:
aud:
description: ""
name:
- name: "nombre"
+ name: "Nombre"
nickname:
name: "apodo"
openid:
description: "Permite que la aplicación lea tu perfil básico"
name: "perfil básico"
picture:
- description: "Esto otorga permisos de imagen a la aplicación."
+ description: "Esto permite a la aplicación el acceso a la galería de imágenes."
name: "fotografía"
profile:
- description: "Esto permite que la aplicación lea tu perfil completo"
- name: "Perfil completo"
+ description: "Esto permite que la aplicación tenga acceso a la información que figura en tu perfil."
+ name: "Perfil."
read:
description: "Esto permite a la aplicación leer tu portada, tus conversaciones y tu perfil completo"
name: "leer perfil, portada y conversaciones"
@@ -219,7 +220,7 @@ es:
stay_updated: "Mantente actualizado"
stay_updated_explanation: "Tu página principal la forman todos tus contactos, las etiquetas que sigues, y si lo deseas, las publicaciones de diferentes miembros creativos de la comunidad."
destroy:
- failure: "%{name} no pudo ser eliminado."
+ failure: "%{name} no ha podido eliminarse."
success: "%{name} fue eliminado con éxito."
success_auto_follow_back: "Se borró correctamente %{name}. Este aspecto se usaba para seguir automáticamente a los usuarios, revisa tu configuración para seleccionar un nuevo aspecto de autoseguimiento."
edit:
@@ -249,7 +250,7 @@ es:
tag_question: "pregunta"
tutorial_link_text: "Tutoriales"
tutorials_and_wiki: "%{faq}, %{tutorial} y %{wiki}: ayuda para dar tus primeros pasos."
- introduce_yourself: "Ésta es tu página principal. Adelante, preséntate..."
+ introduce_yourself: "Ésta es tu página principal. ¡Adelante, preséntate!"
keep_pod_running: "Haz que %{pod} vaya más rápido, ¡invita a café a nuestros servidores con una donación mensual!"
new_here:
follow: "¡Sigue %{link} y da la bienvenida a los nuevos miembros de Diaspora*!"
@@ -275,7 +276,7 @@ es:
success: "Tu aspecto, %{name}, fue editado con éxito."
blocks:
create:
- failure: "No pude ignorar a este usuario. #evasion"
+ failure: "No ha sido posible ignorar a este usuario. #evasiónderesponsabilidades"
success: "Bien, no verás a esa persona en tu entrada otra vez. #silencio!"
destroy:
failure: "No podría dejar de ignorar a ese usuario. #evasion"
@@ -585,9 +586,11 @@ es:
byline: "La red social mundial donde tú tienes el control"
choose_your_audience: "Escoge tu público"
choose_your_audience_info: "Los aspectos de diaspora* te permiten compartir sólamente con las personas que quieras. Puedes ser tan público o privado como prefieras. Comparte una foto divertida con el mundo entero, o un oscuro secreto con tus amigos más cercanos. Tú tienes el control."
+ diaspora_site_link: "Red federada de diaspora*"
headline: "Bienvenido a %{pod_name}"
own_your_data: "Sé el dueño de tus datos"
own_your_data_info: "Muchas redes usan tus datos para hacer dinero analizando tus interacciones y usando esa información para mostrarte anuncios. diaspora* no usa tus datos para ningún propósito distinto que permitirte estar en contacto con otros."
+ part_of_diaspora: "Parte de %{diaspora_site_link}"
podmin:
byline: "Estas a punto de cambiar internet. Vamos a configurarlo, ¿de acuerdo?"
configuration_info: "Abre %{database_path} y %{diaspora_path} en tu editor de texto favorito y revisalos cuidadosamente, están comentados al detalle."
@@ -608,7 +611,7 @@ es:
update_your_pod: "Actualiza tu pod"
update_your_pod_info: "Puedes encontrar %{update_instructions}"
invitation_codes:
- already_logged_in: "Has sido invitado por %{inviter} para unirte a este pod, pero ya tienes la sesión iniciada."
+ already_logged_in: "Has recibido una invitación de %{inviter} para unirte a este pod pero ya has iniciado la sesión."
not_valid: "Ese código de invitación ya no es válido"
invitations:
create:
@@ -616,7 +619,7 @@ es:
empty: "Por favor, introduce al menos una dirección de correo electrónico."
no_more: "No tienes más invitaciones."
note_already_sent: "Las invitaciones han sido enviadas a: %{emails}"
- rejected: "Hubo problemas con las siguientes direcciones de correo: %{emails}"
+ rejected: "Por favor, verifica las siguientes direcciones de correo electrónico: %{emails}"
sent: "Las invitaciones han sido enviadas a: %{emails}"
new:
codes_left:
@@ -649,7 +652,7 @@ es:
toggle_navigation: "Cambiar navegación"
likes:
create:
- error: "¡Falló el 'me gusta'!"
+ error: "Ha ocurrido un error al darle \"Me gusta\"."
destroy:
error: "Ocurrió un error al quitar el \"Me gusta\""
limited: "Limitado"
@@ -688,6 +691,7 @@ es:
mark_read: "Marcar como leído"
mark_unread: "Marcar como no leído"
mentioned: "Mencionado"
+ mentioned_in_comment: "Mencionado en el comentario."
no_notifications: "Todavía no tienes ninguna notificación."
notifications: "Notificaciones"
reshared: "Compartido"
@@ -710,6 +714,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:
+ one: "%{actors} te ha mencionado en <a href='%{comment_path}'>un comentario</a> de la publicación %{post_link}."
+ other: "%{actors} te han mencionado en <a href='%{comment_path}'>un comentario</a> de la publicación %{post_link}."
mentioned_in_comment_deleted:
one: "%{actors} te ha mencionado en un comentario eliminado."
other: "%{actors} te han mencionado en un comentario eliminado."
@@ -748,26 +755,26 @@ es:
view_profile: "Ver el perfil de %{name}"
csrf_token_fail:
body: |-
- Hola %{name},
+ Hola, %{name}:
- diaspora* ha detectado un intento de acceso a tu cuenta que podría ser no autorizado. Para evitar que tu información pueda verse comprometida, se ha cerrado tu sesión. No te preocupes, puedes entrar otra vez de forma segura.
+ Diaspora* ha detectado un intento de acceso a tu cuenta que podría ser no autorizado. Se ha procedido al cierre de sesión para evitar que tu información pueda verse comprometida. No te preocupes; puedes entrar otra vez de forma segura.
- Se ha recibido una solicitud usando un token CSFR incorrecto o incompleto. Podría ser algo inocente, pero podría ser también una petición falsificada procedente de otra web (CSFR).
+ Se ha recibido una solicitud usando un token CSFR incorrecto o inexistente. Podría ser algo inocente, pero podría ser también una petición falsificada procedente de otra web (un ataque CSFR).
- Esto podría haber sido causado por:
+ Puede haber varios motivos por los que esto puede haber ocurrido:
- - Una extensión manipulando la solicitud o realizando solicitudes sin emplear un token (código de seguridad);
- - Una pestaña abierta de la sesión anterior;
- - Otra página web realizando solicitudes, con o sin tu permiso;
+ - Una extensión manipulando la solicitud o realizando solicitudes sin emplear un token (código de seguridad).
+ - Una pestaña abierta de la sesión anterior.
+ - Otra página web realizando solicitudes, con o sin tu permiso.
- Otras aplicaciones externas;
- Código malicioso intentando acceder a tu información.
Para más información acerca de CSFR ver %{link}%{link}.
- Si ves este mensaje de forma repetida, por favor revisa los anteriores puntos, incluyendo las extensiones de tu buscador de internet. 
+ Si ves este mensaje de forma repetida, por favor revisa los anteriores puntos, incluyendo las extensiones de tu navegador de internet. 
Gracias,
- El robot del email de dispora*!
+ ¡El robot de email de dispora*!
subject: "Hemos recibido una solicitud no autorizada desde tu cuenta, %{name}"
email_sent_by_diaspora: "Este correo electrónico fue enviado por %{pod_name}. Si quieres dejar de recibir correos como este,"
export_email:
@@ -842,6 +849,9 @@ es:
mentioned:
limited_post: "Se te mencionó en un post privado."
subject: "%{name} te mencionó en diaspora*"
+ mentioned_in_comment:
+ limited_post: "Te han mencionado en un comentario de una publicación privada."
+ reply: "Contestar o ver esta conversación >"
private_message:
reply_to_or_view: "Responder o ver esta conversación >"
subject: "Tienes un nuevo mensaje privado"
@@ -975,7 +985,11 @@ es:
updated: "Perfil actualizado"
public: "Público"
registrations:
- closed: "Los registros están cerrados en este servidor de Diaspora."
+ closed:
+ another_pod: "Otro pod"
+ closed_pod: "La inscripción de nuevos usuarios se encuentra cerrada en este momento en este pod. Puedes unirte de todas maneras a la red de diaspora* registrándote en %{wiki}. ¡Tendrás acceso al mismo tipo de contenido ya que todos los pods están entrelazados y conectados de forma interna!"
+ find_pods: "Lista de los pods en los que es posible registrarse: %{poduptime}"
+ other_questions: "Échale un vistazo nuestra %{wiki} si no sabes que pod elegir."
create:
success: "¡Te has unido a Diaspora*!"
invalid_invite: "¡El enlace de la invitación ya no es válido!"
@@ -1050,11 +1064,11 @@ es:
mobile_row_checked: "%{name} (eliminar)"
mobile_row_unchecked: "%{name} (añadir)"
toggle:
- one: "En %{count} aspecto"
- other: "En %{count} aspectos"
- zero: "En ningún aspecto"
+ one: "En %{count} grupo."
+ other: "En %{count} grupos."
+ zero: "En ningún grupo."
invitations:
- by_email: "Invita a más personas a través de correo electrónico."
+ by_email: "Mandar invitaciones por correo electrónico."
invite_your_friends: "Invita a tus contactos"
invites: "Invitaciones"
share_this: "¡Comparte este enlace a través de correo electrónico, blog o tu red social favorita!"
@@ -1063,11 +1077,11 @@ es:
control_your_audience: "Controla tu público"
logged_in: "Conectado a %{service}"
manage: "Gestionar servicios conectados"
- new_user_welcome_message: "Utiliza #etiquetas para clasificar tus publicaciones y encuentra a gente que comparte tus intereses. Nombra a personas especiales usando @Mentions"
+ new_user_welcome_message: "Utiliza #etiquetas para clasificar tus publicaciones y encontrar a gente que comparte tus aficiones. Usa las @menciones para mencionar a quien quieras."
outside: "Los mensajes públicos podrán ser vistos por otros fuera de Diaspora*."
share: "Comparte"
title: "Configurar los servicios conectados"
- visibility_dropdown: "Usa este menú desplegable para cambiar la visibilidad de tu publicación. (Te sugerimos hacerlo público la primera vez.)"
+ visibility_dropdown: "Usa este menú desplegable para cambiar la visibilidad de tu publicación. (Te recomendamos que esta primera publicación sea pública)."
publisher:
discard_post: "Descartar publicación"
formatWithMarkdown: "Puedes usar %{markdown_link} para dar formato al mensaje."
@@ -1163,6 +1177,41 @@ es:
one: "Una persona etiquetada con %{tag}"
other: "%{count} personas etiquetadas con %{tag}"
zero: "Nadie etiquetado con %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Desactivar."
+ change_label: "Introduce tu contraseña para desactivar la autentificación de doble factor."
+ status: "Se ha activado la autentificación de doble factor."
+ confirm:
+ activate_button: "Confirmar y activar."
+ input_explanation: "Cuando hayas escaneado el código QR o introducido el secreto, introduce el código de seis dígitos y confirma la configuración."
+ input_title: "Confirmar con token TOTP."
+ manual_explanation: "En caso de no poder escanear el código QR automáticamente, puedes introducir manualmente el secreto en tu aplicación."
+ manual_explanation_cont: "Estamos usando contraseñas de un solo uso con tiempo limitado de utilización (TOTP) con tokens de seis dígitos. Si tu aplicación te pide un intervalo de tiempo y un algoritmo, introduce 30 segundos y sha1 respectivamente. <br /> Los espacios se muestran solamente para facilitar la lectura. Por favor, intruce el código sin espacios."
+ scan_explanation: "Por favor, escanea el código QR con una aplicación que soporte TOTP. Algunos ejemplos: andOTP (Android), FreeOTP (iOS), SailOTP (SailfishOS)."
+ scan_title: "Escanea el código QR."
+ status: "La autentificación de doble factor no está completamente activada todavía. Tienes que confirmar la activación con un token TOTP."
+ title: "Confirmar activación."
+ deactivated:
+ change_button: "Activar."
+ change_label: "Activar la autentificación de doble factor."
+ status: "La autentificación de doble factor no está activada."
+ explanation: "La autentificación de doble factor es una forma muy potente de asegurarse que tú eres la única persona que tiene acceso a tu cuenta. En el momento de acceder tendrás que introducir un código de seis dígitos, además de tu contraseña, para verificar tu identidad. ¡Ten mucho cuidado! El acceso a tu cuenta de diaspora* se bloqueará de forma permanente si pierdes el teléfono móvil y los códigos que se crearon al activar esta función."
+ flash:
+ error_token: "El token es incorrecto o no es válido."
+ success_activation: "La autentificación de doble factor ha sido activada correctamente."
+ success_deactivation: "La autentificación de doble factor ha sido desactivada correctamente."
+ input_token:
+ label: "Token de doble factor."
+ placeholder: "Token de seis dígitos para la autentificación de doble factor."
+ recovery:
+ button: "Generar nuevos códigos de recuperación."
+ explanation: "Puedes usar alguno de los códigos de recuperación mostrados más abajo para volver a acceder a tu cuenta si alguna vez dejas de tener acceso a tu teléfono móvil. Un ejemplo para esto sería imprimir los códigos y guardarlos junto a otra documentación importante."
+ explanation_short: "Los códigos de recuperación te permiten volver a acceder a tu cuenta en el caso de pérdida de tu teléfono móvil. Por favor, ten en cuenta que solo puedes usar una vez cada código."
+ invalidation_notice: "Por si acaso has perdido los códigos de recuperación, aquí puedes volver a generarlos. Los códigos de recuperación anteriores dejarán de tener validez."
+ reminder: "También puedes usar uno de los códigos de recuperación."
+ title: "Códigos de recuperación."
+ title: "Autentificación de doble factor."
username: "Nombre de usuario"
users:
confirm_email:
@@ -1195,7 +1244,7 @@ es:
comment_on_post: "...alguien comentó en tu publicación"
current_password: "Contraseña actual"
current_password_expl: "con la que inicias sesión..."
- default_post_visibility: "Seleccionados los aspectos por defecto para publicar."
+ default_post_visibility: "Grupos seleccionados por defecto para publicar."
download_export: "Descargar mi perfil"
download_export_photos: "Descargar mis fotografías"
edit_account: "Editar cuenta"
@@ -1207,11 +1256,14 @@ es:
last_exported_html: "(Última actualización %{timeago})"
liked: "a alguien le gusta tu publicación"
mentioned: "te mencionan en una publicación"
+ mentioned_in_comment: "Te han mencionado en un comentario."
new_password: "Nueva contraseña"
private_message: "has recibido un mensaje privado"
protocol_handler:
browser: "Este protocolo está actualmente en una fase experimental y su buen funcionamiento dependerá de tu navegador. Si quieres gestionar o eliminar esta funcionalidad, puedes hacerlo a través de la configuración del navegador. El botón siempre estará activado, y tu necesitas configurar la funcionalidad en cada navegador para usarlo."
+ description: "web+diaspora:// es un protocolo de red que hemos introducido. Todos los enlaces que apunten a una página de diaspora* en una página web externa, y que usen este protocolo, se podrá abrir en el pod en el que tengas registrada tu cuenta de diaspora* . Pincha en el botón más abajo para indicar a tu navegador que use %{pod_url} para reconocer enlaces web+diaspora:// externos."
register: "Registro"
+ title: "web+diaspora:// controlador de protocolo"
receive_email_notifications: "Recibir notificaciones por correo cuando..."
request_export: "Solicitar los datos de mi perfil"
request_export_photos: "Solicitar mis fotografías"
diff --git a/config/locales/diaspora/eu.yml b/config/locales/diaspora/eu.yml
index 420d46cfe..f68f0ac29 100644
--- a/config/locales/diaspora/eu.yml
+++ b/config/locales/diaspora/eu.yml
@@ -429,7 +429,6 @@ eu:
updated: "Profila eguneratu duzu."
public: "Publikoa"
registrations:
- closed: "Izen emateak itxirik daude Diaspora zerbitzari hontan."
create:
success: "Diasporarekin bat egin duzu!"
invalid_invite: "Eman duzun gonbidapen esteka ez da jada baliagarria!"
diff --git a/config/locales/diaspora/fi.yml b/config/locales/diaspora/fi.yml
index 23540ef5a..3b69c0393 100644
--- a/config/locales/diaspora/fi.yml
+++ b/config/locales/diaspora/fi.yml
@@ -919,7 +919,6 @@ fi:
updated: "Profiili päivitetty"
public: "Julkinen"
registrations:
- closed: "Rekisteröityminen on suljettu tässä Diaspora-podissa."
create:
success: "Olet liittynyt Diasporaan!"
invalid_invite: "Antamasi kutsulinkki ei ole enää voimassa!"
diff --git a/config/locales/diaspora/fr.yml b/config/locales/diaspora/fr.yml
index 64ca24f37..bd2c6b1e5 100644
--- a/config/locales/diaspora/fr.yml
+++ b/config/locales/diaspora/fr.yml
@@ -595,9 +595,11 @@ fr:
byline: "Le réseau social où vous gardez le contrôle."
choose_your_audience: "Choisissez votre public"
choose_your_audience_info: "Les aspects de diaspora* vous permettent de partager seulement avec les personnes que vous choisissez. Vous demeurez aussi ouvert ou aussi restreint que vous le souhaitez. Partagez des photos amusantes avec le monde entier, ou un grand secret avec vos amis les plus proches. C'est vous qui avez le contrôle."
+ diaspora_site_link: "réseau fédéré diaspora*"
headline: "Bienvenue sur %{pod_name}"
own_your_data: "Soyez propriétaire de vos données"
own_your_data_info: "De nombreux réseaux utilisent vos données pour gagner de l'argent en analysant vos interactions et en utilisant ces informations pour vous proposer des publicités ciblées. Vos données sur diaspora* ne servent qu'à vous mettre en relation et à partager avec d'autres personnes."
+ part_of_diaspora: "Nœud du %{diaspora_site_link}"
podmin:
byline: "Vous êtes sur le point de changer la face d'Internet. Prêt à vous lancer ?"
configuration_info: "Ouvrez %{database_path} et %{diaspora_path} dans votre éditeur de texte favori et relisez-les soigneusement, ils sont abondamment commentés."
@@ -996,7 +998,11 @@ fr:
updated: "Profil mis à jour"
public: "Public"
registrations:
- closed: "Les inscriptions sont fermées sur ce pod diaspora*."
+ closed:
+ another_pod: "un autre pod"
+ closed_pod: "Les inscriptions sont actuellement fermées sur ce pod. Néanmoins, vous pouvez toujours rejoindre le réseau diaspora* en vous inscrivant sur %{wiki}. Comme tous les pods sont interconnectés, vous accéderez au même contenu."
+ find_pods: "Une liste de pods sur lesquels vous pouvez vous inscrire est disponible sur %{poduptime}."
+ other_questions: "Si vous avez d'autres questions sur le choix d'un pod, consultez notre %{wiki}."
create:
success: "Vous avez rejoint diaspora* !"
invalid_invite: "Le lien d'invitation que vous avez fourni n'est plus valide !"
@@ -1183,6 +1189,43 @@ fr:
one: "1 personne marquée avec %{tag}"
other: "%{count} personnes marquées avec %{tag}"
zero: "Personne n'est marqué avec %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Désactiver"
+ change_label: "Désactivez la double authentification en saisissant votre mot de passe"
+ status: "La double authentification est activée"
+ confirm:
+ activate_button: "Confirmer et activer"
+ input_explanation: "Après avoir scanné ou saisi le secret, entrez le code à 6 chiffres affiché par l'application pour confirmer la mise en place de la double authentification."
+ input_title: "Confirmer avec un jeton TOTP"
+ manual_explanation: "Si vous ne pouvez pas scanner le code QR, vous pouvez saisir le secret manuellement dans votre application."
+ manual_explanation_cont: |-
+ Nous utilisons des codes à usage unique TOTP de 6 chiffres. Si votre application vous demande un intervalle de temps et un algorithme, choisissez 30 secondes et sha1 respectivement.<br />
+ Les espaces sont juste ajoutés par souci de lisibilité, merci de les ignorer à la saisie.
+ scan_explanation: "Merci de scanner le code QR avec une application TOTP, telle que andOTP (Android), FreeOTP (iOS), SailOTP (SailfishOS)."
+ scan_title: "Scannez le code QR"
+ status: "La double authentification n'est pas encore complétement activée, vous devez confirmer l'activation avec un jeton TOTP"
+ title: "Confirmer l'activation"
+ deactivated:
+ change_button: "Activer"
+ change_label: "Activer la double authentification"
+ status: "Double authentification inactive"
+ explanation: "La double authentification est un moyen efficace de garantir que vous serez le seul à pouvoir vous identifier avec votre compte. À la connexion, vous saisirez un code à 6 chiffres en plus de votre mot de passe afin de prouver votre identité. Soyez prudent néanmoins : si vous égarez votre téléphone et vos codes de récupération créés à l'activation de cette fonctionnalité, vous perdrez définitivement l'accès à votre compte diaspora*."
+ flash:
+ error_token: "Le jeton est incorrect ou invalide"
+ success_activation: "Double authentification activée avec succès"
+ success_deactivation: "Double authentification désactivée avec succès"
+ input_token:
+ label: "Jeton de double authentification"
+ placeholder: "jeton de double authentification à 6 chiffres"
+ recovery:
+ button: "Générer des nouveaux codes de récupération"
+ explanation: "Si vous perdez l'accès à votre téléphone, vous pouvez utiliser l'un de ces codes de récupération pour récupérer l'accès à votre compte diaspora*. Gardez ces codes dans un lieu sûr. Par exemple, vous pouvez les imprimer et les ranger avec vos autres documents importants."
+ explanation_short: "Les codes de récupération vous permettent de récupérer l'accès à votre compte si vous perdez votre téléphone. Notez que chaque code de récupération ne peut être utilisé qu'une seule fois."
+ invalidation_notice: "Si vous avez perdu vos codes de récupération, vous pouvez les générer à nouveau ici. Vos précédents codes seront invalidés."
+ reminder: "Sinon, vous pouvez utiliser l'un de ces codes de récupération."
+ title: "Codes de récupération"
+ title: "Double authentification"
username: "Nom d'utilisateur"
users:
confirm_email:
diff --git a/config/locales/diaspora/he.yml b/config/locales/diaspora/he.yml
index c7c586103..573a2f68e 100644
--- a/config/locales/diaspora/he.yml
+++ b/config/locales/diaspora/he.yml
@@ -467,7 +467,6 @@ he:
updated: "הפרופיל עודכן"
public: "ציבורי"
registrations:
- closed: "ההרשמה סגורה בפוד זה של דיאספורה*."
create:
success: "הצטרפת לדיאספורה*!"
invalid_invite: "הקישור להזמנה שסיפקת אינו תקף יותר!"
diff --git a/config/locales/diaspora/hu.yml b/config/locales/diaspora/hu.yml
index fa9c5cb52..a72b3b642 100644
--- a/config/locales/diaspora/hu.yml
+++ b/config/locales/diaspora/hu.yml
@@ -281,9 +281,11 @@ hu:
account_and_data_management:
close_account_a: "Kattints a beállítások oldal alján található \"Fiók törlése\" gombra."
close_account_q: "Hogyan törölhetek egy magot (a felhasználói fiókomat)?"
+ data_other_podmins_a: "Amikor egy másik pod felhasználójával megosztasz valamit, az adott kiszolgáló az összes megosztott bejegyzést, illetve a profiladataidról készült másolatot tárolja a saját adatbázisában (cache-eli), amelyek ezáltal hozzáférhetővé válnak az azt karbantartó személy számára. Ha törölsz egy bejegyzést vagy egy profiladatot, az törlődik az általad használt podról, amelyik ekkor törlési kérést küld az összes olyan pod felé, ahol korábban ez az adat már tárolódott. A képeid kizárólag a te kiszolgálódon rögzülnek, más podok csak hivatkozásokat kapnak róluk."
data_other_podmins_q: "Más podok üzemeltetői láthatják az adataimat?"
- data_visible_to_podmin_a: "Röviden: mindent. A podok közötti kapcsolat mindig titkosított (a diaspora* a saját protokollját és SSL-t használ), de a podokon tárolt adatok nincsenek kódolva. Ha az adott pod adatbázisának karbantartója (általában az a személy, aki a podot üzemelteti) szeretné, hozzáférhet minden profiladatodhoz és minden bejegyzésedhez (ahogy az a legtöbb felhasználói adatot tároló weboldalnál lenni szokott). Ezért hagyjuk meg neked a választás lehetőségét, hogy arra a podra iratkozz fel, amelyikre szeretnél, s hogy te dönthess, melyik pod rendszergazdájára bízod az adataidat. A saját podod üzemeltetése magasabb biztonságot jelent, hiszen te szabályozod az adatbázishoz való hozzáférést."
+ data_visible_to_podmin_a: "Röviden: mindent. A podok közötti kapcsolat mindig titkosított (a diaspora* a saját protokollját és SSL-t használ), de a podokon tárolt adatok nincsenek kódolva. Ha az adott pod adatbázisának karbantartója (általában az a személy, aki a podot üzemelteti) szeretné, hozzáférhet minden profiladatodhoz és minden bejegyzésedhez (ahogy az a legtöbb, felhasználói adatot tároló weboldalnál lenni szokott). Ezért hagyjuk meg neked a választás lehetőségét, hogy arra a podra iratkozz fel, amelyikre szeretnél, s hogy te dönthesd el, melyik pod rendszergazdájára bízod az adataidat. Saját pod üzemeltetése nagyobb biztonságot jelent, hiszen te szabályozod az adatbázishoz való hozzáférést."
data_visible_to_podmin_q: "Mennyi adatot láthat rólam az általam használt pod üzemeltetője?"
+ download_data_a: "Igen. A Beállítások oldal \"felhasználói fiók\" nevű fülén találsz két gombot legalul: egyet az adataid letöltéséhez, egyet pedig a fényképeid letöltéséhez."
download_data_q: "Letölthetek egy másolatot a magban (a felhasználói fiókomban) található összes adatomról?"
move_pods_a: "A diaspora* 0.7.0.0 számú verziója megvalósítja a fiók elköltöztetésének első lépcsőfokát: mostantól letöltheted az összes adatodat a beállítások / felhasználói fiók / adatok letöltése menüpontban. Tartsd őket biztonságban! Egy későbbi kiadásban lehetőséged lesz a teljes fiókodat áttelepíteni egy másik podra, beleértve a bejegyzéseidet és az ismerőseid listáját is."
move_pods_q: "Hogy tudom áthelyezni ezt a magot (a fiókomat) az egyik podról a másikra?"
@@ -778,7 +780,6 @@ hu:
updated: "Profil frissítve"
public: "Nyilvános"
registrations:
- closed: "A regisztrációs lehetőség zárolva van ezen a diaspora* kiszolgálón."
create:
success: "Csatlakoztál a diaspora* közösségi oldalra!"
invalid_invite: "Ez a meghívó többé nem érvényes!"
diff --git a/config/locales/diaspora/hye-classical.yml b/config/locales/diaspora/hye-classical.yml
index dc917cdfd..61a442fbb 100644
--- a/config/locales/diaspora/hye-classical.yml
+++ b/config/locales/diaspora/hye-classical.yml
@@ -963,7 +963,6 @@ hye-classical:
updated: "Էջդ թարմացուեց"
public: "Հրապարակային"
registrations:
- closed: "Գրանցումները հասանելի չեն դիասպորա*֊ի այս հանգոյցում։"
create:
success: "Դու միացա՜ր դիասպորա*֊ին։"
invalid_invite: "Հրաւէրի յղումը, որ տուել ես, այլեւս վաւեր չէ։"
diff --git a/config/locales/diaspora/hye.yml b/config/locales/diaspora/hye.yml
index 7e3995e40..d27468be7 100644
--- a/config/locales/diaspora/hye.yml
+++ b/config/locales/diaspora/hye.yml
@@ -926,7 +926,6 @@ hye:
updated: "Էջդ թարմացվեց"
public: "Հրապարակային"
registrations:
- closed: "Գրանցումները հասանելի չեն դիասպորա*յի այս փոդում։"
create:
success: "Դու միացար դիասպորա*յի՜ն։"
invalid_invite: "Հրավերի հղումը, որ տվել ես, այլեւս վավեր չէ։"
diff --git a/config/locales/diaspora/ia.yml b/config/locales/diaspora/ia.yml
index 7a8401808..63e970386 100644
--- a/config/locales/diaspora/ia.yml
+++ b/config/locales/diaspora/ia.yml
@@ -90,15 +90,18 @@ ia:
week: "Septimana"
user_entry:
account_closed: "Conto claudite"
+ admin: "Administrator"
diaspora_handle: "ID de diaspora*"
email: "E-mail"
guid: "GUID"
id: "ID"
invite_token: "Indicio de invitation"
last_seen: "Ultime session"
+ moderator: "Moderator"
? "no"
: "No"
nsfw: "#nsfw"
+ spotlight: "In evidentia"
unknown: "Incognite"
? "yes"
: Si
@@ -106,14 +109,29 @@ ia:
account_closing_scheduled: "Le conto de %{name} es planate a esser claudite. Illo essera processate in alcun momentos…"
account_locking_scheduled: "Le conto de %{name} es planate a esser blocate. Illo essera processate in alcun momentos…"
account_unlocking_scheduled: "Le conto de %{name} es planate a esser disblocate. Illo essera processate in alcun momentos…"
+ add_admin: "%{name} ha essite facite administrator."
add_invites: "Adder invitationes"
+ add_moderator: "%{name} ha essite facite moderator."
+ add_spotlight: "%{name} ha essite addite a \"Usatores in evidentia\"."
are_you_sure: "Es tu secur de voler clauder iste conto?"
are_you_sure_lock_account: "Es tu secur de voler blocar iste conto?"
are_you_sure_unlock_account: "Es tu secur de voler disblocar iste conto?"
close_account: "Clauder conto"
+ delete_admin: "%{name} ha essite removite del lista de administratores."
+ delete_moderator: "%{name} ha essite removite del lista de moderatores."
+ delete_spotlight: "%{name} ha essite removite de \"Usatores in evidentia\"."
+ does_not_exist: "Usator non existe!"
email_to: "Adresse de e-mail a invitar"
invite: "Invitar"
lock_account: "Blocar conto"
+ make_admin: "Facer administrator"
+ make_moderator: "Facer moderator"
+ make_spotlight: "Adder a \"Usatores in evidentia\""
+ remove_admin: "Remover como administrator"
+ remove_moderator: "Remover como moderator"
+ remove_spotlight: "Remover de \"Usatores in evidentia\""
+ role_implemented: "%{name} ha jam recipite iste rolo!"
+ role_removal_implemented: "%{name} ha jam essite removite de iste rolo!"
under_13: "Monstrar usatores con minus de 13 annos (COPPA)"
unlock_account: "Disblocar conto"
users:
@@ -575,9 +593,11 @@ ia:
byline: "Le mundo social in linea ubi tu ha le controlo"
choose_your_audience: "Elige tu audientia"
choose_your_audience_info: "Le \"aspectos\" de diaspora* permitte divider cosas solmente con le personas appropriate. Tu pote scriber in publico o si privatemente como tu vole. Divide un photo amusante con tote le mundo, o divide un secreto personal con tu amicos intime. Le controlo es tue."
+ diaspora_site_link: "rete federate de diaspora*"
headline: "Benvenite a %{pod_name}"
own_your_data: "Possede tu datos"
own_your_data_info: "Multe retes usa tu datos pro ganiar moneta analysante tu interactiones e usante iste information pro diriger publicitate a te. diaspora* non usa tu datos pro alcun scopo, salvo illo de permitter te de connecter e divider cosas con altere personas."
+ part_of_diaspora: "Parte del %{diaspora_site_link}"
podmin:
byline: "Tu es sur le puncto de cambiar le facie de Internet. Preste a comenciar?"
configuration_info: "Aperi %{database_path} e %{diaspora_path} in tu editor de texto preferite e revide los meticulosemente; illos ha commentos extense."
@@ -766,7 +786,7 @@ ia:
body: |-
Hallo %{name},
- Le tue datos personal ha essite processate e preparate pro discargamento. Pro discargar, seque [iste ligamine](%{url}).
+ Le archivo de tu datos personal ha essite preparate pro discargamento via [iste ligamine](%{url}).
Amicalmente,
@@ -946,7 +966,7 @@ ia:
edit:
allow_search: "Permitter que on te cerca in diaspora*"
basic: "Mi profilo basic"
- basic_hint: "Cata elemento de profilo es facultative. Le profilo basic es sempre visibile pro le publico."
+ basic_hint: "Cata elemento de tu profilo es optional. Le profilo basic es sempre visibile pro le publico."
extended: "Mi profilo extendite"
extended_hint: "Clicca sur le commutator pro definir le visibilitate de tu profilo extendite. \"Public\" vole dicer que illo es visibile pro tote le internet, \"limitate\" vole dicer que solmente le personas in tu aspectos de contacto videra iste information."
extended_visibility_text: "Visibilitate de tu profilo extendite:"
@@ -972,7 +992,6 @@ ia:
updated: "Profilo actualisate"
public: "Public"
registrations:
- closed: "Le creation de contos es claudite in iste pod de diaspora*."
create:
success: "Tu ha adherite a diaspora*!"
invalid_invite: "Le ligamine de invitation que tu ha fornite non plus es valide."
@@ -1197,7 +1216,7 @@ ia:
edit_account: "Modificar conto"
email_awaiting_confirmation: "Nos te ha inviate un ligamine de activation al adresse %{unconfirmed_email}. Usque al momento que tu seque iste ligamine pro activar le nove adresse, nos va continuar a usar tu adresse original %{email}."
export_data: "Exportar datos"
- export_in_progress: "Le datos personal tue es actualmente sub preparation. Per favor, reveni in alcun momentos."
+ export_in_progress: "Nos prepara in iste momento un archivo de tu datos personal. Per favor, reveni in alcun momentos."
export_photos_in_progress: "Le tractamento de tu photos non ha ancora terminate. Per favor, essaya lo de novo in qualque momentos."
following: "Configuration de divider"
last_exported_html: "(Ultime actualisation %{timeago})"
@@ -1207,8 +1226,9 @@ ia:
new_password: "Contrasigno nove"
private_message: "tu recipe un message private"
protocol_handler:
- description: "Un clic sur iste button demandara a tu navigator web de installar un gestor que permitte a nos de aperir le adresses URL web+diaspora:// sur tu pod principal. Isto es ancora experimental e le interactiones dependera de tu navigator web specific."
- register: "Registrar"
+ browser: "Iste protocollo es actualmente in le stadio experimental e le successo del interactiones que lo usa dependera de tu navigator del web. Si tu vole modificar o remover iste gestor, tu debe facer lo via le configuration de tu navigator. Le button hic infra essera sempre activate, e tu debera configurar le gestor separatemente in cata navigator que tu usa."
+ description: "web+diaspora:// es un nove protocollo web que nos ha introducite. Omne ligamine a un pagina diaspora* sur un sito web externe que usa iste protocollo pote esser aperite in le pod que alberga tu conto diaspora*. Clicca sur le button hic infra pro facer que tu navigator del web usa %{pod_url} pro recognoscer le ligamines web+diaspora:// externe."
+ register: "Registrar le gestor web+diaspora:// sur iste navigator"
title: "Gestor de protocollo web+diaspora://"
receive_email_notifications: "Reciper notificationes per e-mail quando:"
request_export: "Requestar le datos de mi profilo"
diff --git a/config/locales/diaspora/is.yml b/config/locales/diaspora/is.yml
index 80ed8eea9..5d8ae27ce 100644
--- a/config/locales/diaspora/is.yml
+++ b/config/locales/diaspora/is.yml
@@ -397,7 +397,6 @@ is:
updated: "Síðan mín uppfærð"
public: "Opið öllum"
registrations:
- closed: "Lokað er fyrir innskráningar á þessum Diaspora* pod."
create:
success: "Nú hefurðu tengst Diaspora*!"
new:
diff --git a/config/locales/diaspora/it.yml b/config/locales/diaspora/it.yml
index 5ca893ce6..053250870 100644
--- a/config/locales/diaspora/it.yml
+++ b/config/locales/diaspora/it.yml
@@ -713,7 +713,6 @@ it:
updated: "Profilo aggiornato"
public: "Pubblico"
registrations:
- closed: "Su questo pod Diaspora le iscrizioni sono chiuse."
create:
success: "Ora fai parte di Diaspora!"
invalid_invite: "L'invito che hai usato non è più valido!"
@@ -866,6 +865,40 @@ it:
follow: "Segui #%{tag}"
none: "Il tag vuoto non esiste!"
stop_following: "Non seguire più #%{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Disattiva"
+ change_label: "Per disattivare l'autenticazione a due fattori inserire la propria password"
+ status: "Autenticazione a due fattori attivata"
+ confirm:
+ activate_button: "Confermare e attivare"
+ input_explanation: "Dopo avere scansionato o inserito il codice segreto inserite il codice di 6 cifre che vedrete sullo schermo e confermate il setup."
+ input_title: "Confermare con token TOTP"
+ manual_explanation: "Nel caso non sia possibile acquisire automaticamente il QR code è possibile inserire il codice segreto nell'app."
+ manual_explanation_cont: "Noi usiamo time-based one-time passwords (TOTP) con token di 6 cifre. Nel caso in cui la vostra app vi chieda un intervallo di tempo e l'algoritmo inserite rispettivamente un tempo di 30 secondi e il valore sha1. <br /> Gli spazi sono inseriti solo per la leggibilità, inserite il codice senza di essi."
+ scan_explanation: "Si prega di scansionare il QR code con una app predisposta per il TOTP come AndOTP (Android), FreeOTP (iOS), SAilOTP (Sailfish OS)."
+ scan_title: "Scansionare il QR code"
+ status: "L'autenticazione a due fattori non è ancora pienamente attiva, è necessario confermate l'attivazione con un token TOTP"
+ title: "Confermare attivazione"
+ deactivated:
+ change_button: "Attivare"
+ change_label: "Attivare l'autenticazione a due fattori"
+ status: "Autenticazione a due fattori non attivata"
+ explanation: "L'autenticazione a due fattori è uno strumento potente per darvi la certezza di essere la sola persona in grado di accedere al vostro account. Al momento di collegarvi, dovrete inserire assieme alla vostra password un codice a 6 cifre per provare la vostra identità. Dovrete però stare attenti: se perdete il telefono e i codici di ripristino che verranno creati all'attivazione della funzionalità il vostro account su diaspora* sarà bloccato per sempre."
+ flash:
+ error_token: "Token sbagliato o non valido"
+ success_activation: "Autenticazione a due fattori attivata"
+ success_deactivation: "Autenticazione a due fattori disattivata"
+ input_token:
+ label: "Token a due fattori"
+ placeholder: "token a due fattori di sei cifre"
+ recovery:
+ button: "Generare i nuovi codici di recupero"
+ explanation: "Se non fosse più possibile accedere al proprio telefono, è ancora possibile usare uno dei seguenti codici di recupero per ottenere nuovamente l'accesso al proprio account. Tenete al sicuro questi codici, ad esempio stampandoli e conservandoli assieme agli altri documenti importanti."
+ explanation_short: "I codici di recupero permettono di riottenere l'accesso al proprio account in caso di smarrimento del telefono. Notare che ogni codice di recupero può essere utilizzato una volta sola."
+ invalidation_notice: "In caso di smarrimento dei codici di recupero possono essere rigenerati qui. I codici di recupero precedenti verranno invalidati."
+ reminder: "Come alternativa potete usare uno dei codici di recupero."
+ title: "Codici di recupero"
username: "Nome Utente"
users:
confirm_email:
diff --git a/config/locales/diaspora/ja.yml b/config/locales/diaspora/ja.yml
index e67346183..2b51505b2 100644
--- a/config/locales/diaspora/ja.yml
+++ b/config/locales/diaspora/ja.yml
@@ -97,6 +97,7 @@ ja:
? "no"
: いいえ
nsfw: "#nsfw"
+ spotlight: "スポットライト"
unknown: "不明"
? "yes"
: はい
@@ -107,20 +108,26 @@ ja:
add_admin: "%{name} さんは管理者に指定された。"
add_invites: "招待を追加"
add_moderator: "%{name} さんはモデレータとして指名された"
+ add_spotlight: "%{name} さんがコミュニティのスポットライトに追加されました。"
are_you_sure: "このアカウントを削除してもよろしいですか?"
are_you_sure_lock_account: "このアカウントをロックしてもよろしいですか?"
are_you_sure_unlock_account: "このアカウントのロックを解除してもよろしいですか?"
close_account: "アカウントを削除する"
delete_admin: "%{name} さんは管理者から外された。"
delete_moderator: "%{name} さんはモデレータから外された"
+ delete_spotlight: "%{name} さんがコミュニティのスポットライトから削除されました。"
does_not_exist: "そのユーザは存在しません。"
email_to: "招待のメール"
invite: "招待"
lock_account: "アカウントをロックする"
make_admin: "このユーザーを管理者に指名する"
make_moderator: "このユーザーをモデレーターに指名する"
+ make_spotlight: "コミュニティのスポットライトに追加する"
remove_admin: "このユーザーを管理者から外す"
remove_moderator: "このユーザーをモデレーターから外す"
+ remove_spotlight: "コミュニティのスポットライトから削除する"
+ role_implemented: "%{name} さんはすでにこの役割が与えられています!"
+ role_removal_implemented: "%{name} さんはすでにこの役割が削除されています!"
under_13: "13歳以下のユーザーに表示する (COPPA)"
unlock_account: "アカウントのロックを解除する"
users:
@@ -957,7 +964,6 @@ ja:
updated: "プロフィールを更新しました"
public: "公開"
registrations:
- closed: "このダイアスポラ*ポッドでは新規登録を受け付けていません。"
create:
success: "ダイアスポラの新規登録が完了しました!"
invalid_invite: "提供された招待リンクは、もはや有効ではありません!"
@@ -1144,6 +1150,41 @@ ja:
tagged_people:
other: "%{count} 人が %{tag} でタグ付けしています"
zero: "誰も %{tag} でタグ付けしていません"
+ two_factor_auth:
+ activated:
+ change_button: "無効にする"
+ change_label: "パスワードを入力して2要素認証を無効にします"
+ status: "2要素認証を有効にしました"
+ confirm:
+ activate_button: "確認して有効にする"
+ input_explanation: "スキャンまたはシークレットを入力したら、表示された6桁のコードを入力して設定を確認します。"
+ input_title: "TOTPトークンで確認"
+ manual_explanation: "自動的にQRコードをスキャンできない場合は、手動でアプリにシークレットを入力できます。"
+ manual_explanation_cont: "6桁のトークンを使用した、時間ベースのワンタイムパスワード (TOTP) を使用しています。 アプリが、時間間隔とアルゴリズムを入力するように要求した場合は、それぞれ30秒とsha1を入力してください。 <br />スペースは読みやすくするためのものです。スペースを入れずにコードを入力してください。"
+ scan_explanation: "andOTP (Android), FreeOTP (iOS), SailOTP (SailfishOS) などのTOTP対応アプリでQRコードをスキャンしてください。"
+ scan_title: "QRコードをスキャン"
+ status: "2要素認証はまだ完全に有効になっていません。TOTPトークンで有効化を確認する必要があります"
+ title: "有効化の確認"
+ deactivated:
+ change_button: "有効にする"
+ change_label: "2要素認証を有効にする"
+ status: "2要素認証は有効になっていません"
+ explanation: "2要素認証は、自分のアカウントにサインインできる唯一の人であることを確認するための強力な方法です。 サインインするときに、あなたのIDを証明するためにパスワードと共に6桁のコードを入力します。 ただし、ご注意ください。携帯電話を紛失したときや、この機能を有効にしたときに作成された回復コードをなくした場合は、ダイアスポラ* アカウントのアクセスは永久にブロックされます。"
+ flash:
+ error_token: "トークンが間違っているか無効です"
+ success_activation: "2要素認証を有効にしました"
+ success_deactivation: "2要素認証を無効にしました"
+ input_token:
+ label: "2要素トークン"
+ placeholder: "6桁の2要素トークン"
+ recovery:
+ button: "新しい回復コードを生成する"
+ explanation: "お使いの携帯電話にアクセスできなくなった場合、アカウントにアクセスできるようにするために下記の回復コードを一つ使うことができます。 回復コードを安全に保管してください。 例えば、それらを印刷して他の重要な書類と共に保存することができます。"
+ explanation_short: "回復コードを使用すると、お使いの携帯電話を紛失した場合でもアカウントへのアクセスを取り戻すことができます。 それぞれの回復コードは1回しか使用できません。"
+ invalidation_notice: "回復コードを紛失した場合は、ここで再生成できます。 古い回復コードは無効になります。"
+ reminder: "あるいは、回復コードを1つ使用することができます。"
+ title: "回復コード"
+ title: "2 要素認証"
username: "ユーザー名"
users:
confirm_email:
@@ -1192,6 +1233,7 @@ ja:
new_password: "新しいパスワード"
private_message: "非公開メッセージが届いたとき"
protocol_handler:
+ browser: "このプロトコルは現在実験段階で、それを使ったインタラクションが成功するかどうかはご利用のブラウザに依存します。 この処理を管理または削除したい場合は、ブラウザの設定でこれを行ってください。 下のボタンは常に有効になっているので、使用するブラウザごとに個別に処理を設定する必要があります。"
description: "このボタンをクリックするとホームポッドの web+diaspora:// URLを開くことができるハンドラをインストールするようにブラウザに要求されます。これは現在実験中で対応はブラウザによって異なります。"
register: "登録"
title: "web+diaspora:// プロトコルハンドラ"
diff --git a/config/locales/diaspora/ka.yml b/config/locales/diaspora/ka.yml
index 56e5d4635..63ef21388 100644
--- a/config/locales/diaspora/ka.yml
+++ b/config/locales/diaspora/ka.yml
@@ -350,7 +350,6 @@ ka:
updated: "პროფილი განახლდა"
public: "საჯაროდ"
registrations:
- closed: "რეგისტრაცია დახურულია დიასპორას ამ პოდზე."
create:
success: "თქვენ შეუერთდით დიასპორას!"
new:
diff --git a/config/locales/diaspora/ko.yml b/config/locales/diaspora/ko.yml
index d93a23310..50f0f7478 100644
--- a/config/locales/diaspora/ko.yml
+++ b/config/locales/diaspora/ko.yml
@@ -444,7 +444,6 @@ ko:
updated: "프로필을 업데이트했습니다"
public: "공개"
registrations:
- closed: "우리 디아스포라 팓은 가입이 닫혀있습니다."
create:
success: "디아스포라에 가입되었습니다!"
invalid_invite: "내가 제공한 초대 링크가 더 이상 유효하지 않습니다!"
diff --git a/config/locales/diaspora/la.yml b/config/locales/diaspora/la.yml
index dee73a872..243957b32 100644
--- a/config/locales/diaspora/la.yml
+++ b/config/locales/diaspora/la.yml
@@ -196,7 +196,7 @@ la:
publisher:
new_user_prefill:
hello: "Salvēte, mihi nōmen est %{new_user_tag}. "
- newhere: "nova/novus"
+ newhere: "NovusHic"
posting: "Dīvulgāre..."
share: "Impertī"
whats_on_your_mind: "Quid tibi in animō est?"
diff --git a/config/locales/diaspora/lt.yml b/config/locales/diaspora/lt.yml
index c2353d40c..7d20f2ba7 100644
--- a/config/locales/diaspora/lt.yml
+++ b/config/locales/diaspora/lt.yml
@@ -298,7 +298,6 @@ lt:
updated: "Profilis atnaujintas"
public: "Viešas"
registrations:
- closed: "Naujų paskyrų kūrimas šiame Diasporos serveryje yra uždarytas."
create:
success: "Prisijungei prie Diasporos!"
new:
diff --git a/config/locales/diaspora/mk.yml b/config/locales/diaspora/mk.yml
index 41e56a7b8..bca8726e3 100644
--- a/config/locales/diaspora/mk.yml
+++ b/config/locales/diaspora/mk.yml
@@ -250,7 +250,6 @@ mk:
your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music"
public: "Јавно"
registrations:
- closed: "Регистрирањето е затворено."
create:
success: "Вие и се придруживте на Diaspora!"
new:
diff --git a/config/locales/diaspora/ml.yml b/config/locales/diaspora/ml.yml
index 13046e5c7..57bbf1827 100644
--- a/config/locales/diaspora/ml.yml
+++ b/config/locales/diaspora/ml.yml
@@ -532,7 +532,6 @@ ml:
updated: "പ്രൊഫൈല്‍ വിജയകരമായൊ തിരുത്തിയിരിക്കുന്നു."
public: "പൊതുവായി"
registrations:
- closed: "ഈ ഡയാസ്പുറ പോഡില്‍ ചേരുന്നത് അടച്ചിരിക്കുന്നു."
create:
success: "താങ്കള്‍ ഡയസ്പോറയില്‍ ചേര്‍ന്നിരിക്കുന്നു!"
invalid_invite: "താങ്കൾ നൽകിയ ക്ഷണക്കത്ത് സാധുവല്ല!"
diff --git a/config/locales/diaspora/nb.yml b/config/locales/diaspora/nb.yml
index eeb81e78e..e3af2cc1f 100644
--- a/config/locales/diaspora/nb.yml
+++ b/config/locales/diaspora/nb.yml
@@ -985,7 +985,6 @@ nb:
updated: "Profil oppdatert"
public: "Offentlig"
registrations:
- closed: "Denne diaspora*-belgen er stengt for registreringer."
create:
success: "Du er nå med i diaspora*!"
invalid_invite: "Invitasjonslenken som du brukte er ikke gyldig lenger!"
diff --git a/config/locales/diaspora/nds.yml b/config/locales/diaspora/nds.yml
index 7d9882034..52cf3f1e2 100644
--- a/config/locales/diaspora/nds.yml
+++ b/config/locales/diaspora/nds.yml
@@ -582,7 +582,6 @@ nds:
updated: "Profil aktualisiert"
public: "Öffentlich"
registrations:
- closed: "Registrerungen sind op dissen diaspora*-Pod schloten."
create:
success: "Du bist nu bi diaspora*!"
invalid_invite: "Dien Inlodungslink is nich mehr gültig!"
diff --git a/config/locales/diaspora/nl.yml b/config/locales/diaspora/nl.yml
index eee6c634b..105f4374e 100644
--- a/config/locales/diaspora/nl.yml
+++ b/config/locales/diaspora/nl.yml
@@ -994,7 +994,6 @@ nl:
updated: "Profiel bijgewerkt"
public: "Openbaar"
registrations:
- closed: "Registratie op deze diaspora* pod is niet mogelijk."
create:
success: "Je bent nu lid van diaspora*!"
invalid_invite: "De uitnodigingslink die je gebruikt is niet langer geldig!"
diff --git a/config/locales/diaspora/nn.yml b/config/locales/diaspora/nn.yml
index 12900bb09..0d3b550be 100644
--- a/config/locales/diaspora/nn.yml
+++ b/config/locales/diaspora/nn.yml
@@ -482,7 +482,6 @@ nn:
updated: "Profilen vart oppdatert"
public: "Offentleg"
registrations:
- closed: "Kan ikkje oppretta brukarar på denne Diaspora-poden."
create:
success: "Du er vorten med i Diaspora."
invalid_invite: "Invitasjonslenkja du nytta er ikkje lengjer gyldig!"
diff --git a/config/locales/diaspora/oc.yml b/config/locales/diaspora/oc.yml
index 9b5b4b398..71ce42897 100644
--- a/config/locales/diaspora/oc.yml
+++ b/config/locales/diaspora/oc.yml
@@ -595,9 +595,11 @@ oc:
byline: "La ret sociala ont gardatz lo contraròtle."
choose_your_audience: "Causissètz vòstre public"
choose_your_audience_info: "Los aspèctes de diaspora* vos permeton de partejar solament amb lo mond que volètz. Podètz èsser public o privat tan que volètz. Partejatz una fòto divertissenta amb lo mond complet, o un grand secrèt amb vòstre melhors amics. Avètz lo contraròtle."
+ diaspora_site_link: "Malhum federat diapora*"
headline: "Benvenguda sus %{pod_name}"
own_your_data: "Siatz proprietari de vòstras donadas"
own_your_data_info: "Mantun rets emplegan vòstras donadas per se far de moneda en analisant vòstras interaccions e en emplegant aquelas informacions per vos far de reclama. diaspora* utilizant pas vòstras donadas que per vos permetre de comunicar e partejar amb lo mond."
+ part_of_diaspora: "Membre del %{diaspora_site_link}"
podmin:
byline: "Sètz a mand de cambiar la fàcia d'Internet. Prèst a vos lançar ?"
configuration_info: "Dobrissètz %{database_path} e %{diaspora_path} dins vòstre editor de tèxte favorit e relegissètz-los menimosament, son comentats abondament."
@@ -992,7 +994,8 @@ oc:
updated: "Perfil a jorn"
public: "Public"
registrations:
- closed: "Las inscripcions son tampadas sus aqueste pod diaspora*."
+ closed:
+ another_pod: "un autre pod"
create:
success: "Avètz rejunt diaspora*!"
invalid_invite: "Lo ligam de convit donat es pas mai valid !"
@@ -1180,6 +1183,30 @@ oc:
one: "1 persona marcada amb %{tag}"
other: "%{count} personas marcadas amb %{tag}"
zero: "Degun es pas marcat amb %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Desactivar"
+ change_label: "Desactivatz l’autentificacion en dos temps en picar vòstre senhal"
+ status: "Autentificacion en dos temps activiada"
+ confirm:
+ activate_button: "Confirmar e activar"
+ input_title: "Confirmar amb un geton TOTP"
+ scan_title: "Numerizar lo còdi QR"
+ title: "Confirmatz l’activacion"
+ deactivated:
+ change_button: "Activar"
+ change_label: "Activar l’autentificacion en dos temps"
+ status: "L’autentificacion en dos temps es pas activada"
+ flash:
+ error_token: "Lo geton èra incorrècte o invalid"
+ success_activation: "Autentificacion en dos temps corrèctament activada"
+ success_deactivation: "Autentificacion en dos temps corrèctament desactivada"
+ input_token:
+ label: "Geton dos factors"
+ recovery:
+ button: "Generar de nòus còdis de recuperacion"
+ title: "Còdis de recuperacion"
+ title: "Autentificacion en dos temps"
username: "Nom d'utilizaire"
users:
confirm_email:
diff --git a/config/locales/diaspora/pl.yml b/config/locales/diaspora/pl.yml
index 87f8a41eb..e4d4b165a 100644
--- a/config/locales/diaspora/pl.yml
+++ b/config/locales/diaspora/pl.yml
@@ -998,7 +998,6 @@ pl:
updated: "Profil został pomyślnie zaktualizowany"
public: "Publiczny"
registrations:
- closed: "Ten pod diaspory* nie zezwala na rejestrację nowych użytkowników."
create:
success: "Dołączyłeś do diaspory*!"
invalid_invite: "Podane łącze do zaproszenia jest nieważne!"
diff --git a/config/locales/diaspora/pt-BR.yml b/config/locales/diaspora/pt-BR.yml
index 68344f888..51f830cd7 100644
--- a/config/locales/diaspora/pt-BR.yml
+++ b/config/locales/diaspora/pt-BR.yml
@@ -431,7 +431,7 @@ pt-BR:
get_support_a_wiki: "Pesquise na %{link}"
get_support_q: "E se minha pergunta não for respondida neste FAQ? Onde mais eu posso encontrar ajuda?"
getting_started_a: "Você está com sorte. Experimente a %{tutorial_series} no site do projeto. Ela é um guia, passo a passo, para o processo de cadastro e para os recursos básicos da diaspora*."
- getting_started_q: "Socorro! Preciso de alguma ajuda básica para começar!"
+ getting_started_q: "Socorro! Preciso aprender o básico para começar!"
title: "Obter ajuda"
getting_started_tutorial: "a série tutorial \"Começando\""
here: "aqui"
@@ -593,9 +593,11 @@ pt-BR:
byline: "O mundo social on-line em que você está no controle"
choose_your_audience: "Escolha sua plateia"
choose_your_audience_info: "Os aspectos da diaspora* permitem que você decida com quem vai compartilhar. Você escolhe quanta privacidade quer ter. Compartilhe uma foto engraçada com todo mundo e guarde aquele segredo para os seus amigos mais próximos. Você está no controle."
+ diaspora_site_link: "rede federada diaspora*"
headline: "É bom ver você em %{pod_name}"
own_your_data: "Os seus dados são seus"
own_your_data_info: "Várias redes lucram com seus dados, analisando as suas interações e usando as informações obtidas para fazer publicidade. A diaspora* não usa seus dados para nada além de possibilitar que você se conecte e compartilhe com outras pessoas."
+ part_of_diaspora: "Parte da %{diaspora_site_link}"
podmin:
byline: "Você está prestes a revolucionar a internet. Vamos começar?"
configuration_info: "Abra %{database_path} e %{diaspora_path} no seu editor de texto favorito e revise-os cuidadosamente, estão minuciosamente comentados."
@@ -989,7 +991,11 @@ pt-BR:
updated: "Perfil Atualizado!"
public: "Público"
registrations:
- closed: "Os cadastros estão temporariamente desabilitados neste servidor diaspora*."
+ closed:
+ another_pod: "outro pod"
+ closed_pod: "Este pod está fechado para novos cadastros, porém você ainda pode entrar na rede diaspora* cadastrando-se em %{wiki}. Como todos os pods estão interconectados, de lá você terá acesso ao mesmo conteúdo."
+ find_pods: "Há uma lista de pods nos quais você pode se cadastrar em %{poduptime}."
+ other_questions: "Se você tiver alguma outra pergunta sobre a seleção de pods, confira nossa %{wiki}."
create:
success: "Você se juntou à diaspora*!"
invalid_invite: "O link com o convite não é mais válido."
@@ -1176,6 +1182,41 @@ pt-BR:
one: "1 pessoa marcada com %{tag}"
other: "%{count} pessoas marcadas com %{tag}"
zero: "Ninguém marcado com %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Desativar"
+ change_label: "Insira sua senha para desativar a autenticação em duas etapas"
+ status: "Autenticação em duas etapas ativada"
+ confirm:
+ activate_button: "Confirmar e ativar"
+ input_explanation: "Depois de escanear ou digitar a senha, insira o código de seis dígitos que apareceu para você e confirme."
+ input_title: "Confirme com o código TOTP"
+ manual_explanation: "Caso não possa escanear o código QR de forma automática, digite a senha manualmente no aplicativo."
+ manual_explanation_cont: "Usamos senhas únicas baseadas em tempo (TOTP) com códigos de seis dígitos. Caso o seu aplicativo pergunte intervalo de tempo e algoritmo, insira 30 segundos e SHA-1, respectivamente. <br /> Os espaços servem apenas para melhorar a legibilidade; por favor, digite o código sem eles."
+ scan_explanation: "Por favor, escaneie o código QR com um aplicativo que leia TOTP, tal como andOTP (Android), FreeOTP (iOS) ou SailOTP (SailfishOS)."
+ scan_title: "Escaneie o código QR"
+ status: "A autenticação em duas etapas ainda não foi ativada completamente; você precisa confirmar a ativação com um código TOTP."
+ title: "Confirmar ativação"
+ deactivated:
+ change_button: "Ativar"
+ change_label: "Ativar autenticação em duas etapas"
+ status: "Autenticação em duas etapas desativada"
+ explanation: "A autenticação em duas etapas é uma maneira eficiente de garantir que você seja a única pessoa capaz de entrar na sua conta. Ao entrar, você terá que digitar um código de seis dígitos, além da sua senha, para provar a sua identidade. Mas cuidado: se você perder seu celular e os códigos de recuperação criados durante a ativação deste recurso, o acesso à sua conta na diaspora* será bloqueado para sempre."
+ flash:
+ error_token: "Código incorreto ou inválido"
+ success_activation: "Autenticação em duas etapas ativada com sucesso"
+ success_deactivation: "Autenticação em duas etapas desativada com sucesso"
+ input_token:
+ label: "Código de autenticação"
+ placeholder: "código de autenticação com seis dígitos"
+ recovery:
+ button: "Gerar novos códigos de recuperação"
+ explanation: "Se algum dia você perder o seu celular, poderá usar um dos códigos de recuperação abaixo para recuperar o acesso à sua conta. Guarde-os em segurança. Por exemplo, você pode imprimi-los e armazená-los junto com outros documentos importantes."
+ explanation_short: "Códigos de recuperação permitem que você recupere o acesso à conta caso perca seu celular. Repare que você só pode usar cada código uma única vez."
+ invalidation_notice: "Se você perder seus códigos de recuperação, poderá regerá-los aqui. Os antigos serão invalidados."
+ reminder: "Uma alternativa é usar um dos códigos de recuperação."
+ title: "Códigos de recuperação"
+ title: "Autenticação em duas etapas"
username: "Usuário"
users:
confirm_email:
diff --git a/config/locales/diaspora/pt-PT.yml b/config/locales/diaspora/pt-PT.yml
index 9a2e15905..1498253fe 100644
--- a/config/locales/diaspora/pt-PT.yml
+++ b/config/locales/diaspora/pt-PT.yml
@@ -734,7 +734,6 @@ pt-PT:
updated: "Perfil atualizado"
public: "Público"
registrations:
- closed: "Os registos estão encerrados neste servidor do diaspora*."
create:
success: "Aderiu ao diaspora*!"
invalid_invite: "A hiperligação de convite fornecida já não é válida!"
diff --git a/config/locales/diaspora/ro.yml b/config/locales/diaspora/ro.yml
index 905c17450..3c78febbe 100644
--- a/config/locales/diaspora/ro.yml
+++ b/config/locales/diaspora/ro.yml
@@ -25,6 +25,10 @@ ro:
attributes:
poll:
already_participated: "Deja ai răspuns la acest chestionar!"
+ reshare:
+ attributes:
+ root_guid:
+ taken: "Atat de bun, ei? Ai distribuit deja acea postare!"
user:
attributes:
email:
@@ -40,6 +44,7 @@ ro:
pod_network: "Rețeaua de servere"
pod_stats: "Statisticile serverului"
user_search: "Căutare utilizatori"
+ weekly_user_stats: "Statistici saptamanale ale utilizatorului"
pods:
pod_network: "Rețeaua de servere"
stats:
@@ -50,9 +55,23 @@ ro:
one: "%{count} comentariu"
other: "%{count} comentarii"
zero: "%{count} comentarii"
+ current_segment: "Media postarilor de la data de %{post_day} a segmentului curent este de %{post_yest}"
daily: "Zilnic"
+ display_results: "Afisare rezultate pentru segmentul %{segment}"
go: "Înainte"
month: "Lună"
+ posts:
+ few: "%{count} postari"
+ one: "%{count} postare"
+ other: "%{count} postari"
+ zero: "postari"
+ shares:
+ few: "%{count} distribuiri"
+ one: "O singura distribuire"
+ other: "%{count} distribuiri"
+ zero: "distribuiri"
+ tag_name: "Numele etichetei: %{name_tag} Numarul: %{count_tag}"
+ usage_statistic: "Statistici ale utilizării"
users:
few: "%{count} utilizatori"
one: "%{count} utilizator"
@@ -61,13 +80,27 @@ ro:
week: "Săptămână"
user_search:
add_invites: "Adaugă invitații"
+ email_to: "Trimite email pentru a invita"
invite: "Invită"
+ under_13: "Afiseaja utilizatorilor sub 13 ani (COPPA)"
users:
few: "am găsit %{count} utilizatori"
one: "am găsit %{count} utilizator"
other: "am găsit %{count} utilizatori"
zero: "am găsit %{count} utilizatori"
- all_aspects: "All aspects"
+ you_currently:
+ few: "Momentan aveti %{count} invitatii ramase %{link}"
+ one: "Momentan mai aveti o singura invitatie ramasa %{link} "
+ other: "Momentan aveti %{count} invitatii ramase %{link}"
+ zero: "Momentan nu v-a mai ramas nici o invitatie %{link}"
+ weekly_user_stats:
+ amount_of:
+ few: "Numarul de utilizatori nou in aceasta saptamana este: %{count}"
+ one: "Numarul de utilizatori nou in aceasta saptamana este: %{count}"
+ other: "Numarul de utilizatori nou in aceasta saptamana este: %{count}"
+ zero: "Numarul de utilizatori nou in aceasta saptamana este: nici unul"
+ current_server: "Data curenta a serverului este %{date}"
+ all_aspects: "Toate aspectele"
api:
openid_connect:
scopes:
@@ -89,6 +122,7 @@ ro:
aspect_listings:
add_an_aspect: "+ Adaugă un aspect"
aspect_stream:
+ make_something: "Fa ceva"
stay_updated: "Rămâi la curent"
stay_updated_explanation: "Fluxul tău de date este populat cu toate contactele tale, toate etichetele pe care le urmărești și articolele publicate de unii membri creativi ai comunității."
destroy:
@@ -117,7 +151,9 @@ ro:
tag_feature: "funcție"
tag_question: "întrebare"
tutorial_link_text: "Îndrumări"
+ tutorials_and_wiki: "%{faq}, %{tutorial} si %{wiki}: ajutor pentru primii tai pasi."
introduce_yourself: "Acesta este fluxul tău. Fă-ți prezentarea."
+ keep_pod_running: "Tineti %{pod} functional cumparand serverelor \"cafeaua\" lor necesara cu o donatie lunara!"
new_here:
follow: "Urmează legătura %{link} si urează-le bun venit noilor utilizatori în comunitatea Diaspora"
learn_more: "Află mai multe"
@@ -140,8 +176,12 @@ ro:
failure: "Apectul tău, %{name}, are numele prea lung ca să fie salvat"
success: "Aspectul, %{name}, a fost editat cu succes."
blocks:
+ create:
+ failure: "Nu am putut sa ignor acel utilizator. #evasion"
+ success: "Bine, nu vei mai vedea acel utilizator in fluxul tau din nou. #silencio!"
destroy:
failure: "Nu am putut ignora acel user. #evasion"
+ success: "Sa vedem ce au de spus! #sayhello"
bookmarklet:
explanation: "%{link} from anywhere by bookmarking this link."
post_something: "Publică ceva pe diaspora*"
@@ -194,11 +234,29 @@ ro:
find_people: "Găsește persoane sau #etichete"
help:
account_and_data_management:
+ close_account_a: "Accesați partea de jos a paginii dumneavoastra de setări și faceți clic pe butonul \"Închidere cont\". Vi se va cere să introduceți parola pentru a finaliza procesul. Rețineți că, dacă vă închideți contul, nu veți putea reinregistra <strong> niciodată </strong> numele de utilizator pe acest cont."
+ close_account_q: "Cum ii pot sterege sementele (contul)?"
data_other_podmins_q: "Pot oare administratorii altor servere să vadă informațiile mele?"
data_visible_to_podmin_q: "Cât de mult din informațiile mele poate vedea administratorul?"
+ download_data_a: "Da. În partea de jos a filei Cont din pagina de setari veti gasi două butoane: unul pentru descarcarea datelor ai unul pentru descarcarea fotografiilor."
+ download_data_q: "Pot descarca o copie a tuturor datelor mele continute in semintele mele (cont)?"
+ move_pods_a: "Versiunea 0.7.0.0 a diaspora * oferă prima etapă de migrare a contului: acum puteți să exportați toate datele din secțiunea \"Cont\" din setările utilizatorului. Păstrează-ți datele în siguranță! Într-o versiune viitoare veți putea să mutați întregul cont, inclusiv postările și persoanele de contact, într-un alt pod."
move_pods_q: "Cum pot să transfer contul meu de pe un server pe altul?"
+ title: "Contul si gestionarea datelor"
+ foundation_website: "pagina web a fundatiei diaspora*"
getting_help:
+ get_support_a_hashtag: "Întrebați într-un post public pe diaspora * folosind hashtag-ul %{question}"
+ get_support_a_irc: "Alaturate nou pe %{irc} (live chat)"
get_support_a_tutorials: "Vezi %{tutorials}le noastre"
+ get_support_a_website: "Vizitati-ne aici %{link}"
+ get_support_a_wiki: "Cauta pe %{link}"
+ get_support_q: "Ce se intampla daca nu primesc raspuns la intrebarea mea in FAQ? Unde altundeva pot primi ajutor?"
+ getting_started_a: "Ai noroc. Încercați %{tutorial_series} pe site-ul nostru. Acesta va va duce pas cu pas prin procesul de înregistrare si va va învata toate lucrurile de baza pe care trebuie sa le cunoașteti despre utilizarea diasporei *."
+ getting_started_q: "Ajutor! Am nevoie ajutor de baza pentru a porni!"
+ title: "Primind ajutor"
+ getting_started_tutorial: "Seria de instrucțiuni \"Noțiuni de bază\""
+ here: "aici"
+ irc: "IRC"
posts_and_posting:
post_location_a: "În editor faceți clic pe pictograma PIN de lângă cameră. Acest lucru va introduce locația de OpenStreetMap. Puteți edita locația dvs. - dacă doriți puteți să introduceți doar orașul în loc de adresa specifică."
post_location_q: "Cum adaug locația mea la un post?"
@@ -221,6 +279,8 @@ ro:
tags_in_comments_q: "Pot să pun etichete în comentarii sau doar în postări?"
title: "Etichete"
what_are_tags_for_q: "Pentru ce sunt etichetele?"
+ third_party_tools: "Instrumente de la parteneri terti"
+ tutorial: "tutorial"
tutorials: "îndrumări"
wiki: "Wiki"
home:
@@ -235,18 +295,29 @@ ro:
make_yourself_an_admin: "Devino administrator"
invitations:
create:
+ empty: "Va rugam sa introduceti cel putin o adresa de eail."
no_more: "Nu mai dispui de invitații."
+ note_already_sent: "Invitaii au fost deja triise catre: %{emails}"
rejected: "Urmatoarele adrese de email au prezentat probleme:"
sent: "Invitațiile a fost expediate către: %{emails}"
new:
+ codes_left:
+ few: "%{count} invitatii au mai ramas pe acest cod"
+ one: "O singura invitatie a mai ramas pe acest cod"
+ other: "%{count} invitatii au mai ramas pe acest cod"
+ zero: "Nu a mai ramasa nici o invitatie pe acest cod"
comma_separated_plz: "Poți introduce mai multe adrese de email separate de virgulă."
invite_someone_to_join: "Invită pe cineva pe Diaspora!"
language: "Limbă"
+ paste_link: "Impartaseste acest link cu prietenii tai pentru ai invita in diaspora* sau trimitele un email direct."
send_an_invitation: "Trimite o invitație"
+ sending_invitation: "Se trimite invitatia..."
layouts:
application:
back_to_top: "Înapoi la începutul paginii"
powered_by: "Rulează pe diaspora*"
+ public_feed: "Flux public diaspora* pentru %{name}"
+ source_package: "Descarca pachetul care contine codul sursa"
whats_new: "Ce mai e nou?"
header:
code: "Codul"
@@ -258,26 +329,20 @@ ro:
no_results: "Nu am găsit nimic"
notifications:
also_commented:
- few: "%{actors} also commented on %{post_author}'s %{post_link}."
- many: "%{actors} also commented on %{post_author}'s %{post_link}."
- one: "%{actors} also commented on %{post_author}'s %{post_link}."
- other: "%{actors} also commented on %{post_author}'s %{post_link}."
- two: "%{actors} also commented on %{post_author}'s %{post_link}."
- zero: "%{actors} also commented on %{post_author}'s %{post_link}."
+ few: "%{actors} deasemenea au comentat la %{post_link} lui %{post_author}."
+ one: "%{actors} deasemenea a comentat la %{post_link} lui %{post_author}."
+ other: "%{actors} deasemenea au comentat la %{post_link} lui %{post_author}."
+ zero: "%{actors} deasemenea au comentat la %{post_link} lui %{post_author} ."
also_commented_deleted:
- few: "%{actors} le-a placut publicatia stearsa de tine."
- many: "%{actors} au put comentarii pe o publicatie deja stearsa."
- one: "%{actors} i-a placut publicatia stearsa de tine."
- other: "%{actors} le-a placut publicatia stearsa de tine."
- two: "%{actors} commented on a deleted post."
- zero: "%{actors} commented on a deleted post."
+ few: "%{actors} au comentat la o postare stearsa."
+ one: "%{actors} a comentat la o postare stearsa."
+ other: "%{actors} au comentat la o postare stearsa."
+ zero: "%{actors} au comentat la o postare stearsa."
comment_on_post:
- few: "%{actors} au pus comentarii pe %{post_link}."
- many: "%{actors} au pus comentarii pe %{post_link}."
- one: "%{actors} a comentat pe %{post_link} ta."
- other: "%{actors} au comentat pe %{post_link} ta."
- two: "%{actors} commented on your %{post_link}."
- zero: "%{actors} commented on your %{post_link}."
+ few: "%{actors} au comentat la %{post_link}."
+ one: "%{actors} a comentat la %{post_link}."
+ other: "%{actors} au comentat la %{post_link}."
+ zero: "%{actors} au comentat la %{post_link}."
index:
all_notifications: "Toate notificările"
and: "și"
@@ -294,61 +359,45 @@ ro:
show_all: "Arată toate"
show_unread: "Arată necitite"
liked:
- few: "%{actors} has just liked your %{post_link}."
- many: "%{actors} has just liked your %{post_link}."
- one: "%{actors} has just liked your %{post_link}."
- other: "%{actors} has just liked your %{post_link}."
- two: "%{actors} has just liked your %{post_link}."
- zero: "%{actors} has just liked your %{post_link}."
+ few: "%{actors} ti-au apreciat %{post_link}."
+ one: "%{actors} ti-a apreciat %{post_link}."
+ other: "%{actors} ti-au apreciat %{post_link}."
+ zero: "%{actors} ti-au apreciat %{post_link}."
liked_post_deleted:
- few: "%{actors} au placut publicatia stearsa de tine."
- many: "%{actors} le-au placut publicatia stearsa de tine."
- one: "%{actors} i-a placut publicatia stearsa de tine."
- other: "%{actors} le-a placut publicatia stearsa de tine."
- two: "%{actors} liked your deleted post."
- zero: "%{actors} liked your deleted post."
+ few: "%{actors} au apreciat postarea stearsa de tine."
+ one: "%{actors} a apreciat postarea stearsa de tine."
+ other: "%{actors} au apreciat postarea stearsa de tine."
+ zero: "%{actors} au apreciat postarea stearsa de tine."
mentioned:
- few: "%{actors} has mentioned you in a %{post_link}."
- many: "%{actors} has mentioned you in a %{post_link}."
- one: "%{actors} v-a amintit intro %{post_link}."
- other: "%{actors} has mentioned you in a %{post_link}."
- two: "%{actors} has mentioned you in a %{post_link}."
- zero: "%{actors} has mentioned you in a %{post_link}."
+ few: "%{actors} te-au mentionat in %{post_link}."
+ one: "%{actors} te-a mentionat in %{post_link}."
+ other: "%{actors} te-au mentionat in %{post_link}."
+ zero: "%{actors} te-au mentionat in %{post_link}."
mentioned_deleted:
- few: "%{actors} te-au amintit intro publicatie deja stearsa."
- many: "%{actors} te-au amintit intro publicatie deja stearsa."
- one: "%{actors} te-a amintit intro publicatie deja stearsa."
- other: "%{actors} te-au amintit intro publicatie deja stearsa."
- two: "%{actors} mentioned you in a deleted post."
- zero: "%{actors} mentioned you in a deleted post."
+ few: "%{actors} te-au mentionat intr-o postare stearsa."
+ one: "%{actors} te-a mentionat intr-o postare stearsa."
+ other: "%{actors} te-au mentionat intr-o postare stearsa."
+ zero: "%{actors} te-au mentionat intr-o postare stearsa."
private_message:
- few: "%{actors} sent you a message."
- many: "%{actors} sent you a message."
- one: "%{actors} sent you a message."
- other: "%{actors} sent you a message."
- two: "%{actors} sent you a message."
- zero: "%{actors} sent you a message."
+ few: "%{actors} ti-au trimis un mesaj."
+ one: "%{actors} ti-a trimis un mesaj."
+ other: "%{actors} ti-au trimis un mesaj."
+ zero: "%{actors} ti-au trimis un mesaj."
reshared:
- few: "%{actors} has reshared your %{post_link}."
- many: "%{actors} has reshared your %{post_link}."
- one: "%{actors} has reshared your %{post_link}."
- other: "%{actors} has reshared your %{post_link}."
- two: "%{actors} has reshared your %{post_link}."
- zero: "%{actors} has reshared your %{post_link}."
+ few: "%{actors} ti-au redistribuit postarea %{post_link}."
+ one: "%{actors} ti-a redistribuit postarea %{post_link}."
+ other: "%{actors} ti-au redistribuit postarea %{post_link}."
+ zero: "%{actors} ti-au redistribuit postarea %{post_link}."
reshared_post_deleted:
- few: "%{actors} reshared your deleted post."
- many: "%{actors} reshared your deleted post."
- one: "%{actors} reshared your deleted post."
- other: "%{actors} reshared your deleted post."
- two: "%{actors} reshared your deleted post."
- zero: "%{actors} reshared your deleted post."
+ few: "%{actors} au redistribuit postarea ta stearsa."
+ one: "%{actors} a redistribuit postarea ta stearsa."
+ other: "%{actors} au redistribuit postarea ta stearsa."
+ zero: "%{actors} au redistribuit postarea ta stearsa."
started_sharing:
- few: "%{actors} started sharing with you."
- many: "%{actors} started sharing with you."
- one: "%{actors} started sharing with you."
- other: "%{actors} started sharing with you."
- two: "%{actors} started sharing with you."
- zero: "%{actors} started sharing with you."
+ few: "%{actors} au inceput sa impartaseasca cu tine."
+ one: "%{actors} a inceput sa impartaseasca cu tine."
+ other: "%{actors} a inceput sa impartaseasca cu tine."
+ zero: "%{actors} au inceput sa impartaseasca cu tine."
notifier:
a_post_you_shared: "o publicatie."
click_here: "Clic aici"
@@ -357,6 +406,7 @@ ro:
reply: "Răspunde sau uita-te la publicația lui %{name} >"
confirm_email:
click_link: "Pentru a activa adresa nouă de email %{unconfirmed_email}, urmează această legătură:"
+ subject: "Va rugam sa va activati noua adresa de email %{unconfirmed_email}"
contacts_birthday:
view_profile: "Vezi profilul lui %{name}"
email_sent_by_diaspora: "Acest email a fost expediat de către %{pod_name}. Dacă nu dorești să mai primești asemenea emailuri,"
@@ -391,6 +441,7 @@ ro:
[1]: %{invite_url}
[2]: %{diasporafoundation_url}
+ invited_you: "%{name} te-a invitat pe diaspora*"
liked:
liked: "lui %{name} i-a plăcut publicația ta"
view_post: "Vezi publicația >"
@@ -403,11 +454,11 @@ ro:
reshared: "%{name} a partajat postarea ta"
view_post: "Vezi articolul >"
single_admin:
- admin: "Administratorul local de Diaspora"
+ admin: "Administratorul tau diaspora*"
subject: "Un mesaj despre contul tău de diaspora*:"
started_sharing:
sharing: "a inceput sa comunice cu tine!"
- subject: "%{name} has started sharing with you on Diaspora*"
+ subject: "%{name} a inceput sa distribuie cu tine pe Diaspora*"
view_profile: "Vezi profilul lui %{name}"
thanks: "Mulțumim,"
to_change_your_notification_settings: "pentru a schimba setăriile notificărilor"
@@ -420,6 +471,7 @@ ro:
looking_for: "Cauți publicații marcate cu %{tag_link}?"
no_one_found: "... dar nimeni nu a fost găsit."
no_results: "Hey! Trebuie să cauți ceva."
+ results_for: "Utilizatorii care se potrivesc termenului %{search_term}"
searching: "Caut acum, așteaptă un pic..."
person:
thats_you: "Ești tu!"
@@ -446,12 +498,10 @@ ro:
title: "Un articol de la %{name}"
show:
photos_by:
- few: "%{count} photos by %{author}"
- many: "%{count} photos by %{author}"
- one: "One photo by %{author}"
- other: "%{count} photos by %{author}"
- two: "Two photos by %{author}"
- zero: "No photos by %{author}"
+ few: "%{count} fotografii de %{author}"
+ one: "O singura fotografie de %{author}"
+ other: "%{count} fotografii de %{author}"
+ zero: "%{author} nu are fotografii"
reshare_by: "Partajat de către %{author}"
privacy: "Confidențialitate"
profile: "Profil"
@@ -474,9 +524,9 @@ ro:
updated: "Profil actualizat"
public: "Public"
registrations:
- closed: "Ȋnscrierile sunt ȋnchise pe acest pod Diaspora."
create:
success: "Bun venit pe Diaspora!"
+ invalid_invite: "Linkul de invitație pe care l-ați furnizat nu mai este valabil!"
new:
email: "Adresa email"
enter_email: "Introduce un e-mail"
@@ -490,14 +540,19 @@ ro:
report:
reason_label: "Motiv:"
reshares:
+ comment_email_subject: "%{resharer} redistribuirea postarii creata de %{author}"
reshare:
deleted: "Publicația originală a fost ștearsă de autorul ei."
+ reshare_confirmation: "Redistribuie postarea creata de %{author}?"
reshared_via: "Distribuit prin"
search: "Caută"
services:
create:
+ already_authorized: "Un utilizator cu id-ul %{diaspora_id} de diaspora a autorizat deja contul %{service_name}"
failure: "Autentificarea a eșuat."
success: "Autentificare cu succes."
+ destroy:
+ success: "Autentificare stearsa cu succes."
failure:
error: "Eroare la conectarea serviciului respectiv"
index:
@@ -505,21 +560,32 @@ ro:
edit_services: "Editează servicii"
logged_in_as: "Autentificat ca %{nickname}."
really_disconnect: "Să deconectez %{service}?"
+ services_explanation: "Conectarea la serviciile de partajare terta vă oferă posibilitatea de a vă publica postarile în timp ce le scrieți în diaspora *."
settings: "Setări"
shared:
+ aspect_dropdown:
+ toggle:
+ few: "In %{count} aspecte"
+ one: "%{count} aspect"
+ other: "In %{count} aspecte"
invitations:
by_email: "Invită pe cineva prin e-mail"
invite_your_friends: "Invită-ți prietenii"
invites: "Invitații"
+ share_this: "Distribuie acest link prin email, blog sau reatea sociala!"
public_explain:
atom_feed: "Afișare feed RSS și Atom"
+ control_your_audience: "Controlează-ți publicul"
logged_in: "Autentificat pe %{service}"
manage: "gestionează serviciile la care ești conectat"
+ new_user_welcome_message: "Foloseste #hashtags ca sa iti clasifici postarile si ca sa gasesti persoane care impartasesc aceleasi interese. Cheama persoane minunate cu @Mentions"
outside: "Mesajele publice vor fi disponibile pentru cei ce nu fac parte din Diaspora."
share: "Distribuie"
title: "Ești pe cale de a publica un mesaj public!"
+ visibility_dropdown: "Foloseste acest buton derulant pentru a schimba vizibilitatea postarii tale. (Noi va sugeram sa o faceti publica pe aceasta.)"
publisher:
discard_post: "Anulează publicația"
+ get_location: "Obtineti locatia dumneavoastra"
new_user_prefill:
hello: "Salutare tuturor, sunt #%{new_user_tag}. "
i_like: "Sunt interesat(ă) de %{tags}. "
@@ -529,6 +595,7 @@ ro:
add_a_poll: "Adaugă un chestionar"
posting: "Public..."
share: "Distribuie"
+ whats_on_your_mind: "La ce te gandesti?"
stream_element:
via: "Prin %{link}"
via_mobile: "Prin mobil"
@@ -539,6 +606,8 @@ ro:
streams:
activity:
title: "Activitatea proprie"
+ aspects:
+ title: "Aspectele mele"
aspects_stream: "Aspecte"
comment_stream:
title: "Articole comentate"
@@ -549,6 +618,8 @@ ro:
follow: "Urmărește"
title: "Etichetele #urmărite"
followed_tags_stream: "Etichetele #urmărite"
+ like_stream:
+ title: "Flux de aprecieri"
mentioned_stream: "@Menționări"
mentions:
title: "@Menționări"
@@ -579,9 +650,12 @@ ro:
email_not_confirmed: "E-Mail could not be activated. Wrong link?"
destroy:
no_password: "Introdu parola curentă pentru închiderea contului."
+ success: "Contul tau a fost blocat. Avem nevoie de aproximativ 20 de minute pe a finaliza inchidera contului tau.Va multumim pentru ca ati incercat diaspora*."
wrong_password: "Parola introdusă nu coincide cu parola ta actuală."
edit:
also_commented: "...cineva comenteaza de asemenea pe publicatia unei persoane din contacte?"
+ auto_follow_aspect: "Alege un aspect pentru utilizatorii cu care impartasesti automat:"
+ auto_follow_back: "Distribuie automat cu utilizatorii care distribuie cu tine"
birthday: "e ziua de nastere a cuiva"
change: "Modifică"
change_email: "Modifică adresa email"
@@ -591,6 +665,10 @@ ro:
close_account:
dont_go: "Te rog, nu pleca!"
lock_username: "Numele tău de utilizator va fi blocat. Nu vei putea să creezi alt cont pe acest server cu același ID."
+ locked_out: "Vei fi delogat si blocat in afara contului pana cant iti va fi sters contul."
+ make_diaspora_better: "Ne-am bucura foarte mult daca ai ramane si ne-ai ajuta sa facem diaspora* mai eficienta in loc sa o parasesti. Daca vrei cu adevarat sa pleci, in orice caz, uite ce se va intampla in continuare:"
+ mr_wiggles: "Mr Wiggles va fi trist vazandu-te plecand"
+ no_turning_back: "Nu exista cale de intoarcere! Daca esti cu adevarat sigur, introdu parola ta dedesubt."
what_we_delete: "We delete all of your posts, profile data, as soon as humanly possible. Your comments will hang around, but be associated with your Diaspora Handle."
close_account_text: "Închide cont"
comment_on_post: "...cineva comenteaza pe o publicatie proprie?"
@@ -604,12 +682,18 @@ ro:
mentioned: "...sunteti mentionat intr-un post ?"
new_password: "Parolă nouă"
private_message: "...primesti un mesaj privat?"
+ receive_email_notifications: "Primeste notificari prin email atunci cand:"
+ reshared: "cineva redistribuie postarea ta"
show_community_spotlight: "Afișează „reflectorul comunității” în flux"
+ show_getting_started: "Arata ponturi despre \"cum sa incepi\""
+ started_sharing: "cineva incepe sa impartaseasca cu tine"
stream_preferences: "Preferințe flux"
your_email: "E-mailul tău"
your_handle: "Identificatorul tău pe Diaspora"
getting_started:
awesome_take_me_to_diaspora: "Super! Du-mă la diaspora*"
+ community_welcome: "Comunitatea diaspora* este bucuroasa sa te aiba alaturi!"
+ hashtag_explanation: "Hastag-urile iti dau voie sa vorbesti despre interesele tale si sa le urmaresti. Ele te ajuta deasemenea sa gasesti peroane noi pe diaspora*"
hashtag_suggestions: "Încearcă să urmărești așa etichete ca #arta, #filme, #gif etc."
well_hello_there: "Bun venit"
what_are_you_in_to: "Ce interese ai?"
diff --git a/config/locales/diaspora/ru.yml b/config/locales/diaspora/ru.yml
index b1ac52529..6657344f6 100644
--- a/config/locales/diaspora/ru.yml
+++ b/config/locales/diaspora/ru.yml
@@ -1037,7 +1037,6 @@ ru:
updated: "Профиль обновлён"
public: "Публичная"
registrations:
- closed: "На этом сервере Диаспоры регистрация закрыта."
create:
success: "Вы вступили в диаспору*!"
invalid_invite: "Это приглашение уже недействительно!"
diff --git a/config/locales/diaspora/sc.yml b/config/locales/diaspora/sc.yml
index e76aa0799..85053daa3 100644
--- a/config/locales/diaspora/sc.yml
+++ b/config/locales/diaspora/sc.yml
@@ -989,7 +989,6 @@ sc:
updated: "Profilu agiornadu"
public: "Pùblicu"
registrations:
- closed: "Sas registratziones sunt serradas in custu pod de diaspora*."
create:
success: "Ti ses registradu in diaspora*!"
invalid_invite: "Su ligàmene de invitu chi as impreadu no est prus vàlidu!"
diff --git a/config/locales/diaspora/sk.yml b/config/locales/diaspora/sk.yml
index ac4da3b6b..bd85051af 100644
--- a/config/locales/diaspora/sk.yml
+++ b/config/locales/diaspora/sk.yml
@@ -550,7 +550,6 @@ sk:
updated: "Profil aktualizovaný"
public: "Verejný"
registrations:
- closed: "Registrácie sú na tomto pode diaspory* pozastavené."
create:
success: "Pridal(a) si sa k diaspore*!"
invalid_invite: "Odkaz na pozvánku, ktorý si zadal(a), už nie je platný!"
diff --git a/config/locales/diaspora/sl.yml b/config/locales/diaspora/sl.yml
index 37e72e04f..89377da75 100644
--- a/config/locales/diaspora/sl.yml
+++ b/config/locales/diaspora/sl.yml
@@ -443,7 +443,6 @@ sl:
updated: "Profil posodobljen"
public: "Javni"
registrations:
- closed: "Za ta Pod Diaspore registracije trenutno niso mogoče."
create:
success: "Pridružili ste se v omrežje Diaspora!"
invalid_invite: "Povezava na povabilo, ki ste jo uporabili ni več veljavna!"
diff --git a/config/locales/diaspora/sr.yml b/config/locales/diaspora/sr.yml
index 0c10d27f7..929fdb3b8 100644
--- a/config/locales/diaspora/sr.yml
+++ b/config/locales/diaspora/sr.yml
@@ -221,7 +221,6 @@ sr:
updated: "Ажурирај профил"
public: "Јавно"
registrations:
- closed: "Регистрације су затворене за овај diaspora* под"
create:
success: "Придружили сте се diaspora*"
new:
diff --git a/config/locales/diaspora/sv.yml b/config/locales/diaspora/sv.yml
index f7266bb75..ed1cd7960 100644
--- a/config/locales/diaspora/sv.yml
+++ b/config/locales/diaspora/sv.yml
@@ -90,15 +90,18 @@ sv:
week: "Vecka"
user_entry:
account_closed: "Konto borttaget"
+ admin: "Administratör"
diaspora_handle: "Diaspora*-id"
email: "E-post"
guid: "Globalt identifieringsnummer (GUID)"
id: "id"
invite_token: "Inbjudningskort"
last_seen: "Sedd senast"
+ moderator: "Moderator"
? "no"
: Nej
nsfw: "#nsfw"
+ spotlight: "Strålkastarljus"
unknown: "Okänd"
? "yes"
: Ja
@@ -106,14 +109,29 @@ sv:
account_closing_scheduled: "Kontot för %{name} är låst och kommer att raderas om en stund."
account_locking_scheduled: "Kontot för användaren %{name} är schemalagt för att låsas. Det kommer ske om en liten stund..."
account_unlocking_scheduled: "Kontot för användaren %{name} är schemalagt för att låsas upp. Det kommer ske om en liten stund..."
+ add_admin: "%{name} har gjorts till administratör."
add_invites: "Lägg till inbjudningar"
+ add_moderator: "%{name} har gjorts till moderator."
+ add_spotlight: "%{name} har lagts i strålkastarljuset."
are_you_sure: "Är du säker på att du vill ta bort ditt konto?"
are_you_sure_lock_account: "Är du säker på att du vill låsa detta konto?"
are_you_sure_unlock_account: "Är du säker på att du vill låsa upp detta konta?"
close_account: "Ta bort konto"
+ delete_admin: "%{name} har tagits bort ur administratörslistan."
+ delete_moderator: "%{name} har tagits ur moderatorlistan."
+ delete_spotlight: "%{name} har tagits ur strålkastarljuset."
+ does_not_exist: "Användare finns inte!"
email_to: "Skicka ett e-brev för att bjuda in"
invite: "Bjud in"
lock_account: "Lås konto"
+ make_admin: "Gör administratör"
+ make_moderator: "Gör moderator"
+ make_spotlight: "Lägg in i strålkastarljuset"
+ remove_admin: "Ta bort som admin"
+ remove_moderator: "Ta bort som moderator"
+ remove_spotlight: "Ta bort ur strålkastarljustet"
+ role_implemented: "%{name} har redan tillgivits rollen!"
+ role_removal_implemented: "%{name} har redan ifråntagits rollen!"
under_13: "Visa användare som är yngre än 13 år"
unlock_account: "Lås upp konto"
users:
@@ -190,6 +208,7 @@ sv:
tos: "Kika på tillämpningens användarvillkor."
are_you_sure: "Är du säker?"
are_you_sure_delete_account: "Är du säker på att du vill avsluta ditt konto? Detta kan inte ångras!"
+ are_you_sure_ignore_user: "Du kommer att ignorera användaren. Är du säker på din sak?"
aspect_memberships:
destroy:
failure: "Kunde inte ta bort personen från aspekten"
@@ -465,7 +484,7 @@ sv:
character_limit_q: "Vad är teckenbegränsning för inlägg?"
embed_multimedia_a: "Det ska räcka med att bara klistra in länken till vad du vill bifoga i inlägget. Några av de sidor som stöds är: YouTube, Vimeo, SoundCloud och Flickr. Diaspora* använder oEmbed för den här egenskapen. Vi lägger till stöd för andra sidor hela tiden. Kom ihåg att göra enkla inlägg och bara använda fullständiga länkar, inga URL-förkortare. Inga operatorer efter länken och vänta ett slag efter att du klistrat in inlägget innan du laddar om sidan, efter att du skrivit inlägget."
embed_multimedia_q: "Hur bäddar jag in en video, ljudspår eller annat multimediainnehåll i ett inlägg?"
- format_text_a: "Du kan använda %{markdown}-systemet. Du kan se systemets syntax %{here}. Använd knappen för att förhandsgranska inlägget så att du ser att det blir som du hade tänkt dig."
+ format_text_a: "Diaspora använder ett förenklat system som kallas %{markdown}. Du som skriver har knappar för att hjälpa dig formatera texten. Om du vill formatera manuallt, hittar du hela syntaxen %{here}. Fliken för att förhandsvisa, ger dig möjlighet att se meddelandet innan du delar. Glöm inte att inte kan ändra efter publikation; var därför nogrann med att förhandsgranska innan!"
format_text_q: "Hur kan jag formatera texten i mina inlägg? (Fet stil, kursivera, etcetera.)"
hide_posts_a: "Om du pekar muspekaren överst på ett inlägg kommer ett kryss att dyka upp till höger. Tryck på det för att dölja inlägget och avsluta notifieringarna berörande det. Du kommer fortfarande kunna se inlägget om du besöker författarens profilsida."
hide_posts_q: "Hur döljer jag ett inlägg?"
@@ -473,7 +492,7 @@ sv:
ignore_user_a2: "För att ignorera någon, tryck ikonen \"ignorera\" (cirkel med ett diagonalt streck) i övre högra hörnet av inlägg. Deras inlägg kommer omedelbart försvinna ur ditt flöde. Alternativt, kan du gå till deras profilsida och trycka på ignoreraknappen där. Du kan fortfarande se personens inlägg på dennes profilsida."
ignore_user_a3: "Du hittar listan över ignorerade personer under Sekretess bland dina kontoinställningar. För att sluta ignorera någon, ta bort personen ur listan."
ignore_user_q: "Hur tar jag bort någon från min ström?"
- insert_images_a: "Tryck på den lilla kameraikonen för att bifoga en bild till inlägget. Tryck på ikonen igen för att lägga till fler foton. Du kan välja fler att ladda upp flera bilder samtidigt"
+ insert_images_a: "Om du vill ha en bild som finns på din dator i inlägg, välj den lilla kameraikonen. Du kan också dra bilden från katalogen, eller fler bilde, från datorn till ikonen. Om du vill ha bild från en annan webbsida i inlägget, väljer du istället formateringsknappen som då skriver in Markdown-koden åt dig."
insert_images_comments_a: "Använd Markdown för att lägga in bilder från webben i en kommentar, precis som i ett inlägg. Du kan dock inte ladda upp bilder från din dator till kommentarer. Ladda upp dem på någon bilddelningssida och lägg därefter in bilderna i kommentarer."
insert_images_comments_q: "Kan jag lägga till bilder i kommentarer?"
insert_images_q: "Hur lägger jag in bilder till mitt inlägg?"
@@ -483,7 +502,7 @@ sv:
post_notification_q: "Hur gör jag för att ändra mina notifikationsinställningar för ett inlägg?"
post_poll_a: "Tryck på grafikonen för att skapa en omröstning. Skriv in din fråga och åtminstone två alternativ. Glöm inte att göra inlägget publikt om du vill att alla ska kunna delta."
post_poll_q: "Hur lägger jag till en omröstning till mitt inlägg?"
- post_report_a: "Tryck på varningstriangeln i inläggets övre, högra hörn för att anmäla det till din podadminstratör. Ange sedan, noggrant, varför du valt att anmäla inlägget."
+ post_report_a: "Tryck på varningstriangeln i inläggets övre, högra hörn för att anmäla det till din podadminstratör. Ange sedan, noggrant, varför du valt att anmäla inlägget. Var så bussig och anmäl bara inlägg som bryter mot våra %{community_guidelines} eller användarvilkoren för din pod. Det kan exempelvis vara olagligt material, eller kränkande innehåll och spam."
post_report_q: "Hur meddelar jag om kränkande inlägg?"
size_of_images_a: "Nej. Bildernas storlek justeras automatiskt för att passa strömmen."
size_of_images_q: "Kan jag själv anpassa bildstorleken i inlägg och kommentarer?"
@@ -512,10 +531,10 @@ sv:
who_sees_profile_a: "Din huvudsakliga profil (namn, foto och #taggar) är offentlig. Din utökade profil är däremot privat, men du kan göra den offentlig om du vill. Bara dem du delar med (dvs. med i dina aspekter) kan se din utökade profil om du har den privat. Andra kan endast se din offentliga information. När en profil blivit offentlig, kan vem som helst ta del av den och den kan indexeras av sökmotorer."
who_sees_profile_q: "Vem ser min profil?"
public_posts:
- can_comment_reshare_like_a: "Bara de som är inloggade på Diaspora* kan kommentera, dela vidare och gilla dina offentliga inlägg."
+ can_comment_reshare_like_a: "Bara de som är inloggade på Diaspora* kan kommentera, dela vidare och gilla dina offentliga inlägg. Undantaget är dem du valt att ignorera. De kommer inte kunna gilla och kommentera dina inlägg."
can_comment_reshare_like_q: "Vilka kan kommentera, dela och gilla mina publika inlägg?"
deselect_aspect_posting_a: "Du påverkar inte dina publika inlägg genom att välja bort aspekter från dem. Inläggen kommer ändå att synas hos alla dina kontakter. Vill du bara att några aspekter ska se ditt inlägg, väljer du dem i listan under utgivaren."
- deselect_aspect_posting_q: "Vad händer när jag tar väljer bort aspekter när jag ska göra ett offentligt inlägg?"
+ deselect_aspect_posting_q: "Vad händer när jag tar väljer bort aspekter i vänstra kolumnen när jag ska göra ett offentligt inlägg?"
find_public_post_a: "Dina publika inlägg kommer att dyka upp i strömmarna som följer dig. Om du har fyrkantstaggar i dina publika inlägg kommer alla som följer taggen se inlägget i strömmen. Varje publikt inlägg ges en specifik webbadress så att vem som helst kan komma åt det, även om de inte är inloggade. Publika inlägg kan alltså länkas till direkt från (till exempel) Twitter och bloggar. De publika inläggen kan då också bli indexerade av sökmotorer."
find_public_post_q: "Hur hittar man mina publika inlägg?"
see_comment_reshare_like_a: "Kommentarer, gillanden och vidaredelningar av publika inlägg kommer att vara publika. Alla inloggade på Diaspora* och vem som helst på Internet kan se dina interaktioner med ett publikt inlägg."
@@ -553,7 +572,7 @@ sv:
tags:
filter_tags_a: "Det är inte ännu inte möjligt att utföra i Diaspora*. Men något %{third_party_tools} kan finnas som stödjer denna funktion."
filter_tags_q: "Hur filtrerar jag bort några av taggarna från mitt flöde?"
- followed_tags_a: "När du sökt en tagg kan du trycka på knappen överst på taggens sida för att följa taggen. Då kommer då synas till vänster med andra taggar du följer. Trycker du på någon tagg i listan hamnar du på taggens sida och kommer att se de senaste inläggen med taggen. Tryck \"#Följda taggar\" för att se ett flöde med alla taggar du följer."
+ followed_tags_a: "När du sökt en tagg kan du trycka på knappen överst på taggens sida för att följa taggen. Då kommer då synas till vänster med andra taggar du följer. Trycker du på någon tagg i listan hamnar du på taggens sida och kommer att se de senaste inläggen med taggen. Tryck \"#Följda taggar\" för att se ett flöde med alla taggar du följer. Inlägg med den taggen kommer dyka upp i ditt huvudflöde."
followed_tags_q: "Vad är \"#Följda taggar\" och hur följer man en tagg?"
people_tag_page_a: "Det är personer som lagt till taggen i sin beskrivning på sin publika profilsida."
people_tag_page_q: "Vilka är personerna till vänster på taggens sida?"
@@ -574,9 +593,11 @@ sv:
byline: "Den sociala världen på nätet där du har kontrollen."
choose_your_audience: "Välj din publik"
choose_your_audience_info: "Med Diasporas aspekter, kan du välja med vilka du delar med dig till. Du kan vara hur offentlig eller privat du vill. Dela med dig av roliga bilder med hela världen eller en hemlighet med dina närmaste vänner. Du bestämmer."
+ diaspora_site_link: "Diaspora* federerat nätverk"
headline: "Välkommen till %{pod_name}"
own_your_data: "Du äger din data"
own_your_data_info: "Många nätverk använder din data för att tjäna pengar genom att analysera dig och använda din data för att sälja reklam riktad mot dig. Diaspora* använder inte din data för något annat än att låta dig kommunicera med andra."
+ part_of_diaspora: "En del av %{diaspora_site_link}"
podmin:
byline: "Du är just på väg att förändra Internet. Är du redo för att komma igång?"
configuration_info: "Öppna %{database_path} och %{diaspora_path} i en textredigerare och gå igenom dem noggrant. De är fyllda med kommentarer."
@@ -627,6 +648,8 @@ sv:
public_feed: "Offentligt Diaspora*-flöde för %{name}"
source_package: "Ladda ned källkodspaketet"
statistics_link: "Serverstatistik"
+ switch_to_standard_mode: "Ändra till standardläge."
+ switch_to_touch_optimized_mode: "Ändra till fingervänligt läge."
whats_new: "Vad är nytt?"
header:
code: "Källkod"
@@ -677,7 +700,7 @@ sv:
mark_all_shown_as_read: "Märk allt som läst"
mark_read: "Lästmärk"
mark_unread: "Markera som oläst"
- mentioned: "Omnämnd"
+ mentioned: "Omnämnd i inlägg"
mentioned_in_comment: "Nämnd i kommentar"
no_notifications: "Du har inga notifikationer än."
notifications: "Notiser"
@@ -977,7 +1000,11 @@ sv:
updated: "Profilen har uppdaterats"
public: "Publik"
registrations:
- closed: "Registreringsformuläret är avstängt på den här Diaspora*-servern."
+ closed:
+ another_pod: "annan pod"
+ closed_pod: "Denna pod är för närvarande stängd för nya registreringar. Du kan ändå gå med i Diaspora* genom registrering på %{wiki}. I och med att alla poddar är anslutna till varandra, kommer du komma åt allt innehåll ändå."
+ find_pods: "En lista med poddar du kan registrera dig på finns på %{poduptime}."
+ other_questions: "Om du har frågor gällande att välja pod, kan du läsa vår %{wiki}."
create:
success: "Du har nu gått med i Diaspora*!"
invalid_invite: "Den angivna inbjudningslänken gäller inte längre."
@@ -995,13 +1022,13 @@ sv:
terms_link: "användarvillkor"
username: "Användarnamn"
report:
- comment_label: "<b>Kommentar</b>:%{data}"
+ comment_label: "<strong>Kommentar</strong>: %{data}"
confirm_deletion: "Vill de radera objektet?"
delete_link: "Radera objekt"
not_found: "Inlägget eller kommentaren fanns inte. Det tycks har blivit borttaget av användaren."
- post_label: "<b>Inlägg</b>: %{title}"
+ post_label: "<strong>Inlägg</strong>: %{content}"
reason_label: "Orsak:"
- reported_label: "<b>Anmält av</b> %{person}"
+ reported_label: "<strong>Anmält av</strong> %{person}"
reported_user_details: "Detaljer gällande anmäld användare"
review_link: "Markera som genomgånget"
status:
@@ -1164,6 +1191,41 @@ sv:
one: "En person är taggad med %{tag}"
other: "%{count} personer är taggade med %{tag}"
zero: "Ingen har taggats med %{tag}"
+ two_factor_auth:
+ activated:
+ change_button: "Inaktivera"
+ change_label: "Inaktivera tvåfaktorautentisering med ditt lösenord"
+ status: "Tvåfaktorautentisering aktiverat"
+ confirm:
+ activate_button: "Bekräfta och aktivera"
+ input_explanation: "Efter skanning eller att ha skrivit den hemliga koden, skriver du in den sexsiffriga kod du ser och bekräftar uppsättningen."
+ input_title: "Bekräfta med TOTP-pollett."
+ manual_explanation: "Om du inte kan skanna QR-koden automatiskt, kan du göra det manuellt i din app med den hemliga koden."
+ manual_explanation_cont: "Vi använder oss av tidsbegränsade ongångslösenord (TOTP) med sex siffror långa polletter. Om din applikation frågar om ett tidintervall och algoritm, anger du 30 sekunder och sh1.<br /> Mellanrummen är bara för läsbarhetens skull; du ska inte skriva dem."
+ scan_explanation: "Skanna QR-koden med en TOTP-kompatibel applikation, såsom andOTP (för Android), FreeOTP (för iOS), SailOTP (för SailfishOS)."
+ scan_title: "Läs in QR-kod"
+ status: "Tvåfaktorautentisering har inte the fullo aktiverats än. Du behöver verifiera med en TOTP-pollett."
+ title: "Bekräfta aktivering"
+ deactivated:
+ change_button: "Aktivera"
+ change_label: "Aktivera tvåfaktorautentisering"
+ status: "Tvåfaktorautentisering inaktiverat"
+ explanation: "Tvåfaktorautentisering är ett kraftfullt sätt att försäkra om att det bara är du som kan logga in på ditt konto. När du loggar in, kommer du ange en sexsiffrig kod tillsammans med ditt löseord för att påvisa din identitet. Men var ändock aktsam: om du blir av med din telefon och koderna som genereras för denna funktionalitet, kommer du aldrig kunna komma åt ditt konto igen."
+ flash:
+ error_token: "Polletten var fel eller ogiltig"
+ success_activation: "Aktivering av tvåstegsautentisering lyckades"
+ success_deactivation: "Avaktivering av tvåstegsautentisering lyckades"
+ input_token:
+ label: "Tvåstegspollett"
+ placeholder: "Sexssiffrig tvåstegspollett"
+ recovery:
+ button: "Generera nya återställningskoder"
+ explanation: "Om du någonsin blir av med din telefon, kan du använda en av återställningskoderna nedanför för att återfå tillgång till ditt konto. Spara koderna på en säker plats. Du kan till exompel skriva ut dem och ha dem bland dina andra viktiga lappar."
+ explanation_short: "Återställningsskoder används för att återfå tillgång till ditt konto utifall att du blir av med din telefon. Du kan bara använda varje kod en enda gång."
+ invalidation_notice: "Om du blir av med dina återställningskoder, kan du generera nya här. Dina tidigare koder blir då ogiltiga."
+ reminder: "Alternativt kan du använda en återställningskod."
+ title: "Återställningsskoder"
+ title: "Tvåfaktorautentisering"
username: "Användarnamn"
users:
confirm_email:
@@ -1212,8 +1274,9 @@ sv:
new_password: "Nytt lösenord"
private_message: "du mottager ett privat meddelande."
protocol_handler:
- description: "Din webbläsare kommer fråga om du vill hantera adresser med web+diaspora:// i din hempod när du tryck när du trycker på knappen. Funktionaliteten är för närvarande experimentell och användning beror på din webbläsare."
- register: "Register"
+ browser: "Protokollet är för närvarande i en testfas och hur bra det kommer fungera kommer bero på din webbläsare. Om du vill ändra eller ta bort denna hantering, kommer du göra det med din webbläsares inställningar. Knappen nedanför kommer alltid vara påslagen och du behöver sätta hanteringen separat för varje webbläsare du använder."
+ description: "web+diaspora:// är ett nytt webbprotokoll vi har introducerat. Alla sådana länkar, både på Diaspora* och ute på nätet, kan öppnas i den pod du har ditt konto på. Tryck på knappen nedanför för att få %{pod_url} att känna av externa länkar av typen web+diaspora://."
+ register: "Registrera web+diaspora:// på din webbläsare"
title: "Hantera protokollet web+diaspora://"
receive_email_notifications: "Skicka notiser via e-post när:"
request_export: "Efterfråga min profildata"
diff --git a/config/locales/diaspora/te.yml b/config/locales/diaspora/te.yml
index d38e5a34c..fca32997c 100644
--- a/config/locales/diaspora/te.yml
+++ b/config/locales/diaspora/te.yml
@@ -605,7 +605,6 @@ te:
updated: "ప్రవర నవీకరించబడింది"
public: "బహిరంగం"
registrations:
- closed: "ఈ డయాస్పోరా* పాడ్ పై కొత్త ప్రవేశాలు మూసివేయబడ్డాయి."
create:
success: "డయాస్పోరా*లో మీ చేరిక విజయవంతం!"
invalid_invite: "మీరు ఇచ్చిన ఆహ్వానపు లంకె చెల్లుబాటులో లేదు!"
diff --git a/config/locales/diaspora/tr.yml b/config/locales/diaspora/tr.yml
index 0a7234b1b..7bdd34fe4 100644
--- a/config/locales/diaspora/tr.yml
+++ b/config/locales/diaspora/tr.yml
@@ -101,7 +101,7 @@ tr:
current_server: "Şu andaki sunucu tarihi %{date}"
all_aspects: "Tüm Yönler"
are_you_sure: "Emin misin?"
- are_you_sure_delete_account: "Hesabını kapatmak istediğinden emin misin? Bu geri alınamaz!"
+ are_you_sure_delete_account: "Hesabını kapatmak istediğinden emin misin? Bu işlemi geri alamazsın!"
aspect_memberships:
destroy:
failure: "Yön'den kişi kaldırılamadı"
@@ -178,7 +178,7 @@ tr:
bookmarklet:
explanation: "Diaspora'ya istediğin her yerden gönderi yapmak için %{link} bağlantısını yer imlerine ekle."
heading: "Diaspora yer işareti"
- post_something: "Diaspora için bir şey gönder"
+ post_something: "Diaspora'ya bir şey gönder"
cancel: "İptal Et"
color_themes:
dark_green: "Koyu yeşil"
@@ -255,7 +255,7 @@ tr:
change_aspect_of_post_a: "Hayır, ama aynı içerikte başka bir gönderi hazırlayıp bunu farklı bir bakış yönünde gönderebilirsiniz."
change_aspect_of_post_q: "Bir gönderiyi paylaştıktan sonra onu gören hedef bakışları değiştirebilir miyim?"
contacts_know_aspect_a: "Hayır. Bakışın adını hiçbir şekilde göremezler."
- contacts_know_aspect_q: "Diğerleri onları hangi bakışlara koyduğumu bilebilir mi?"
+ contacts_know_aspect_q: "Bağlantılarım onları hangi Cephe'lere koyduğumu bilebilir mi?"
delete_aspect_a: "Akış görünümündeki kenar çubuğundan \"Yönlerim\"e tıkla ve silmek istediğin yönleri işaretle, ya da erişimlerim sayfasından ilgili yönü seçip çöp simgesine tıkla."
delete_aspect_q: "Yön nasıl silinir?"
person_multiple_aspects_a: "Evet. Kişiler sayfasına gidin ve kişilerime tıklayın. Her biri için sağdaki menüyü kullanarak, istediğiniz kadar çok bakışa ekleyip istediğiniz kadarından çıkarabilirsiniz. Profil sayfasındaki bakış seçicisine tıklayarak da bunu yapabilirsiniz. Hatta, imleci adının üzerine götürdüğünüzde çıkan 'kartı' kullanarak da aynı şeyi yapabilirsiniz."
@@ -268,11 +268,11 @@ tr:
rename_aspect_q: "Bakışın adını değiştirebilir miyim?"
restrict_posts_i_see_a: "Evet. Kenar çubuğundaki Bakışlarım'a tıklayın ve seçiminizi değiştirmek için ilgili bakışlara tıklayın. Yalnızca seçili bakışlardan gelen gönderiler size görünür olacak."
restrict_posts_i_see_q: "Gördüğüm gönderileri sadece belli bakışlara kısıtlayabilir miyim?"
- title: "Bakışlar"
- what_is_an_aspect_a: "Bakışlar diaspora* da kişileri gruplamanın bir yolu, dünyaya gösterdiğiniz yüzlerden biridir. Çalıştığınızdaki bakış açınız, ailenize karşı, çevrenizdeki kişilere karşı gösterdiğiniz farklı farklı olabilir."
- what_is_an_aspect_q: "Bakış nedir?"
+ title: "Cepheler"
+ what_is_an_aspect_a: "Cepheler diaspora* da kişileri gruplamanın bir yoludur. Bir Cephe dünyaya gösterdiğiniz yüzlerden biridir. İş yerinizde veya ailenizde ya da üyesi olduğunuz kulüpteki arkadaşlarınız için kim olduğunuz olabilir."
+ what_is_an_aspect_q: "Cephe nedir?"
who_sees_post_a: "Sınırlı gönderi yaparsanız, yalnızca o bakış(lar)a koyduğunuz kişilere görünür olacaktır. Bunun dışındakiler, gönderinizi açmadığınız sürece hiçbir şekilde onu göremeyeceklerdir. Yalnızca genel gönderiler hiçbir bakışa koymadığınız kişilere açıktır."
- who_sees_post_q: "Bir bakışa gönderdiğimde onu kimler görür?"
+ who_sees_post_q: "Bir Cephe'ye gönderi gönderdiğimde onu kimler görür?"
foundation_website: "diaspora vakfı web sitesi"
getting_help:
get_support_a_hashtag: "%{question} etiketini kullanarak diaspora* üzerinde açık bir gönderiyle sorun"
@@ -435,8 +435,8 @@ tr:
other: "%{actors} senin %{post_link} gönderini beğendi."
zero: "%{actors} senin %{post_link} gönderini beğendi."
liked_post_deleted:
- other: "%{actors} silinmiş gönderinizi iğneledi."
- zero: "%{actors} silinmiş gönderinizi iğnelemedi."
+ other: "%{actors} silinmiş gönderinizi beğendi.."
+ zero: "%{actors} silinmiş gönderinizi beğendi."
mentioned:
other: "%{actors} bir %{post_link} içinde seni andı."
zero: "%{actors} bir %{post_link} içinde seni andı."
@@ -461,9 +461,9 @@ tr:
zero: "%{actors} sizinle paylaşıma başladı."
notifier:
a_post_you_shared: "gönderi"
- click_here: "buraya"
+ click_here: "buraya tıklayın"
comment_on_post:
- reply: "Yanıtla ya da %{name} gönderisini görüntüle >"
+ reply: "%{name}'in gönderisini yanıtla ya da görüntüle >"
confirm_email:
click_link: "Yeni e-mail adresini %{unconfirmed_email} etkinleştirmek için şu bağlantıya tıkla:"
subject: "Lütfen yeni e-mail adresini %{unconfirmed_email} etkinleştir"
@@ -489,10 +489,10 @@ tr:
[1]: %{invite_url}
invited_you: "%{name} sizi Diaspora*'ya davet etti."
liked:
- liked: "%{name} gönderini iğneledi."
+ liked: "%{name} gönderini beğendi"
view_post: "Gönderiyi görüntüle >"
mentioned:
- subject: "%{name} sana Diaspora*'da özel mesaj gönderdi "
+ subject: "%{name} Diaspora*'da sizi andı"
private_message:
reply_to_or_view: "Yanıtla ya da konuşmayı görüntüle >"
remove_old_user:
@@ -532,8 +532,8 @@ tr:
reshared: "%{name} gönderini tekrar paylaştı"
view_post: "Gönderiyi görüntüle>"
single_admin:
- admin: "Diaspora yönetici"
- subject: "Diaspora hesabı hakkında bir mesaj:"
+ admin: "Diaspora yöneticiniz"
+ subject: "Diaspora hesabınız hakkında bir mesaj:"
started_sharing:
sharing: "sizinle paylaşıma başladı!"
subject: "%{name} Diaspora*'da seninle paylaşıma başladı"
@@ -606,14 +606,13 @@ tr:
updated: "Profil güncellendi"
public: "Genel"
registrations:
- closed: "Üyelik bu Diaspora'da kapandı."
create:
- success: "Diasporaya katıldınız!"
+ success: "Diaspora'ya katıldınız!"
invalid_invite: "Gönderdiğiniz davetiye bağlantısı artık geçerli değil!"
new:
email: "E-POSTA"
enter_email: "Bir e-posta girin"
- enter_password: "Bir parola girin"
+ enter_password: "Bir parola girin (en az 6 karakter)"
enter_password_again: "Daha önce olduğu gibi aynı parolayı girin."
enter_username: "Bir kullanıcı adı seçin (sadece harfler, rakamlar ve alt çizgi)"
password: "PAROLA"
@@ -640,7 +639,7 @@ tr:
reshare:
deleted: "Gönderi yazarı tarafından silindi."
reshare_confirmation: "Tekrar paylaş %{author} - %{text}?"
- reshared_via: "tekrar paylaşıldı, bununla:"
+ reshared_via: "üzerinden yeniden paylaşıldı:"
search: "Ara"
services:
create:
diff --git a/config/locales/diaspora/uk.yml b/config/locales/diaspora/uk.yml
index b14e95921..7517914a3 100644
--- a/config/locales/diaspora/uk.yml
+++ b/config/locales/diaspora/uk.yml
@@ -1027,7 +1027,6 @@ uk:
updated: "Профіль оновлено"
public: "Публічна"
registrations:
- closed: "У цій частині Діаспори реєстрація закрита."
create:
success: "Ласкаво просимо в Діаспору*!"
invalid_invite: "Це запрошення вже недійсне!"
diff --git a/config/locales/diaspora/vi.yml b/config/locales/diaspora/vi.yml
index e2b05090f..6409f2edb 100644
--- a/config/locales/diaspora/vi.yml
+++ b/config/locales/diaspora/vi.yml
@@ -391,7 +391,6 @@ vi:
updated: "Đã cập nhật hồ sơ"
public: "Công khai"
registrations:
- closed: "Pod DIASPORA này không cho đăng kí nữa."
create:
success: "Bạn đã tham gia vào Diaspora!"
invalid_invite: "Liên kết mời bạn cung cấp không còn hợp lệ!"
diff --git a/config/locales/diaspora/zh-CN.yml b/config/locales/diaspora/zh-CN.yml
index db8039dde..7d4df6cfc 100644
--- a/config/locales/diaspora/zh-CN.yml
+++ b/config/locales/diaspora/zh-CN.yml
@@ -423,7 +423,6 @@ zh-CN:
updated: "个人档案更新成功"
public: "公开"
registrations:
- closed: "此 Diaspora pod 不开放注册。"
create:
success: "您已成功加入 Diaspora 了!"
invalid_invite: "此邀请链接已失效!"
diff --git a/config/locales/diaspora/zh-TW.yml b/config/locales/diaspora/zh-TW.yml
index c27ab46a4..a94dbdc9a 100644
--- a/config/locales/diaspora/zh-TW.yml
+++ b/config/locales/diaspora/zh-TW.yml
@@ -950,7 +950,6 @@ zh-TW:
updated: "個人檔案已經更新了"
public: "公開"
registrations:
- closed: "這個 diaspora* 豆莢不開放註冊。"
create:
success: "你已經成功加入 diaspora* 了!"
invalid_invite: "你提供的邀請連結已經失效了!"
diff --git a/config/locales/javascript/javascript.da.yml b/config/locales/javascript/javascript.da.yml
index 53c645d05..2a35067ef 100644
--- a/config/locales/javascript/javascript.da.yml
+++ b/config/locales/javascript/javascript.da.yml
@@ -133,6 +133,7 @@ da:
recent_notifications: "Seneste notifikationer"
search: "Søg"
settings: "Indstillinger"
+ switch_to_touch_optimized_mode: "Skift til touch-optimeret tilstand"
toggle_navigation: "Slå navigation til/fra"
view_all: "Se alle"
hide_post: "Skjul dette indlæg?"
diff --git a/config/locales/javascript/javascript.de-moo.yml b/config/locales/javascript/javascript.de-moo.yml
index a717589ab..fcd24113d 100644
--- a/config/locales/javascript/javascript.de-moo.yml
+++ b/config/locales/javascript/javascript.de-moo.yml
@@ -133,6 +133,7 @@ de-moo:
recent_notifications: "Neueste Benachrichtigungen"
search: "Suche"
settings: "Einstellungen"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
toggle_navigation: "Navigation umschalten"
view_all: "Alle anzeigen"
hide_post: "Diesen Beitrag ausblenden?"
diff --git a/config/locales/javascript/javascript.de.yml b/config/locales/javascript/javascript.de.yml
index 5903b4129..7b8ec8bda 100644
--- a/config/locales/javascript/javascript.de.yml
+++ b/config/locales/javascript/javascript.de.yml
@@ -133,6 +133,7 @@ de:
recent_notifications: "Neuste Benachrichtigungen"
search: "Suchen"
settings: "Einstellungen"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
toggle_navigation: "Navigation umschalten"
view_all: "Alle anzeigen"
hide_post: "Diesen Beitrag ausblenden?"
diff --git a/config/locales/javascript/javascript.de_formal.yml b/config/locales/javascript/javascript.de_formal.yml
index 62fc75b68..64e2643d3 100644
--- a/config/locales/javascript/javascript.de_formal.yml
+++ b/config/locales/javascript/javascript.de_formal.yml
@@ -133,6 +133,7 @@ de_formal:
recent_notifications: "Letzte Benachrichtigungen"
search: "Find people or #tags"
settings: "Einstellungen"
+ switch_to_touch_optimized_mode: "In den touch-optimierten Modus wechseln"
toggle_navigation: "Navigation umschalten"
view_all: "Alle ansehen"
hide_post: "Diesen Beitrag ausblenden?"
diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml
index 372d26705..ed0e12931 100644
--- a/config/locales/javascript/javascript.en.yml
+++ b/config/locales/javascript/javascript.en.yml
@@ -121,8 +121,6 @@ en:
contacts:
add_contact: "Add contact"
- aspect_chat_is_enabled: "Contacts in this aspect are able to chat with you."
- aspect_chat_is_not_enabled: "Contacts in this aspect are not able to chat with you."
remove_contact: "Remove contact"
error_add: "Couldn’t add <%= name %> to the aspect :("
error_remove: "Couldn’t remove <%= name %> from the aspect :("
diff --git a/config/locales/javascript/javascript.es.yml b/config/locales/javascript/javascript.es.yml
index b33dcc9f0..8db378131 100644
--- a/config/locales/javascript/javascript.es.yml
+++ b/config/locales/javascript/javascript.es.yml
@@ -96,22 +96,22 @@ es:
confirm_unload: "Por favor, confirma que quieres abandonar esta página. Los datos que no hayas introducido, no serán guardados."
contacts:
add_contact: "Añadir contacto"
- aspect_chat_is_enabled: "Los contactos de este \"aspecto\" pueden chatear contigo."
- aspect_chat_is_not_enabled: "Los contactos de este \"aspecto\" no pueden chatear contigo."
+ aspect_chat_is_enabled: "Los contactos de este grupo pueden chatear contigo."
+ aspect_chat_is_not_enabled: "Los contactos de este grupo no pueden chatear contigo."
error_add: "No se pudo añadir a <%= name %> al aspecto :("
error_remove: "No se pudo eliminar <%= name %> del aspecto :("
remove_contact: "Eliminar contacto"
search_no_results: "No se encontraron contactos"
conversation:
create:
- no_recipient: "¡Eh, primero tienes que agregar un destinatario!"
+ no_recipient: "¡Añade primero un destinatario!"
new:
no_contacts: "Necesitas añadir algún contacto antes de empezar una conversación."
create: "Crear"
delete: "Eliminar"
edit: "Editar"
errors:
- connection: "No ha sido posible conectarse al servidor."
+ connection: "No se ha podido establecer la conexión con el servidor."
failed_to_post_message: "¡Error al publicar el mensaje!"
failed_to_remove: "¡Se produjo un error al eliminar la entrada!"
getting_started:
@@ -296,7 +296,7 @@ es:
hour: "1 hora aproximadamente"
hours:
other: "%d horas aproximadamente"
- inPast: "próximamente"
+ inPast: "Próximamente"
minute: "1 minuto aproximadamente"
minutes:
other: "%d minutos"
diff --git a/config/locales/javascript/javascript.ja.yml b/config/locales/javascript/javascript.ja.yml
index 2ef3f4121..18b593cbd 100644
--- a/config/locales/javascript/javascript.ja.yml
+++ b/config/locales/javascript/javascript.ja.yml
@@ -53,15 +53,15 @@ ja:
up_to_date: "ポッドは最新です!"
and: "および"
aspect_dropdown:
- add_to_aspect: "Add to aspect"
+ add_to_aspect: "アスペクトに追加"
all_aspects: "全てのアスペクト"
error: "<%= name %>さんとシェアを始めることができません。 無視しますか?"
error_remove: "アスペクトから<%= name %>さんを削除できませんでした :("
mobile_row_checked: "<%= name %> (削除)"
mobile_row_unchecked: "<%= name %> (追加)"
select_aspects: "アスペクトを選択する"
- started_sharing_with: "You have started sharing with <%= name %>!"
- stopped_sharing_with: "You have stopped sharing with <%= name %>."
+ started_sharing_with: "<%= name %>さんとシェアを始めました!"
+ stopped_sharing_with: "<%= name %>さんとシェアをやめました。"
toggle:
other: "<%= count %> アスペクトに"
zero: "<%= count %> アスペクトに"
@@ -87,7 +87,7 @@ ja:
hide: "コメントを隠す"
no_comments: "まだコメントはありません。"
show: "全てのコメントを表示する"
- confirm_dialog: "本当にいいですか。"
+ confirm_dialog: "よろしいですか?"
confirm_unload: "このページを離れることを確認してください。入力したデータは保存されません。"
contacts:
add_contact: "連絡先を追加"
@@ -111,7 +111,7 @@ ja:
failed_to_remove: "エントリーの削除に失敗しました!"
getting_started:
alright_ill_wait: "OK、私は待ちます。"
- hey: "Hey, <%= name %>!"
+ hey: "こんにちは。 <%= name %> さん!"
no_tags: "タグを何もフォローしていません!続行しますか?"
preparing_your_stream: "パーソナライズ ストリームを準備しています..."
header:
diff --git a/config/locales/javascript/javascript.sv.yml b/config/locales/javascript/javascript.sv.yml
index 13b61a157..13f1cc80e 100644
--- a/config/locales/javascript/javascript.sv.yml
+++ b/config/locales/javascript/javascript.sv.yml
@@ -117,7 +117,7 @@ sv:
getting_started:
alright_ill_wait: "Okej, jag väntar."
hey: "Hej, <%= name %>!"
- no_tags: "Du, du följer ju inte några taggar! Vill du fortsätta ändå?"
+ no_tags: "Hörru, du följer ju inte några taggar! Vill du fortsätta ändå?"
preparing_your_stream: "Förbereder din personliga ström..."
header:
admin: "Administratör"
@@ -134,6 +134,7 @@ sv:
recent_notifications: "Tidigare notiser"
search: "Sök"
settings: "Inställningar"
+ switch_to_touch_optimized_mode: "Växla till pekskärmläge"
toggle_navigation: "Växla navigation"
view_all: "Visa alla"
hide_post: "Vill du dölja inlägget?"
diff --git a/config/routes.rb b/config/routes.rb
index 00ffe3579..502edc0c5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -59,7 +59,6 @@ Rails.application.routes.draw do
get "aspects" => "streams#aspects", :as => "aspects_stream"
resources :aspects, except: %i(index new edit) do
- put :toggle_chat_privilege
collection do
put "order" => :update_order
end
@@ -119,10 +118,17 @@ Rails.application.routes.draw do
get "getting_started_completed" => :getting_started_completed
end
+ resource :two_factor_authentication, only: %i[show create destroy] do
+ get :confirm, action: :confirm_2fa
+ post :confirm, action: :confirm_and_activate_2fa
+ get :recovery_codes
+ end
+
devise_for :users, controllers: {sessions: :sessions}, skip: :registration
devise_scope :user do
get "/users/sign_up" => "registrations#new", :as => :new_user_registration
post "/users" => "registrations#create", :as => :user_registration
+ get "/registrations_closed" => "registrations#registrations_closed", :as => :registrations_closed
end
get "users/invitations" => "invitations#new", :as => "new_user_invitation"
diff --git a/db/migrate/20171229175654_add_devise_two_factor_to_users.rb b/db/migrate/20171229175654_add_devise_two_factor_to_users.rb
new file mode 100644
index 000000000..47280dd20
--- /dev/null
+++ b/db/migrate/20171229175654_add_devise_two_factor_to_users.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddDeviseTwoFactorToUsers < ActiveRecord::Migration[5.1]
+ def change
+ change_table :users, bulk: true do |t|
+ t.string :encrypted_otp_secret
+ t.string :encrypted_otp_secret_iv
+ t.string :encrypted_otp_secret_salt
+ t.integer :consumed_timestep
+ t.boolean :otp_required_for_login
+ end
+ end
+end
diff --git a/db/migrate/20180302105225_add_two_factor_backupable_to_user.rb b/db/migrate/20180302105225_add_two_factor_backupable_to_user.rb
new file mode 100644
index 000000000..f9b6c0b5e
--- /dev/null
+++ b/db/migrate/20180302105225_add_two_factor_backupable_to_user.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddTwoFactorBackupableToUser < ActiveRecord::Migration[5.1]
+ def change
+ add_column :users, :otp_backup_codes, :text
+ end
+end
diff --git a/db/migrate/20190509125709_fix_missing_remote_photo_fields.rb b/db/migrate/20190509125709_fix_missing_remote_photo_fields.rb
new file mode 100644
index 000000000..8d6462643
--- /dev/null
+++ b/db/migrate/20190509125709_fix_missing_remote_photo_fields.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class FixMissingRemotePhotoFields < ActiveRecord::Migration[5.1]
+ def up
+ Photo.where(remote_photo_path: nil).each do |photo|
+ photo.write_attribute(:unprocessed_image, photo.read_attribute(:processed_image))
+ photo.update_remote_path
+ photo.save!
+ end
+ end
+end
diff --git a/db/migrate/20190511150503_decrypt_two_factor_secret.rb b/db/migrate/20190511150503_decrypt_two_factor_secret.rb
new file mode 100644
index 000000000..b1d21f5f6
--- /dev/null
+++ b/db/migrate/20190511150503_decrypt_two_factor_secret.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+class DecryptTwoFactorSecret < ActiveRecord::Migration[5.1]
+ class User < ApplicationRecord
+ end
+
+ def up
+ add_column :users, :plain_otp_secret, :string
+
+ key = twofa_encryption_key
+ decrypt_existing_secrets(key) if key
+
+ change_table :users, bulk: true do |t|
+ t.remove :encrypted_otp_secret
+ t.remove :encrypted_otp_secret_iv
+ t.remove :encrypted_otp_secret_salt
+ end
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+
+ private
+
+ def twofa_encryption_key
+ if AppConfig.heroku?
+ ENV["TWOFA_ENCRYPTION_KEY"]
+ else
+ key_file = File.expand_path("../../config/initializers/twofa_encryption_key.rb", File.dirname(__FILE__))
+
+ if File.exist? key_file
+ require key_file
+ File.delete(key_file)
+
+ return Diaspora::Application.config.twofa_encryption_key
+ end
+ end
+ end
+
+ def decrypt_existing_secrets(key)
+ User.where.not(encrypted_otp_secret: nil).each do |user|
+ user.plain_otp_secret = Encryptor.decrypt(
+ value: user.encrypted_otp_secret.unpack("m").first,
+ key: key,
+ iv: user.encrypted_otp_secret_iv.unpack("m").first,
+ salt: user.encrypted_otp_secret_salt.slice(1..-1).unpack("m").first
+ )
+ user.save!
+ end
+ end
+end
diff --git a/db/migrate/20190701234716_photos_remove_comment_count.rb b/db/migrate/20190701234716_photos_remove_comment_count.rb
new file mode 100644
index 000000000..4d6330960
--- /dev/null
+++ b/db/migrate/20190701234716_photos_remove_comment_count.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class PhotosRemoveCommentCount < ActiveRecord::Migration[5.1]
+ class Comment < ApplicationRecord
+ end
+
+ def change
+ remove_column :photos, :comments_count, :integer
+
+ reversible do |change|
+ change.up { Comment.where(commentable_type: "Photo").delete_all }
+ end
+ end
+end
diff --git a/db/migrate/20190703231700_fix_pending_profile_photos.rb b/db/migrate/20190703231700_fix_pending_profile_photos.rb
new file mode 100644
index 000000000..51b3a1512
--- /dev/null
+++ b/db/migrate/20190703231700_fix_pending_profile_photos.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class FixPendingProfilePhotos < ActiveRecord::Migration[5.1]
+ def up
+ Photo.where(pending: true).each do |photo|
+ photo.update(pending: false) if Profile.where(image_url: photo.url(:thumb_large)).exists?
+ end
+ end
+end
diff --git a/db/migrate/20191018014242_remove_chat.rb b/db/migrate/20191018014242_remove_chat.rb
new file mode 100644
index 000000000..f6f1b3d9d
--- /dev/null
+++ b/db/migrate/20191018014242_remove_chat.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class RemoveChat < ActiveRecord::Migration[5.1]
+ def up
+ remove_column :aspects, :chat_enabled
+ drop_table :chat_contacts
+ drop_table :chat_fragments
+ drop_table :chat_offline_messages
+ end
+end
diff --git a/features/desktop/change_password.feature b/features/desktop/change_password.feature
index f37ebe045..695193249 100644
--- a/features/desktop/change_password.feature
+++ b/features/desktop/change_password.feature
@@ -25,12 +25,11 @@ Feature: Change password
Given I am on forgot password page
When I fill out forgot password form with "forgetful@users.net"
And I submit forgot password form
- Then I should see "You will receive an email with instructions"
+ Then I should see "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
When I follow the "Change my password" link from the last sent email
When I fill out the password reset form with "supersecret" and "supersecret"
And I submit the password reset form
- Then I should be on the stream page
- And I sign out manually
+ Then I should be on the new user session page
And I sign in manually as "georges_abitbol" with password "supersecret"
Then I should be on the stream page
@@ -50,4 +49,4 @@ Feature: Change password
Given I am on forgot password page
When I fill out forgot password form with "notanemail"
And I submit forgot password form
- Then I should see "No account with this email exists"
+ Then I should see "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
diff --git a/features/desktop/signs_up.feature b/features/desktop/getting_started.feature
index 2703069e0..bbebd5efa 100644
--- a/features/desktop/signs_up.feature
+++ b/features/desktop/getting_started.feature
@@ -98,11 +98,11 @@ Feature: new user registration
Then I should not be able to sign up
And I should have a validation error on "user_password, user_password_confirmation"
- Scenario: User signs up with an already existing username and email and then tries to sign in (Issue #6136)
+ Scenario: User signs up with an already existing username and email and then tries to sign in
When I log out manually
And I go to the new user registration page
- And I fill in the new user form with an existing email and username
+ And I fill in the new user form
And I submit the form
Then I should see a flash message indicating failure
- When I click the sign in button
+ When I follow "Sign in"
Then I should not see a flash message indicating failure
diff --git a/features/desktop/likes.feature b/features/desktop/likes.feature
index 73227004d..02bd395e8 100644
--- a/features/desktop/likes.feature
+++ b/features/desktop/likes.feature
@@ -16,13 +16,14 @@ Feature: Liking posts
Scenario: Liking and unliking a post from the stream
Then I should not have activated notifications for the post
When I like the post "I like unicorns" in the stream
- Then I should see "Unlike" within ".stream-element .feedback"
- And I should see a ".likes .media" within "#main-stream .stream-element"
+ Then the post "I like unicorns" should have the "Unlike" action available
+ And the post "I like unicorns" should have 1 like
+ And the post "I like unicorns" should have a like from "Alice Smith"
And I should have activated notifications for the post
When I unlike the post "I like unicorns" in the stream
- Then I should see "Like" within ".stream-element .feedback"
- And I should not see a ".likes .media" within "#main-stream .stream-element"
+ Then the post "I like unicorns" should have the "Like" action available
+ And the post "I like unicorns" shouldn't have any likes
Scenario: Liking and unliking a post from a single post page
@@ -39,4 +40,6 @@ Feature: Liking posts
When I like the post "I like unicorns" in the stream
And I sign out
And I sign in as "bob@bob.bob"
- Then I should see a ".likes" within "#main-stream .stream-element"
+ Then the post "I like unicorns" should have the "Like" action available
+ And the post "I like unicorns" should have 1 like
+ And the post "I like unicorns" should have a like from "Alice Smith"
diff --git a/features/desktop/registrations.feature b/features/desktop/registrations.feature
new file mode 100644
index 000000000..1abcc09c4
--- /dev/null
+++ b/features/desktop/registrations.feature
@@ -0,0 +1,24 @@
+@javascript
+Feature: New user registration
+ In order to use Diaspora*
+ As a desktop user
+ I want to register an account
+
+ Scenario: user signs up and goes to getting started
+ Given I am on the new user registration page
+ When I fill in the new user form
+ And I press "Create account"
+ Then I should be on the getting started page
+ And I should see the 'getting started' contents
+
+ Scenario: registrations are closed, user is informed
+ Given the registrations are closed
+ When I am on the new user registration page
+ Then I should see "Open signups are closed at this time"
+
+ Scenario: User is unable to register even by manually sending the POST request
+ Given I am on the new user registration page
+ When I fill in the new user form
+ Given the registrations are closed
+ When I press "Create account"
+ Then I should see "Open signups are closed at this time"
diff --git a/features/desktop/two_factor_authentication.feature b/features/desktop/two_factor_authentication.feature
new file mode 100644
index 000000000..1e2e8a61f
--- /dev/null
+++ b/features/desktop/two_factor_authentication.feature
@@ -0,0 +1,80 @@
+# frozen_string_literal: true
+@javascript
+Feature: Two-factor autentication
+
+ Scenario: Activate 2fa
+ Given a user with email "alice@test.com"
+ When I sign in as "alice@test.com"
+ When I go to the two-factor authentication page
+ And I press "Activate"
+ Then I should see "Confirm activation"
+ When I scan the QR code and fill in a valid TOTP token for "alice@test.com"
+ And I press "Confirm and activate"
+ Then I should see "Two-factor authentication activated"
+ And I should see "Recovery codes"
+ When I confirm activation
+ Then I should see "Two-factor authentication activated"
+ And I should see "Deactivate"
+
+ Scenario: Signing in with 2fa activated and correct token
+ Given a user with username "alice" and password "secret"
+ And 2fa is activated for "alice"
+ When I go to the login page
+ And I fill in username "alice" and password "secret"
+ And press "Sign in"
+ Then I should see "Two-factor authentication"
+ When I fill in a valid TOTP token for "alice"
+ And I press "Sign in"
+ Then I should be on the stream page
+
+ Scenario: Trying to sign in with 2fa activated and incorrect token
+ Given a user with username "alice" and password "secret"
+ And 2fa is activated for "alice"
+ When I go to the login page
+ And I fill in username "alice" and password "secret"
+ And press "Sign in"
+ Then I should see "Two-factor authentication"
+ When I fill in an invalid TOTP token
+ And I press "Sign in"
+ Then I should see "Two-factor authentication"
+
+ Scenario: Signing in with 2fa activated and a recovery code
+ Given a user with username "alice" and password "secret"
+ And 2fa is activated for "alice"
+ When I go to the login page
+ And I fill in username "alice" and password "secret"
+ And press "Sign in"
+ Then I should see "Two-factor authentication"
+ When I fill in a recovery code from "alice"
+ And I press "Sign in"
+ Then I should be on the stream page
+
+ Scenario: Regenerating recovery codes
+ Given a user with email "alice@test.com"
+ And 2fa is activated for "alice@test.com"
+ When I sign in as "alice@test.com"
+ When I go to the two-factor authentication page
+ Then I should see "Generate new recovery codes"
+ When I press the recovery code generate button
+ Then I should see a list of recovery codes
+
+ Scenario: Deactivating 2fa with correct password
+ Given a user with email "alice@test.com"
+ And 2fa is activated for "alice@test.com"
+ When I sign in as "alice@test.com"
+ When I go to the two-factor authentication page
+ Then I should see "Deactivate"
+ When I put in my password in "two_factor_authentication_password"
+ And I press "Deactivate"
+ Then I should see "Two-factor authentication not activated"
+
+ Scenario: Trying to deactivate with incorrect password
+ Given a user with email "alice@test.com"
+ And 2fa is activated for "alice@test.com"
+ When I sign in as "alice@test.com"
+ When I go to the two-factor authentication page
+ Then I should see "Deactivate"
+ When I fill in "two_factor_authentication_password" with "incorrect"
+ And I press "Deactivate"
+ Then I should see "Two-factor authentication activated"
+ And I should see "Deactivate"
diff --git a/features/mobile/change_password.feature b/features/mobile/change_password.feature
index f30edb215..8f7c0c060 100644
--- a/features/mobile/change_password.feature
+++ b/features/mobile/change_password.feature
@@ -27,13 +27,12 @@ Feature: Change password
And I am on forgot password page
When I fill out forgot password form with "forgetful@users.net"
And I submit forgot password form
- Then I should see "You will receive an email with instructions"
+ Then I should see "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
When I follow the "Change my password" link from the last sent email
And I fill out the password reset form with "supersecret" and "supersecret"
And I submit the password reset form
- Then I should be on the stream page
- When I sign out
- And I go to the login page
+ Then I should be on the new user session page
+ When I go to the login page
And I sign in manually as "georges_abitbol" with password "supersecret" on the mobile website
Then I should be on the stream page
@@ -53,4 +52,4 @@ Feature: Change password
Given I am on forgot password page
When I fill out forgot password form with "notanemail"
And I submit forgot password form
- Then I should see "No account with this email exists"
+ Then I should see "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
diff --git a/features/mobile/signs_up.feature b/features/mobile/registrations.feature
index 3277ef131..43bc9dc75 100644
--- a/features/mobile/signs_up.feature
+++ b/features/mobile/registrations.feature
@@ -5,8 +5,7 @@ Feature: New user registration
I want to register an account
Background:
- Given I am on the login page
- And I follow "Create account" within "#main-nav"
+ Given I am on the new user registration page
Scenario: user signs up and goes to getting started
When I fill in the new user form
diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb
index 06c291c44..8f2bde9f5 100644
--- a/features/step_definitions/custom_web_steps.rb
+++ b/features/step_definitions/custom_web_steps.rb
@@ -61,18 +61,6 @@ And /^I submit the form$/ do
find("input[type='submit']").click
end
-And /^I expand the publisher$/ do
- click_publisher
-end
-
-And /^I close the publisher$/ do
- find("#publisher .md-cancel").click
-end
-
-Then /^the publisher should be expanded$/ do
- find("#publisher")["class"].should_not include("closed")
-end
-
Then /^the text area wrapper mobile should be with attachments$/ do
find("#publisher-textarea-wrapper")["class"].should include("with_attachments")
end
@@ -88,50 +76,6 @@ And /^I hover over the "([^"]+)"$/ do |element|
find("#{element}", match: :first).hover
end
-When /^I prepare the deletion of the first post$/ do
- find(".stream .stream-element", match: :first).hover
- within(find(".stream .stream-element", match: :first)) do
- ctrl = find(".control-icons")
- ctrl.hover
- ctrl.find(".remove_post").click
- end
-end
-
-When /^I prepare hiding the first post$/ do
- find(".stream .stream-element", match: :first).hover
- within(find(".stream .stream-element", match: :first)) do
- ctrl = find(".control-icons")
- ctrl.hover
- ctrl.find(".hide_post").click
- end
-end
-
-When /^I click to delete the first post$/ do
- accept_alert do
- step "I prepare the deletion of the first post"
- end
- expect(find(".stream")).to have_no_css(".stream-element.loaded.deleting")
-end
-
-When /^I click to hide the first post$/ do
- accept_alert do
- step "I prepare hiding the first post"
- end
-end
-
-When /^I click to delete the first comment$/ do
- within("div.comment", match: :first) do
- find(".comment_delete", visible: false).click
- end
-end
-
-When /^I click to delete the first uploaded photo$/ do
- page.execute_script("$('#photodropzone .x').css('display', 'block');")
- image_count = all(".publisher_photo img", wait: false).count
- find("#photodropzone .x", match: :first).trigger "click"
- page.assert_selector(".publisher_photo img", count: image_count - 1)
-end
-
And /^I click on selector "([^"]*)"$/ do |selector|
find(selector).click
end
@@ -229,15 +173,7 @@ When /^I resize my window to 800x600$/ do
page.driver.resize(800, 600)
end
-Then 'I should see an image attached to the post' do
- step %(I should see a "img" within ".stream-element div.photo-attachments")
-end
-
-Then 'I press the attached image' do
- step %(I press the 1st "img" within ".stream-element div.photo-attachments")
-end
-
-And "I wait for the popovers to appear" do
+And /^I wait for the popovers to appear$/ do
expect(page).to have_selector(".popover", count: 3)
end
@@ -290,22 +226,6 @@ When /^I focus the "([^"]+)" field$/ do |field|
find_field(field).click
end
-Given /^I have configured a Bitcoin address$/ do
- AppConfig.settings.bitcoin_address = "AAAAAA"
-end
-
-Then /^I should see the Bitcoin address$/ do
- find("#bitcoin_address")['value'].should == "AAAAAA"
-end
-
-Given /^I have configured a Liberapay username$/ do
- AppConfig.settings.liberapay_username = "BBBBBB"
-end
-
-Then /^I should see the Liberapay donate button$/ do
- find("#liberapay-button")["href"].should == "https://liberapay.com/BBBBBB/donate"
-end
-
Given /^"([^"]*)" is hidden$/ do |selector|
page.should have_selector(selector, visible: false)
page.should_not have_selector(selector)
diff --git a/features/step_definitions/left_navbar_steps.rb b/features/step_definitions/left_navbar_steps.rb
new file mode 100644
index 000000000..f84f3526a
--- /dev/null
+++ b/features/step_definitions/left_navbar_steps.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+When /^(?:|I )click on "([^"]*)" navbar title$/ do |title|
+ with_scope(".info-bar") do
+ find("h5", text: title).click
+ end
+end
+
+Given /^I have configured a Bitcoin address$/ do
+ AppConfig.settings.bitcoin_address = "AAAAAA"
+end
+
+Then /^I should see the Bitcoin address$/ do
+ find("#bitcoin_address")["value"].should == "AAAAAA"
+end
+
+Given /^I have configured a Liberapay username$/ do
+ AppConfig.settings.liberapay_username = "BBBBBB"
+end
+
+Then /^I should see the Liberapay donate button$/ do
+ find("#liberapay-button")["href"].should == "https://liberapay.com/BBBBBB/donate"
+end
diff --git a/features/step_definitions/posts_steps.rb b/features/step_definitions/posts_steps.rb
index 7f8c93466..da3ee2924 100644
--- a/features/step_definitions/posts_steps.rb
+++ b/features/step_definitions/posts_steps.rb
@@ -8,36 +8,6 @@ Then /^the post should be expanded$/ do
first_post_expanded?
end
-Then /^I should see an uploaded image within the photo drop zone$/ do
- expect(find("#photodropzone img")["src"]).to include("uploads/images")
-end
-
-Then /^I should not see an uploaded image within the photo drop zone$/ do
- page.should_not have_css "#photodropzone img"
-end
-
-Then /^I should not see any posts in my stream$/ do
- expect(page).not_to have_selector("#paginate .loader")
- expect(page).not_to have_selector(".stream-element .media")
- expect(page).to have_selector(".stream-element .no-posts-info")
-end
-
-Then /^I should not see any picture in my stream$/ do
- expect(page).to have_selector(".photo_area img", count: 0)
-end
-
-Then /^I should see (\d+) pictures in my stream$/ do |count|
- expect(page).to have_selector(".photo_area img", count: count)
-end
-
-Then /^I should not be able to submit the publisher$/ do
- expect(publisher_submittable?).to be false
-end
-
-Then /^I should see "([^"]*)" in the publisher$/ do |text|
- expect(page).to have_field("status_message[text]", with: text)
-end
-
Given /^I have a limited post with text "([^\"]*)" in the aspect "([^"]*)"$/ do |text, aspect_name|
@me.post :status_message, text: text, to: @me.aspects.where(name: aspect_name).first.id
end
@@ -83,10 +53,6 @@ And /^the post with text "([^"]*)" is reshared by "([^"]*)"$/ do |text, email|
user.post(:reshare, :root_guid => root.guid, :public => true, :to => user.aspect_ids)
end
-And /^I submit the publisher$/ do
- submit_publisher
-end
-
When /^I click on the first block button/ do
find(".stream-element", match: :first).hover
find(".block_user").click
@@ -100,40 +66,14 @@ When /^I expand the post$/ do
expand_first_post
end
-When /^I click the publisher and post "([^"]*)"$/ do |text|
- click_and_post(text)
-end
-
-When /^I post an extremely long status message$/ do
- click_and_post("I am a very interesting message " * 64)
-end
-
-When /^I write the status message "([^"]*)"$/ do |text|
- write_in_publisher(text)
-end
-
-When /^I insert an extremely long status message$/ do
- write_in_publisher("I am a very interesting message " * 64)
-end
-
-When /^I append "([^"]*)" to the publisher$/ do |text|
- append_to_publisher(text)
-end
-
-When /^I attach "([^"]*)" to the publisher$/ do |path|
- upload_file_with_publisher(path)
-end
-
When /^I open the show page of the "([^"]*)" post$/ do |post_text|
visit post_path_by_content(post_text)
end
-When /^I select "([^"]*)" on the aspect dropdown$/ do |text|
- page.execute_script(
- "$('#publisher .dropdown .dropdown_list, #publisher .aspect-dropdown .dropdown-menu')
- .find('li').each(function(i,el){
- var elem = $(el);
- if ('" + text + "' == $.trim(elem.text()) ) {
- elem.click();
- }});")
+Then /^I should see an image attached to the post$/ do
+ step %(I should see a "img" within ".stream-element div.photo-attachments")
+end
+
+Then /^I press the attached image$/ do
+ step %(I press the 1st "img" within ".stream-element div.photo-attachments")
end
diff --git a/features/step_definitions/publisher_steps.rb b/features/step_definitions/publisher_steps.rb
new file mode 100644
index 000000000..f0d6a8c46
--- /dev/null
+++ b/features/step_definitions/publisher_steps.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+Then /^I expand the publisher$/ do
+ click_publisher
+end
+
+And /^I close the publisher$/ do
+ find("#publisher .md-cancel").click
+end
+
+Then /^the publisher should be expanded$/ do
+ find("#publisher")["class"].should_not include("closed")
+end
+
+When /^I click to delete the first uploaded photo$/ do
+ page.execute_script("$('#photodropzone .x').css('display', 'block');")
+ image_count = all(".publisher_photo img", wait: false).count
+ find("#photodropzone .x", match: :first).trigger "click"
+ page.assert_selector(".publisher_photo img", count: image_count - 1)
+end
+
+Then /^I should see an uploaded image within the photo drop zone$/ do
+ expect(find("#photodropzone img")["src"]).to include("uploads/images")
+end
+
+Then /^I should not see an uploaded image within the photo drop zone$/ do
+ page.should_not have_css "#photodropzone img"
+end
+
+Then /^I should not be able to submit the publisher$/ do
+ expect(publisher_submittable?).to be false
+end
+
+Then /^I should see "([^"]*)" in the publisher$/ do |text|
+ expect(page).to have_field("status_message[text]", with: text)
+end
+
+When /^I write the status message "([^"]*)"$/ do |text|
+ write_in_publisher(text)
+end
+
+When /^I insert an extremely long status message$/ do
+ write_in_publisher("I am a very interesting message " * 64)
+end
+
+When /^I append "([^"]*)" to the publisher$/ do |text|
+ append_to_publisher(text)
+end
+
+When /^I attach "([^"]*)" to the publisher$/ do |path|
+ upload_file_with_publisher(path)
+end
+
+And /^I submit the publisher$/ do
+ submit_publisher
+end
+
+When /^I click the publisher and post "([^"]*)"$/ do |text|
+ click_and_post(text)
+end
+
+When /^I post an extremely long status message$/ do
+ click_and_post("I am a very interesting message " * 64)
+end
+
+When /^I select "([^"]*)" on the aspect dropdown$/ do |text|
+ page.execute_script(
+ "$('#publisher .dropdown .dropdown_list, #publisher .aspect-dropdown .dropdown-menu')
+ .find('li').each(function(i,el){
+ var elem = $(el);
+ if ('" + text + "' == $.trim(elem.text()) ) {
+ elem.click();
+ }});"
+ )
+end
diff --git a/features/step_definitions/session_steps.rb b/features/step_definitions/session_steps.rb
index a31de421f..14d8f24ff 100644
--- a/features/step_definitions/session_steps.rb
+++ b/features/step_definitions/session_steps.rb
@@ -31,7 +31,7 @@ When /^I (?:sign|log) in with password "([^"]*)"( on the mobile website)?$/ do |
end
When /^I put in my password in "([^"]*)"$/ do |field|
- step %(I fill in "#{field}" with "#{@me.password}")
+ step %(I fill in "#{field}" with "#{@me.password}")
end
When /^I fill out change password section with my password and "([^"]*)" and "([^"]*)"$/ do |new_pass, confirm_pass|
@@ -74,3 +74,11 @@ end
Then (/^I should see the 'getting started' contents$/) do
confirm_getting_started_contents
end
+
+Given /^the registrations are closed$/ do
+ AppConfig.settings.enable_registrations = false
+end
+
+When /^I fill in the new user form$/ do
+ fill_in_new_user_form
+end
diff --git a/features/step_definitions/stream_steps.rb b/features/step_definitions/stream_steps.rb
index 5d241eaa0..853df81ca 100644
--- a/features/step_definitions/stream_steps.rb
+++ b/features/step_definitions/stream_steps.rb
@@ -4,6 +4,31 @@ When /^I (?:like|unlike) the post "([^"]*)" in the stream$/ do |post_text|
like_stream_post(post_text)
end
+Then /^the post "([^"]*)" should have the "([^"]*)" action available$/ do |post_text, action_text|
+ within_post(post_text) do
+ find(".feedback").should have_content(action_text)
+ end
+end
+
+Then /^the post "([^"]*)" shouldn't have any likes$/ do |post_text|
+ within_post(post_text) do
+ find(".likes").should have_no_css(".avatar", visible: true)
+ end
+end
+
+Then /^the post "([^"]*)" should have (\d+) like(?:s|)$/ do |post_text, likes_number|
+ within_post(post_text) do
+ find(".expand-likes").should have_content(likes_number)
+ end
+end
+
+Then /^the post "([^"]*)" should have a like from "([^"]*)"$/ do |post_text, username|
+ within_post(post_text) do
+ find(".expand-likes").click
+ find(".likes .avatar")["data-original-title"].should have_content(username)
+ end
+end
+
Then /^I should see an image in the publisher$/ do
photo_in_publisher.should be_present
end
@@ -24,8 +49,53 @@ Then /^I should have (\d+) nsfw posts$/ do |num_posts|
page.should have_css(".nsfw-shield", count: num_posts.to_i)
end
-When /^(?:|I )click on "([^"]*)" navbar title$/ do |title|
- with_scope(".info-bar") do
- find("h5", text: title).click
+When /^I prepare the deletion of the first post$/ do
+ find(".stream .stream-element", match: :first).hover
+ within(find(".stream .stream-element", match: :first)) do
+ ctrl = find(".control-icons")
+ ctrl.hover
+ ctrl.find(".remove_post").click
+ end
+end
+
+When /^I prepare hiding the first post$/ do
+ find(".stream .stream-element", match: :first).hover
+ within(find(".stream .stream-element", match: :first)) do
+ ctrl = find(".control-icons")
+ ctrl.hover
+ ctrl.find(".hide_post").click
end
end
+
+When /^I click to delete the first post$/ do
+ accept_alert do
+ step "I prepare the deletion of the first post"
+ end
+ expect(find(".stream")).to have_no_css(".stream-element.loaded.deleting")
+end
+
+When /^I click to hide the first post$/ do
+ accept_alert do
+ step "I prepare hiding the first post"
+ end
+end
+
+When /^I click to delete the first comment$/ do
+ within("div.comment", match: :first) do
+ find(".comment_delete", visible: false).click
+ end
+end
+
+Then /^I should not see any posts in my stream$/ do
+ expect(page).not_to have_selector("#paginate .loader")
+ expect(page).not_to have_selector(".stream-element .media")
+ expect(page).to have_selector(".stream-element .no-posts-info")
+end
+
+Then /^I should not see any picture in my stream$/ do
+ expect(page).to have_selector(".photo_area img", count: 0)
+end
+
+Then /^I should see (\d+) pictures in my stream$/ do |count|
+ expect(page).to have_selector(".photo_area img", count: count)
+end
diff --git a/features/step_definitions/two_factor_steps.rb b/features/step_definitions/two_factor_steps.rb
new file mode 100644
index 000000000..40e3cd7de
--- /dev/null
+++ b/features/step_definitions/two_factor_steps.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+When /^I scan the QR code and fill in a valid TOTP token for "([^"]*)"$/ do |email|
+ @me = find_user email
+ fill_in "user_code", with: @me.current_otp
+end
+
+When /^I fill in a valid TOTP token for "([^"]*)"$/ do |username|
+ @me = find_user username
+ fill_in "user_otp_attempt", with: @me.current_otp
+end
+
+When /^I fill in an invalid TOTP token$/ do
+ fill_in "user_otp_attempt", with: "c0ffee"
+end
+
+When /^I fill in a recovery code from "([^"]*)"$/ do |username|
+ @me = find_user username
+ @codes = @me.generate_otp_backup_codes!
+ @me.save!
+ fill_in "user_otp_attempt", with: @codes.first
+end
+
+When /^I confirm activation$/ do
+ find(".btn-primary", match: :first).click
+end
+
+When /^2fa is activated for "([^"]*)"$/ do |username|
+ @me = find_user username
+ @me.otp_secret = User.generate_otp_secret(32)
+ @me.otp_required_for_login = true
+ @me.save!
+end
+
+When /^I fill in username "([^"]*)" and password "([^"]*)"$/ do |username, password|
+ fill_in "user_username", with: username
+ fill_in "user_password", with: password
+end
+
+Then /^I should see a list of recovery codes$/ do
+ find(".recovery-codes", match: :first)
+ find(".recovery-codes li samp", match: :first)
+end
+
+When /^I press the recovery code generate button$/ do
+ find(".btn-default", match: :first).click
+end
+
+def find_user(username)
+ User.find_by(username: username) || User.find_by(email: username)
+end
diff --git a/features/step_definitions/user_steps.rb b/features/step_definitions/user_steps.rb
index ee4e71b69..804642cae 100644
--- a/features/step_definitions/user_steps.rb
+++ b/features/step_definitions/user_steps.rb
@@ -218,20 +218,12 @@ When /^I view "([^\"]*)"'s first post$/ do |email|
visit post_path(post)
end
-When /^I fill in the new user form/ do
- fill_in_new_user_form
-end
-
And /^I should be able to friend "([^\"]*)"$/ do |email|
user = User.find_by_email(email)
step 'I should see a ".aspect-dropdown"'
step "I should see \"#{user.name}\""
end
-When /^I click the sign in button$/ do
- click_link "Sign in"
-end
-
Given /^I did request my photos$/ do
@me.perform_export_photos!
end
diff --git a/features/support/paths.rb b/features/support/paths.rb
index a486ef245..7962fe17d 100644
--- a/features/support/paths.rb
+++ b/features/support/paths.rb
@@ -40,6 +40,8 @@ module NavigationHelpers
edit_user_path
when /^forgot password page$/
new_user_password_path
+ when /^the two-factor authentication page$/
+ two_factor_authentication_path
when %r{^"(/.*)"}
Regexp.last_match(1)
else
diff --git a/features/support/webmock.rb b/features/support/webmock.rb
index f6d4726bf..cce1de904 100644
--- a/features/support/webmock.rb
+++ b/features/support/webmock.rb
@@ -7,7 +7,7 @@ Before do
stub_request(:head, /.+/).with(
headers: {
"Accept" => "text/html",
- "User-Agent" => "OpenGraphReader/0.6.2 (+https://github.com/jhass/open_graph_reader)"
+ "User-Agent" => "OpenGraphReader/0.7.0 (+https://github.com/jhass/open_graph_reader)"
}
).to_return(status: 200, body: "", headers: {"Content-Type" => "text/plain"})
end
diff --git a/lib/archive_importer.rb b/lib/archive_importer.rb
index d2310437c..8eb3a2342 100644
--- a/lib/archive_importer.rb
+++ b/lib/archive_importer.rb
@@ -25,10 +25,12 @@ class ArchiveImporter
email strip_exif show_community_spotlight_in_stream language disable_mail auto_follow_back
]
data = convert_keys(archive_hash["user"], allowed_keys)
+ # setting getting_started to false as the user doesn't need to see the getting started wizard
data.merge!(
username: attr[:username],
password: attr[:password],
password_confirmation: attr[:password],
+ getting_started: false,
person: {
profile_attributes: profile_attributes
}
@@ -64,7 +66,7 @@ class ArchiveImporter
def import_aspects
contact_groups.each do |group|
begin
- user.aspects.create!(group.slice("name", "chat_enabled"))
+ user.aspects.create!(group.slice("name"))
rescue ActiveRecord::RecordInvalid => e
logger.warn "#{self}: #{e}"
end
diff --git a/lib/archive_importer/entity_importer.rb b/lib/archive_importer/entity_importer.rb
index 6314c9e21..9ed4d04f9 100644
--- a/lib/archive_importer/entity_importer.rb
+++ b/lib/archive_importer/entity_importer.rb
@@ -11,7 +11,7 @@ class ArchiveImporter
end
def import
- self.persisted_object = Diaspora::Federation::Receive.perform(entity)
+ self.persisted_object = Diaspora::Federation::Receive.perform(entity, skip_relaying: true)
rescue DiasporaFederation::Entities::Signable::SignatureVerificationFailed,
DiasporaFederation::Discovery::InvalidDocument,
DiasporaFederation::Discovery::DiscoveryError,
diff --git a/lib/configuration_methods.rb b/lib/configuration_methods.rb
index 511e8e2d2..58a050f8c 100644
--- a/lib/configuration_methods.rb
+++ b/lib/configuration_methods.rb
@@ -52,18 +52,17 @@ module Configuration
def secret_token
if heroku?
- return ENV['SECRET_TOKEN'] if ENV['SECRET_TOKEN']
+ return ENV["SECRET_TOKEN"] if ENV["SECRET_TOKEN"]
+
warn "FATAL: Running on Heroku with SECRET_TOKEN unset"
warn " Run heroku config:add SECRET_TOKEN=#{SecureRandom.hex(40)}"
- Process.exit(1)
+ abort
else
token_file = File.expand_path(
- '../config/initializers/secret_token.rb',
+ "../config/initializers/secret_token.rb",
File.dirname(__FILE__)
)
- unless File.exist? token_file
- `DISABLE_SPRING=1 bin/rake generate:secret_token`
- end
+ system "DISABLE_SPRING=1 bin/rake generate:secret_token" unless File.exist? token_file
require token_file
Diaspora::Application.config.secret_key_base
end
@@ -71,6 +70,7 @@ module Configuration
def version_string
return @version_string unless @version_string.nil?
+
@version_string = version.number.to_s
@version_string = "#{@version_string}-p#{git_revision[0..7]}" if git_available?
@version_string
diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb
index 7148c2521..7ab52c2b0 100644
--- a/lib/diaspora/federation/receive.rb
+++ b/lib/diaspora/federation/receive.rb
@@ -5,8 +5,8 @@ module Diaspora
module Receive
extend Diaspora::Logging
- def self.perform(entity)
- public_send(Mappings.receiver_for(entity), entity)
+ def self.perform(entity, opts={})
+ public_send(Mappings.receiver_for(entity), entity, opts)
end
def self.account_deletion(entity)
@@ -17,9 +17,9 @@ module Diaspora
logger.warn "ignoring error on receive AccountDeletion:#{entity.author}: #{e.class}: #{e.message}"
end
- def self.account_migration(entity)
+ def self.account_migration(entity, opts)
old_person = author_of(entity)
- profile = profile(entity.profile)
+ profile = profile(entity.profile, opts)
return if AccountMigration.where(old_person: old_person, new_person: profile.person).exists?
AccountMigration.create!(old_person: old_person, new_person: profile.person)
rescue => e # rubocop:disable Lint/RescueWithoutErrorClass
@@ -28,8 +28,8 @@ module Diaspora
nil
end
- def self.comment(entity)
- receive_relayable(Comment, entity) do
+ def self.comment(entity, opts)
+ receive_relayable(Comment, entity, opts) do
Comment.new(
author: author_of(entity),
guid: entity.guid,
@@ -40,7 +40,7 @@ module Diaspora
end
end
- def self.contact(entity)
+ def self.contact(entity, _opts)
recipient = Person.find_by(diaspora_handle: entity.recipient).owner
if entity.sharing
Contact.create_or_update_sharing_contact(recipient, author_of(entity))
@@ -50,7 +50,7 @@ module Diaspora
end
end
- def self.conversation(entity)
+ def self.conversation(entity, _opts)
author = author_of(entity)
ignore_existing_guid(Conversation, entity.guid, author) do
Conversation.create!(
@@ -64,8 +64,8 @@ module Diaspora
end
end
- def self.like(entity)
- receive_relayable(Like, entity) do
+ def self.like(entity, opts)
+ receive_relayable(Like, entity, opts) do
Like.new(
author: author_of(entity),
guid: entity.guid,
@@ -75,13 +75,13 @@ module Diaspora
end
end
- def self.message(entity)
+ def self.message(entity, _opts)
ignore_existing_guid(Message, entity.guid, author_of(entity)) do
build_message(entity).tap(&:save!)
end
end
- def self.participation(entity)
+ def self.participation(entity, _opts)
author = author_of(entity)
ignore_existing_guid(Participation, entity.guid, author) do
Participation.create!(
@@ -92,7 +92,7 @@ module Diaspora
end
end
- def self.photo(entity)
+ def self.photo(entity, _opts)
author = author_of(entity)
persisted_photo = load_from_database(Photo, entity.guid, author)
@@ -114,8 +114,8 @@ module Diaspora
end
end
- def self.poll_participation(entity)
- receive_relayable(PollParticipation, entity) do
+ def self.poll_participation(entity, opts)
+ receive_relayable(PollParticipation, entity, opts) do
PollParticipation.new(
author: author_of(entity),
guid: entity.guid,
@@ -125,7 +125,7 @@ module Diaspora
end
end
- def self.profile(entity)
+ def self.profile(entity, _opts)
author_of(entity).profile.tap do |profile|
profile.update_attributes(
first_name: entity.first_name,
@@ -145,7 +145,7 @@ module Diaspora
end
end
- def self.reshare(entity)
+ def self.reshare(entity, _opts)
author = author_of(entity)
ignore_existing_guid(Reshare, entity.guid, author) do
Reshare.create!(
@@ -178,7 +178,7 @@ module Diaspora
end
end
- def self.status_message(entity)
+ def self.status_message(entity, _opts) # rubocop:disable Metrics/AbcSize
try_load_existing_guid(StatusMessage, entity.guid, author_of(entity)) do
StatusMessage.new(
author: author_of(entity),
@@ -257,8 +257,9 @@ module Diaspora
end
end
- private_class_method def self.receive_relayable(klass, entity)
- save_relayable(klass, entity) { yield }.tap {|relayable| relay_relayable(relayable) if relayable }
+ private_class_method def self.receive_relayable(klass, entity, opts)
+ save_relayable(klass, entity) { yield }
+ .tap {|relayable| relay_relayable(relayable) if relayable && !opts[:skip_relaying] }
end
private_class_method def self.save_relayable(klass, entity)
diff --git a/lib/schemas/archive-format.json b/lib/schemas/archive-format.json
index 77ef84fb2..0bb79017e 100644
--- a/lib/schemas/archive-format.json
+++ b/lib/schemas/archive-format.json
@@ -30,8 +30,7 @@
"items": {
"type": "object",
"properties": {
- "name": { "type": "string" },
- "chat_enabled": { "type": "boolean" }
+ "name": { "type": "string" }
},
"required": [
"name"
diff --git a/script/server b/script/server
index 9cc8ee51a..86151d973 100755
--- a/script/server
+++ b/script/server
@@ -110,9 +110,6 @@ vars=$(bin/bundle exec ruby ./script/get_config.rb \
single_process_mode=environment.single_process_mode? \
embed_sidekiq_worker=server.embed_sidekiq_worker \
workers=server.sidekiq_workers \
- chat=chat.enabled \
- chat_server=chat.server.enabled \
- chat_bosh_proxy=chat.server.bosh.proxy \
redis_url=environment.redis \
| grep -vE "is not writable|as your home directory temporarily"
)
@@ -189,19 +186,6 @@ https://github.com/diaspora/diaspora/issues/4202 for details
"
fi
-if [ "$chat" = "true" -a "$chat_server" = "true" -a "$chat_bosh_proxy" = "false" ]
-then
- warning "
-*****************************************************************
-You enabled the chat feature but haven't configured BOSH! That
-could lead to mixed-content problems with the http clients. Please
-think about editing your proxy configuration as described in:
-
-diaspora.yml.example
-*****************************************************************
-"
-fi
-
# Use libjemalloc if it's available for better memory usage
command -v ldconfig > /dev/null 2>&1
if [ $? -eq 0 ]; then
diff --git a/spec/controllers/jasmine_fixtures/contacts_spec.rb b/spec/controllers/jasmine_fixtures/contacts_spec.rb
index fdd1beeeb..f2fccfcb6 100644
--- a/spec/controllers/jasmine_fixtures/contacts_spec.rb
+++ b/spec/controllers/jasmine_fixtures/contacts_spec.rb
@@ -7,7 +7,6 @@
describe ContactsController, :type => :controller do
describe '#index' do
before do
- AppConfig.chat.enabled = true
@aspect = bob.aspects.create(:name => "another aspect")
bob.share_with alice.person, @aspect
bob.share_with eve.person, @aspect
diff --git a/spec/controllers/passwords_controller_spec.rb b/spec/controllers/passwords_controller_spec.rb
index 870907904..289fcd975 100644
--- a/spec/controllers/passwords_controller_spec.rb
+++ b/spec/controllers/passwords_controller_spec.rb
@@ -13,7 +13,7 @@ describe Devise::PasswordsController, type: :controller do
context "when there is no such user" do
it "succeeds" do
post :create, params: {user: {email: "foo@example.com"}}
- expect(response).to be_success
+ expect(response).to redirect_to(new_user_session_path)
end
it "doesn't send email" do
diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb
index 424eeb235..f9f17762e 100644
--- a/spec/controllers/photos_controller_spec.rb
+++ b/spec/controllers/photos_controller_spec.rb
@@ -44,7 +44,7 @@ describe PhotosController, :type => :controller do
describe '#create' do
before do
allow(@controller).to receive(:file_handler).and_return(uploaded_photo)
- @params = {:photo => {:user_file => uploaded_photo, :aspect_ids => "all"} }
+ @params = {photo: {user_file: uploaded_photo, aspect_ids: "all", pending: true}}
end
it "creates a photo" do
@@ -67,11 +67,13 @@ describe PhotosController, :type => :controller do
expect(Photo.last.author).to eq(alice.person)
end
- it 'can set the photo as the profile photo' do
+ it "can set the photo as the profile photo and unpends the photo" do
old_url = alice.person.profile.image_url
@params[:photo][:set_profile_photo] = true
post :create, params: @params
- expect(alice.reload.person.profile.image_url).not_to eq(old_url)
+ new_url = alice.reload.person.profile.image_url
+ expect(new_url).not_to eq(old_url)
+ expect(Photo.find_by(remote_photo_name: new_url.rpartition("_").last).pending).to be_falsey
end
end
diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb
index c7063e728..7bb94bcaa 100644
--- a/spec/controllers/registrations_controller_spec.rb
+++ b/spec/controllers/registrations_controller_spec.rb
@@ -25,16 +25,14 @@ describe RegistrationsController, type: :controller do
AppConfig.settings.enable_registrations = false
end
- it "redirects #new to the login page" do
+ it "redirects #new to the registrations closed page" do
get :new
- expect(flash[:error]).to eq(I18n.t("registrations.closed"))
- expect(response).to redirect_to new_user_session_path
+ expect(response).to redirect_to registrations_closed_path
end
- it "redirects #create to the login page" do
+ it "redirects #create to the registrations closed page" do
post :create, params: valid_params
- expect(flash[:error]).to eq(I18n.t("registrations.closed"))
- expect(response).to redirect_to new_user_session_path
+ expect(response).to redirect_to registrations_closed_path
end
it "does not redirect if there is a valid invite token" do
@@ -45,7 +43,8 @@ describe RegistrationsController, type: :controller do
it "does redirect if there is an invalid invite token" do
get :new, params: {invite: {token: "fssdfsd"}}
- expect(response).to redirect_to new_user_session_path
+ expect(flash[:error]).to eq(I18n.t("registrations.invalid_invite"))
+ expect(response).to redirect_to registrations_closed_path
end
it "does redirect if there are no invites available with this code" do
@@ -53,7 +52,7 @@ describe RegistrationsController, type: :controller do
code.update_attributes(count: 0)
get :new, params: {invite: {token: code.token}}
- expect(response).to redirect_to new_user_session_path
+ expect(response).to redirect_to registrations_closed_path
end
it "does redirect when invitations are closed now" do
@@ -61,7 +60,7 @@ describe RegistrationsController, type: :controller do
AppConfig.settings.invitations.open = false
get :new, params: {invite: {token: code.token}}
- expect(response).to redirect_to new_user_session_path
+ expect(response).to redirect_to registrations_closed_path
end
it "does not redirect when the registration is open" do
diff --git a/spec/controllers/two_factor_authentications_controller_spec.rb b/spec/controllers/two_factor_authentications_controller_spec.rb
new file mode 100644
index 000000000..e17a6e3ca
--- /dev/null
+++ b/spec/controllers/two_factor_authentications_controller_spec.rb
@@ -0,0 +1,119 @@
+# frozen_string_literal: true
+
+describe TwoFactorAuthenticationsController, type: :controller do
+ before do
+ @user = FactoryGirl.create :user
+ sign_in @user
+ end
+
+ describe "#show" do
+ it "shows the deactivated state of 2fa" do
+ get :show
+ expect(response.body).to match I18n.t("two_factor_auth.title")
+ expect(response.body).to match I18n.t("two_factor_auth.deactivated.status")
+ expect(@user).to have_attributes(otp_required_for_login: nil)
+ end
+
+ it "shows the activated state of 2fa" do
+ activate_2fa
+ get :show
+ expect(response.body).to match I18n.t("two_factor_auth.title")
+ expect(response.body).to match I18n.t("two_factor_auth.activated.status")
+ expect(response.body).to match I18n.t("two_factor_auth.recovery.button")
+ expect(@user).to have_attributes(otp_required_for_login: true)
+ end
+ end
+
+ describe "#create" do
+ it "sets the otp_secret flag" do
+ post :create, params: {user: {otp_required_for_login: "true"}}
+ expect(response).to be_redirect
+ expect(response.location).to match confirm_two_factor_authentication_path
+ end
+ end
+
+ describe "#confirm_2fa" do
+ context "2fa is not yet activated" do
+ before do
+ create_otp_token
+ end
+ it "shows the QR verification code" do
+ get :confirm_2fa
+ expect(response.body).to match I18n.t("two_factor_auth.confirm.title")
+ expect(response.body).to include("svg")
+ expect(response.body).to match(/#{@user.otp_secret.scan(/.{4}/).join(" ")}/)
+ expect(response.body).to match I18n.t("two_factor_auth.input_token.label")
+ end
+ end
+ context "2fa is already activated" do
+ before do
+ activate_2fa
+ end
+
+ it "redirects back" do
+ get :confirm_2fa
+ expect(response).to be_redirect
+ expect(response.location).to match two_factor_authentication_path
+ end
+ end
+ end
+
+ describe "#confirm_and_activate_2fa" do
+ before do
+ create_otp_token
+ end
+ it "redirects back to confirm when token was wrong" do
+ post :confirm_and_activate_2fa, params: {user: {code: "not valid token"}}
+ expect(response.location).to match confirm_two_factor_authentication_path
+ expect(flash[:alert]).to match I18n.t("two_factor_auth.flash.error_token")
+ end
+ it "redirects to #recovery_codes when token was correct" do
+ post :confirm_and_activate_2fa, params: {user: {code: @user.current_otp}}
+ expect(response.location).to match recovery_codes_two_factor_authentication_path
+ expect(flash[:notice]).to match I18n.t("two_factor_auth.flash.success_activation")
+ end
+ end
+
+ describe "#recovery_codes" do
+ before do
+ activate_2fa
+ end
+ it "shows recovery codes page" do
+ get :recovery_codes
+ expect(response.body).to match I18n.t("two_factor_auth.recovery.title")
+ expect(@user).to have_attributes(otp_required_for_login: true)
+ end
+ end
+
+ describe "#destroy" do
+ before do
+ activate_2fa
+ end
+ it "deactivates 2fa if password is correct" do
+ delete :destroy, params: {two_factor_authentication: {password: @user.password}}
+ expect(response).to be_redirect
+ expect(flash[:notice]).to match I18n.t("two_factor_auth.flash.success_deactivation")
+ end
+
+ it "does nothing if password is wrong" do
+ delete :destroy, params: {two_factor_authentication: {password: "a wrong password"}}
+ expect(response).to be_redirect
+ expect(flash[:alert]).to match I18n.t("users.destroy.wrong_password")
+ end
+ end
+
+ def create_otp_token
+ @user.otp_secret = User.generate_otp_secret(32)
+ @user.save!
+ end
+
+ def confirm_activation
+ @user.otp_required_for_login = true
+ @user.save!
+ end
+
+ def activate_2fa
+ create_otp_token
+ confirm_activation
+ end
+end
diff --git a/spec/helpers/jsxc_helper_spec.rb b/spec/helpers/jsxc_helper_spec.rb
deleted file mode 100644
index 0d80218c2..000000000
--- a/spec/helpers/jsxc_helper_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-describe JsxcHelper, :type => :helper do
- before do
- AppConfig.chat.server.bosh.port = 1234
- AppConfig.chat.server.bosh.bind = "/bind"
- end
-
- describe "#get_bosh_endpoint" do
- it "using http scheme and default values" do
- AppConfig.chat.server.bosh.proxy = false
- expect(helper.get_bosh_endpoint).to include %Q(http://localhost:1234/bind)
- end
-
- it "using https scheme and no port" do
- AppConfig.chat.server.bosh.proxy = true
- allow(AppConfig).to receive(:pod_uri).and_return(Addressable::URI.parse("https://localhost/"))
- expect(helper.get_bosh_endpoint).to include %Q(https://localhost/bind)
- end
- end
-end
diff --git a/spec/integration/exporter_spec.rb b/spec/integration/exporter_spec.rb
index ac9bdbfd9..7794c07de 100644
--- a/spec/integration/exporter_spec.rb
+++ b/spec/integration/exporter_spec.rb
@@ -46,12 +46,10 @@ describe Diaspora::Exporter do
user: {
"contact_groups": [
{
- "name": "generic",
- "chat_enabled": false
+ "name": "generic"
},
{
- "name": "Work",
- "chat_enabled": false
+ "name": "Work"
}
]
}
diff --git a/spec/integration/migration_service_spec.rb b/spec/integration/migration_service_spec.rb
index af5d6f237..f4daf1645 100644
--- a/spec/integration/migration_service_spec.rb
+++ b/spec/integration/migration_service_spec.rb
@@ -148,8 +148,7 @@ describe MigrationService do
}
],
"contact_groups": [
- {"name":"Friends","chat_enabled":true},
- {"name":"Friends","chat_enabled":false}
+ {"name":"Friends"}
],
"post_subscriptions": [
"#{unknown_subscription_guid}",
@@ -303,7 +302,6 @@ describe MigrationService do
aspect = user.aspects.find_by(name: "Friends")
expect(aspect).not_to be_nil
- expect(aspect.chat_enabled).to be_truthy
poll_participation = PollParticipation.find_by(author: user.person, guid: poll_participation_entity.guid)
expect(poll_participation).not_to be_nil
diff --git a/spec/javascripts/app/pages/contacts_spec.js b/spec/javascripts/app/pages/contacts_spec.js
index c9d972ec6..4df7d4e4a 100644
--- a/spec/javascripts/app/pages/contacts_spec.js
+++ b/spec/javascripts/app/pages/contacts_spec.js
@@ -11,29 +11,6 @@ describe("app.pages.Contacts", function(){
});
});
- context('toggle chat privilege', function() {
- beforeEach(function() {
- this.chatToggle = $("#chat_privilege_toggle");
- this.chatIcon = $("#chat_privilege_toggle i");
- });
-
- it('updates the title for the tooltip', function() {
- expect(this.chatIcon.attr("data-original-title")).toBe(
- Diaspora.I18n.t("contacts.aspect_chat_is_not_enabled")
- );
- this.chatToggle.trigger("click");
- expect(this.chatIcon.attr("data-original-title")).toBe(
- Diaspora.I18n.t("contacts.aspect_chat_is_enabled")
- );
- });
-
- it("toggles the chat icon", function() {
- expect(this.chatIcon.hasClass("enabled")).toBeFalsy();
- this.chatToggle.trigger("click");
- expect(this.chatIcon.hasClass("enabled")).toBeTruthy();
- });
- });
-
context('show aspect name form', function() {
beforeEach(function() {
this.button = $('#change_aspect_name');
diff --git a/spec/javascripts/app/views/help_view_spec.js b/spec/javascripts/app/views/help_view_spec.js
index e73830267..c4671886a 100644
--- a/spec/javascripts/app/views/help_view_spec.js
+++ b/spec/javascripts/app/views/help_view_spec.js
@@ -1,6 +1,5 @@
describe("app.views.Help", function(){
beforeEach(function(){
- gon.appConfig = {chat: {enabled: false}};
this.locale = JSON.parse(spec.readFixture("locale_en_help_json"));
Diaspora.I18n.reset();
Diaspora.I18n.load(this.locale, "en");
@@ -134,30 +133,4 @@ describe("app.views.Help", function(){
});
});
});
-
- describe("chat section", function(){
- describe("chat enabled", function(){
- beforeEach(function(){
- gon.appConfig = {chat: {enabled: true}};
- this.view = new app.views.Help();
- this.view.render();
- });
-
- it('should display the chat', function(){
- expect(this.view.$el.find('a[data-section=chat]').length).toBe(1);
- });
- });
-
- describe("chat disabled", function(){
- beforeEach(function(){
- gon.appConfig = {chat: {enabled: false}};
- this.view = new app.views.Help();
- this.view.render();
- });
-
- it('should not display the chat', function () {
- expect(this.view.$el.find('a[data-section=chat]').length).toBe(0);
- });
- });
- });
});
diff --git a/spec/javascripts/jasmine_helpers/SpecHelper.js b/spec/javascripts/jasmine_helpers/SpecHelper.js
index 4b0bd9175..a9f2b7083 100644
--- a/spec/javascripts/jasmine_helpers/SpecHelper.js
+++ b/spec/javascripts/jasmine_helpers/SpecHelper.js
@@ -76,7 +76,6 @@ beforeEach(function() {
// add gon defaults
window.gon = {
appConfig: {
- chat: {enabled: false},
settings: {podname: "MyPod"},
map: {
mapbox: {
diff --git a/spec/lib/archive_importer/entity_importer_spec.rb b/spec/lib/archive_importer/entity_importer_spec.rb
index 969368ce2..ecc11b49a 100644
--- a/spec/lib/archive_importer/entity_importer_spec.rb
+++ b/spec/lib/archive_importer/entity_importer_spec.rb
@@ -23,7 +23,7 @@ describe ArchiveImporter::EntityImporter do
it "runs entity receive routine" do
expect(Diaspora::Federation::Receive).to receive(:perform)
- .with(kind_of(DiasporaFederation::Entities::StatusMessage))
+ .with(kind_of(DiasporaFederation::Entities::StatusMessage), skip_relaying: true)
.and_call_original
instance.import
@@ -59,7 +59,7 @@ describe ArchiveImporter::EntityImporter do
it "runs entity receive routine" do
expect(Diaspora::Federation::Receive).to receive(:perform)
- .with(kind_of(DiasporaFederation::Entities::Comment))
+ .with(kind_of(DiasporaFederation::Entities::Comment), skip_relaying: true)
.and_call_original
instance.import
comment = Comment.find_by(guid: guid)
@@ -67,6 +67,24 @@ describe ArchiveImporter::EntityImporter do
expect(comment.author).to eq(author.person)
end
+ it "does not relay a remote comment during import" do
+ comment_author = FactoryGirl.build(:user)
+ comment_author.person.owner = nil
+ comment_author.person.pod = Pod.find_or_create_by(url: "http://example.net")
+ comment_author.person.save!
+
+ status_message = FactoryGirl.create(:status_message, author: alice.person, public: true)
+ comment_data = Fabricate.attributes_for(:comment_entity,
+ author: comment_author.diaspora_handle,
+ parent_guid: status_message.guid).tap do |data|
+ data[:author_signature] = Fabricate(:comment_entity, data).sign_with_key(comment_author.encryption_key)
+ end
+
+ expect(Diaspora::Federation::Dispatcher).not_to receive(:defer_dispatch)
+
+ ArchiveImporter::EntityImporter.new(Fabricate(:comment_entity, comment_data).to_json.as_json, nil).import
+ end
+
it "rescues DiasporaFederation::Entities::Signable::SignatureVerificationFailed" do
expect(Person).to receive(:find_or_fetch_by_identifier)
.with(author.diaspora_handle)
diff --git a/spec/lib/archive_importer_spec.rb b/spec/lib/archive_importer_spec.rb
index 72f0db21e..aa360c417 100644
--- a/spec/lib/archive_importer_spec.rb
+++ b/spec/lib/archive_importer_spec.rb
@@ -63,7 +63,6 @@ describe ArchiveImporter do
}
},
"contact_groups" => [{
- "chat_enabled" => true,
"name" => "Friends"
}],
"followed_tags" => [target.tag_followings.first.tag.name],
@@ -155,6 +154,7 @@ describe ArchiveImporter do
expect(archive_importer.user.language).to eq("ru")
expect(archive_importer.user.disable_mail).to eq(false)
expect(archive_importer.user.auto_follow_back).to eq(true)
+ expect(archive_importer.user.getting_started).to be_falsey
expect(archive_importer.user.profile.first_name).to eq("First")
expect(archive_importer.user.profile.last_name).to eq("Last")
diff --git a/spec/lib/diaspora/federation/receive_spec.rb b/spec/lib/diaspora/federation/receive_spec.rb
index 1b3e087e7..9e345dc25 100644
--- a/spec/lib/diaspora/federation/receive_spec.rb
+++ b/spec/lib/diaspora/federation/receive_spec.rb
@@ -43,7 +43,7 @@ describe Diaspora::Federation::Receive do
}
it "saves the account deletion" do
- Diaspora::Federation::Receive.account_migration(account_migration_entity)
+ Diaspora::Federation::Receive.perform(account_migration_entity)
expect(AccountMigration.exists?(old_person: sender, new_person: new_person)).to be_truthy
end
@@ -53,7 +53,7 @@ describe Diaspora::Federation::Receive do
expect(AccountMigration).not_to receive(:create!)
- expect(Diaspora::Federation::Receive.account_migration(account_migration_entity)).to be_nil
+ expect(Diaspora::Federation::Receive.perform(account_migration_entity)).to be_nil
expect(AccountMigration.exists?(old_person: sender, new_person: new_person)).to be_truthy
end
@@ -64,7 +64,7 @@ describe Diaspora::Federation::Receive do
raise "Some database error"
end
- expect(Diaspora::Federation::Receive.account_migration(account_migration_entity)).to be_nil
+ expect(Diaspora::Federation::Receive.perform(account_migration_entity)).to be_nil
expect(AccountMigration.exists?(old_person: sender, new_person: new_person)).to be_truthy
end
@@ -757,7 +757,7 @@ describe Diaspora::Federation::Receive do
end
it "does not overwrite the photos if they already exist" do
- received_photo = Diaspora::Federation::Receive.photo(photo1)
+ received_photo = Diaspora::Federation::Receive.perform(photo1)
received_photo.text = "foobar"
received_photo.save!
diff --git a/spec/models/open_graph_cache_spec.rb b/spec/models/open_graph_cache_spec.rb
index 40d7eebd8..799f726ac 100644
--- a/spec/models/open_graph_cache_spec.rb
+++ b/spec/models/open_graph_cache_spec.rb
@@ -8,7 +8,7 @@ describe OpenGraphCache, type: :model do
describe "fetch_and_save_opengraph_data!" do
context "with an unsecure video url" do
it "doesn't save the video url" do
- expect(OpenGraphReader).to receive(:fetch!).with("https://example.com/article/123").and_return(
+ expect(OpenGraphReader).to receive(:fetch!).with(URI.parse("https://example.com/article/123")).and_return(
double(
og: double(
description: "This is the article lead",
@@ -34,7 +34,7 @@ describe OpenGraphCache, type: :model do
context "with a secure video url" do
it "saves the video url" do
- expect(OpenGraphReader).to receive(:fetch!).with("https://example.com/article/123").and_return(
+ expect(OpenGraphReader).to receive(:fetch!).with(URI.parse("https://example.com/article/123")).and_return(
double(
og: double(
description: "This is the article lead",
@@ -57,5 +57,22 @@ describe OpenGraphCache, type: :model do
expect(ogc.video_url).to eq("https://bandcamp.com/EmbeddedPlayer/v=2/track=12/size=small")
end
end
+
+ context "a mixed case hostname" do
+ it "downcases the hostname" do
+ stub_request(:head, "http:///wetter.com")
+ .with(headers: {
+ "Accept" => "text/html",
+ "User-Agent" => "OpenGraphReader/0.7.0 (+https://github.com/jhass/open_graph_reader)"
+ })
+ .to_return(status: 200, body: "", headers:
+ {"Set-Cookie" => "Dabgroup=A;path=/;Expires=Thu, 23 May 2019 16:12:01 GMT;httpOnly"})
+
+ ogc = OpenGraphCache.new(url: "Wetter.com")
+ expect {
+ ogc.fetch_and_save_opengraph_data!
+ }.to_not raise_error
+ end
+ end
end
end
diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb
index 225d609a8..0b4996506 100644
--- a/spec/models/photo_spec.rb
+++ b/spec/models/photo_spec.rb
@@ -197,7 +197,7 @@ describe Photo, :type => :model do
@saved_photo.destroy
- Diaspora::Federation::Receive.photo(federation_photo)
+ Diaspora::Federation::Receive.perform(federation_photo)
new_photo = Photo.find_by(guid: @saved_photo.guid)
expect(new_photo.url).to eq(url)
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index d264493a8..560432927 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -983,6 +983,11 @@ describe User, :type => :model do
post_default_public
exported_at
exported_photos_at
+ consumed_timestep
+ plain_otp_secret
+ otp_backup_codes
+ otp_required_for_login
+ otp_secret
)
)
end
diff --git a/spec/presenters/node_info_presenter_spec.rb b/spec/presenters/node_info_presenter_spec.rb
index 8929213b0..ab4cb09c2 100644
--- a/spec/presenters/node_info_presenter_spec.rb
+++ b/spec/presenters/node_info_presenter_spec.rb
@@ -39,7 +39,6 @@ describe NodeInfoPresenter do
},
"metadata" => {
"nodeName" => AppConfig.settings.pod_name,
- "xmppChat" => AppConfig.chat.enabled?,
"camo" => {
"markdown" => AppConfig.privacy.camo.proxy_markdown_images?,
"opengraph" => AppConfig.privacy.camo.proxy_opengraph_thumbnails?,
@@ -118,16 +117,6 @@ describe NodeInfoPresenter do
end
end
- context "when chat is enabled" do
- before do
- AppConfig.chat.enabled = true
- end
-
- it "should mark the xmppChat metadata as true" do
- expect(hash).to include "metadata" => include("xmppChat" => true)
- end
- end
-
context "when camo is enabled" do
before do
AppConfig.privacy.camo.proxy_markdown_images = true
@@ -173,7 +162,6 @@ describe NodeInfoPresenter do
},
"metadata" => {
"nodeName" => AppConfig.settings.pod_name,
- "xmppChat" => AppConfig.chat.enabled?,
"camo" => {
"markdown" => AppConfig.privacy.camo.proxy_markdown_images?,
"opengraph" => AppConfig.privacy.camo.proxy_opengraph_thumbnails?,
diff --git a/spec/serializers/export/aspect_serializer_spec.rb b/spec/serializers/export/aspect_serializer_spec.rb
index eba297f19..41ea5e874 100644
--- a/spec/serializers/export/aspect_serializer_spec.rb
+++ b/spec/serializers/export/aspect_serializer_spec.rb
@@ -6,8 +6,7 @@ describe Export::AspectSerializer do
it "has aspect attributes" do
expect(serializer.attributes).to eq(
- name: aspect.name,
- chat_enabled: aspect.chat_enabled
+ name: aspect.name
)
end
end
diff --git a/spec/services/diaspora_link_service_spec.rb b/spec/services/diaspora_link_service_spec.rb
index bde411a27..c65004e31 100644
--- a/spec/services/diaspora_link_service_spec.rb
+++ b/spec/services/diaspora_link_service_spec.rb
@@ -40,5 +40,33 @@ describe DiasporaLinkService do
expect(service.find_or_fetch_entity).to be_nil
end
end
+
+ context "with invalid links" do
+ it "returns nil when the link is invalid" do
+ service = described_class.new("web+diaspora://something_invalid")
+ expect(service.find_or_fetch_entity).to be_nil
+ end
+
+ it "returns nil when the author is valid, but rest of the link is invalid" do
+ service = described_class.new("web+diaspora://#{alice.diaspora_handle}/foo/bar")
+ expect(service.find_or_fetch_entity).to be_nil
+ end
+ end
+
+ context "with only a diaspora ID" do
+ let(:person) { FactoryGirl.create(:person) }
+ let(:link) { "diaspora://#{person.diaspora_handle}" }
+
+ it "returns the person" do
+ expect(service.find_or_fetch_entity).to eq(person)
+ end
+
+ it "returns nil when person is non fetchable" do
+ expect(Person).to receive(:find_or_fetch_by_identifier)
+ .with(person.diaspora_handle).and_raise(DiasporaFederation::Discovery::DiscoveryError)
+
+ expect(service.find_or_fetch_entity).to be_nil
+ end
+ end
end
end
diff --git a/spec/workers/cleanup_pending_photos_spec.rb b/spec/workers/cleanup_pending_photos_spec.rb
new file mode 100644
index 000000000..1a92cac96
--- /dev/null
+++ b/spec/workers/cleanup_pending_photos_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+describe Workers::CleanupPendingPhotos do
+ let!(:photo) { FactoryGirl.create(:photo, author: alice.person, pending: true) }
+
+ it "removes pending photos" do
+ Timecop.travel(25.hours) do
+ Workers::CleanupPendingPhotos.new.perform
+ expect(Photo).not_to exist(photo.id)
+ end
+ end
+
+ it "does not remove pending photos newer than one day" do
+ Timecop.travel(1.hour) do
+ Workers::CleanupPendingPhotos.new.perform
+ expect(Photo).to exist(photo.id)
+ end
+ end
+
+ it "does not remove posted photos" do
+ StatusMessageCreationService.new(alice).create(
+ status_message: {text: "Post with photo"},
+ public: true,
+ photos: [photo.id]
+ )
+ Timecop.travel(25.hours) do
+ Workers::CleanupPendingPhotos.new.perform
+ expect(Photo).to exist(photo.id)
+ end
+ end
+end