Commit 1f3ad2fa authored by Benjamin Neff's avatar Benjamin Neff

Merge branch 'release/0.7.3.0'

parents cf2bd660 aff4be88
# 0.7.3.0
## Refactor
* Work on the data downloads: Fixed general layout of buttons, added a timestamp and implemented auto-deletion of old exports [#7684](https://github.com/diaspora/diaspora/pull/7684)
* Increase Twitter character limit to 280 [#7694](https://github.com/diaspora/diaspora/pull/7694)
* Improve password autocomplete with password managers [#7642](https://github.com/diaspora/diaspora/pull/7642)
* Remove the limit of participants in private conversations [#7705](https://github.com/diaspora/diaspora/pull/7705)
* Send blocks to the blocked persons pod for better UX [#7705](https://github.com/diaspora/diaspora/pull/7705)
* Send a dummy participation on all incoming public posts to increase interaction consistency [#7708](https://github.com/diaspora/diaspora/pull/7708)
## Bug fixes
* Fix invite link on the contacts page when the user has no contacts [#7690](https://github.com/diaspora/diaspora/pull/7690)
* Fix the mobile bookmarklet when called without parameters [#7698](https://github.com/diaspora/diaspora/pull/7698)
* Properly build the #newhere message for people who got invited [#7702](https://github.com/diaspora/diaspora/pull/7702)
* Fix the admin report view for posts without text [#7706](https://github.com/diaspora/diaspora/pull/7706)
* Upgrade Nokogiri to fix [a disclosed vulnerability in libxml2](https://github.com/sparklemotion/nokogiri/issues/1714)
## Features
* Check if redis is running in script/server [#7685](https://github.com/diaspora/diaspora/pull/7685)
# 0.7.2.1
Fixes notifications when people remove their birthday date [#7691](https://github.com/diaspora/diaspora/pull/7691)
# 0.7.2.0
## Bug fixes
......
......@@ -15,8 +15,8 @@ gem "unicorn-worker-killer", "0.4.4"
# Federation
gem "diaspora_federation-json_schema", "0.2.2"
gem "diaspora_federation-rails", "0.2.2"
gem "diaspora_federation-json_schema", "0.2.3"
gem "diaspora_federation-rails", "0.2.3"
# API and JSON
......@@ -137,7 +137,7 @@ gem "leaflet-rails", "1.2.0"
# Parsing
gem "nokogiri", "1.8.1"
gem "nokogiri", "1.8.2"
gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.4.0"
gem "ruby-oembed", "0.12.0"
......@@ -292,7 +292,7 @@ group :test do
gem "timecop", "0.9.1"
gem "webmock", "3.0.1", require: false
gem "diaspora_federation-test", "0.2.2"
gem "diaspora_federation-test", "0.2.3"
# Coverage
gem "coveralls", "0.8.21", require: false
......
......@@ -166,18 +166,18 @@ GEM
devise
rails (>= 3.0.4)
diaspora-prosody-config (0.0.7)
diaspora_federation (0.2.2)
faraday (>= 0.9.0, < 0.14.0)
diaspora_federation (0.2.3)
faraday (>= 0.9.0, < 0.15.0)
faraday_middleware (>= 0.10.0, < 0.13.0)
nokogiri (~> 1.6, >= 1.6.8)
typhoeus (~> 1.0)
valid (~> 1.0)
diaspora_federation-json_schema (0.2.2)
diaspora_federation-rails (0.2.2)
diaspora_federation-json_schema (0.2.3)
diaspora_federation-rails (0.2.3)
actionpack (>= 4.2, < 6)
diaspora_federation (= 0.2.2)
diaspora_federation-test (0.2.2)
diaspora_federation (= 0.2.2)
diaspora_federation (= 0.2.3)
diaspora_federation-test (0.2.3)
diaspora_federation (= 0.2.3)
fabrication (~> 2.16)
uuid (~> 2.3, >= 2.3.8)
diff-lcs (1.3)
......@@ -194,7 +194,7 @@ GEM
rake
et-orbi (1.0.5)
tzinfo
ethon (0.10.1)
ethon (0.11.0)
ffi (>= 1.3.0)
excon (0.59.0)
execjs (2.7.0)
......@@ -204,7 +204,7 @@ GEM
sigar (~> 0.7.3)
state_machines
thor
fabrication (2.16.3)
fabrication (2.20.1)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
......@@ -389,7 +389,7 @@ GEM
naught (1.1.0)
nenv (0.3.0)
nio4r (2.1.0)
nokogiri (1.8.1)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
notiffany (0.1.1)
nenv (~> 0.1)
......@@ -783,9 +783,9 @@ DEPENDENCIES
devise (= 4.3.0)
devise_lastseenable (= 0.0.6)
diaspora-prosody-config (= 0.0.7)
diaspora_federation-json_schema (= 0.2.2)
diaspora_federation-rails (= 0.2.2)
diaspora_federation-test (= 0.2.2)
diaspora_federation-json_schema (= 0.2.3)
diaspora_federation-rails (= 0.2.3)
diaspora_federation-test (= 0.2.3)
entypo-rails (= 3.0.0)
eye (= 0.9.2)
factory_girl_rails (= 4.8.0)
......@@ -820,7 +820,7 @@ DEPENDENCIES
minitest
mobile-fu (= 1.4.0)
mysql2 (= 0.4.9)
nokogiri (= 1.8.1)
nokogiri (= 1.8.2)
omniauth (= 1.6.1)
omniauth-facebook (= 4.0.0)
omniauth-tumblr (= 1.2)
......@@ -904,4 +904,4 @@ DEPENDENCIES
will_paginate (= 3.1.6)
BUNDLED WITH
1.15.4
1.16.1
......@@ -9,7 +9,7 @@ app.pages.Contacts = Backbone.View.extend({
"click #chat_privilege_toggle" : "toggleChatPrivilege",
"click #change_aspect_name" : "showAspectNameForm",
"click .conversation_button": "showMessageModal",
"click #invitations-button": "showInvitationsModal"
"click .invitations-button": "showInvitationsModal"
},
initialize: function(opts) {
......
......@@ -186,7 +186,7 @@ app.Router = Backbone.Router.extend({
},
spotlight: function() {
$("#invitations-button").click(function() {
$(".invitations-button").click(function() {
app.helpers.showModal("#invitationsModal");
});
},
......
......@@ -178,6 +178,9 @@ app.views.Publisher = Backbone.View.extend({
if (gon.preloads.getting_started) {
this.open();
this.viewGettingStarted.show();
if (gon.preloads.mentioned_person) {
this.mention.addPersonToMentions(gon.preloads.mentioned_person);
}
}
},
......
......@@ -6,16 +6,21 @@ $(document).ready(function() {
return params.content;
}
var content = params.title + " - " + params.url;
if (params.notes.length > 0) {
content += " - " + params.notes;
var separator = "\n\n";
var contents = "### " + params.title + separator;
if (params.notes) {
var notes = params.notes.toString().replace(/(?:\r\n|\r|\n)/g, "\n> ");
contents += "> " + notes + separator;
}
return content;
contents += params.url;
return contents;
}
var content = publisherContent(gon.preloads.bookmarklet);
if (content.length > 0) {
$("#status_message_text").val(content);
var textarea = $("#status_message_text");
textarea.val(content);
autosize.update(textarea);
}
});
// @license-end
......@@ -3,7 +3,7 @@
.term { font-weight: 700; }
small { margin-left: 15px; }
}
#invitations-button { padding-left: 0; }
.invitations-button { padding-left: 0; }
}
#people-stream {
.media, .media-body {
......
......@@ -36,3 +36,7 @@
max-width: 100%;
min-width: 100%;
}
.account-data h6 {
color: $text-grey;
}
......@@ -6,7 +6,7 @@ class BlocksController < ApplicationController
def create
block = current_user.blocks.new(block_params)
disconnect_if_contact(block.person) if block.save
send_message(block) if block.save
respond_to do |format|
format.json { head :no_content }
......@@ -14,7 +14,9 @@ class BlocksController < ApplicationController
end
def destroy
notice = if current_user.blocks.find_by(id: params[:id])&.delete
block = current_user.blocks.find_by(id: params[:id])
notice = if block&.delete
ContactRetraction.for(block).defer_dispatch(current_user)
{notice: t("blocks.destroy.success")}
else
{error: t("blocks.destroy.failure")}
......@@ -28,8 +30,14 @@ class BlocksController < ApplicationController
private
def disconnect_if_contact(person)
current_user.contact_for(person).try {|contact| current_user.disconnect(contact) }
def send_message(block)
contact = current_user.contact_for(block.person)
if contact
current_user.disconnect(contact)
elsif block.person.remote?
Diaspora::Federation::Dispatcher.defer_dispatch(current_user, block)
end
end
def block_params
......
......@@ -30,7 +30,12 @@ class StreamsController < ApplicationController
end
def multi
gon.preloads[:getting_started] = current_user.getting_started
if current_user.getting_started
gon.preloads[:getting_started] = true
inviter = current_user.invited_by.try(:person)
gon.preloads[:mentioned_person] = {name: inviter.name, handle: inviter.diaspora_handle} if inviter
end
stream_responder(Stream::Multi)
end
......
......@@ -17,7 +17,7 @@ module InterimStreamHackinessHelper
if params[:prefill].present?
params[:prefill]
elsif defined?(@stream)
@stream.publisher.text
@stream.publisher.prefill
else
nil
end
......
......@@ -17,7 +17,7 @@ module NotificationsHelper
.include?(note.type)
opts.merge!(opts_for_post(note.linked_object))
elsif note.is_a?(Notifications::ContactsBirthday)
opts.merge!(opts_for_birthday(note.linked_object))
opts.merge!(opts_for_birthday(note))
end
end
translation(target_type, opts)
......@@ -46,8 +46,8 @@ module NotificationsHelper
}
end
def opts_for_birthday(person)
{date: locale_date(person.birthday.to_s)}
def opts_for_birthday(note)
{date: I18n.l(note.created_at, format: I18n.t("date.formats.fullmonth_day"))}
end
def notification_people_link(note, people=nil)
......
......@@ -7,7 +7,7 @@ module NotifierHelper
# @return [String] The formatted post.
def post_message(post, opts={})
if post.respond_to? :message
post.message.try(:plain_text_without_markdown) || post_page_title(post)
post.message.try(:plain_text_without_markdown).presence || post_page_title(post)
else
I18n.translate 'notifier.a_post_you_shared'
end
......
......@@ -15,4 +15,9 @@ class Block < ApplicationRecord
errors[:person_id] << "stop blocking yourself!"
end
end
# @return [Array<Person>] The recipient of the block
def subscribers
[person]
end
end
......@@ -9,13 +9,8 @@ class Conversation < ApplicationRecord
has_many :participants, class_name: "Person", through: :conversation_visibilities, source: :person
has_many :messages, -> { order("created_at ASC") }, inverse_of: :conversation
validate :max_participants
validate :local_recipients
def max_participants
errors.add(:max_participants, "too many participants") if participants.count > 20
end
def local_recipients
recipients.each do |recipient|
if recipient.local?
......
......@@ -3,7 +3,7 @@
class Services::Twitter < Service
include Rails.application.routes.url_helpers
MAX_CHARACTERS = 140
MAX_CHARACTERS = 280
SHORTENED_URL_LENGTH = 21
LINK_PATTERN = %r{https?://\S+}
......
......@@ -539,6 +539,8 @@ class User < ApplicationRecord
:post_default_public].each do |field|
self[field] = false
end
self.remove_export = true
self.remove_exported_photos_file = true
self[:disable_mail] = true
self[:strip_exif] = true
self[:email] = "deletedaccount_#{self[:id]}@example.org"
......@@ -579,7 +581,7 @@ class User < ApplicationRecord
attributes.keys - %w(id username encrypted_password created_at updated_at locked_at
serialized_private_key getting_started
disable_mail show_community_spotlight_in_stream
strip_exif email remove_after export exporting exported_at
exported_photos_file exporting_photos exported_photos_at)
strip_exif email remove_after export exporting
exported_photos_file exporting_photos)
end
end
......@@ -11,7 +11,7 @@
class: "btn btn-link"
- if AppConfig.settings.invitations.open?
.text-center
.btn.btn-link#invitations-button{"data-toggle" => "modal"}
.btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t("invitations.new.invite_someone_to_join")
= render "shared/modal",
path: new_user_invitation_path,
......
......@@ -27,7 +27,7 @@
!= t(".no_contacts_message",
community_spotlight: link_to(t(".community_spotlight"), community_spotlight_path))
%p
.btn.btn-link{"data-toggle" => "modal"}
.btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t("invitations.new.invite_someone_to_join")
#paginate
......
......@@ -2,7 +2,7 @@
= invite_link(current_user.invitation_code)
- if AppConfig.mail.enable?
.invitations-link.btn.btn-link#invitations-button{"data-toggle" => "modal"}
.invitations-link.btn.btn-link.invitations-button{"data-toggle" => "modal"}
= t(".by_email")
- content_for :after_content do
......
......@@ -34,7 +34,8 @@
= f.error_messages
.form-group
= f.label :close_account_password, t("users.edit.current_password"), for: :close_account_password
= f.password_field :current_password, id: :close_account_password, class: "form-control"
= f.password_field :current_password, id: :close_account_password, class: "form-control",
autocomplete: "current-password"
.modal-footer
.btn.btn-default{type: "button", data: {dismiss: "modal"}, aria: {hidden: "true"}}
= t("cancel")
......
......@@ -39,18 +39,18 @@
= f.label :current_password, t(".current_password"), class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :current_password, placeholder: t(".current_password_expl"),
class: "form-control"
class: "form-control", autocomplete: "current-password"
.form-group
= f.label :password, t(".new_password"), class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :password, placeholder: t(".character_minimum_expl"),
class: "form-control"
class: "form-control", autocomplete: "new-password"
.form-group
= f.label :password_confirmation, t("registrations.new.password_confirmation"),
class: "col-sm-6 control-label"
.col-sm-6
= f.password_field :password_confirmation, placeholder: t(".character_minimum_expl"),
class: "form-control"
class: "form-control", autocomplete: "new-password"
.clearfix
= f.submit t(".change_password"), class: "btn btn-primary pull-right", name: "change_password"
......@@ -181,35 +181,33 @@
%hr
.row
.col-md-6#account_data
.col-md-6.account-data
%h3= t(".export_data")
%h4= t("profile")
.form-group
- if current_user.exporting
.export-in-progress= t(".export_in_progress")
- elsif current_user.export.present?
= link_to t(".request_export_update"), export_profile_user_path, method: :post,
class: "btn btn-default"
.small-horizontal-spacer
= link_to t(".download_export"), download_profile_user_path,
class: "btn btn-success"
.small-horizontal-spacer
= link_to t(".request_export_update"), export_profile_user_path, method: :post,
class: "btn btn-default"
%h6
= t(".last_exported_at", timestamp: current_user.exported_at)
= t(".last_exported_html", timeago: timeago(current_user.exported_at))
- else
= link_to t(".request_export"), export_profile_user_path, method: :post,
class: "btn btn-default"
%h4= t("javascripts.profile.photos")
.form-group
- if current_user.exporting_photos
.export-in-progress= t(".export_photos_in_progress")
- elsif current_user.exported_photos_file.present?
= link_to t(".download_export_photos"), download_photos_user_path, class: "btn btn-success"
= link_to t(".request_export_photos_update"), export_photos_user_path, method: :post,
class: "btn btn-default"
.small-horizontal-spacer
= link_to t(".download_export_photos"), download_photos_user_path, class: "btn btn-success"
.small-horizontal-spacer
%h6
= t(".last_exported_at", timestamp: current_user.exported_photos_at)
= t(".last_exported_html", timeago: timeago(current_user.exported_photos_at))
- else
= link_to t(".request_export_photos"), export_photos_user_path, method: :post,
class: "btn btn-default"
......
# frozen_string_literal: true
module Workers
class CleanupOldExports < Base
sidekiq_options queue: :low
def perform
User.where("exported_at < ?", 14.days.ago).each do |user|
user.remove_export = true
user.exported_at = nil
user.save
end
User.where("exported_photos_at < ?", 14.days.ago).each do |user|
user.remove_exported_photos_file = true
user.exported_photos_at = nil
user.save
end
end
end
end
......@@ -9,7 +9,7 @@ module Workers
protected
def schedule_retry(retry_count, sender_id, obj_str, failed_urls)
if retry_count < MAX_RETRIES
if retry_count < (obj_str.start_with?("Contact") ? MAX_RETRIES + 10 : MAX_RETRIES)
yield(seconds_to_delay(retry_count), retry_count)
else
logger.warn "status=abandon sender=#{sender_id} obj=#{obj_str} failed_urls='[#{failed_urls.join(', ')}]'"
......
......@@ -4,7 +4,7 @@
defaults:
version:
number: "0.7.2.0" # Do not touch unless doing a release, do not backport the version number that's in master
number: "0.7.3.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"
......
......@@ -10,7 +10,7 @@ de_formal:
confirmed: "Ihre E-Mail-Adresse wurde erfolgreich bestätigt."
new:
resend_confirmation: "Anweisungen zum Bestätigen erneut senden"
send_instructions: "Sie werden in ein wenigen Minuten eine E-Mail mit Anweisungen zum Bestätigen Ihrer E-Mail-Adresse erhalten."
send_instructions: "In Kürze erhalten Sie eine E-Mail mit Hinweisen zur Bestätigung Ihrer E-Mail-Adresse."
send_paranoid_instructions: "Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in wenigen Minuten eine E-Mail mit Anweisungen zur Bestätigung Ihrer E-Mail-Adresse."
failure:
already_authenticated: "Sie sind bereits angemeldet."
......@@ -66,7 +66,7 @@ de_formal:
reset_password: "Passwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Sie können auf diese Seite nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls sie von einer E-Mail zur Passwortrücksetzung kommen, vergewissern Sie sich bitte, dass Sie die vollständige angegebene URL verwendet haben."
send_instructions: "Sie werden in wenigen Minuten eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts erhalten."
send_instructions: "Sie werden in wenigen Minuten eine E-Mail mit einer Anleitung zum Rücksetzen Ihres Kennworts erhalten."
send_paranoid_instructions: "Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, erhalten Sie in wenigen Minuten einen Link zum Zurücksetzen Ihres Passworts an Ihre E-Mail-Adresse."
updated: "Ihr Passwort wurde erfolgreich geändert. Sie sind nun angemeldet."
updated_not_active: "Ihr Passwort wurde erfolgreich geändert."
......@@ -105,7 +105,7 @@ de_formal:
unlocked: "Ihr Konto wurde erfolgreich entsperrt. Bitte melden Sie sich an, um fortzufahren."
errors:
messages:
already_confirmed: "wurde bereits bestätigt, bitte versuchen Sie, sich anzumelden"
already_confirmed: "wurde bereits bestätigt, bitte versuchen Sie sich anzumelden"
confirmation_period_expired: "muss innerhalb von %{period} bestätigt werden, bitte erneut anfordern"
expired: "abgelaufen, bitte neu anfordern"
not_found: "nicht gefunden"
......
......@@ -41,7 +41,7 @@ oc:
subject: "Senhal cambiat"
reset_password_instructions:
change: "Cambiar mon senhal"
ignore: "Se avètz pas demandat aquò, mercé d'ignorar aqueste corrièl."
ignore: "Savètz pas demandat aquò, mercé d'ignorar aqueste corrièl."
someone_requested: "Qualqu'un a demandat un ligam per cambiar vòstre senhal. S'èretz vos, podètz o far amb lo ligam dejós."
subject: "Instruccions de reïnicializacion del senhal"
wont_change: "Vòstre senhal cambiarà pas tant que n'auretz pas creat un novèl en accedissent al ligam çaijós."
......
......@@ -54,10 +54,12 @@ pt-PT:
send_password_instructions: "Enviem-me instruções para redefinir a minha palavra-passe"
send_instructions: "Vai receber um email com instruções sobre como alterar a sua palavra-passe dentro de alguns minutos."
updated: "A sua palavra-passe foi alterada com sucesso. A sessão foi iniciada."
updated_not_active: "A sua palavra-passe foi alterada com sucesso."
registrations:
destroyed: "Adeus! A sua conta foi cancelada com sucesso. Nós esperamos vê-lo de novo em breve."
signed_up: "Registou-se com sucesso. Caso tenha selecionado essa opção, uma confirmação foi enviada para o seu endereço de email."
updated: "Atualizou a sua conta com sucesso."
update_needs_confirmation: "Atualizou a sua conta com sucesso, mas nós precisamos de verificar o seu novo endereço de e-mail. Por favor, verifique o seu e-mail e siga a hiperligação de confirmação para confirmar o seu novo endereço de e-mail."
updated: "A sua conta foi atualizada com sucesso."
sessions:
new:
login: "Iniciar sessão"
......
This diff is collapsed.
......@@ -626,9 +626,9 @@ de:
toggle_navigation: "Navigation umschalten"
likes:
create:
error: "Gefällt mir ist fehlgeschlagen."
error: "Mit \"Gefällt mir\" bewerten ist fehlgeschlagen."
destroy:
error: "Gefällt mir nicht mehr ist fehlgeschlagen."
error: "\"Gefällt mir\" entziehen ist gescheitert."
limited: "Begrenzt"
more: "Mehr"
no_results: "Keine Ergebnisse gefunden"
......@@ -1143,7 +1143,7 @@ de:
like_stream:
title: "„Gefällt mir“-Stream"
liked:
title: "Beiträge, die dir gefallen"
title: "Mit „Gefällt mir“ bewertete Beiträge"
mentioned_stream: "@Erwähnungen"
mentions:
title: "@Erwähnungen"
......@@ -1177,7 +1177,7 @@ de:
success: "Dein Account wurde gesperrt. Es kann bis zu 20 Minuten dauern, bis dein Account endgültig geschlossen ist. Vielen Dank, dass du diaspora* ausprobiert hast."
wrong_password: "Das eingegebene Kennwort stimmt nicht mit deinem aktuellen Kennwort überein."
edit:
also_commented: "jemand einen Beitrag kommentiert, den du kommentiert hast"
also_commented: "jemand kommentierte einen Beitrag, den du kommentiert hast"
auto_follow_aspect: "Aspekt für automatisch gefolgten Benutzern:"
auto_follow_back: "Folge Benutzern automatisch, wenn sie dir folgen"
birthday: "jemand hat Geburtstag"
......
This diff is collapsed.
......@@ -1213,7 +1213,7 @@ en:
request_export_update: "Refresh my profile data"
export_data: "Export data"
export_in_progress: "We are currently processing your data. Please check back in a few moments."
last_exported_at: "(Last updated at %{timestamp})"
last_exported_html: "(Last updated %{timeago})"
download_export_photos: "Download my photos"
request_export_photos: "Request my photos"
request_export_photos_update: "Refresh my photos"
......
......@@ -414,6 +414,7 @@ es:
mentions:
how_to_mention_a: "Escribe \"@\" y empieza a escribir su(s) nombre(s). Debería aparecer un menú desplegable para ayudarte en la selección. Ten en cuenta que solo es posible mencionar personas a aquellas personas que se encuentren en tus aspectos."
how_to_mention_q: "¿Cómo puedo mencionar a alguien cuando hago una publicación?"
mention_in_comment_a: "Desde la versión 0.7.0.0, ¡sí! Puedes mencionar a alguien en un comentario del mismo modo que lo harías en una publicación, escribiendo \"@\" y a continuación su nombre. Por favor, ten en cuenta que cuando comentas en una publicación que no es estrictamente pública, sólo puedes mencionar a usuarios que ya hayan interactuado con la publicación."
mention_in_comment_q: "¿Puedo mencionar a alguien en un comentario?"
see_mentions_a: "Sí, pulsa en \"@menciones\" en la columna izquierda de tu pagina principal."
see_mentions_q: "¿Hay alguna forma de ver las publicaciones en las cuales he sido mencionado?"
......@@ -678,6 +679,9 @@ es:
one: "%{actors} te ha mencionado en una publicación eliminada."
other: "%{actors} te han mencionado en una publicación eliminada."
zero: "%{actors} te han mencionado en una publicación eliminada."
mentioned_in_comment_deleted:
one: "%{actors} te ha mencionado en un comentario eliminado."
other: "%{actors} te han mencionado en un comentario eliminado."
private_message:
one: "%{actors} te ha escrito"
other: "%{actors} te han escrito."
......
......@@ -727,7 +727,7 @@ fr:
click_link: "Pour activer votre nouvelle adresse électronique %{unconfirmed_email}, merci de suivre ce lien :"
subject: "Merci d'activer votre nouvelle adresse électronique %{unconfirmed_email}"
contacts_birthday:
birthday: "C'est l'anniversaire de %{name} aujourd'hui. Souhaitez-leur un joyeux anniversaire !"
birthday: "C'est l'anniversaire de %{name} aujourd'hui. Souhaitez-lui un joyeux anniversaire !"
subject: "C'est l'anniversaire de %{name} aujourd'hui"
view_profile: "Voir le profil de %{name}"
csrf_token_fail:
......
This diff is collapsed.
......@@ -58,6 +58,8 @@ ia:
fetching_diaspora_version: "Determina ultime version de diaspora*..."
pod_status: "Stato del pod"
pods:
pod_desktop_link: "vista scriptorio"
pod_desktop_view: "Iste pagina non es disponibile in vista mobile. Cambia al %{desktop_link}."
pod_network: "Rete de pods"
stats:
2weeks: "2 septimanas"
......@@ -229,6 +231,8 @@ ia:
here_to_help: "Le communitate de diaspora* es a tu disposition!"
mail_podmin: "E-mail del \"podmin\""
need_help: "Require adjuta?"
support_forum: "Tu pote etiam participar al %{support_forum}."
support_forum_link: "foro de supporto"
tag_bug: "bug"
tag_feature: "functionalitate"
tag_question: "question"
......@@ -270,6 +274,13 @@ ia:
heading: "Mini-marcapaginas"
post_something: "Inviar a diaspora*"
cancel: "Cancellar"
color_themes:
dark: "Obscur"
dark_green: "Verde obscur"
egyptian_blue: "Blau egyptie"
magenta: "Magenta"
original: "Gris original"
original_white: "Fundo blanc original"
comments:
create:
error: "Commento fallite."
......@@ -377,9 +388,11 @@ ia:
add_contact_roster_q: "Como pote io parlar in directo a qualcuno in diaspora*?"
contacts_page: "pagina de contactos"
title: "Chat"
community_guidelines: "directivas del communitate"
faq: "FAQ"
foundation_website: "le sito web del fundation diaspora*"
getting_help:
get_support_a_discourse: "Cerca discussiones existente que pertine a tu question o aperi un nove discussion in nostre platteforma %{discourse}"
get_support_a_faq: "Lege nostre pagina de %{faq} sur le wiki"