Commit cf2bd660 authored by Benjamin Neff's avatar Benjamin Neff

Merge branch 'release/0.7.2.0'

parents 2c9fec91 a9cce95a
# 0.7.2.0
## Bug fixes
* Ignore invalid `diaspora://` links [#7652](https://github.com/diaspora/diaspora/pull/7652)
* Fix deformed avatar in hovercards [#7656](https://github.com/diaspora/diaspora/pull/7656)
* Fix default aspects on profile page and bookmarklet publisher [#7679](https://github.com/diaspora/diaspora/issues/7679)
## Features
* Add birthday notifications [#7624](https://github.com/diaspora/diaspora/pull/7624)
# 0.7.1.1
Fixes an issue with installing and running diaspora\* with today released bundler v1.16.0.
......
......@@ -12,16 +12,10 @@
font-size: small;
.avatar {
position: relative;
float: left;
height: 70px !important;
width: 70px !important;
top: 0 !important;
margin: {
right: 10px;
left: 0;
}
height: 70px;
object-fit: cover;
width: 70px;
}
$image_width: 80px; /* including margin */
......
......@@ -104,7 +104,8 @@ class NotificationsController < ApplicationController
"mentioned" => "Notifications::MentionedInPost",
"mentioned_in_comment" => "Notifications::MentionedInComment",
"reshared" => "Notifications::Reshared",
"started_sharing" => "Notifications::StartedSharing"
"started_sharing" => "Notifications::StartedSharing",
"contacts_birthday" => "Notifications::ContactsBirthday"
}
end
helper_method :types
......
......@@ -20,8 +20,6 @@ class StatusMessagesController < ApplicationController
@contact = current_user.contact_for(@person)
if @contact
@aspects_with_person = @contact.aspects.load
@aspect_ids = @aspects_with_person.map(&:id)
gon.aspect_ids = @aspect_ids
render layout: nil
else
@aspects_with_person = []
......@@ -29,8 +27,6 @@ class StatusMessagesController < ApplicationController
elsif request.format == :mobile
@aspect = :all
@aspects = current_user.aspects.load
@aspect_ids = @aspects.map(&:id)
gon.aspect_ids = @aspect_ids
else
redirect_to stream_path
end
......@@ -38,7 +34,6 @@ class StatusMessagesController < ApplicationController
def bookmarklet
@aspects = current_user.aspects
@aspect_ids = current_user.aspect_ids
gon.preloads[:bookmarklet] = {
content: params[:content],
......
......@@ -17,14 +17,12 @@ module AspectGlobalHelper
if stream
aspects = stream.aspects
aspect = stream.aspect
aspect_ids = stream.aspect_ids
elsif current_user
aspects = current_user.post_default_aspects
aspect = aspects.first
aspect_ids = current_user.aspect_ids
else
return {}
end
{selected_aspects: aspects, aspect: aspect, aspect_ids: aspect_ids}
{selected_aspects: aspects, aspect: aspect}
end
end
......@@ -16,6 +16,8 @@ module NotificationsHelper
elsif %w(Notifications::CommentOnPost Notifications::AlsoCommented Notifications::Reshared Notifications::Liked)
.include?(note.type)
opts.merge!(opts_for_post(note.linked_object))
elsif note.is_a?(Notifications::ContactsBirthday)
opts.merge!(opts_for_birthday(note.linked_object))
end
end
translation(target_type, opts)
......@@ -44,6 +46,10 @@ module NotificationsHelper
}
end
def opts_for_birthday(person)
{date: locale_date(person.birthday.to_s)}
end
def notification_people_link(note, people=nil)
actors =people || note.actors
number_of_actors = actors.size
......
# frozen_string_literal: true
module NotificationMailers
class ContactsBirthday < NotificationMailers::Base
attr_accessor :person
def set_headers(person_id)
@person = Person.find(person_id)
@headers[:subject] = I18n.t("notifier.contacts_birthday.subject", name: @person.name)
end
end
end
# frozen_string_literal: true
module Notifications
class ContactsBirthday < Notification
def mail_job
Workers::Mail::ContactsBirthday
end
def popup_translation_key
"notifications.contacts_birthday"
end
def self.notify(contact, _recipient_user_ids)
recipient = contact.user
actor = contact.person
create_notification(recipient, actor, actor).try(:email_the_user, actor, actor)
end
end
end
......@@ -15,11 +15,19 @@ class Reference < ApplicationRecord
def create_references
text&.scan(DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX)&.each do |author, type, guid|
class_name = DiasporaFederation::Entity.entity_class(type).to_s.rpartition("::").last
entity = Diaspora::Federation::Mappings.model_class_for(class_name).find_by(guid: guid)
references.find_or_create_by(target: entity) if entity.diaspora_handle == author
add_reference(author, type, guid)
end
end
private
def add_reference(author, type, guid)
class_name = DiasporaFederation::Entity.entity_class(type).to_s.rpartition("::").last
entity = Diaspora::Federation::Mappings.model_class_for(class_name).find_by(guid: guid)
references.find_or_create_by(target: entity) if entity&.diaspora_handle == author
rescue => e # rubocop:disable Lint/RescueWithoutErrorClass
logger.warn "ignoring invalid diaspora-url: diaspora://#{author}/#{type}/#{guid}: #{e.class}: #{e.message}"
end
end
module Target
......
......@@ -14,7 +14,8 @@ class UserPreference < ApplicationRecord
"started_sharing",
"also_commented",
"liked",
"reshared"]
"reshared",
"contacts_birthday"]
def must_be_valid_email_type
unless VALID_EMAIL_TYPES.include?(self.email_type)
......
......@@ -30,6 +30,8 @@
%i.entypo-reshare
- when "started_sharing"
%i.entypo-add-user
- when "contacts_birthday"
%i.entypo-calendar
= t("." + key)
.col-md-9.stream.notifications
......
<%= t(".birthday", name: @notification.person.name) %>
[<%= t(".view_profile", name: @notification.person.name) %>][1]
[1]: <%= local_or_remote_person_path(@notification.person, absolute: true) %>
......@@ -42,8 +42,8 @@
- elsif all_aspects_selected?(selected_aspects)
= hidden_field_tag "aspect_ids[]", "all_aspects"
- else
- for aspect_id in aspect_ids
= hidden_field_tag "aspect_ids[]", aspect_id.to_s
- selected_aspects.each do |aspect|
= hidden_field_tag "aspect_ids[]", aspect.id
.hidden#publisher_spinner
.loader
......@@ -62,6 +62,4 @@
data: {toggle: "modal", target: "#publicExplainModal"}}
%i.entypo-cog
= link_to "", contacts_path(aspect_ids: aspect_ids), class: "selected_contacts_link hidden"
= render "shared/public_explain"
......@@ -2,6 +2,6 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
= render :partial => 'publisher/publisher', :locals => { :aspect => :profile, :selected_aspects => @aspects, :aspect_ids => @aspect_ids }
= render partial: "publisher/publisher", locals: {aspect: :profile, selected_aspects: @aspects}
= javascript_include_tag "mobile/bookmarklet"
= render :partial => 'publisher/publisher',
:locals => { :aspect => @aspect,
:aspect_ids => @aspect_ids,
:selected_aspects => @aspects_with_person,
:person => @person }
= render partial: "publisher/publisher",
locals: {aspect: @aspect, selected_aspects: @aspects_with_person, person: @person}
......@@ -2,4 +2,4 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
= render :partial => 'publisher/publisher', :locals => {:aspect => @aspects.first, :aspect_ids => @aspect_ids, :selected_aspects => @aspects}
= render partial: "publisher/publisher", locals: {aspect: @aspects.first, selected_aspects: @aspects}
......@@ -127,51 +127,55 @@
#email_prefs
- if current_user.admin?
= type.label :someone_reported, class: "checkbox-inline" do
= type.check_box :someone_reported, {checked: @email_prefs["someone_reported"]}, false, true
= type.check_box :someone_reported, {checked: email_prefs["someone_reported"]}, false, true
= t(".someone_reported")
.small-horizontal-spacer
= type.label :started_sharing, class: "checkbox-inline" do
= type.check_box :started_sharing, {checked: @email_prefs["started_sharing"]}, false, true
= type.check_box :started_sharing, {checked: email_prefs["started_sharing"]}, false, true
= t(".started_sharing")
.small-horizontal-spacer
= type.label :mentioned, class: "checkbox-inline" do
= type.check_box :mentioned, {checked: @email_prefs["mentioned"]}, false, true
= type.check_box :mentioned, {checked: email_prefs["mentioned"]}, false, true
= t(".mentioned")
.small-horizontal-spacer
= type.label :mentioned_in_comment, class: "checkbox-inline" do
= type.check_box :mentioned_in_comment, {checked: @email_prefs["mentioned_in_comment"]}, false, true
= type.check_box :mentioned_in_comment, {checked: email_prefs["mentioned_in_comment"]}, false, true
= t(".mentioned_in_comment")
.small-horizontal-spacer
= type.label :liked, class: "checkbox-inline" do
= type.check_box :liked, {checked: @email_prefs["liked"]}, false, true
= type.check_box :liked, {checked: email_prefs["liked"]}, false, true
= t(".liked")
.small-horizontal-spacer
= type.label :reshared, class: "checkbox-inline" do
= type.check_box :reshared, {checked: @email_prefs["reshared"]}, false, true
= type.check_box :reshared, {checked: email_prefs["reshared"]}, false, true
= t(".reshared")
.small-horizontal-spacer
= type.label :comment_on_post, class: "checkbox-inline" do
= type.check_box :comment_on_post, {checked: @email_prefs["comment_on_post"]}, false, true
= type.check_box :comment_on_post, {checked: email_prefs["comment_on_post"]}, false, true
= t(".comment_on_post")
.small-horizontal-spacer
= type.label :also_commented, class: "checkbox-inline" do
= type.check_box :also_commented, {checked: @email_prefs["also_commented"]}, false, true
= type.check_box :also_commented, {checked: email_prefs["also_commented"]}, false, true
= t(".also_commented")
.small-horizontal-spacer
= type.label :private_message, class: "checkbox-inline" do
= type.check_box :private_message, {checked: @email_prefs["private_message"]}, false, true
= type.check_box :private_message, {checked: email_prefs["private_message"]}, false, true
= t(".private_message")
.small-horizontal-spacer
.small-horizontal-spacer
= type.label :contacts_birthday, class: "checkbox-inline" do
= type.check_box :contacts_birthday, {checked: email_prefs["contacts_birthday"]}, false, true
= t(".birthday")
.small-horizontal-spacer
.clearfix= f.submit t(".change"), class: "btn btn-primary pull-right", id: "change_email_preferences"
%hr
......
......@@ -5,4 +5,4 @@
= render "shared/settings_nav"
.col-md-9
.framed-content
= render "edit"
= render "edit", email_prefs: @email_prefs
......@@ -5,4 +5,4 @@
.row
.col-md-12
= render "edit"
= render "edit", email_prefs: @email_prefs
# frozen_string_literal: true
module Workers
class CheckBirthday < Base
sidekiq_options queue: :low
def perform
profiles = Profile
.where("EXTRACT(MONTH FROM birthday) = ?", Time.zone.today.month)
.where("EXTRACT(DAY FROM birthday) = ?", Time.zone.today.day)
profiles.each do |profile|
profile.person.contacts.where(sharing: true, receiving: true).each do |contact|
Notifications::ContactsBirthday.notify(contact, [])
end
end
end
end
end
# frozen_string_literal: true
module Workers
module Mail
class ContactsBirthday < NotifierBase
end
end
end
......@@ -4,7 +4,7 @@
defaults:
version:
number: "0.7.1.1" # Do not touch unless doing a release, do not backport the version number that's in master
number: "0.7.2.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"
......
......@@ -48,7 +48,7 @@ de_formal:
unlock_instructions:
account_locked: "Ihr Konto wurde aufgrund von zu vielen fehlgeschlagenen Anmeldeversuchen gesperrt."
click_to_unlock: "Folgen Sie dem unten aufgeführten Link, um Ihr Konto zu entsperren:"
subject: "Anweisungen zum Entsperren"
subject: "Anleitungen zum Entsperren"
unlock: "Mein Konto entsperren"
welcome: "Willkommen %{email}!"
omniauth_callbacks:
......@@ -100,8 +100,8 @@ de_formal:
unlocks:
new:
resend_unlock: "Entsperr-Anweisungen erneut senden"
send_instructions: "Sie werden in ein wenigen Minuten eine E-Mail mit Anweisungen zum Entsperren Ihres Kontos erhalten."
send_paranoid_instructions: "Falls Ihr Konto existiert, erhalten Sie in wenigen Minuten eine E-Mail mit Anweisungen, um es zu entsperren."
send_instructions: "Sie werden in ein wenigen Minuten eine E-Mail mit Informationen zum Entsperren Ihres Kontos erhalten."
send_paranoid_instructions: "Falls Ihr Konto existiert, erhalten Sie in wenigen Minuten eine E-Mail mit Informationen, um es zu entsperren."
unlocked: "Ihr Konto wurde erfolgreich entsperrt. Bitte melden Sie sich an, um fortzufahren."
errors:
messages:
......
......@@ -10,7 +10,7 @@ fr:
confirmed: "Votre compte a été confirmé. Vous êtes à présent connecté."
new:
resend_confirmation: "Renvoyer les instructions de confirmation"
send_instructions: "Vous allez recevoir dans quelques minutes un courriel contenant les instructions pour confirmer votre compte."
send_instructions: "Vous allez recevoir dans quelques minutes un courriel contenant les instructions pour confirmer votre adresse de courrier électronique."
send_paranoid_instructions: "Si votre e-mail existe dans notre base de données, vous recevrez un e-mail avec les instructions pour confirmer votre adresse e-mail dans quelques minutes."
failure:
already_authenticated: "Vous êtes déjà connecté"
......@@ -20,9 +20,9 @@ fr:
last_attempt: "Vous avez encore une tentative avant que votre compte ne soit verrouillé."
locked: "Votre compte est verrouillé."
not_found_in_database: "%{authentication_keys} ou mot de passe invalide."
timeout: "Votre session a expiré. Veuillez vous connecter de nouveau pour continuer."
timeout: "Votre session a expiré. Veuillez vous identifier de nouveau pour continuer."
unauthenticated: "Vous devez vous connecter ou vous inscrire avant de continuer."
unconfirmed: "Vous devez confirmer votre compte avant de continuer."
unconfirmed: "Vous devez confirmer votre adresse de courrier électronique avant de continuer."
invitations:
invitation_token_invalid: "Toutes nos excuses ! Cette invitation n'est pas valide."
send_instructions: "Votre invitation a été envoyée."
......@@ -77,7 +77,7 @@ fr:
signed_up_but_locked: "Vous vous êtes inscrit·e avec succès. Cependant, vous ne pouvez pas vous connecter parce que votre compte est verrouillé."
signed_up_but_unconfirmed: "Un courriel avec un lien de confirmation vous a été envoyé. Veuillez suivre ce lien pour activer votre compte."
update_needs_confirmation: "Vous avez mis à jour votre compte correctement mais nous devons vérifier votre nouvelle adresse e-mail. Veuillez consulter votre boite aux lettres et cliquer sur le lien de confirmation."
updated: "Vous avez mis à jour votre compte."
updated: "Vous avez modifié votre compte avec succès."
sessions:
already_signed_out: "Déconnexion réussie."
new:
......@@ -95,7 +95,7 @@ fr:
receive_confirmation: "Vous n'avez pas reçu les instructions de confirmation ?"
receive_unlock: "Vous n'avez pas reçu les instructions de déblocage ?"
sign_in: "Connexion"
sign_up: "Inscription"
sign_up: "Créer un compte"
sign_up_closed: "Les inscriptions sont fermées pour l'instant."
unlocks:
new:
......@@ -105,7 +105,7 @@ fr:
unlocked: "Votre compte a été déverrouillé. Vous êtes à présent connecté."
errors:
messages:
already_confirmed: "a déjà été confirmé"
already_confirmed: "a déjà été confirmé, essayez de vous identifier s’il vous plaît"
confirmation_period_expired: "aurait être confirmé dans les %{period}, veuillez en demander un nouveau"
expired: "a expiré, veuillez faire une nouvelle demande"
not_found: "introuvable"
......
......@@ -7,22 +7,22 @@
pl:
devise:
confirmations:
confirmed: "Konto zostało aktywowane. Zalogowano Cię w Diasporze."
confirmed: "Twój adres e-mail został potwierdzony."
new:
resend_confirmation: "Wyślij ponownie instrukcję aktywacji"
send_instructions: "W ciągu kilku minut otrzymasz wiadomość zawierającą instrukcję aktywacji konta."
send_paranoid_instructions: "Jeśli Twój adres email istnieje w naszej bazie w ciągu kilku minut otrzymasz wiadomość email z instrukcją potwierdzenia adresu."
send_paranoid_instructions: "Jeśli Twój adres e-mail istnieje w naszej bazie, w ciągu kilku minut otrzymasz wiadomość e-mail z instrukcją potwierdzenia adresu."
failure:
already_authenticated: "Już jesteś zalogowany."
inactive: "Twoje konto nie zostało jeszcze aktywowane."
invalid: "Nieprawidłowa nazwa użytkownika lub hasło."
invalid: "Niepoprawne %{authentication_keys} lub hasło."
invalid_token: "Nieprawidłowy token uwierzytelnienia."
last_attempt: "Możesz spróbować jeszcze jeden raz, potem Twoje konto zostanie zablokowane."
locked: "Twoje konto jest zablokowane."
not_found_in_database: "Niewłaściwy email lub hasło."
timeout: "Sesja wygasła, aby kontynuować zaloguj się ponownie."
unauthenticated: "Aby kontynuować zaloguj się lub zarejestruj."
unconfirmed: "Musisz aktywować swoje konto."
not_found_in_database: "Niewłaściwy %{authentication_keys} lub hasło."
timeout: "Sesja wygasła. Aby kontynuować, zaloguj się ponownie."
unauthenticated: "Aby kontynuować zaloguj lub zarejestruj się."
unconfirmed: "Przed przejściem dalej, musisz potwierdzić Twój adres e-mail."
invitations:
invitation_token_invalid: "Token zaproszenia jest nieprawidłowy!"
send_instructions: "Zaproszenie zostało wysłane."
......@@ -47,7 +47,7 @@ pl:
wont_change: "Hasło nie zostanie zmienione do momentu kliknięcia powyższego łącza i utworzenia nowego."
unlock_instructions:
account_locked: "Konto zostało zablokowane, ponieważ przekroczono limit nieudanych prób logowania."
click_to_unlock: "Kliknij poniższy link, aby odblokować konto:"
click_to_unlock: "Kliknij poniższe łącze, aby odblokować konto:"
subject: "Instrukcja odblokowania"
unlock: "Odblokuj moje konto"
welcome: "Witaj %{email}!"
......@@ -62,8 +62,9 @@ pl:
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."
send_instructions: "W ciągu kilku minut otrzymasz wiadomość zawierającą instrukcję resetowania hasła."
send_paranoid_instructions: "Jeśli Twój email istnieje w naszej bazie w ciągu kilku minut otrzymasz email z łączem po kliknięciu którego będziesz mógł ustawić nowe hasło."
send_paranoid_instructions: "Jeśli Twój e-mail istnieje w naszej bazie, w ciągu kilku minut otrzymasz e-mail z łączem po kliknięciu którego będziesz mógł ustawić nowe hasło."
updated: "Hasło zostało zmienione. Zalogowano pomyślnie."
updated_not_active: "Twoje hasło zostało pomyślnie zmienione."
registrations:
......@@ -71,8 +72,8 @@ pl:
signed_up: "Rejestracja przebiegła pomyślnie. Jeśli aktywowano odpowiednią opcję, wyślemy do Ciebie e-mail potwierdzający ten fakt."
signed_up_but_inactive: "Rejestracja przebiegła pomyślnie. Jednakże, nie możemy Cię zalogować, ponieważ Twoje konto nie zostało jeszcze aktywowane."
signed_up_but_locked: "Rejestracja przebiegła pomyślnie. Jednakże, nie możemy Cię zalogować, ponieważ Twoje konto zostało zablokowane."
signed_up_but_unconfirmed: "Wiadomość z linkiem aktywacyjnym została wysłana na Twój adres email. Proszę kliknij łącze w celu aktywowania swojego konta."
update_needs_confirmation: "Twoje konto zostało zaktualizowane, ale musimy zweryfikować Twój nowy adres email. Sprawdź swoją skrzynkę i kliknij na przesłane łącze, aby potwierdzić Twój nowy adres."
signed_up_but_unconfirmed: "Wiadomość z łączem aktywacyjnym została wysłana na Twój adres e-mail. Prosimy o kliknięcie łącza w celu aktywowania Twojego konta."
update_needs_confirmation: "Twoje konto zostało zaktualizowane, ale musimy zweryfikować Twój nowy adres e-mail. Sprawdź swoją skrzynkę i kliknij na przesłane łącze, aby potwierdzić Twój nowy adres."
updated: "Pomyślnie zaktualizowano konto."
sessions:
already_signed_out: "Wylogowano pomyślnie."
......@@ -97,10 +98,12 @@ pl:
new:
resend_unlock: "Wyślij ponownie instrukcję odblokowywania"
send_instructions: "W ciągu kilku minut otrzymasz wiadomość z instrukcją odblokowania konta."
send_paranoid_instructions: "Jeśli Twoje konto istnieje w ciągu kilku minut otrzymasz email z instrukcją jak je odblokować."
send_paranoid_instructions: "Jeśli Twoje konto istnieje, w ciągu kilku minut otrzymasz e-mail z instrukcją jak je odblokować."
unlocked: "Konto zostało pomyślnie odblokowane. Pomyślnie zalogowano."
errors:
messages:
already_confirmed: "już potwierdzone"
already_confirmed: "już potwierdzony, prosimy spróbować się zalogować"
confirmation_period_expired: "musi być potwierdzone w przeciągu %{period}, prosimy poprosić o nowy"
expired: "wygasł, poproś o nowy"
not_found: "nie znaleziono"
not_locked: "nie był zablokowany"
\ No newline at end of file
......@@ -36,7 +36,7 @@ pt-BR:
inviter:
accept_at: "em %{url}, você pode aceitar através do link abaixo."
has_invited_you: "%{name}"
have_invited_you: "%{names} convidou você para participar de diaspora*"
have_invited_you: "%{names} convidou você para a diaspora*"
password_change:
subject: "Senha Alterada"
reset_password_instructions:
......
......@@ -455,6 +455,10 @@ da:
format_text_q: "Hvordan kan jeg formatere teksten i mine indlæg (fed, kursiv, osv.)?"
hide_posts_a: "Hvis du peger med musen toppen af et indlæg vil et X dukke op til højre. Tryk 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\" den 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_a2: "For at ignorere en konto skal du klikke 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 til deres profilside og klikke ignoreringsikonet der. Du kan stadig se deres indlæg 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 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?"
insert_images_a: "Hvis du vil medtage et billede gemt din computer i dit indlæg, skal du klikke ikonet med det lille kamera nederst indtastningfeltet. Du kan også trække og slippe et billede eller flere billeder fra din computer til det ikon. Hvis du vil indsætte et billede fra internettet i dit indlæg, skal du klikke billedknappen øverst indtastningfeltet, som vil oprette Markdown-koden for dig."
insert_images_comments_a: "Du kan bruge Markdown til at indsætte et billede fra internettet i en kommentar, ligesom du gør i indlæg. Du kan dog ikke uploade billeder fra din computer direkte til kommentarer. Upload dem til en billed-hosting-tjeneste, og indsæt dem ved hjælp af billedknappen over send-knappen."
insert_images_comments_q: "Kan jeg indsætte billeder i kommentarer?"
......@@ -641,6 +645,10 @@ da:
one: "%{actors} kommenterede dit indlæg %{post_link}."
other: "%{actors} kommenterede dit indlæg %{post_link}."
zero: "%{actors} kommenterede dit indlæg %{post_link}."
contacts_birthday:
one: "%{actors} har fødselsdag den %{date}."
other: "%{actors} har fødselsdag den %{date}."
zero: "%{actors} har fødselsdag den %{date}."
index:
all_notifications: "Alle notifikationer"
also_commented: "kommenterede også"
......@@ -653,6 +661,7 @@ da:
two: "og %{count} andre"
zero: "og ingen andre"
comment_on_post: "Kommenter indlæg"
contacts_birthday: "Fødselsdag"
liked: "syntes om"
mark_all_as_read: "Marker alle som læst"
mark_all_shown_as_read: "Marker alle viste som læst"
......@@ -727,6 +736,10 @@ da:
confirm_email:
click_link: "For at aktivere din nye e-mail adresse %{unconfirmed_email}, skal du følge dette link:"
subject: "Aktiver venligst din nye e-mail adresse %{unconfirmed_email}"
contacts_birthday:
birthday: "%{name} har fødselsdag i dag. Skriv tillykke!"
subject: "%{name} har fødselsdag i dag"
view_profile: "Se %{name}s profil"
csrf_token_fail:
body: |-
Goddag %{name},
......@@ -1164,6 +1177,7 @@ da:
also_commented: "nogen kommenterer et indlæg du tidligere har kommenteret."
auto_follow_aspect: "Aspekt for automatisk tilføjede kontakter:"
auto_follow_back: "Følg automatisk brugere der følger dig"
birthday: "nogen har fødselsdag"
change: "Skift"
change_color_theme: "Skift farvetema"
change_email: "Skift e-mail"
......
......@@ -562,7 +562,7 @@ de:
be_who_you_want_to_be_info: "Viele Netzwerke bestehen darauf, dass du deine wahre Identität verwendest. diaspora* nicht. Hier kannst du entscheiden, wer du sein willst und so viel oder wenig teilen, wie du möchtest. Es liegt ganz an dir, wie du mit anderen Personen interagieren möchtest."
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. Du hast es in der Hand."
choose_your_audience_info: "diaspora*s Aspekte ermöglichen dir, nur mit 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. Du hast es in der Hand."
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."
......@@ -648,6 +648,10 @@ de:
one: "%{actors} hat deinen Beitrag %{post_link} kommentiert."
other: "%{actors} haben deinen Beitrag %{post_link} kommentiert."
zero: "Niemand hat deinen Beitrag %{post_link} kommentiert."
contacts_birthday:
one: "%{actors} hat am %{date} Geburtstag."
other: "%{actors} haben am %{date} Geburtstag."
zero: "%{actors} haben am %{date} Geburtstag."
index:
all_notifications: "Alle Benachrichtigungen"
also_commented: "Auch kommentiert"
......@@ -660,6 +664,7 @@ de:
two: "und %{count} andere"
zero: "und niemand sonst"
comment_on_post: "Einen Beitrag Kommentiert"
contacts_birthday: "Geburtstag"
liked: "Gefällt"
mark_all_as_read: "Alle als gelesen markieren"
mark_all_shown_as_read: "Alle angezeigten als gelesen markieren"
......@@ -734,6 +739,10 @@ de:
confirm_email:
click_link: "Um deine neue E-Mail-Adresse %{unconfirmed_email} zu aktivieren, klicke bitte auf diesen Link:"
subject: "Bitte aktiviere deine neue E-Mail-Adresse %{unconfirmed_email}"
contacts_birthday:
birthday: "%{name} hat heute Geburtstag. Wünsche doch 'Happy Birthday'!"
subject: "%{name} hat heute Geburtstag"
view_profile: "Profil von %{name} anzeigen"
csrf_token_fail:
body: |-
Hallo %{name},
......@@ -1049,7 +1058,6 @@ de:
toggle:
one: "In einem Aspekt"
other: "In %{count} Aspekten"
zero: "In keinem Aspekt"
invitations:
by_email: "Einladung per E-Mail verschicken"
invite_your_friends: "Lade deine Freunde ein"
......@@ -1172,8 +1180,9 @@ de:
also_commented: "jemand einen Beitrag kommentiert, den du kommentiert hast"
auto_follow_aspect: "Aspekt für automatisch gefolgten Benutzern:"
auto_follow_back: "Folge Benutzern automatisch, wenn sie dir folgen"
birthday: "jemand hat Geburtstag"
change: "Ändern"
change_color_theme: "Farbthema ändern"
change_color_theme: "Farbschema ändern"
change_email: "E-Mail-Adresse ändern"
change_language: "Sprache ändern"
change_password: "Kennwort ändern"
......@@ -1238,7 +1247,7 @@ de:
public:
does_not_exist: "Benutzer %{username} existiert nicht!"
update:
color_theme_changed: "Farbthema erfolgreich geändert."
color_theme_changed: "Farbschema erfolgreich geändert."
color_theme_not_changed: "Beim ändern des Farbthemas ist ein Fehler aufgetreten."
email_notifications_changed: "E-Mail-Benachrichtigungen geändert"
follow_settings_changed: "Folgen-Einstellungen geändert"
......
This diff is collapsed.
......@@ -627,6 +627,10 @@ en:
zero: "%{actors} have reshared your post %{post_link}."
one: "%{actors} has reshared your post %{post_link}."
other: "%{actors} have reshared your post %{post_link}."
contacts_birthday:
zero: "%{actors} have their birthday on %{date}."
one: "%{actors} has their birthday on %{date}."
other: "%{actors} have their birthday on %{date}."
also_commented_deleted: