Merge commit '4aea3f88a6d30f102a79c2da7fcfac96465ba1a8' into merging-upstream

This commit is contained in:
Ondřej Hruška
2017-09-28 09:12:17 +02:00
282 changed files with 4626 additions and 1622 deletions

View File

@@ -0,0 +1,10 @@
- thumbnail = @instance_presenter.thumbnail
= opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname)
= opengraph 'og:url', about_url
= opengraph 'og:type', 'website'
= opengraph 'og:title', @instance_presenter.site_title
= opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html'))
= opengraph 'og:image', full_asset_url(thumbnail&.file&.url || asset_pack_path('preview.jpg', protocol: :request))
= opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200'
= opengraph 'og:image:height', thumbnail ? thumbnail.meta['height'] : '630'
= opengraph 'twitter:card', 'summary_large_image'

View File

@@ -1,26 +1,13 @@
= simple_form_for(new_user, url: user_registration_path) do |f|
= f.simple_fields_for :account do |account_fields|
.input-with-append
= account_fields.input :username,
autofocus: true,
placeholder: t('simple_form.labels.defaults.username'),
required: true,
input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
= account_fields.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off' }
.append
= "@#{site_hostname}"
= f.input :email,
placeholder: t('simple_form.labels.defaults.email'),
required: true,
input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
= f.input :password,
placeholder: t('simple_form.labels.defaults.password'),
required: true,
input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }
= f.input :password_confirmation,
placeholder: t('simple_form.labels.defaults.confirm_password'),
required: true,
input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }
= f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }
.actions
= f.button :button, t('auth.register'), type: :submit, class: 'button button-alternative'

View File

@@ -3,16 +3,7 @@
- content_for :header_tags do
= javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
%meta{ property: 'og:site_name', content: site_title }/
%meta{ property: 'og:url', content: about_url }/
%meta{ property: 'og:type', content: 'website' }/
%meta{ property: 'og:title', content: site_hostname }/
%meta{ property: 'og:description', content: strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) }/
%meta{ property: 'og:image', content: asset_pack_path('mastodon_small.jpg', protocol: :request) }/
%meta{ property: 'og:image:width', content: '400' }/
%meta{ property: 'og:image:height', content: '400' }/
%meta{ property: 'twitter:card', content: 'summary' }/
= render partial: 'og'
.landing-page
.header-wrapper.compact

View File

@@ -4,16 +4,7 @@
- content_for :header_tags do
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
= javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous'
%meta{ property: 'og:site_name', content: site_title }/
%meta{ property: 'og:url', content: about_url }/
%meta{ property: 'og:type', content: 'website' }/
%meta{ property: 'og:title', content: site_hostname }/
%meta{ property: 'og:description', content: strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) }/
%meta{ property: 'og:image', content: asset_pack_path('mastodon_small.jpg', protocol: :request) }/
%meta{ property: 'og:image:width', content: '400' }/
%meta{ property: 'og:image:height', content: '400' }/
%meta{ property: 'twitter:card', content: 'summary' }/
= render partial: 'og'
.landing-page
.header-wrapper

View File

@@ -43,15 +43,15 @@
.details-counters
.counter{ class: active_nav_class(short_account_url(account)) }
= link_to short_account_url(account), class: 'u-url u-uid' do
%span.counter-number= number_to_human account.statuses_count
%span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.posts')
.counter{ class: active_nav_class(account_following_index_url(account)) }
= link_to account_following_index_url(account) do
%span.counter-number= number_to_human account.following_count
%span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.following')
.counter{ class: active_nav_class(account_followers_url(account)) }
= link_to account_followers_url(account) do
%span.counter-number= number_to_human account.followers_count
%span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.followers')

View File

@@ -1,8 +1,9 @@
%meta{ property: 'og:url', content: url }/
%meta{ property: 'og:site_name', content: site_title }/
%meta{ property: 'og:title', content: [yield(:page_title).strip.presence, site_title].compact.join(' - ') }/
%meta{ property: 'og:description', content: account.note }/
%meta{ property: 'og:image', content: full_asset_url(account.avatar.url(:original)) }/
%meta{ property: 'og:image:width', content: '120' }/
%meta{ property: 'og:image:height', content: '120' }/
%meta{ property: 'twitter:card', content: 'summary' }/
= opengraph 'og:url', url
= opengraph 'og:site_name', site_title
= opengraph 'og:title', [yield(:page_title).strip.presence, site_title].compact.join(' - ')
= opengraph 'og:description', account.note
= opengraph 'og:image', full_asset_url(account.avatar.url(:original))
= opengraph 'og:image:width', '120'
= opengraph 'og:image:height', '120'
= opengraph 'twitter:card', 'summary'
= opengraph 'profile:username', account.local_username_and_domain

View File

@@ -9,7 +9,7 @@
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
%meta{ property: 'og:type', content: 'profile' }/
= opengraph 'og:type', 'profile'
= render 'og', account: @account, url: short_account_url(@account, only_path: false)
- if show_landing_strip?

View File

@@ -37,29 +37,6 @@
%th= t('admin.accounts.protocol')
%td= @account.protocol.humanize
- if @account.ostatus?
%tr
%th= t('admin.accounts.feed_url')
%td= link_to @account.remote_url, @account.remote_url
%tr
%th= t('admin.accounts.push_subscription_expires')
%td
- if @account.subscribed?
%time.formatted{ datetime: @account.subscription_expires_at.iso8601, title: l(@account.subscription_expires_at) }
= l @account.subscription_expires_at
- else
= t('admin.accounts.not_subscribed')
%tr
%th= t('admin.accounts.salmon_url')
%td= link_to @account.salmon_url, @account.salmon_url
- elsif @account.activitypub?
%tr
%th= t('admin.accounts.inbox_url')
%td= link_to @account.inbox_url, @account.inbox_url
%tr
%th= t('admin.accounts.outbox_url')
%td= link_to @account.outbox_url, @account.outbox_url
%tr
%th= t('admin.accounts.follows')
%td= @account.following_count
@@ -82,29 +59,73 @@
%th= t('.targeted_reports')
%td= link_to pluralize(@account.targeted_reports.count, t('.report')), admin_reports_path(target_account_id: @account.id)
%div{ style: 'float: right' }
- if @account.local?
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button'
- if @account.user&.otp_required_for_login?
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button'
- else
- if @account.ostatus?
%div{ style: 'overflow: hidden' }
%div{ style: 'float: right' }
- if @account.local?
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button'
- if @account.user&.otp_required_for_login?
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button'
- else
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button'
%div{ style: 'float: left' }
- if @account.silenced?
= link_to t('admin.accounts.undo_silenced'), admin_account_silence_path(@account.id), method: :delete, class: 'button'
- else
= link_to t('admin.accounts.silence'), admin_account_silence_path(@account.id), method: :post, class: 'button'
- if @account.local?
- unless @account.user_confirmed?
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button'
- if @account.suspended?
= link_to t('admin.accounts.undo_suspension'), admin_account_suspension_path(@account.id), method: :delete, class: 'button'
- else
= link_to t('admin.accounts.perform_full_suspension'), admin_account_suspension_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button'
- unless @account.local?
%hr
%h3 OStatus
.table-wrapper
%table.table
%tbody
%tr
%th= t('admin.accounts.feed_url')
%td= link_to @account.remote_url, @account.remote_url
%tr
%th= t('admin.accounts.push_subscription_expires')
%td
- if @account.subscribed?
%time.formatted{ datetime: @account.subscription_expires_at.iso8601, title: l(@account.subscription_expires_at) }
= l @account.subscription_expires_at
- else
= t('admin.accounts.not_subscribed')
%tr
%th= t('admin.accounts.salmon_url')
%td= link_to @account.salmon_url, @account.salmon_url
%div{ style: 'overflow: hidden' }
%div{ style: 'float: right' }
= link_to @account.subscribed? ? t('admin.accounts.resubscribe') : t('admin.accounts.subscribe'), subscribe_admin_account_path(@account.id), method: :post, class: 'button'
- if @account.subscribed?
= link_to t('admin.accounts.unsubscribe'), unsubscribe_admin_account_path(@account.id), method: :post, class: 'button negative'
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button'
%div{ style: 'float: left' }
- if @account.silenced?
= link_to t('admin.accounts.undo_silenced'), admin_account_silence_path(@account.id), method: :delete, class: 'button'
- else
= link_to t('admin.accounts.silence'), admin_account_silence_path(@account.id), method: :post, class: 'button'
%hr
%h3 ActivityPub
- if @account.local?
- unless @account.user_confirmed?
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button'
- if @account.suspended?
= link_to t('admin.accounts.undo_suspension'), admin_account_suspension_path(@account.id), method: :delete, class: 'button'
- else
= link_to t('admin.accounts.perform_full_suspension'), admin_account_suspension_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button'
.table-wrapper
%table.table
%tbody
%tr
%th= t('admin.accounts.inbox_url')
%td= link_to @account.inbox_url, @account.inbox_url
%tr
%th= t('admin.accounts.outbox_url')
%td= link_to @account.outbox_url, @account.outbox_url
%tr
%th= t('admin.accounts.shared_inbox_url')
%td= link_to @account.shared_inbox_url, @account.shared_inbox_url
%tr
%th= t('admin.accounts.followers_url')
%td= link_to @account.followers_url, @account.followers_url

View File

@@ -0,0 +1,7 @@
%tr
%td
= image_tag custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:"
%td
%samp= ":#{custom_emoji.shortcode}:"
%td
= table_link_to 'times', t('admin.custom_emojis.delete'), admin_custom_emoji_path(custom_emoji), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }

View File

@@ -0,0 +1,14 @@
- content_for :page_title do
= t('admin.custom_emojis.title')
.table-wrapper
%table.table
%thead
%tr
%th= t('admin.custom_emojis.emoji')
%th= t('admin.custom_emojis.shortcode')
%th
%tbody
= render @custom_emojis
= link_to t('admin.custom_emojis.upload'), new_admin_custom_emoji_path, class: 'button'

View File

@@ -0,0 +1,12 @@
- content_for :page_title do
= t('.title')
= simple_form_for @custom_emoji, url: admin_custom_emojis_path do |f|
= render 'shared/error_messages', object: @custom_emoji
.fields-group
= f.input :shortcode, placeholder: t('admin.custom_emojis.shortcode'), hint: t('admin.custom_emojis.shortcode_hint')
= f.input :image, input_html: { accept: 'image/png' }, hint: t('admin.custom_emojis.image_hint')
.actions
= f.button :button, t('admin.custom_emojis.upload'), type: :submit

View File

@@ -1,6 +1,6 @@
%tr
%td.domain
= instance.domain
= link_to instance.domain, admin_accounts_path(by_domain: instance.domain)
%td.count
= instance.accounts_count
%td

View File

@@ -1,6 +1,16 @@
- content_for :page_title do
= t('admin.instances.title')
= form_tag admin_instances_url, method: 'GET', class: 'simple_form' do
.fields-group
- %i(domain_name).each do |key|
.input.string.optional
= text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.instances.#{key}")
.actions
%button= t('admin.instances.search')
= link_to t('admin.instances.reset'), admin_instances_path, class: 'button negative'
.table-wrapper
%table.table
%thead

View File

@@ -10,6 +10,11 @@
%hr/
.fields-group
= f.input :thumbnail, as: :file, wrapper: :with_block_label, label: t('admin.settings.thumbnail.title'), hint: t('admin.settings.thumbnail.desc_html')
%hr/
.fields-group
= f.input :timeline_preview, as: :boolean, wrapper: :with_label, label: t('admin.settings.timeline_preview.title'), hint: t('admin.settings.timeline_preview.desc_html')

View File

@@ -6,11 +6,11 @@
= f.simple_fields_for :account do |ff|
.input-with-append
= ff.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
= ff.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off' }
.append
= "@#{site_hostname}"
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }
= f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }

View File

@@ -2,9 +2,7 @@
= t('auth.login')
= simple_form_for(resource, as: resource_name, url: session_path(resource_name), method: :post) do |f|
= f.input :otp_attempt, type: :number, placeholder: t('simple_form.labels.defaults.otp_attempt'),
input_html: { 'aria-label' => t('simple_form.labels.defaults.otp_attempt'), :autocomplete => 'off' }, required: true, autofocus: true,
hint: t('simple_form.hints.sessions.otp')
= f.input :otp_attempt, type: :number, placeholder: t('simple_form.labels.defaults.otp_attempt'), input_html: { 'aria-label' => t('simple_form.labels.defaults.otp_attempt'), :autocomplete => 'off' }, required: true, autofocus: true, hint: t('simple_form.hints.sessions.otp')
.actions
= f.button :button, t('auth.login'), type: :submit

View File

@@ -1,3 +1,4 @@
.form-container
.flash-message
%code= params[:code]
%p= t('doorkeeper.authorizations.show.title')
%input{ type: 'text', class: 'oauth-code', readonly: true, value: params[:code], onClick: 'select()' }

View File

@@ -8,8 +8,8 @@
= f.input :display_name, placeholder: t('simple_form.labels.defaults.display_name'), hint: t('simple_form.hints.defaults.display_name', count: 30 - @account.display_name.size).html_safe
= f.input :note, placeholder: t('simple_form.labels.defaults.note'), hint: t('simple_form.hints.defaults.note', count: 500 - @account.note.size).html_safe
.card.compact{ style: "background-image: url(#{@account.header.url(:original)})" }
.avatar= image_tag @account.avatar.url(:original)
.card.compact{ style: "background-image: url(#{@account.header.url(:original)})", data: { original_src: @account.header.url(:original) } }
.avatar= image_tag @account.avatar.url(:original), data: { original_src: @account.avatar.url(:original) }
.fields-group
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar')

View File

@@ -1,4 +1,4 @@
- if activity.is_a?(Status) && activity.spoiler_text?
%meta{ property: 'og:description', content: activity.spoiler_text }/
= opengraph 'og:description', activity.spoiler_text
- else
%meta{ property: 'og:description', content: activity.content }/
= opengraph 'og:description', activity.content

View File

@@ -1,6 +1,23 @@
- if activity.is_a?(Status) && activity.non_sensitive_with_media?
%meta{ property: 'og:image', content: full_asset_url(activity.media_attachments.first.file.url(:small)) }/
- activity.media_attachments.each do |media|
- if media.image?
= opengraph 'og:image', full_asset_url(media.file.url(:original))
= opengraph 'og:image:type', media.file_content_type
- unless media.file.meta.nil?
= opengraph 'og:image:width', media.file.meta['original']['width']
= opengraph 'og:image:height', media.file.meta['original']['height']
- elsif media.video?
= opengraph 'og:image', full_asset_url(media.file.url(:small))
= opengraph 'og:image:type', 'image/png'
- unless media.file.meta.nil?
= opengraph 'og:image:width', media.file.meta['small']['width']
= opengraph 'og:image:height', media.file.meta['small']['height']
= opengraph 'og:video', full_asset_url(media.file.url(:original))
= opengraph 'og:video:type', media.file_content_type
- unless media.file.meta.nil?
= opengraph 'og:video:width', media.file.meta['small']['width']
= opengraph 'og:video:height', media.file.meta['small']['height']
- else
%meta{ property: 'og:image', content: full_asset_url(account.avatar.url(:original)) }/
%meta{ property: 'og:image:width', content: '120' }/
%meta{ property: 'og:image:height', content: '120' }/
= opengraph 'og:image', full_asset_url(account.avatar.url(:original))
= opengraph 'og:image:width', '120'
= opengraph 'og:image:height','120'

View File

@@ -6,15 +6,15 @@
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: account_stream_entry_url(@account, @stream_entry), format: 'json') }/
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@stream_entry.activity) }/
%meta{ property: 'og:site_name', content: site_title }/
%meta{ property: 'og:type', content: 'article' }/
%meta{ property: 'og:title', content: "#{@account.username} on #{site_hostname}" }/
%meta{ property: 'og:url', content: account_stream_entry_url(@account, @stream_entry) }/
= opengraph 'og:site_name', site_title
= opengraph 'og:type', 'article'
= opengraph 'og:title', "#{@account.username} on #{site_hostname}"
= opengraph 'og:url', account_stream_entry_url(@account, @stream_entry)
= render 'stream_entries/og_description', activity: @stream_entry.activity
= render 'stream_entries/og_image', activity: @stream_entry.activity, account: @account
%meta{ property: 'twitter:card', content: 'summary' }/
= opengraph 'twitter:card', 'summary_large_image'
- if show_landing_strip?
= render partial: 'shared/landing_strip', locals: { account: @stream_entry.account }

View File

@@ -0,0 +1,12 @@
<p>¡Bienvenido, <%= @resource.email %>!</p>
<p>Acabas de crear una cuenta en <%= @instance %>.</p>
<p>Para confirmar tu registro, por favor ingresa al siguiente enlace:<br>
<%= link_to 'Confirmar mi cuenta', confirmation_url(@resource, confirmation_token: @token) %>
<p>También revisa nuestros <%= link_to 'términos y condiciones', terms_url %>.</p>
<p>Sinceramente,<p>
<p>El equipo de <%= @instance %></p>

View File

@@ -0,0 +1,12 @@
¡Bienvenido, <%= @resource.email %>!
Acabas de crear una cuenta en <%= @instance %>.
Para confirmar tu registro, por favor ingresa al siguiente enlace:
<%= confirmation_url(@resource, confirmation_token: @token) %>
Por favor, también revisa nuestros términos y condiciones <%= terms_url %>
Sinceramente,
El equipo de <%= @instance %>

View File

@@ -0,0 +1,12 @@
<p>Boas vindas, <%= @resource.email %>!</p>
<p>Você acabou de criar uma conta no <%= @instance %>.</p>
<p>Para confirmar o seu cadastro, por favor clique no link a seguir: <br>
<%= link_to 'Confirmar cadastro', confirmation_url(@resource, confirmation_token: @token) %>
<p>Por favor, leia também os nossos <%= link_to 'termos de serviços', terms_url %>.</p>
<p>Atenciosamente,<p>
<p>A equipe do <%= @instance %></p>

View File

@@ -0,0 +1,12 @@
Boas vindas, <%= @resource.email %>!
Você acabou de criar uma conta no <%= @instance %>.
Para confirmar o seu cadastro, por favor clique no link a seguir:
<%= confirmation_url(@resource, confirmation_token: @token) %>
Por favor, leia também os nossos termos e condições de uso <%= terms_url %>
Atenciosamente,
A equipe do <%= @instance %>

View File

@@ -3,7 +3,7 @@
<p>你刚刚在 <%= @instance %> 创建了帐号。</p>
<p>点击下面的链接来完成注册啦 : <br>
<%= link_to '确认户', confirmation_url(@resource, confirmation_token: @token) %>
<%= link_to '确认户', confirmation_url(@resource, confirmation_token: @token) %>
<p>别忘了看看 <%= link_to '使用条款', terms_url %>。</p>

View File

@@ -3,7 +3,7 @@
你刚刚在 <%= @instance %> 创建了帐号。
点击下面的链接来完成注册啦 : <br>
<%= link_to '确认户', confirmation_url(@resource, confirmation_token: @token) %>
<%= link_to '确认户', confirmation_url(@resource, confirmation_token: @token) %>
别忘了看看 <%= link_to 'terms and conditions', terms_url %>。

View File

@@ -0,0 +1,3 @@
<p>¡Hola, <%= @resource.email %>!</p>
<p>Te contactamos para notificarte que tu contraseña en <%= @instance %> ha sido modificada.</p>

View File

@@ -0,0 +1,3 @@
¡Hola, <%= @resource.email %>!
Te contactamos para notificarte que tu contraseña en <%= @instance %> ha sido modificada.

View File

@@ -0,0 +1,3 @@
<p>Olá, <%= @resource.email %>!</p>
<p>Estamos te contatando para te notificar que a senha senha no <%= @instance %> foi modificada.</p>

View File

@@ -0,0 +1,3 @@
Olá, <%= @resource.email %>!
Estamos te contatando para te notificar que a senha senha no <%= @instance %> foi modificada.

View File

@@ -0,0 +1,8 @@
<p>¡Hola, <%= @resource.email %>!</p>
<p>Alguien pidió un enlace para cambiar tu contraseña en <%= @instance %>. Puedes hacer esto con el siguiente enlace.</p>
<p><%= link_to 'Cambiar mi contraseña', edit_password_url(@resource, reset_password_token: @token) %></p>
<p>Si no fuiste tú, por favor ignora este mensaje.</p>
<p>Tu contraseña no cambiará hasta que ingreses al enlace y crees una nueva.</p>

View File

@@ -0,0 +1,8 @@
¡Hola, <%= @resource.email %>!
Alguien pidió un enlace para cambiar tu contraseña en <%= @instance %>. Puedes hacer esto con el siguiente enlace.
<%= edit_password_url(@resource, reset_password_token: @token) %>
Si no fuiste tú, por favor ignora este mensaje.
Tu contraseña no cambiará hasta que ingreses al enlace y crees una nueva.

View File

@@ -0,0 +1,8 @@
<p>Olá, <%= @resource.email %>!</p>
<p>Alguém solicitou um link para mudar a sua senha no <%= @instance %>. Você pode fazer isso através do link abaixo:</p>
<p><%= link_to 'Mudar a minha senha', edit_password_url(@resource, reset_password_token: @token) %></p>
<p>Se você não solicitou isso, por favor ignore este e-mail.</p>
<p>A senha senha não será modificada até que você acesse o link acima e crie uma nova.</p>

View File

@@ -0,0 +1,8 @@
Olá, <%= @resource.email %>!
Alguém solicitou um link para mudar a sua senha no <%= @instance %>. Você pode fazer isso através do link abaixo:
<%= edit_password_url(@resource, reset_password_token: @token) %>
Se você não solicitou isso, por favor ignore este e-mail.
A senha senha não será modificada até que você acesse o link acima e crie uma nova.

View File

@@ -1,6 +1,6 @@
<p><%= @resource.email %> ,嗨呀!!</p>
<p>有人但愿是你请求更改你Mastodon户的密码。如果是你的话,请点击下面的链接:</p>
<p>有人但愿是你请求更改你Mastodon户的密码。如果是你的话,请点击下面的链接:</p>
<p><%= link_to '更改密码', edit_password_url(@resource, reset_password_token: @token) %></p>

View File

@@ -1,6 +1,6 @@
<%= @resource.email %> ,嗨呀!!
有人但愿是你请求更改你Mastodon户的密码。如果是你的话,请点击下面的链接:
有人但愿是你请求更改你Mastodon户的密码。如果是你的话,请点击下面的链接:
<%= link_to '更改密码', edit_password_url(@resource, reset_password_token: @token) %>