Merge remote-tracking branch 'parent/main' into upstream-20240304
4
.github/codecov.yml
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
comment: false # Do not leave PR comments
|
||||||
coverage:
|
coverage:
|
||||||
status:
|
status:
|
||||||
project:
|
project:
|
||||||
|
@ -8,6 +9,3 @@ coverage:
|
||||||
default:
|
default:
|
||||||
# Github status check is not blocking
|
# Github status check is not blocking
|
||||||
informational: true
|
informational: true
|
||||||
comment:
|
|
||||||
# Only write a comment in PR if there are changes
|
|
||||||
require_changes: true
|
|
||||||
|
|
2
Vagrantfile
vendored
|
@ -188,7 +188,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
|
|
||||||
config.vm.post_up_message = <<MESSAGE
|
config.vm.post_up_message = <<MESSAGE
|
||||||
To start server
|
To start server
|
||||||
$ vagrant ssh -c "cd /vagrant && foreman start"
|
$ vagrant ssh -c "cd /vagrant && bin/dev"
|
||||||
MESSAGE
|
MESSAGE
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
|
||||||
before_action -> { authorize_if_got_token! :read, :'read:statuses' }
|
before_action -> { authorize_if_got_token! :read, :'read:statuses' }
|
||||||
before_action :set_account
|
before_action :set_account
|
||||||
|
|
||||||
after_action :insert_pagination_headers, unless: -> { truthy_param?(:pinned) }
|
after_action :insert_pagination_headers
|
||||||
|
|
||||||
def index
|
def index
|
||||||
cache_if_unauthenticated!
|
cache_if_unauthenticated!
|
||||||
|
|
|
@ -127,7 +127,7 @@ module LanguagesHelper
|
||||||
om: ['Oromo', 'Afaan Oromoo'].freeze,
|
om: ['Oromo', 'Afaan Oromoo'].freeze,
|
||||||
or: ['Oriya', 'ଓଡ଼ିଆ'].freeze,
|
or: ['Oriya', 'ଓଡ଼ିଆ'].freeze,
|
||||||
os: ['Ossetian', 'ирон æвзаг'].freeze,
|
os: ['Ossetian', 'ирон æвзаг'].freeze,
|
||||||
pa: ['Panjabi', 'ਪੰਜਾਬੀ'].freeze,
|
pa: ['Punjabi', 'ਪੰਜਾਬੀ'].freeze,
|
||||||
pi: ['Pāli', 'पाऴि'].freeze,
|
pi: ['Pāli', 'पाऴि'].freeze,
|
||||||
pl: ['Polish', 'Polski'].freeze,
|
pl: ['Polish', 'Polski'].freeze,
|
||||||
ps: ['Pashto', 'پښتو'].freeze,
|
ps: ['Pashto', 'پښتو'].freeze,
|
||||||
|
@ -191,15 +191,18 @@ module LanguagesHelper
|
||||||
chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze,
|
chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze,
|
||||||
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
|
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
|
||||||
cnr: ['Montenegrin', 'crnogorski'].freeze,
|
cnr: ['Montenegrin', 'crnogorski'].freeze,
|
||||||
|
csb: ['Kashubian', 'Kaszëbsczi'].freeze,
|
||||||
jbo: ['Lojban', 'la .lojban.'].freeze,
|
jbo: ['Lojban', 'la .lojban.'].freeze,
|
||||||
kab: ['Kabyle', 'Taqbaylit'].freeze,
|
kab: ['Kabyle', 'Taqbaylit'].freeze,
|
||||||
ldn: ['Láadan', 'Láadan'].freeze,
|
ldn: ['Láadan', 'Láadan'].freeze,
|
||||||
lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze,
|
lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze,
|
||||||
|
pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze,
|
||||||
sco: ['Scots', 'Scots'].freeze,
|
sco: ['Scots', 'Scots'].freeze,
|
||||||
sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze,
|
sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze,
|
||||||
smj: ['Lule Sami', 'Julevsámegiella'].freeze,
|
smj: ['Lule Sami', 'Julevsámegiella'].freeze,
|
||||||
szl: ['Silesian', 'ślůnsko godka'].freeze,
|
szl: ['Silesian', 'ślůnsko godka'].freeze,
|
||||||
tok: ['Toki Pona', 'toki pona'].freeze,
|
tok: ['Toki Pona', 'toki pona'].freeze,
|
||||||
|
vai: ['Vai', 'ꕙꔤ'].freeze,
|
||||||
xal: ['Kalmyk', 'Хальмг келн'].freeze,
|
xal: ['Kalmyk', 'Хальмг келн'].freeze,
|
||||||
zba: ['Balaibalan', 'باليبلن'].freeze,
|
zba: ['Balaibalan', 'باليبلن'].freeze,
|
||||||
zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze,
|
zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze,
|
||||||
|
|
21
app/javascript/images/mailer-new/heading/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020-2024 Paweł Kuna
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
1
app/javascript/images/mailer-new/heading/README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).
|
BIN
app/javascript/images/mailer-new/store-icons/btn-app-store.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
app/javascript/images/mailer-new/store-icons/btn-google-play.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
21
app/javascript/images/mailer-new/welcome-icons/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020-2024 Paweł Kuna
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
1
app/javascript/images/mailer-new/welcome-icons/README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).
|
Before Width: | Height: | Size: 547 B After Width: | Height: | Size: 547 B |
BIN
app/javascript/images/mailer-new/welcome-icons/apps_step-on.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 688 B After Width: | Height: | Size: 688 B |
BIN
app/javascript/images/mailer-new/welcome-icons/post_step-on.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 709 B After Width: | Height: | Size: 709 B |
BIN
app/javascript/images/mailer-new/welcome-icons/share_step-on.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_audience.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_control.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_creativity.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_moderation.png
Normal file
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 939 B |
After Width: | Height: | Size: 2.5 KiB |
|
@ -67,7 +67,7 @@ class EditedTimestamp extends PureComponent {
|
||||||
return (
|
return (
|
||||||
<DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>
|
<DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>
|
||||||
<button className='dropdown-menu__text-button'>
|
<button className='dropdown-menu__text-button'>
|
||||||
<FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(timestamp, { hour12: false, month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> <Icon id='caret-down' icon={ArrowDropDownIcon} />
|
<FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(timestamp, { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> <Icon id='caret-down' icon={ArrowDropDownIcon} />
|
||||||
</button>
|
</button>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
);
|
);
|
||||||
|
|
|
@ -53,7 +53,6 @@ const messages = defineMessages({
|
||||||
});
|
});
|
||||||
|
|
||||||
const dateFormatOptions = {
|
const dateFormatOptions = {
|
||||||
hour12: false,
|
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
month: 'short',
|
month: 'short',
|
||||||
day: '2-digit',
|
day: '2-digit',
|
||||||
|
|
|
@ -632,7 +632,7 @@ class Status extends ImmutablePureComponent {
|
||||||
{withExpiration}
|
{withExpiration}
|
||||||
{withLimited}
|
{withLimited}
|
||||||
<span className='status__visibility-icon'><VisibilityIcon visibility={visibilityName} /></span>
|
<span className='status__visibility-icon'><VisibilityIcon visibility={visibilityName} /></span>
|
||||||
<RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { hour12: false, year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
|
<RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
|
<a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
|
||||||
|
|
|
@ -104,7 +104,6 @@ const dateFormatOptions = {
|
||||||
month: 'short',
|
month: 'short',
|
||||||
day: 'numeric',
|
day: 'numeric',
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
hour12: false,
|
|
||||||
hour: '2-digit',
|
hour: '2-digit',
|
||||||
minute: '2-digit',
|
minute: '2-digit',
|
||||||
};
|
};
|
||||||
|
|
|
@ -343,7 +343,7 @@ class Announcement extends ImmutablePureComponent {
|
||||||
<div className='announcements__item'>
|
<div className='announcements__item'>
|
||||||
<strong className='announcements__item__range'>
|
<strong className='announcements__item__range'>
|
||||||
<FormattedMessage id='announcement.announcement' defaultMessage='Announcement' />
|
<FormattedMessage id='announcement.announcement' defaultMessage='Announcement' />
|
||||||
{hasTimeRange && <span> · <FormattedDate value={startsAt} hour12={false} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} hour12={false} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}
|
{hasTimeRange && <span> · <FormattedDate value={startsAt} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}
|
||||||
</strong>
|
</strong>
|
||||||
|
|
||||||
<Content announcement={announcement} />
|
<Content announcement={announcement} />
|
||||||
|
|
|
@ -92,6 +92,10 @@ export default class Card extends PureComponent {
|
||||||
this.setState({ embedded: true });
|
this.setState({ embedded: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleExternalLinkClick = (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
};
|
||||||
|
|
||||||
setRef = c => {
|
setRef = c => {
|
||||||
this.node = c;
|
this.node = c;
|
||||||
};
|
};
|
||||||
|
@ -201,7 +205,7 @@ export default class Card extends PureComponent {
|
||||||
<div className='status-card__actions' onClick={this.handleEmbedClick} role='none'>
|
<div className='status-card__actions' onClick={this.handleEmbedClick} role='none'>
|
||||||
<div>
|
<div>
|
||||||
<button type='button' onClick={this.handleEmbedClick}><Icon id='play' icon={PlayArrowIcon} /></button>
|
<button type='button' onClick={this.handleEmbedClick}><Icon id='play' icon={PlayArrowIcon} /></button>
|
||||||
<a href={card.get('url')} target='_blank' rel='noopener noreferrer'><Icon id='external-link' icon={OpenInNewIcon} /></a>
|
<a href={card.get('url')} onClick={this.handleExternalLinkClick} target='_blank' rel='noopener noreferrer'><Icon id='external-link' icon={OpenInNewIcon} /></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : spoilerButton}
|
) : spoilerButton}
|
||||||
|
|
|
@ -374,8 +374,8 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
|
|
||||||
<div className='detailed-status__meta'>
|
<div className='detailed-status__meta'>
|
||||||
<a className='detailed-status__datetime' href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} target='_blank' rel='noopener noreferrer'>
|
<a className='detailed-status__datetime' href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} target='_blank' rel='noopener noreferrer'>
|
||||||
<FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
|
<FormattedDate value={new Date(status.get('created_at'))} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
|
||||||
</a>{edited}{visibilityLink}{searchabilityLink}{applicationLink}{reblogLink} · {favouriteLink} · {emojiReactionsLink} - {statusReferencesLink}
|
</a>{edited}{visibilityLink}{searchabilityLink}{applicationLink}{reblogLink} · {favouriteLink} · {emojiReactionsLink} · {statusReferencesLink}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "Prižiūrimi serveriai",
|
"about.blocks": "Prižiūrimi serveriai",
|
||||||
"about.contact": "Kontaktuoti:",
|
"about.contact": "Kontaktai:",
|
||||||
"about.disclaimer": "Mastodon – nemokama atvirojo kodo programa ir Mastodon gGmbH prekės ženklas.",
|
"about.disclaimer": "Mastodon – nemokama atvirojo kodo programa ir Mastodon gGmbH prekės ženklas.",
|
||||||
"about.domain_blocks.no_reason_available": "Priežastis nepateikta",
|
"about.domain_blocks.no_reason_available": "Priežastis nepateikta",
|
||||||
"about.domain_blocks.preamble": "Mastodon paprastai leidžia peržiūrėti turinį ir bendrauti su naudotojais iš bet kurio kito fediverse esančio serverio. Šios yra išimtys, kurios buvo padarytos šiame konkrečiame serveryje.",
|
"about.domain_blocks.preamble": "Mastodon paprastai leidžia peržiūrėti turinį ir bendrauti su naudotojais iš bet kurio kito fediverse esančio serverio. Šios yra išimtys, kurios buvo padarytos šiame konkrečiame serveryje.",
|
||||||
|
@ -424,7 +424,7 @@
|
||||||
"notifications.column_settings.mention": "Paminėjimai:",
|
"notifications.column_settings.mention": "Paminėjimai:",
|
||||||
"notifications.column_settings.poll": "Balsavimo rezultatai:",
|
"notifications.column_settings.poll": "Balsavimo rezultatai:",
|
||||||
"notifications.column_settings.push": "\"Push\" pranešimai",
|
"notifications.column_settings.push": "\"Push\" pranešimai",
|
||||||
"notifications.column_settings.reblog": "\"Boost\" kiekis:",
|
"notifications.column_settings.reblog": "Pakėlimai:",
|
||||||
"notifications.column_settings.show": "Rodyti stulpelyje",
|
"notifications.column_settings.show": "Rodyti stulpelyje",
|
||||||
"notifications.column_settings.sound": "Paleisti garsą",
|
"notifications.column_settings.sound": "Paleisti garsą",
|
||||||
"notifications.column_settings.status": "New toots:",
|
"notifications.column_settings.status": "New toots:",
|
||||||
|
@ -636,6 +636,7 @@
|
||||||
"status.translate": "Versti",
|
"status.translate": "Versti",
|
||||||
"status.translated_from_with": "Išversta iš {lang} naudojant {provider}",
|
"status.translated_from_with": "Išversta iš {lang} naudojant {provider}",
|
||||||
"status.uncached_media_warning": "Peržiūra nepasiekiama",
|
"status.uncached_media_warning": "Peržiūra nepasiekiama",
|
||||||
|
"subscribed_languages.lead": "Po pakeitimo tavo pagrindinėje ir sąrašo laiko juostose bus rodomi tik įrašai pasirinktomis kalbomis. Jei nori gauti įrašus visomis kalbomis, pasirink nė vieno.",
|
||||||
"tabs_bar.home": "Pradžia",
|
"tabs_bar.home": "Pradžia",
|
||||||
"tabs_bar.notifications": "Pranešimai",
|
"tabs_bar.notifications": "Pranešimai",
|
||||||
"time_remaining.days": "Liko {number, plural, one {# diena} few {# dienos} many {# dieno} other {# dienų}}",
|
"time_remaining.days": "Liko {number, plural, one {# diena} few {# dienos} many {# dieno} other {# dienų}}",
|
||||||
|
|
|
@ -529,8 +529,8 @@
|
||||||
"poll_button.add_poll": "Peiling toevoegen",
|
"poll_button.add_poll": "Peiling toevoegen",
|
||||||
"poll_button.remove_poll": "Peiling verwijderen",
|
"poll_button.remove_poll": "Peiling verwijderen",
|
||||||
"privacy.change": "Zichtbaarheid van bericht aanpassen",
|
"privacy.change": "Zichtbaarheid van bericht aanpassen",
|
||||||
"privacy.direct.long": "Iedereen die in het bericht wordt vermeld",
|
"privacy.direct.long": "Alleen voor mensen die specifiek in het bericht worden vermeld",
|
||||||
"privacy.direct.short": "Bepaalde mensen",
|
"privacy.direct.short": "Specifieke mensen",
|
||||||
"privacy.private.long": "Alleen jouw volgers",
|
"privacy.private.long": "Alleen jouw volgers",
|
||||||
"privacy.private.short": "Volgers",
|
"privacy.private.short": "Volgers",
|
||||||
"privacy.public.long": "Iedereen op Mastodon en daarbuiten",
|
"privacy.public.long": "Iedereen op Mastodon en daarbuiten",
|
||||||
|
|
|
@ -668,7 +668,7 @@
|
||||||
"status.mute": "靜音 @{name}",
|
"status.mute": "靜音 @{name}",
|
||||||
"status.mute_conversation": "靜音對話",
|
"status.mute_conversation": "靜音對話",
|
||||||
"status.open": "展開此嘟文",
|
"status.open": "展開此嘟文",
|
||||||
"status.pin": "釘選到個人檔案頁面",
|
"status.pin": "釘選至個人檔案頁面",
|
||||||
"status.pinned": "釘選嘟文",
|
"status.pinned": "釘選嘟文",
|
||||||
"status.read_more": "閱讀更多",
|
"status.read_more": "閱讀更多",
|
||||||
"status.reblog": "轉嘟",
|
"status.reblog": "轉嘟",
|
||||||
|
|
|
@ -1,254 +0,0 @@
|
||||||
import './public-path';
|
|
||||||
import React from 'react';
|
|
||||||
import { createRoot } from 'react-dom/client';
|
|
||||||
|
|
||||||
import Rails from '@rails/ujs';
|
|
||||||
|
|
||||||
import ready from '../mastodon/ready';
|
|
||||||
|
|
||||||
const setAnnouncementEndsAttributes = (target) => {
|
|
||||||
const valid = target?.value && target?.validity?.valid;
|
|
||||||
const element = document.querySelector('input[type="datetime-local"]#announcement_ends_at');
|
|
||||||
if (valid) {
|
|
||||||
element.classList.remove('optional');
|
|
||||||
element.required = true;
|
|
||||||
element.min = target.value;
|
|
||||||
} else {
|
|
||||||
element.classList.add('optional');
|
|
||||||
element.removeAttribute('required');
|
|
||||||
element.removeAttribute('min');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Rails.delegate(document, 'input[type="datetime-local"]#announcement_starts_at', 'change', ({ target }) => {
|
|
||||||
setAnnouncementEndsAttributes(target);
|
|
||||||
});
|
|
||||||
|
|
||||||
const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]';
|
|
||||||
|
|
||||||
const showSelectAll = () => {
|
|
||||||
const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
|
|
||||||
selectAllMatchingElement.classList.add('active');
|
|
||||||
};
|
|
||||||
|
|
||||||
const hideSelectAll = () => {
|
|
||||||
const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
|
|
||||||
const hiddenField = document.querySelector('#select_all_matching');
|
|
||||||
const selectedMsg = document.querySelector('.batch-table__select-all .selected');
|
|
||||||
const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected');
|
|
||||||
|
|
||||||
selectAllMatchingElement.classList.remove('active');
|
|
||||||
selectedMsg.classList.remove('active');
|
|
||||||
notSelectedMsg.classList.add('active');
|
|
||||||
hiddenField.value = '0';
|
|
||||||
};
|
|
||||||
|
|
||||||
Rails.delegate(document, '#batch_checkbox_all', 'change', ({ target }) => {
|
|
||||||
const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
|
|
||||||
|
|
||||||
document.querySelectorAll(batchCheckboxClassName).forEach((content) => {
|
|
||||||
content.checked = target.checked;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (selectAllMatchingElement) {
|
|
||||||
if (target.checked) {
|
|
||||||
showSelectAll();
|
|
||||||
} else {
|
|
||||||
hideSelectAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Rails.delegate(document, '.batch-table__select-all button', 'click', () => {
|
|
||||||
const hiddenField = document.querySelector('#select_all_matching');
|
|
||||||
const active = hiddenField.value === '1';
|
|
||||||
const selectedMsg = document.querySelector('.batch-table__select-all .selected');
|
|
||||||
const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected');
|
|
||||||
|
|
||||||
if (active) {
|
|
||||||
hiddenField.value = '0';
|
|
||||||
selectedMsg.classList.remove('active');
|
|
||||||
notSelectedMsg.classList.add('active');
|
|
||||||
} else {
|
|
||||||
hiddenField.value = '1';
|
|
||||||
notSelectedMsg.classList.remove('active');
|
|
||||||
selectedMsg.classList.add('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Rails.delegate(document, batchCheckboxClassName, 'change', () => {
|
|
||||||
const checkAllElement = document.querySelector('#batch_checkbox_all');
|
|
||||||
const selectAllMatchingElement = document.querySelector('.batch-table__select-all');
|
|
||||||
|
|
||||||
if (checkAllElement) {
|
|
||||||
const allCheckboxes = Array.from(
|
|
||||||
document.querySelectorAll(batchCheckboxClassName)
|
|
||||||
);
|
|
||||||
checkAllElement.checked = allCheckboxes.every((content) => content.checked);
|
|
||||||
checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked);
|
|
||||||
|
|
||||||
if (selectAllMatchingElement) {
|
|
||||||
if (checkAllElement.checked) {
|
|
||||||
showSelectAll();
|
|
||||||
} else {
|
|
||||||
hideSelectAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Rails.delegate(document, '.filter-subset--with-select select', 'change', ({ target }) => {
|
|
||||||
target.form.submit();
|
|
||||||
});
|
|
||||||
|
|
||||||
const onDomainBlockSeverityChange = (target) => {
|
|
||||||
const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media');
|
|
||||||
const rejectFavouriteDiv= document.querySelector('.input.with_label.domain_block_reject_favourite');
|
|
||||||
const rejectReplyDiv = document.querySelector('.input.with_label.domain_block_reject_reply');
|
|
||||||
const rejectReportsDiv = document.querySelector('.input.with_label.domain_block_reject_reports');
|
|
||||||
|
|
||||||
if (rejectMediaDiv) {
|
|
||||||
rejectMediaDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rejectFavouriteDiv) {
|
|
||||||
rejectFavouriteDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rejectReplyDiv) {
|
|
||||||
rejectReplyDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rejectReportsDiv) {
|
|
||||||
rejectReportsDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Rails.delegate(document, '#domain_block_severity', 'change', ({ target }) => onDomainBlockSeverityChange(target));
|
|
||||||
|
|
||||||
const onEnableBootstrapTimelineAccountsChange = (target) => {
|
|
||||||
const bootstrapTimelineAccountsField = document.querySelector('#form_admin_settings_bootstrap_timeline_accounts');
|
|
||||||
|
|
||||||
if (bootstrapTimelineAccountsField) {
|
|
||||||
bootstrapTimelineAccountsField.disabled = !target.checked;
|
|
||||||
if (target.checked) {
|
|
||||||
bootstrapTimelineAccountsField.parentElement.classList.remove('disabled');
|
|
||||||
bootstrapTimelineAccountsField.parentElement.parentElement.classList.remove('disabled');
|
|
||||||
} else {
|
|
||||||
bootstrapTimelineAccountsField.parentElement.classList.add('disabled');
|
|
||||||
bootstrapTimelineAccountsField.parentElement.parentElement.classList.add('disabled');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Rails.delegate(document, '#form_admin_settings_enable_bootstrap_timeline_accounts', 'change', ({ target }) => onEnableBootstrapTimelineAccountsChange(target));
|
|
||||||
|
|
||||||
const onChangeRegistrationMode = (target) => {
|
|
||||||
const enabled = target.value === 'approved';
|
|
||||||
|
|
||||||
document.querySelectorAll('.form_admin_settings_registrations_mode .warning-hint').forEach((warning_hint) => {
|
|
||||||
warning_hint.style.display = target.value === 'open' ? 'inline' : 'none';
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelectorAll('#form_admin_settings_require_invite_text').forEach((input) => {
|
|
||||||
input.disabled = !enabled;
|
|
||||||
if (enabled) {
|
|
||||||
let element = input;
|
|
||||||
do {
|
|
||||||
element.classList.remove('disabled');
|
|
||||||
element = element.parentElement;
|
|
||||||
} while (element && !element.classList.contains('fields-group'));
|
|
||||||
} else {
|
|
||||||
let element = input;
|
|
||||||
do {
|
|
||||||
element.classList.add('disabled');
|
|
||||||
element = element.parentElement;
|
|
||||||
} while (element && !element.classList.contains('fields-group'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const convertUTCDateTimeToLocal = (value) => {
|
|
||||||
const date = new Date(value + 'Z');
|
|
||||||
const twoChars = (x) => (x.toString().padStart(2, '0'));
|
|
||||||
return `${date.getFullYear()}-${twoChars(date.getMonth()+1)}-${twoChars(date.getDate())}T${twoChars(date.getHours())}:${twoChars(date.getMinutes())}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const convertLocalDatetimeToUTC = (value) => {
|
|
||||||
const re = /^([0-9]{4,})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})/;
|
|
||||||
const match = re.exec(value);
|
|
||||||
const date = new Date(match[1], match[2] - 1, match[3], match[4], match[5]);
|
|
||||||
const fullISO8601 = date.toISOString();
|
|
||||||
return fullISO8601.slice(0, fullISO8601.indexOf('T') + 6);
|
|
||||||
};
|
|
||||||
|
|
||||||
Rails.delegate(document, '#form_admin_settings_registrations_mode', 'change', ({ target }) => onChangeRegistrationMode(target));
|
|
||||||
|
|
||||||
ready(() => {
|
|
||||||
const domainBlockSeverityInput = document.getElementById('domain_block_severity');
|
|
||||||
if (domainBlockSeverityInput) onDomainBlockSeverityChange(domainBlockSeverityInput);
|
|
||||||
|
|
||||||
const enableBootstrapTimelineAccounts = document.getElementById('form_admin_settings_enable_bootstrap_timeline_accounts');
|
|
||||||
if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts);
|
|
||||||
|
|
||||||
const registrationMode = document.getElementById('form_admin_settings_registrations_mode');
|
|
||||||
if (registrationMode) onChangeRegistrationMode(registrationMode);
|
|
||||||
|
|
||||||
const checkAllElement = document.querySelector('#batch_checkbox_all');
|
|
||||||
if (checkAllElement) {
|
|
||||||
const allCheckboxes = Array.from(document.querySelectorAll(batchCheckboxClassName));
|
|
||||||
checkAllElement.checked = allCheckboxes.every( (content) => content.checked);
|
|
||||||
checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelector('a#add-instance-button')?.addEventListener('click', (e) => {
|
|
||||||
const domain = document.querySelector('input[type="text"]#by_domain')?.value;
|
|
||||||
|
|
||||||
if (domain) {
|
|
||||||
const url = new URL(event.target.href);
|
|
||||||
url.searchParams.set('_domain', domain);
|
|
||||||
e.target.href = url;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelectorAll('input[type="datetime-local"]').forEach(element => {
|
|
||||||
if (element.value) {
|
|
||||||
element.value = convertUTCDateTimeToLocal(element.value);
|
|
||||||
}
|
|
||||||
if (element.placeholder) {
|
|
||||||
element.placeholder = convertUTCDateTimeToLocal(element.placeholder);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Rails.delegate(document, 'form', 'submit', ({ target }) => {
|
|
||||||
target.querySelectorAll('input[type="datetime-local"]').forEach(element => {
|
|
||||||
if (element.value && element.validity.valid) {
|
|
||||||
element.value = convertLocalDatetimeToUTC(element.value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const announcementStartsAt = document.querySelector('input[type="datetime-local"]#announcement_starts_at');
|
|
||||||
if (announcementStartsAt) {
|
|
||||||
setAnnouncementEndsAttributes(announcementStartsAt);
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelectorAll('[data-admin-component]').forEach(element => {
|
|
||||||
const componentName = element.getAttribute('data-admin-component');
|
|
||||||
const componentProps = JSON.parse(element.getAttribute('data-props'));
|
|
||||||
|
|
||||||
import('../mastodon/containers/admin_component').then(({ default: AdminComponent }) => {
|
|
||||||
return import('../mastodon/components/admin/' + componentName).then(({ default: Component }) => {
|
|
||||||
const root = createRoot(element);
|
|
||||||
|
|
||||||
root.render (
|
|
||||||
<AdminComponent>
|
|
||||||
<Component {...componentProps} />
|
|
||||||
</AdminComponent>,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}).catch(error => {
|
|
||||||
console.error(error);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
368
app/javascript/packs/admin.tsx
Normal file
|
@ -0,0 +1,368 @@
|
||||||
|
import './public-path';
|
||||||
|
import { createRoot } from 'react-dom/client';
|
||||||
|
|
||||||
|
import Rails from '@rails/ujs';
|
||||||
|
|
||||||
|
import ready from '../mastodon/ready';
|
||||||
|
|
||||||
|
const setAnnouncementEndsAttributes = (target: HTMLInputElement) => {
|
||||||
|
const valid = target.value && target.validity.valid;
|
||||||
|
const element = document.querySelector<HTMLInputElement>(
|
||||||
|
'input[type="datetime-local"]#announcement_ends_at',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!element) return;
|
||||||
|
|
||||||
|
if (valid) {
|
||||||
|
element.classList.remove('optional');
|
||||||
|
element.required = true;
|
||||||
|
element.min = target.value;
|
||||||
|
} else {
|
||||||
|
element.classList.add('optional');
|
||||||
|
element.removeAttribute('required');
|
||||||
|
element.removeAttribute('min');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Rails.delegate(
|
||||||
|
document,
|
||||||
|
'input[type="datetime-local"]#announcement_starts_at',
|
||||||
|
'change',
|
||||||
|
({ target }) => {
|
||||||
|
if (target instanceof HTMLInputElement)
|
||||||
|
setAnnouncementEndsAttributes(target);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]';
|
||||||
|
|
||||||
|
const showSelectAll = () => {
|
||||||
|
const selectAllMatchingElement = document.querySelector(
|
||||||
|
'.batch-table__select-all',
|
||||||
|
);
|
||||||
|
selectAllMatchingElement?.classList.add('active');
|
||||||
|
};
|
||||||
|
|
||||||
|
const hideSelectAll = () => {
|
||||||
|
const selectAllMatchingElement = document.querySelector(
|
||||||
|
'.batch-table__select-all',
|
||||||
|
);
|
||||||
|
const hiddenField = document.querySelector<HTMLInputElement>(
|
||||||
|
'input#select_all_matching',
|
||||||
|
);
|
||||||
|
const selectedMsg = document.querySelector(
|
||||||
|
'.batch-table__select-all .selected',
|
||||||
|
);
|
||||||
|
const notSelectedMsg = document.querySelector(
|
||||||
|
'.batch-table__select-all .not-selected',
|
||||||
|
);
|
||||||
|
|
||||||
|
selectAllMatchingElement?.classList.remove('active');
|
||||||
|
selectedMsg?.classList.remove('active');
|
||||||
|
notSelectedMsg?.classList.add('active');
|
||||||
|
if (hiddenField) hiddenField.value = '0';
|
||||||
|
};
|
||||||
|
|
||||||
|
Rails.delegate(document, '#batch_checkbox_all', 'change', ({ target }) => {
|
||||||
|
if (!(target instanceof HTMLInputElement)) return;
|
||||||
|
|
||||||
|
const selectAllMatchingElement = document.querySelector(
|
||||||
|
'.batch-table__select-all',
|
||||||
|
);
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelectorAll<HTMLInputElement>(batchCheckboxClassName)
|
||||||
|
.forEach((content) => {
|
||||||
|
content.checked = target.checked;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (selectAllMatchingElement) {
|
||||||
|
if (target.checked) {
|
||||||
|
showSelectAll();
|
||||||
|
} else {
|
||||||
|
hideSelectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Rails.delegate(document, '.batch-table__select-all button', 'click', () => {
|
||||||
|
const hiddenField = document.querySelector<HTMLInputElement>(
|
||||||
|
'#select_all_matching',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!hiddenField) return;
|
||||||
|
|
||||||
|
const active = hiddenField.value === '1';
|
||||||
|
const selectedMsg = document.querySelector(
|
||||||
|
'.batch-table__select-all .selected',
|
||||||
|
);
|
||||||
|
const notSelectedMsg = document.querySelector(
|
||||||
|
'.batch-table__select-all .not-selected',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!selectedMsg || !notSelectedMsg) return;
|
||||||
|
|
||||||
|
if (active) {
|
||||||
|
hiddenField.value = '0';
|
||||||
|
selectedMsg.classList.remove('active');
|
||||||
|
notSelectedMsg.classList.add('active');
|
||||||
|
} else {
|
||||||
|
hiddenField.value = '1';
|
||||||
|
notSelectedMsg.classList.remove('active');
|
||||||
|
selectedMsg.classList.add('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Rails.delegate(document, batchCheckboxClassName, 'change', () => {
|
||||||
|
const checkAllElement = document.querySelector<HTMLInputElement>(
|
||||||
|
'input#batch_checkbox_all',
|
||||||
|
);
|
||||||
|
const selectAllMatchingElement = document.querySelector(
|
||||||
|
'.batch-table__select-all',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (checkAllElement) {
|
||||||
|
const allCheckboxes = Array.from(
|
||||||
|
document.querySelectorAll<HTMLInputElement>(batchCheckboxClassName),
|
||||||
|
);
|
||||||
|
checkAllElement.checked = allCheckboxes.every((content) => content.checked);
|
||||||
|
checkAllElement.indeterminate =
|
||||||
|
!checkAllElement.checked &&
|
||||||
|
allCheckboxes.some((content) => content.checked);
|
||||||
|
|
||||||
|
if (selectAllMatchingElement) {
|
||||||
|
if (checkAllElement.checked) {
|
||||||
|
showSelectAll();
|
||||||
|
} else {
|
||||||
|
hideSelectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Rails.delegate(
|
||||||
|
document,
|
||||||
|
'.filter-subset--with-select select',
|
||||||
|
'change',
|
||||||
|
({ target }) => {
|
||||||
|
if (target instanceof HTMLSelectElement) target.form?.submit();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const onDomainBlockSeverityChange = (target: HTMLSelectElement) => {
|
||||||
|
const rejectMediaDiv = document.querySelector(
|
||||||
|
'.input.with_label.domain_block_reject_media',
|
||||||
|
);
|
||||||
|
const rejectReportsDiv = document.querySelector(
|
||||||
|
'.input.with_label.domain_block_reject_reports',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (rejectMediaDiv && rejectMediaDiv instanceof HTMLElement) {
|
||||||
|
rejectMediaDiv.style.display =
|
||||||
|
target.value === 'suspend' ? 'none' : 'block';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rejectReportsDiv && rejectReportsDiv instanceof HTMLElement) {
|
||||||
|
rejectReportsDiv.style.display =
|
||||||
|
target.value === 'suspend' ? 'none' : 'block';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Rails.delegate(document, '#domain_block_severity', 'change', ({ target }) => {
|
||||||
|
if (target instanceof HTMLSelectElement) onDomainBlockSeverityChange(target);
|
||||||
|
});
|
||||||
|
|
||||||
|
const onEnableBootstrapTimelineAccountsChange = (target: HTMLInputElement) => {
|
||||||
|
const bootstrapTimelineAccountsField =
|
||||||
|
document.querySelector<HTMLInputElement>(
|
||||||
|
'#form_admin_settings_bootstrap_timeline_accounts',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (bootstrapTimelineAccountsField) {
|
||||||
|
bootstrapTimelineAccountsField.disabled = !target.checked;
|
||||||
|
if (target.checked) {
|
||||||
|
bootstrapTimelineAccountsField.parentElement?.classList.remove(
|
||||||
|
'disabled',
|
||||||
|
);
|
||||||
|
bootstrapTimelineAccountsField.parentElement?.parentElement?.classList.remove(
|
||||||
|
'disabled',
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
bootstrapTimelineAccountsField.parentElement?.classList.add('disabled');
|
||||||
|
bootstrapTimelineAccountsField.parentElement?.parentElement?.classList.add(
|
||||||
|
'disabled',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Rails.delegate(
|
||||||
|
document,
|
||||||
|
'#form_admin_settings_enable_bootstrap_timeline_accounts',
|
||||||
|
'change',
|
||||||
|
({ target }) => {
|
||||||
|
if (target instanceof HTMLInputElement)
|
||||||
|
onEnableBootstrapTimelineAccountsChange(target);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const onChangeRegistrationMode = (target: HTMLSelectElement) => {
|
||||||
|
const enabled = target.value === 'approved';
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelectorAll<HTMLElement>(
|
||||||
|
'.form_admin_settings_registrations_mode .warning-hint',
|
||||||
|
)
|
||||||
|
.forEach((warning_hint) => {
|
||||||
|
warning_hint.style.display = target.value === 'open' ? 'inline' : 'none';
|
||||||
|
});
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelectorAll<HTMLInputElement>(
|
||||||
|
'input#form_admin_settings_require_invite_text',
|
||||||
|
)
|
||||||
|
.forEach((input) => {
|
||||||
|
input.disabled = !enabled;
|
||||||
|
if (enabled) {
|
||||||
|
let element: HTMLElement | null = input;
|
||||||
|
do {
|
||||||
|
element.classList.remove('disabled');
|
||||||
|
element = element.parentElement;
|
||||||
|
} while (element && !element.classList.contains('fields-group'));
|
||||||
|
} else {
|
||||||
|
let element: HTMLElement | null = input;
|
||||||
|
do {
|
||||||
|
element.classList.add('disabled');
|
||||||
|
element = element.parentElement;
|
||||||
|
} while (element && !element.classList.contains('fields-group'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const convertUTCDateTimeToLocal = (value: string) => {
|
||||||
|
const date = new Date(value + 'Z');
|
||||||
|
const twoChars = (x: number) => x.toString().padStart(2, '0');
|
||||||
|
return `${date.getFullYear()}-${twoChars(date.getMonth() + 1)}-${twoChars(date.getDate())}T${twoChars(date.getHours())}:${twoChars(date.getMinutes())}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
function convertLocalDatetimeToUTC(value: string) {
|
||||||
|
const date = new Date(value);
|
||||||
|
const fullISO8601 = date.toISOString();
|
||||||
|
return fullISO8601.slice(0, fullISO8601.indexOf('T') + 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rails.delegate(
|
||||||
|
document,
|
||||||
|
'#form_admin_settings_registrations_mode',
|
||||||
|
'change',
|
||||||
|
({ target }) => {
|
||||||
|
if (target instanceof HTMLSelectElement) onChangeRegistrationMode(target);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
async function mountReactComponent(element: Element) {
|
||||||
|
const componentName = element.getAttribute('data-admin-component');
|
||||||
|
const stringProps = element.getAttribute('data-props');
|
||||||
|
|
||||||
|
if (!stringProps) return;
|
||||||
|
|
||||||
|
const componentProps = JSON.parse(stringProps) as object;
|
||||||
|
|
||||||
|
const { default: AdminComponent } = await import(
|
||||||
|
'@/mastodon/containers/admin_component'
|
||||||
|
);
|
||||||
|
|
||||||
|
const { default: Component } = (await import(
|
||||||
|
`@/mastodon/components/admin/${componentName}`
|
||||||
|
)) as { default: React.ComponentType };
|
||||||
|
|
||||||
|
const root = createRoot(element);
|
||||||
|
|
||||||
|
root.render(
|
||||||
|
<AdminComponent>
|
||||||
|
<Component {...componentProps} />
|
||||||
|
</AdminComponent>,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ready(() => {
|
||||||
|
const domainBlockSeveritySelect = document.querySelector<HTMLSelectElement>(
|
||||||
|
'select#domain_block_severity',
|
||||||
|
);
|
||||||
|
if (domainBlockSeveritySelect)
|
||||||
|
onDomainBlockSeverityChange(domainBlockSeveritySelect);
|
||||||
|
|
||||||
|
const enableBootstrapTimelineAccounts =
|
||||||
|
document.querySelector<HTMLInputElement>(
|
||||||
|
'input#form_admin_settings_enable_bootstrap_timeline_accounts',
|
||||||
|
);
|
||||||
|
if (enableBootstrapTimelineAccounts)
|
||||||
|
onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts);
|
||||||
|
|
||||||
|
const registrationMode = document.querySelector<HTMLSelectElement>(
|
||||||
|
'select#form_admin_settings_registrations_mode',
|
||||||
|
);
|
||||||
|
if (registrationMode) onChangeRegistrationMode(registrationMode);
|
||||||
|
|
||||||
|
const checkAllElement = document.querySelector<HTMLInputElement>(
|
||||||
|
'input#batch_checkbox_all',
|
||||||
|
);
|
||||||
|
if (checkAllElement) {
|
||||||
|
const allCheckboxes = Array.from(
|
||||||
|
document.querySelectorAll<HTMLInputElement>(batchCheckboxClassName),
|
||||||
|
);
|
||||||
|
checkAllElement.checked = allCheckboxes.every((content) => content.checked);
|
||||||
|
checkAllElement.indeterminate =
|
||||||
|
!checkAllElement.checked &&
|
||||||
|
allCheckboxes.some((content) => content.checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelector('a#add-instance-button')
|
||||||
|
?.addEventListener('click', (e) => {
|
||||||
|
const domain = document.querySelector<HTMLInputElement>(
|
||||||
|
'input[type="text"]#by_domain',
|
||||||
|
)?.value;
|
||||||
|
|
||||||
|
if (domain && e.target instanceof HTMLAnchorElement) {
|
||||||
|
const url = new URL(e.target.href);
|
||||||
|
url.searchParams.set('_domain', domain);
|
||||||
|
e.target.href = url.toString();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document
|
||||||
|
.querySelectorAll<HTMLInputElement>('input[type="datetime-local"]')
|
||||||
|
.forEach((element) => {
|
||||||
|
if (element.value) {
|
||||||
|
element.value = convertUTCDateTimeToLocal(element.value);
|
||||||
|
}
|
||||||
|
if (element.placeholder) {
|
||||||
|
element.placeholder = convertUTCDateTimeToLocal(element.placeholder);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Rails.delegate(document, 'form', 'submit', ({ target }) => {
|
||||||
|
if (target instanceof HTMLFormElement)
|
||||||
|
target
|
||||||
|
.querySelectorAll<HTMLInputElement>('input[type="datetime-local"]')
|
||||||
|
.forEach((element) => {
|
||||||
|
if (element.value && element.validity.valid) {
|
||||||
|
element.value = convertLocalDatetimeToUTC(element.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const announcementStartsAt = document.querySelector<HTMLInputElement>(
|
||||||
|
'input[type="datetime-local"]#announcement_starts_at',
|
||||||
|
);
|
||||||
|
if (announcementStartsAt) {
|
||||||
|
setAnnouncementEndsAttributes(announcementStartsAt);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('[data-admin-component]').forEach((element) => {
|
||||||
|
void mountReactComponent(element);
|
||||||
|
});
|
||||||
|
}).catch((reason) => {
|
||||||
|
throw reason;
|
||||||
|
});
|
|
@ -65,7 +65,6 @@ function loaded() {
|
||||||
|
|
||||||
const timeFormat = new Intl.DateTimeFormat(locale, {
|
const timeFormat = new Intl.DateTimeFormat(locale, {
|
||||||
timeStyle: 'short',
|
timeStyle: 'short',
|
||||||
hour12: false,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const formatMessage = ({ id, defaultMessage }, values) => {
|
const formatMessage = ({ id, defaultMessage }, values) => {
|
||||||
|
|
|
@ -192,6 +192,18 @@ table + p {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-dir-rtl {
|
||||||
|
direction: rtl;
|
||||||
|
|
||||||
|
[dir='rtl'] & {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-dir-ltr {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
.email-padding-24 {
|
.email-padding-24 {
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
}
|
}
|
||||||
|
@ -216,6 +228,30 @@ table + p {
|
||||||
border-bottom: 1px solid #dfdee3;
|
border-bottom: 1px solid #dfdee3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-desktop-flex {
|
||||||
|
font-size: 0;
|
||||||
|
max-width: 740px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
|
||||||
|
&.email-dir-rtl > .email-desktop-column {
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
[dir='rtl'] & {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-desktop-column {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: none;
|
||||||
|
text-align: start;
|
||||||
|
vertical-align: top;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
// Header
|
// Header
|
||||||
.email-header-td {
|
.email-header-td {
|
||||||
padding: 16px 32px;
|
padding: 16px 32px;
|
||||||
|
@ -312,6 +348,66 @@ table + p {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-header-card-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: separate;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 12px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 8%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-card {
|
||||||
|
position: relative;
|
||||||
|
max-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-card-banner-td {
|
||||||
|
border-radius: 12px 12px 0 0;
|
||||||
|
height: 80px;
|
||||||
|
background-color: #f3f2f5 !important;
|
||||||
|
background-position: center !important;
|
||||||
|
background-size: cover !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-card-body-td {
|
||||||
|
padding: 12px;
|
||||||
|
|
||||||
|
.email-btn-table {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 212px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-card-instance {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
word-break: break-all;
|
||||||
|
color: #17063b;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
|
||||||
|
&:only-of-type {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-card-description {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
color: #746a89;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 16px;
|
||||||
|
max-height: 32px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
// To make the design work with images off
|
// To make the design work with images off
|
||||||
// we create an empty div that overlaps with
|
// we create an empty div that overlaps with
|
||||||
// the rest of the content with a dark background.
|
// the rest of the content with a dark background.
|
||||||
|
@ -336,6 +432,16 @@ table + p {
|
||||||
mso-padding-alt: 32px;
|
mso-padding-alt: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-body-columns-td {
|
||||||
|
border-top: 1px solid #dfdee3;
|
||||||
|
padding: 32px 24px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-body-huge-padding-td {
|
||||||
|
padding: 110px 32px 32px;
|
||||||
|
mso-padding-alt: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
.email-body-padding-td {
|
.email-body-padding-td {
|
||||||
& > p {
|
& > p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -353,6 +459,30 @@ table + p {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Texts
|
||||||
|
.email-h2 {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
color: #17063b;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-h-sub {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
color: #746a89;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-p {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
color: #746a89;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
.email-footer-td {
|
.email-footer-td {
|
||||||
padding: 28px 32px 32px;
|
padding: 28px 32px 32px;
|
||||||
|
@ -539,8 +669,13 @@ table + p {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-checklist-checked {
|
||||||
|
border-color: #c4e6d7;
|
||||||
|
background-color: #eaf6f1;
|
||||||
|
}
|
||||||
|
|
||||||
.email-checklist-td {
|
.email-checklist-td {
|
||||||
padding: 16px;
|
padding: 16px 16px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-checklist-icons-td {
|
.email-checklist-icons-td {
|
||||||
|
@ -576,10 +711,15 @@ table + p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
line-height: 16.8px;
|
line-height: 16.8px;
|
||||||
|
|
||||||
|
.email-checklist-checked & {
|
||||||
|
color: #746a89;
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin: 0 0 2px;
|
margin: 0 0 12px;
|
||||||
color: #746a89;
|
color: #746a89;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 16.8px;
|
line-height: 16.8px;
|
||||||
|
@ -597,6 +737,194 @@ table + p {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div + div {
|
||||||
|
margin-inline-start: auto;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Welcome email
|
||||||
|
.email-welcome-apps-btns {
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-column-td {
|
||||||
|
padding: 0 8px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-link-with-arrow {
|
||||||
|
color: #6364ff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 16.8px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #563acc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-column-action-td {
|
||||||
|
padding: 24px 0;
|
||||||
|
color: #6364ff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 16.8px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Follow and hashtags
|
||||||
|
.email-mini-wrapper-td {
|
||||||
|
padding: 4px 0;
|
||||||
|
|
||||||
|
table {
|
||||||
|
table-layout: fixed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-td {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid #e8e6eb;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 15px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-follow-img-td {
|
||||||
|
width: 40px;
|
||||||
|
vertical-align: top;
|
||||||
|
|
||||||
|
img {
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-follow-text-td {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 16px;
|
||||||
|
vertical-align: top;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #17063b;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: #746a89;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-follow-btn-td {
|
||||||
|
width: 68px;
|
||||||
|
vertical-align: top;
|
||||||
|
|
||||||
|
.email-btn-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-btn-td {
|
||||||
|
mso-padding-alt: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-btn-a {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-hashtag-td {
|
||||||
|
height: 40px;
|
||||||
|
|
||||||
|
td {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #17063b;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: #746a89;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 16px;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-hashtag-img-td {
|
||||||
|
width: 40px;
|
||||||
|
height: 20px;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-indent: -2px;
|
||||||
|
font-size: 0;
|
||||||
|
|
||||||
|
& + td {
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-mini-hashtag-img-span {
|
||||||
|
display: inline-block;
|
||||||
|
max-width: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border-radius: 50%;
|
||||||
|
max-width: none;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extra content on light purple background
|
||||||
|
.email-extra-wave {
|
||||||
|
height: 42px;
|
||||||
|
background-image: url('../images/mailer-new/welcome/purple-extra-soft-wave.png');
|
||||||
|
background-position: bottom center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-extra-td {
|
||||||
|
padding: 32px 32px 24px;
|
||||||
|
background-color: #f0f0ff;
|
||||||
|
background-image: url('../images/mailer-new/welcome/purple-extra-soft-spacer.png'); // Using an image to maintain the color even in forced dark modes
|
||||||
|
|
||||||
|
.email-column-td {
|
||||||
|
padding-top: 8px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Feature card
|
||||||
|
.email-feature-wrapper-td {
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-feature-td {
|
||||||
|
padding: 24px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #e8e6eb;
|
||||||
|
border-radius: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Responsive
|
// Responsive
|
||||||
|
@ -617,4 +945,21 @@ table + p {
|
||||||
.email-desktop-flex {
|
.email-desktop-flex {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.email-header-left {
|
||||||
|
padding-right: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header-right {
|
||||||
|
width: 240px;
|
||||||
|
margin-inline-start: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-desktop-column {
|
||||||
|
max-width: 346px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-desktop-text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5485,10 +5485,6 @@ a.status-card {
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: $no-gap-breakpoint) {
|
|
||||||
inset-inline-start: 16px - 2px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-search {
|
.icon-search {
|
||||||
|
@ -8697,7 +8693,7 @@ noscript {
|
||||||
.search__input {
|
.search__input {
|
||||||
border: 1px solid lighten($ui-base-color, 8%);
|
border: 1px solid lighten($ui-base-color, 8%);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
padding-inline-end: 28px;
|
padding-inline-end: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search__popout {
|
.search__popout {
|
||||||
|
|
|
@ -28,7 +28,8 @@ class Admin::Metrics::Measure::TagServersMeasure < Admin::Metrics::Measure::Base
|
||||||
def sql_query_string
|
def sql_query_string
|
||||||
<<~SQL.squish
|
<<~SQL.squish
|
||||||
SELECT axis.*, (
|
SELECT axis.*, (
|
||||||
SELECT count(distinct accounts.domain) AS value
|
WITH tag_servers AS (
|
||||||
|
SELECT DISTINCT accounts.domain
|
||||||
FROM statuses
|
FROM statuses
|
||||||
INNER JOIN statuses_tags ON statuses.id = statuses_tags.status_id
|
INNER JOIN statuses_tags ON statuses.id = statuses_tags.status_id
|
||||||
INNER JOIN accounts ON statuses.account_id = accounts.id
|
INNER JOIN accounts ON statuses.account_id = accounts.id
|
||||||
|
@ -36,6 +37,8 @@ class Admin::Metrics::Measure::TagServersMeasure < Admin::Metrics::Measure::Base
|
||||||
AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id
|
AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id
|
||||||
AND date_trunc('day', statuses.created_at)::date = axis.period
|
AND date_trunc('day', statuses.created_at)::date = axis.period
|
||||||
)
|
)
|
||||||
|
SELECT COUNT(*) FROM tag_servers
|
||||||
|
) AS value
|
||||||
FROM (
|
FROM (
|
||||||
SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period
|
SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period
|
||||||
) as axis
|
) as axis
|
||||||
|
|
|
@ -135,6 +135,12 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
|
@suggestions = AccountSuggestions.new(@resource.account).get(5)
|
||||||
|
@tags = Trends.tags.query.allowed.limit(5)
|
||||||
|
@has_account_fields = @resource.account.display_name.present? || @resource.account.note.present? || @resource.account.avatar.present?
|
||||||
|
@has_active_relationships = @resource.account.active_relationships.exists?
|
||||||
|
@has_statuses = @resource.account.statuses.exists?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale) do
|
||||||
mail subject: default_i18n_subject
|
mail subject: default_i18n_subject
|
||||||
end
|
end
|
||||||
|
|
|
@ -493,7 +493,7 @@ class User < ApplicationRecord
|
||||||
BootstrapTimelineWorker.perform_async(account_id)
|
BootstrapTimelineWorker.perform_async(account_id)
|
||||||
ActivityTracker.increment('activity:accounts:local')
|
ActivityTracker.increment('activity:accounts:local')
|
||||||
ActivityTracker.record('activity:logins', id)
|
ActivityTracker.record('activity:logins', id)
|
||||||
UserMailer.welcome(self).deliver_later
|
UserMailer.welcome(self).deliver_later(wait: 1.hour)
|
||||||
TriggerWebhookWorker.perform_async('account.approved', 'Account', account_id)
|
TriggerWebhookWorker.perform_async('account.approved', 'Account', account_id)
|
||||||
reset_registration_limit_caches!
|
reset_registration_limit_caches!
|
||||||
end
|
end
|
||||||
|
|
|
@ -41,6 +41,7 @@ class UserRole < ApplicationRecord
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
EVERYONE_ROLE_ID = -99
|
EVERYONE_ROLE_ID = -99
|
||||||
|
NOBODY_POSITION = -1
|
||||||
|
|
||||||
module Flags
|
module Flags
|
||||||
NONE = 0
|
NONE = 0
|
||||||
|
@ -108,7 +109,7 @@ class UserRole < ApplicationRecord
|
||||||
has_many :users, inverse_of: :role, foreign_key: 'role_id', dependent: :nullify
|
has_many :users, inverse_of: :role, foreign_key: 'role_id', dependent: :nullify
|
||||||
|
|
||||||
def self.nobody
|
def self.nobody
|
||||||
@nobody ||= UserRole.new(permissions: Flags::NONE, position: -1)
|
@nobody ||= UserRole.new(permissions: Flags::NONE, position: NOBODY_POSITION)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.everyone
|
def self.everyone
|
||||||
|
@ -177,7 +178,7 @@ class UserRole < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_position
|
def set_position
|
||||||
self.position = -1 if everyone?
|
self.position = NOBODY_POSITION if everyone?
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_own_role_edition
|
def validate_own_role_edition
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
%table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-btn-td
|
%td.email-btn-td
|
||||||
|
- if defined?(has_arrow) && !has_arrow
|
||||||
|
= link_to text, url, class: 'email-btn-a email-btn-hover'
|
||||||
|
- else
|
||||||
= link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover'
|
= link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-checklist-wrapper-td
|
%td.email-checklist-wrapper-td
|
||||||
%table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation', class: ('email-checklist-checked' if defined?(checked) && checked) }
|
||||||
%tr
|
%tr
|
||||||
%td.email-checklist-td
|
%td.email-checklist-td
|
||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
@ -15,15 +15,25 @@
|
||||||
- else
|
- else
|
||||||
= image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20
|
= image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20
|
||||||
%td.email-checklist-icons-step-td
|
%td.email-checklist-icons-step-td
|
||||||
- if defined?(step_image_url)
|
- if defined?(key)
|
||||||
= image_tag step_image_url, alt: '', width: 40, height: 40
|
= image_tag frontend_asset_url("images/mailer-new/welcome-icons/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40
|
||||||
%td.email-checklist-text-td
|
%td.email-checklist-text-td
|
||||||
.email-desktop-flex
|
.email-desktop-flex
|
||||||
|
/[if mso]
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center" style="width:100%;" role="presentation"><tr><td vertical-align:top;">
|
||||||
%div
|
%div
|
||||||
- if defined?(title)
|
- if defined?(title)
|
||||||
%h3= title
|
%h3= title
|
||||||
- if defined?(text)
|
- if defined?(text)
|
||||||
%p= text
|
%p= text
|
||||||
|
/[if mso]
|
||||||
|
</td><td style="vertical-align:top;">
|
||||||
%div
|
%div
|
||||||
- if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked
|
- if defined?(show_apps_buttons) && show_apps_buttons
|
||||||
= render 'application/mailer/button', text: button_text, url: button_url
|
.email-welcome-apps-btns
|
||||||
|
= link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974'
|
||||||
|
= link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android'
|
||||||
|
- elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked
|
||||||
|
= render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false
|
||||||
|
/[if mso]
|
||||||
|
</td></tr></table>
|
||||||
|
|
32
app/views/application/mailer/_feature.html.haml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-feature-wrapper-td
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-feature-td
|
||||||
|
.email-desktop-flex{ class: ('email-dir-rtl' if defined?(text_first_on_desktop) && !text_first_on_desktop) }
|
||||||
|
/[if mso]
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center" style="width:100%;" role="presentation"><tr><td style="width:50%; vertical-align:top;">
|
||||||
|
.email-desktop-column
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-td
|
||||||
|
- if defined?(feature_title)
|
||||||
|
%h2.email-h2= feature_title
|
||||||
|
- if defined?(feature_text)
|
||||||
|
%p.email-p= feature_text
|
||||||
|
- if defined?(feature_btn_url)
|
||||||
|
= link_to '', href: feature_btn_url, class: 'email-link-with-arrow' do
|
||||||
|
#{t('user_mailer.welcome.feature_action')}
|
||||||
|
%span= '❯'
|
||||||
|
/[if mso]
|
||||||
|
</td><td style="width:50%; vertical-align:top;">
|
||||||
|
.email-desktop-column
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-td
|
||||||
|
- if defined?(key)
|
||||||
|
%p{ class: ('email-desktop-text-right' if defined?(text_first_on_desktop) && text_first_on_desktop) }
|
||||||
|
= image_tag frontend_asset_url("images/mailer-new/welcome/#{key}.png"), alt: '', width: 240, height: 230
|
||||||
|
/[if mso]
|
||||||
|
</td></tr></table>
|
15
app/views/application/mailer/_follow.html.haml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-wrapper-td
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-td
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-follow-img-td
|
||||||
|
= image_tag full_asset_url(follow.account.avatar.url), alt: '', width: 40, height: 40
|
||||||
|
%td.email-mini-follow-text-td
|
||||||
|
%h3= follow.account.display_name.presence || follow.account.username
|
||||||
|
%p @#{follow.account.pretty_acct}
|
||||||
|
%td.email-mini-follow-btn-td
|
||||||
|
= render 'application/mailer/button', text: t('user_mailer.welcome.follow_action'), url: web_url("@#{follow.account.acct}"), has_arrow: false
|
20
app/views/application/mailer/_hashtag.html.haml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
- accounts = hashtag.statuses.with_public_visibility.joins(:account).merge(Account.without_suspended.without_silenced).includes(:account).limit(3).map(&:account)
|
||||||
|
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-wrapper-td
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-td
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-hashtag-td{ height: 40 }
|
||||||
|
%h3 ##{hashtag.display_name}
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-mini-hashtag-img-td
|
||||||
|
- accounts.each do |account|
|
||||||
|
%span.email-mini-hashtag-img-span
|
||||||
|
= image_tag full_asset_url(account.avatar.url), alt: '', width: 16, height: 16
|
||||||
|
%td
|
||||||
|
%p= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(hashtag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2)
|
|
@ -1,25 +1,76 @@
|
||||||
|
- instance_presenter = InstancePresenter.new
|
||||||
|
|
||||||
= content_for :heading do
|
= content_for :heading do
|
||||||
|
.email-desktop-flex
|
||||||
|
.email-header-left
|
||||||
= render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation')
|
= render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation')
|
||||||
|
.email-header-right
|
||||||
|
.email-header-card
|
||||||
|
%table.email-header-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-body-padding-td
|
%td.email-header-card-banner-td{ height: 140, background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) }
|
||||||
%table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
|
||||||
%tr
|
|
||||||
%td.email-inner-card-td-without-padding
|
|
||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-prose.email-padding-24
|
%td.email-header-card-body-td
|
||||||
%p
|
%p.email-header-card-instance= @instance
|
||||||
%b= t 'user_mailer.welcome.full_handle'
|
- if instance_presenter.description.present?
|
||||||
= render 'application/mailer/frame', text: "#{@resource.account.username}@#{@instance}"
|
%p.email-header-card-description= instance_presenter.description
|
||||||
%p= t 'user_mailer.welcome.full_handle_hint', instance: @instance
|
= render 'application/mailer/button', text: t('user_mailer.welcome.sign_in_action'), url: new_user_session_url, has_arrow: false
|
||||||
|
|
||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-border-top.email-prose.email-padding-24
|
%td.email-body-huge-padding-td
|
||||||
%p= t 'user_mailer.welcome.edit_profile_step'
|
%h2.email-h2= t('user_mailer.welcome.checklist_title')
|
||||||
= render 'application/mailer/button', text: t('user_mailer.welcome.edit_profile_action'), url: settings_profile_url
|
%p.email-h-sub= t('user_mailer.welcome.checklist_subtitle')
|
||||||
|
= render 'application/mailer/checklist', key: 'edit_profile_step', title: t('user_mailer.welcome.edit_profile_title'), text: t('user_mailer.welcome.edit_profile_step'), checked: @has_account_fields, button_text: t('user_mailer.welcome.edit_profile_action'), button_url: web_url('start/profile')
|
||||||
|
= render 'application/mailer/checklist', key: 'follow_step', title: t('user_mailer.welcome.follow_title'), text: t('user_mailer.welcome.follow_step'), checked: @has_active_relationships, button_text: t('user_mailer.welcome.follow_action'), button_url: web_url('start/follows')
|
||||||
|
= render 'application/mailer/checklist', key: 'post_step', title: t('user_mailer.welcome.post_title'), text: t('user_mailer.welcome.post_step'), checked: @has_statuses, button_text: t('user_mailer.welcome.post_action'), button_url: web_url
|
||||||
|
= render 'application/mailer/checklist', key: 'share_step', title: t('user_mailer.welcome.share_title'), text: t('user_mailer.welcome.share_step'), checked: false, button_text: t('user_mailer.welcome.share_action'), button_url: web_url('start/share')
|
||||||
|
= render 'application/mailer/checklist', key: 'apps_step', title: t('user_mailer.welcome.apps_title'), text: t('user_mailer.welcome.apps_step'), checked: false, show_apps_buttons: true
|
||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-border-top.email-prose.email-padding-24
|
%td.email-body-columns-td
|
||||||
%p= t 'user_mailer.welcome.edit_profile_step'
|
.email-desktop-flex
|
||||||
= render 'application/mailer/button', text: t('user_mailer.welcome.final_action'), url: web_url
|
/[if mso]
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center" style="width:100%;" role="presentation"><tr><td style="width:50%; vertical-align:top;">
|
||||||
|
.email-desktop-column
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-td
|
||||||
|
%h2.email-h2= t('user_mailer.welcome.follows_title')
|
||||||
|
%p.email-h-sub= t('user_mailer.welcome.follows_subtitle')
|
||||||
|
= render partial: 'application/mailer/follow', collection: @suggestions
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-action-td
|
||||||
|
= link_to '', href: web_url('explore/suggestions'), class: 'email-link-with-arrow' do
|
||||||
|
= t('user_mailer.welcome.follows_view_more')
|
||||||
|
%span= '❯'
|
||||||
|
/[if mso]
|
||||||
|
</td><td style="width:50%; vertical-align:top;">
|
||||||
|
.email-desktop-column
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-td
|
||||||
|
%h2.email-h2= t('user_mailer.welcome.hashtags_title')
|
||||||
|
%p.email-h-sub= t('user_mailer.welcome.hashtags_subtitle')
|
||||||
|
= render partial: 'application/mailer/hashtag', collection: @tags
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-column-action-td
|
||||||
|
= link_to '', href: web_url('explore/tags'), class: 'email-link-with-arrow' do
|
||||||
|
= t('user_mailer.welcome.hashtags_view_more')
|
||||||
|
%span= '❯'
|
||||||
|
/[if mso]
|
||||||
|
</td></tr></table>
|
||||||
|
.email-extra-wave
|
||||||
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
|
%tr
|
||||||
|
%td.email-extra-td
|
||||||
|
= render 'application/mailer/feature', key: 'feature_control', feature_title: t('user_mailer.welcome.feature_control_title'), feature_text: t('user_mailer.welcome.feature_control'), text_first_on_desktop: true
|
||||||
|
= render 'application/mailer/feature', key: 'feature_audience', feature_title: t('user_mailer.welcome.feature_audience_title'), feature_text: t('user_mailer.welcome.feature_audience'), text_first_on_desktop: false
|
||||||
|
= render 'application/mailer/feature', key: 'feature_moderation', feature_title: t('user_mailer.welcome.feature_moderation_title'), feature_text: t('user_mailer.welcome.feature_moderation'), text_first_on_desktop: true
|
||||||
|
= render 'application/mailer/feature', key: 'feature_creativity', feature_title: t('user_mailer.welcome.feature_creativity_title'), feature_text: t('user_mailer.welcome.feature_creativity'), text_first_on_desktop: false
|
||||||
|
|
|
@ -1,16 +1,78 @@
|
||||||
<%= t 'user_mailer.welcome.title', name: @resource.account.username %> <%= t 'user_mailer.welcome.explanation' %>
|
<%= t 'user_mailer.welcome.title', name: @resource.account.username %> <%= t 'user_mailer.welcome.explanation' %>
|
||||||
|
|
||||||
===
|
|
||||||
|
|
||||||
<%= t 'user_mailer.welcome.full_handle' %> (<%= "@#{@resource.account.local_username_and_domain}" %>)
|
|
||||||
<%= t 'user_mailer.welcome.full_handle_hint', instance: @instance %>
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<%= t 'user_mailer.welcome.edit_profile_step' %>
|
<%= t('user_mailer.welcome.sign_in_action') %>
|
||||||
|
===
|
||||||
|
<%= new_user_session_url %>
|
||||||
|
|
||||||
=> <%= settings_profile_url %>
|
---
|
||||||
|
|
||||||
<%= t 'user_mailer.welcome.final_step' %>
|
<%= t('user_mailer.welcome.checklist_title') %>
|
||||||
|
===
|
||||||
|
<%= t('user_mailer.welcome.checklist_subtitle') %>
|
||||||
|
|
||||||
=> <%= web_url %>
|
1. <%= t('user_mailer.welcome.edit_profile_title') %>
|
||||||
|
<%= t('user_mailer.welcome.edit_profile_step') %>
|
||||||
|
* <%= web_url('start/profile') %>
|
||||||
|
|
||||||
|
2. <%= t('user_mailer.welcome.follow_title') %>
|
||||||
|
<%= t('user_mailer.welcome.follow_step') %>
|
||||||
|
* <%= web_url('start/follows') %>
|
||||||
|
|
||||||
|
3. <%= t('user_mailer.welcome.post_title') %>
|
||||||
|
<%= t('user_mailer.welcome.post_step') %>
|
||||||
|
* <%= web_url %>
|
||||||
|
|
||||||
|
4. <%= t('user_mailer.welcome.share_title') %>
|
||||||
|
<%= t('user_mailer.welcome.share_step') %>
|
||||||
|
* <%= web_url('start/share') %>
|
||||||
|
|
||||||
|
5. <%= t('user_mailer.welcome.apps_title') %>
|
||||||
|
<%= t('user_mailer.welcome.apps_step') %>
|
||||||
|
* iOS: https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974
|
||||||
|
* Android: https://play.google.com/store/apps/details?id=org.joinmastodon.android
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.follows_title') %>
|
||||||
|
===
|
||||||
|
<%= t('user_mailer.welcome.follows_subtitle') %>
|
||||||
|
|
||||||
|
<%- @suggestions.each do |suggestion| %>
|
||||||
|
* <%= suggestion.account.display_name.presence || suggestion.account.username %> · @<%= suggestion.account.pretty_acct %>
|
||||||
|
<%= web_url("@#{suggestion.account.acct}") %>
|
||||||
|
<%- end %>
|
||||||
|
|
||||||
|
<%= web_url('explore/suggestions') %>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.hashtags_title') %>
|
||||||
|
===
|
||||||
|
<%= t('user_mailer.welcome.hashtags_subtitle') %>
|
||||||
|
|
||||||
|
<%- @tags.each do |tag| %>
|
||||||
|
* #<%= tag.display_name %> · <%= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2) %>
|
||||||
|
<%= tag_url(tag) %>
|
||||||
|
<%- end %>
|
||||||
|
|
||||||
|
<%= web_url('explore/tags') %>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.feature_control_title') %>
|
||||||
|
===
|
||||||
|
<%= word_wrap t('user_mailer.welcome.feature_control') %>
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.feature_audience_title') %>
|
||||||
|
===
|
||||||
|
<%= word_wrap t('user_mailer.welcome.feature_audience') %>
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.feature_moderation_title') %>
|
||||||
|
===
|
||||||
|
<%= word_wrap t('user_mailer.welcome.feature_moderation') %>
|
||||||
|
|
||||||
|
<%= t('user_mailer.welcome.feature_creativity_title') %>
|
||||||
|
===
|
||||||
|
<%= word_wrap t('user_mailer.welcome.feature_creativity') %>
|
||||||
|
|
20
bin/dev
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Default to port 3000 if not specified
|
||||||
|
export PORT="${PORT:-3000}"
|
||||||
|
|
||||||
|
# Get around our boot.rb ENV check
|
||||||
|
export RAILS_ENV="${RAILS_ENV:-development}"
|
||||||
|
|
||||||
|
if command -v overmind &> /dev/null
|
||||||
|
then
|
||||||
|
overmind start -f Procfile.dev "$@"
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
if gem list --no-installed --exact --silent foreman; then
|
||||||
|
echo "Installing foreman..."
|
||||||
|
gem install foreman
|
||||||
|
fi
|
||||||
|
|
||||||
|
foreman start -f Procfile.dev "$@"
|
|
@ -42,6 +42,7 @@ Rails.application.configure do
|
||||||
:hu,
|
:hu,
|
||||||
:hy,
|
:hy,
|
||||||
:id,
|
:id,
|
||||||
|
:ie,
|
||||||
:ig,
|
:ig,
|
||||||
:io,
|
:io,
|
||||||
:is,
|
:is,
|
||||||
|
|
|
@ -1600,10 +1600,6 @@ an:
|
||||||
edit_profile_action: Configurar lo perfil
|
edit_profile_action: Configurar lo perfil
|
||||||
edit_profile_step: Puetz personalizar lo tuyo perfil puyando una foto de perfil, cambiando lo tuyo nombre d'usuario y muito mas. Puetz optar per revisar a los nuevos seguidores antes que puedan seguir-te.
|
edit_profile_step: Puetz personalizar lo tuyo perfil puyando una foto de perfil, cambiando lo tuyo nombre d'usuario y muito mas. Puetz optar per revisar a los nuevos seguidores antes que puedan seguir-te.
|
||||||
explanation: Aquí i hai qualques consellos pa empecipiar
|
explanation: Aquí i hai qualques consellos pa empecipiar
|
||||||
final_action: Empecipiar a publicar
|
|
||||||
final_step: 'Empecipia a publicar! Mesmo sin seguidores, las tuyas publicacions publicas pueden estar vistas per atros, per eixemplo en a linia de tiempo local u en etiquetas. Tal vegada quieras presentar-te con a etiqueta de #presentacions.'
|
|
||||||
full_handle: Lo suyo sobrenombre completo
|
|
||||||
full_handle_hint: Esto ye lo que le dirías a los tuyos amigos pa que ells puedan ninviar-te mensaches u seguir-te dende unatra instancia.
|
|
||||||
subject: Bienveniu a Mastodon
|
subject: Bienveniu a Mastodon
|
||||||
title: Te damos la bienvenida a bordo, %{name}!
|
title: Te damos la bienvenida a bordo, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1969,10 +1969,6 @@ ar:
|
||||||
edit_profile_action: تهيئة الملف التعريفي
|
edit_profile_action: تهيئة الملف التعريفي
|
||||||
edit_profile_step: يمكنك تخصيص ملفك الشخصي عن طريق رفع صورة ملفك الشخصي, تغيير اسم العرض الخاص بك والمزيد. يمكنك اختيار مراجعة المتابعين الجدد قبل السماح لهم بمتابعتك.
|
edit_profile_step: يمكنك تخصيص ملفك الشخصي عن طريق رفع صورة ملفك الشخصي, تغيير اسم العرض الخاص بك والمزيد. يمكنك اختيار مراجعة المتابعين الجدد قبل السماح لهم بمتابعتك.
|
||||||
explanation: ها هي بعض النصائح قبل بداية الاستخدام
|
explanation: ها هي بعض النصائح قبل بداية الاستخدام
|
||||||
final_action: اشرَع في النشر
|
|
||||||
final_step: 'ابدأ في النشر! حتى بدون متابعين، منشوراتك العامة قد يشاهدها آخرون، على سبيل المثال في التوقيت المحلي أو في الوسوم. قد ترغب في تقديم نفسك على وسم #introductions.'
|
|
||||||
full_handle: عنوانك الكامل
|
|
||||||
full_handle_hint: هذا هو ما يجب تقديمه لأصدقائك قصد أن يكون بإمكانهم متابَعتك أو مُراسَلتك حتى و إن كانت حساباتهم على خوادم أخرى.
|
|
||||||
subject: أهلًا بك على ماستدون
|
subject: أهلًا بك على ماستدون
|
||||||
title: أهلاً بك، %{name}!
|
title: أهلاً بك، %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -903,7 +903,6 @@ ast:
|
||||||
edit_profile_action: Configurar el perfil
|
edit_profile_action: Configurar el perfil
|
||||||
edit_profile_step: Pues personalizar el perfil pente la xuba d'una semeya, el cambéu del nome visible ya muncho más. Tamién, si lo prefieres, pues revisar los perfiles nuevos enantes de que puedan siguite.
|
edit_profile_step: Pues personalizar el perfil pente la xuba d'una semeya, el cambéu del nome visible ya muncho más. Tamién, si lo prefieres, pues revisar los perfiles nuevos enantes de que puedan siguite.
|
||||||
explanation: Equí tienes dalgunos conseyos pa que comiences
|
explanation: Equí tienes dalgunos conseyos pa que comiences
|
||||||
final_action: Comenzar a espublizar
|
|
||||||
subject: Afáyate en Mastodon
|
subject: Afáyate en Mastodon
|
||||||
title: "¡Afáyate, %{name}!"
|
title: "¡Afáyate, %{name}!"
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1910,10 +1910,6 @@ be:
|
||||||
edit_profile_action: Наладзіць профіль
|
edit_profile_action: Наладзіць профіль
|
||||||
edit_profile_step: Вы можаце наладзіць свой профіль, запампаваўшы выяву профілю, змяніўшы адлюстраванае імя і іншае. Вы можаце праглядаць новых падпісчыкаў, перш чым ім будзе дазволена падпісацца на вас.
|
edit_profile_step: Вы можаце наладзіць свой профіль, запампаваўшы выяву профілю, змяніўшы адлюстраванае імя і іншае. Вы можаце праглядаць новых падпісчыкаў, перш чым ім будзе дазволена падпісацца на вас.
|
||||||
explanation: Вось некаторыя парады каб пачаць
|
explanation: Вось некаторыя парады каб пачаць
|
||||||
final_action: Пачаць пісаць
|
|
||||||
final_step: 'Пачынайце пісаць! Нават, калі ў вас няма падпісчыкаў, іншыя людзі змогуць пабачыць вашыя допісы, напрыклад, у лакальнай стужцы, або праз хэштэгі. Калі хочаце, вы можаце прадставіцца праз хэштэг #introductions.'
|
|
||||||
full_handle: Ваш поўны маркер
|
|
||||||
full_handle_hint: Гэта тое, што вы дасце сваім сябрам, каб яны маглі адпраўляць паведамленні або падпісацца на вас з іншага сервера.
|
|
||||||
subject: Вітаем у Mastodon
|
subject: Вітаем у Mastodon
|
||||||
title: Рады вітаць вас, %{name}!
|
title: Рады вітаць вас, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ bg:
|
||||||
edit_profile_action: Настройване на профила
|
edit_profile_action: Настройване на профила
|
||||||
edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват.
|
edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват.
|
||||||
explanation: Ето няколко стъпки за начало
|
explanation: Ето няколко стъпки за начало
|
||||||
final_action: Начало на публикуване
|
|
||||||
final_step: 'Публикувайте! Дори без да имате последователи, вашите публични публикации ще бъдат видени от други, например в местната хронология или под хаштагове. Не забравяйте да се представите с хаштаг #introductions.'
|
|
||||||
full_handle: Пълното ви име
|
|
||||||
full_handle_hint: Ето какво бихте казали на приятелите си, за да могат да ви изпращат съобщения или да ви последват от друг сървър.
|
|
||||||
subject: Добре дошли в Mastodon
|
subject: Добре дошли в Mastodon
|
||||||
title: Добре дошли на борда, %{name}!
|
title: Добре дошли на борда, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ ca:
|
||||||
edit_profile_action: Configura el perfil
|
edit_profile_action: Configura el perfil
|
||||||
edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir.
|
edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir.
|
||||||
explanation: Aquests són alguns consells per a començar
|
explanation: Aquests són alguns consells per a començar
|
||||||
final_action: Comença a publicar
|
|
||||||
final_step: 'Comença a publicar! Fins i tot sense seguidors, els altres poden veure els teus missatges públics, per exemple, a la línia de temps local i a les etiquetes. És possible que vulguis presentar-te amb l''etiqueta #introductions.'
|
|
||||||
full_handle: El teu nom d'usuari sencer
|
|
||||||
full_handle_hint: Això és el que has de dir als teus amics perquè puguin enviar-te missatges o seguir-te des d'un altre servidor.
|
|
||||||
subject: Et donem la benvinguda a Mastodon
|
subject: Et donem la benvinguda a Mastodon
|
||||||
title: Benvingut a bord, %{name}!
|
title: Benvingut a bord, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1035,9 +1035,6 @@ ckb:
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: پرۆفایلی جێگیرکردن
|
edit_profile_action: پرۆفایلی جێگیرکردن
|
||||||
explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت
|
explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت
|
||||||
final_action: دەست بکە بە بڵاوکردنەوە
|
|
||||||
full_handle: ناوی بەکارهێنەری تەواوی ئێوە
|
|
||||||
full_handle_hint: ئەمە ئەو شتەیە کە بە هاوڕێکانت دەلێی بۆ ئەوەی پەیام یان لە ڕاژەیەکی دیکەی ترەوە بەدوات بکەون.
|
|
||||||
subject: بەخێربیت بۆ ماستۆدۆن
|
subject: بەخێربیت بۆ ماستۆدۆن
|
||||||
title: بەخێربێیت، بەکارهێنەر %{name}!
|
title: بەخێربێیت، بەکارهێنەر %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1050,9 +1050,6 @@ co:
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: Cunfigurazione di u prufile
|
edit_profile_action: Cunfigurazione di u prufile
|
||||||
explanation: Eccu alcune idee per principià
|
explanation: Eccu alcune idee per principià
|
||||||
final_action: Principià à pustà
|
|
||||||
full_handle: U vostru identificatore cumplettu
|
|
||||||
full_handle_hint: Quessu ghjè cio chì direte à i vostri amichi per circavi, abbunassi à u vostru contu da altrò, o mandà missaghji.
|
|
||||||
subject: Benvenutu·a nant’à Mastodon
|
subject: Benvenutu·a nant’à Mastodon
|
||||||
title: Benvenutu·a, %{name}!
|
title: Benvenutu·a, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1910,10 +1910,6 @@ cs:
|
||||||
edit_profile_action: Nastavit profil
|
edit_profile_action: Nastavit profil
|
||||||
edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat.
|
edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat.
|
||||||
explanation: Zde je pár tipů do začátku
|
explanation: Zde je pár tipů do začátku
|
||||||
final_action: Začít psát
|
|
||||||
final_step: 'Začněte psát příspěvky! I bez sledujících mohou vaše veřejné příspěvky vidět ostatní, například na místní časové ose nebo v hashtagu. Možná se budete chtít představit na hashtagu #představení.'
|
|
||||||
full_handle: Vaše celá adresa profilu
|
|
||||||
full_handle_hint: Tohle je, co byste řekli svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru.
|
|
||||||
subject: Vítejte na Mastodonu
|
subject: Vítejte na Mastodonu
|
||||||
title: Vítejte na palubě, %{name}!
|
title: Vítejte na palubě, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -823,6 +823,7 @@ cy:
|
||||||
disabled: I neb
|
disabled: I neb
|
||||||
users: I ddefnyddwyr lleol wedi'u mewngofnodi
|
users: I ddefnyddwyr lleol wedi'u mewngofnodi
|
||||||
registrations:
|
registrations:
|
||||||
|
moderation_recommandation: Gwnewch yn siŵr bod gennych chi dîm cymedroli digonol ac adweithiol cyn i chi agor cofrestriadau i bawb!
|
||||||
preamble: Rheoli pwy all greu cyfrif ar eich gweinydd.
|
preamble: Rheoli pwy all greu cyfrif ar eich gweinydd.
|
||||||
title: Cofrestriadau
|
title: Cofrestriadau
|
||||||
registrations_mode:
|
registrations_mode:
|
||||||
|
@ -830,6 +831,7 @@ cy:
|
||||||
approved: Mae angen cymeradwyaeth i gofrestru
|
approved: Mae angen cymeradwyaeth i gofrestru
|
||||||
none: Nid oes neb yn gallu cofrestru
|
none: Nid oes neb yn gallu cofrestru
|
||||||
open: Gall unrhyw un cofrestru
|
open: Gall unrhyw un cofrestru
|
||||||
|
warning_hint: Rydym yn argymell defnyddio “Mae angen cymeradwyaeth ar gyfer cofrestru” oni bai eich bod yn hyderus y gall eich tîm cymedroli ymdrin â chofrestriadau sbam a rhai maleisus mewn modd amserol.
|
||||||
security:
|
security:
|
||||||
authorized_fetch: Mae angen dilysu gan weinyddion ffederal
|
authorized_fetch: Mae angen dilysu gan weinyddion ffederal
|
||||||
authorized_fetch_hint: Mae gofyn am ddilysiad gan weinyddion ffederal yn galluogi gorfodi llymach ar flociau lefel defnyddiwr a lefel gweinydd. Fodd bynnag, daw hyn ar gost perfformiad arafach, mae'n lleihau cyrhaeddiad eich atebion, a gall gyflwyno materion cydnawsedd gyda rhai gwasanaethau ffederal. Yn ogystal, ni fydd hyn yn atal actorion ymroddedig rhag estyn eich postiadau a'ch cyfrifon cyhoeddus.
|
authorized_fetch_hint: Mae gofyn am ddilysiad gan weinyddion ffederal yn galluogi gorfodi llymach ar flociau lefel defnyddiwr a lefel gweinydd. Fodd bynnag, daw hyn ar gost perfformiad arafach, mae'n lleihau cyrhaeddiad eich atebion, a gall gyflwyno materion cydnawsedd gyda rhai gwasanaethau ffederal. Yn ogystal, ni fydd hyn yn atal actorion ymroddedig rhag estyn eich postiadau a'ch cyfrifon cyhoeddus.
|
||||||
|
@ -1038,6 +1040,9 @@ cy:
|
||||||
title: Bachau Gwe
|
title: Bachau Gwe
|
||||||
webhook: Bachyn Gwe
|
webhook: Bachyn Gwe
|
||||||
admin_mailer:
|
admin_mailer:
|
||||||
|
auto_close_registrations:
|
||||||
|
body: Oherwydd diffyg gweithgarwch cymedrolwr diweddar, mae cofrestriadau ar %{instance} wedi'u newid yn awtomatig i'r angen i gael adolygiad â llaw, er mwyn atal %{instance} rhag cael ei ddefnyddio fel llwyfan ar gyfer actorion drwg posibl. Gallwch ei newid yn ôl i agor cofrestriadau ar unrhyw adeg.
|
||||||
|
subject: Mae cofrestriadau ar gyfer %{instance} wedi'u newid yn awtomatig i'r angen i gael cymeradwyaeth
|
||||||
new_appeal:
|
new_appeal:
|
||||||
actions:
|
actions:
|
||||||
delete_statuses: i ddileu eu postiadau
|
delete_statuses: i ddileu eu postiadau
|
||||||
|
@ -1969,10 +1974,6 @@ cy:
|
||||||
edit_profile_action: Sefydlu proffil
|
edit_profile_action: Sefydlu proffil
|
||||||
edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn.
|
edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn.
|
||||||
explanation: Dyma ambell nodyn i'ch helpu i ddechrau
|
explanation: Dyma ambell nodyn i'ch helpu i ddechrau
|
||||||
final_action: Dechrau postio
|
|
||||||
final_step: 'Dechreuwch bostio! Hyd yn oed heb ddilynwyr, efallai y bydd eraill yn gweld eich postiadau cyhoeddus, er enghraifft ar y ffrwd leol neu mewn hashnodau. Efallai y byddwch am gyflwyno eich hun ar yr hashnod #cyflwyniadau neu/a #introductions.'
|
|
||||||
full_handle: Eich enw llawn
|
|
||||||
full_handle_hint: Dyma beth fyddech chi'n ei ddweud wrth eich ffrindiau fel y gallant anfon neges neu eich dilyn o weinydd arall.
|
|
||||||
subject: Croeso i Mastodon
|
subject: Croeso i Mastodon
|
||||||
title: Croeso, %{name}!
|
title: Croeso, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ da:
|
||||||
edit_profile_action: Opsæt profil
|
edit_profile_action: Opsæt profil
|
||||||
edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses.
|
edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses.
|
||||||
explanation: Her er nogle råd for at få dig i gang
|
explanation: Her er nogle råd for at få dig i gang
|
||||||
final_action: Begynd at poste
|
|
||||||
final_step: 'Begynd at poste! Selv uden følgere vil offentlige indlæg kunne ses af andre f.eks. på den lokale tidslinje og i hashtags. Man kan introducere sig selv via hastagget #introductions.'
|
|
||||||
full_handle: Dit fulde brugernavn
|
|
||||||
full_handle_hint: Dette er, hvad du oplyser til dine venner, så de kan sende dig beskeder eller følge dig fra andre servere.
|
|
||||||
subject: Velkommen til Mastodon
|
subject: Velkommen til Mastodon
|
||||||
title: Velkommen ombord, %{name}!
|
title: Velkommen ombord, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ de:
|
||||||
edit_profile_action: Profil einrichten
|
edit_profile_action: Profil einrichten
|
||||||
edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen.
|
edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen.
|
||||||
explanation: Hier sind ein paar Tipps, um loszulegen
|
explanation: Hier sind ein paar Tipps, um loszulegen
|
||||||
final_action: Mit erstem Beitrag starten
|
|
||||||
final_step: 'Fang jetzt an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel in der lokalen Timeline oder über die Hashtags. Möglicherweise möchtest du dich allen mit dem Hashtag #neuhier vorstellen.'
|
|
||||||
full_handle: Dein vollständiger Profilname
|
|
||||||
full_handle_hint: Deinen vollständigen Profilnamen kannst du deinen Freund*innen mitteilen, damit sie dich anschreiben oder dir von einem anderen Server folgen können.
|
|
||||||
subject: Willkommen bei Mastodon!
|
subject: Willkommen bei Mastodon!
|
||||||
title: Willkommen an Bord, %{name}!
|
title: Willkommen an Bord, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1707,10 +1707,6 @@ el:
|
||||||
edit_profile_action: Στήσιμο προφίλ
|
edit_profile_action: Στήσιμο προφίλ
|
||||||
edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν.
|
edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν.
|
||||||
explanation: Μερικές συμβουλές για να ξεκινήσεις
|
explanation: Μερικές συμβουλές για να ξεκινήσεις
|
||||||
final_action: Ξεκίνα να αναρτάς
|
|
||||||
final_step: 'Ξεκίνα να δημοσιεύεις! Ακόμα και χωρίς ακόλουθους τις δημόσιες δημοσιεύσεις σου μπορεί να τις δουν άλλοι, για παράδειγμα στην τοπική ροή ή στις ετικέτες. Ίσως να θέλεις να μας γνωρίσεις τον εαυτό σου με την ετικέτα #introductions.'
|
|
||||||
full_handle: Το πλήρες όνομά σου
|
|
||||||
full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο διακομιστή.
|
|
||||||
subject: Καλώς ήρθες στο Mastodon
|
subject: Καλώς ήρθες στο Mastodon
|
||||||
title: Καλώς όρισες, %{name}!
|
title: Καλώς όρισες, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ en-GB:
|
||||||
edit_profile_action: Setup profile
|
edit_profile_action: Setup profile
|
||||||
edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
|
edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
|
||||||
explanation: Here are some tips to get you started
|
explanation: Here are some tips to get you started
|
||||||
final_action: Start posting
|
|
||||||
final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.'
|
|
||||||
full_handle: Your full handle
|
|
||||||
full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
|
|
||||||
subject: Welcome to Mastodon
|
subject: Welcome to Mastodon
|
||||||
title: Welcome aboard, %{name}!
|
title: Welcome aboard, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -2217,13 +2217,42 @@ en:
|
||||||
silence: Account limited
|
silence: Account limited
|
||||||
suspend: Account suspended
|
suspend: Account suspended
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: Setup profile
|
apps_android_action: Get it on Google Play
|
||||||
edit_profile_step: You can customize your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
|
apps_ios_action: Download on the App Store
|
||||||
|
apps_step: Download our official apps.
|
||||||
|
apps_title: Mastodon apps
|
||||||
|
checklist_subtitle: 'Let''s get you started on this new social frontier:'
|
||||||
|
checklist_title: Welcome Checklist
|
||||||
|
edit_profile_action: Personalize
|
||||||
|
edit_profile_step: Boost your interactions by having a comprehensive profile.
|
||||||
|
edit_profile_title: Personalize your profile
|
||||||
explanation: Here are some tips to get you started
|
explanation: Here are some tips to get you started
|
||||||
final_action: Start posting
|
feature_action: Learn more
|
||||||
final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.'
|
feature_audience: Mastodon provides you with a unique possibility of managing your audience without middlemen. Mastodon deployed on your own infrastructure allows you to follow and be followed from any other Mastodon server online and is under no one's control but yours.
|
||||||
full_handle: Your full handle
|
feature_audience_title: Build your audience in confidence
|
||||||
full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
|
feature_control: You know best what you want to see on your home feed. No algorithms or ads to waste your time. Follow anyone across any Mastodon server from a single account and receive their posts in chronological order, and make your corner of the internet a little more like you.
|
||||||
|
feature_control_title: Stay in control of your own timeline
|
||||||
|
feature_creativity: Mastodon supports audio, video and picture posts, accessibility descriptions, polls, content warnings, animated avatars, custom emojis, thumbnail crop control, and more, to help you express yourself online. Whether you're publishing your art, your music, or your podcast, Mastodon is there for you.
|
||||||
|
feature_creativity_title: Unparalleled creativity
|
||||||
|
feature_moderation: Mastodon puts decision making back in your hands. Each server creates their own rules and regulations, which are enforced locally and not top-down like corporate social media, making it the most flexible in responding to the needs of different groups of people. Join a server with the rules you agree with, or host your own.
|
||||||
|
feature_moderation_title: Moderating the way it should be
|
||||||
|
follow_action: Follow
|
||||||
|
follow_step: Following interesting people is what Mastodon is all about.
|
||||||
|
follow_title: Personalize your home feed
|
||||||
|
follows_subtitle: Follow well-known accounts
|
||||||
|
follows_title: Who to follow
|
||||||
|
follows_view_more: View more people to follow
|
||||||
|
hashtags_recent_count: "%{people} people in the past %{days} days"
|
||||||
|
hashtags_subtitle: Explore what’s trending since past 2 days
|
||||||
|
hashtags_title: Trending hashtags
|
||||||
|
hashtags_view_more: View more trending hashtags
|
||||||
|
post_action: Compose
|
||||||
|
post_step: Say hello to the world with text, photos, videos, or polls.
|
||||||
|
post_title: Make your first post
|
||||||
|
share_action: Share
|
||||||
|
share_step: Let your friends know how to find you on Mastodon.
|
||||||
|
share_title: Share your Mastodon profile
|
||||||
|
sign_in_action: Sign in
|
||||||
subject: Welcome to Mastodon
|
subject: Welcome to Mastodon
|
||||||
title: Welcome aboard, %{name}!
|
title: Welcome aboard, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1763,10 +1763,6 @@ eo:
|
||||||
edit_profile_action: Agordi profilon
|
edit_profile_action: Agordi profilon
|
||||||
edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli.
|
edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli.
|
||||||
explanation: Jen kelkaj konsiloj por helpi vin komenci
|
explanation: Jen kelkaj konsiloj por helpi vin komenci
|
||||||
final_action: Ekmesaĝi
|
|
||||||
final_step: 'Ekmesaĝu! Eĉ sen sekvantoj, viaj publikaj mesaĝoj povas esti vidataj de aliaj, ekzemple en la loka templinio aŭ per kradvortoj. Eble vi ŝatus prezenti vin per la kradvorto #introductions / #konigo.'
|
|
||||||
full_handle: Via kompleta uzantnomo
|
|
||||||
full_handle_hint: Jen kion vi dirus al viaj amikoj, por ke ili mesaĝu aŭ sekvu vin de alia servilo.
|
|
||||||
subject: Bonvenon en Mastodon
|
subject: Bonvenon en Mastodon
|
||||||
title: Bonvenon, %{name}!
|
title: Bonvenon, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ es-AR:
|
||||||
edit_profile_action: Configurar perfil
|
edit_profile_action: Configurar perfil
|
||||||
edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
||||||
explanation: Aquí hay algunos consejos para empezar
|
explanation: Aquí hay algunos consejos para empezar
|
||||||
final_action: Empezá a enviar mensajes
|
|
||||||
final_step: "¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación»."
|
|
||||||
full_handle: Tu nombre de usuario completo
|
|
||||||
full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor.
|
|
||||||
subject: Bienvenido a Mastodon
|
subject: Bienvenido a Mastodon
|
||||||
title: "¡Bienvenido a bordo, %{name}!"
|
title: "¡Bienvenido a bordo, %{name}!"
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ es-MX:
|
||||||
edit_profile_action: Configurar el perfil
|
edit_profile_action: Configurar el perfil
|
||||||
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
||||||
explanation: Aquí hay algunos consejos para empezar
|
explanation: Aquí hay algunos consejos para empezar
|
||||||
final_action: Empezar a publicar
|
|
||||||
final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones."
|
|
||||||
full_handle: Su sobrenombre completo
|
|
||||||
full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
|
|
||||||
subject: Bienvenido a Mastodon
|
subject: Bienvenido a Mastodon
|
||||||
title: Te damos la bienvenida a bordo, %{name}!
|
title: Te damos la bienvenida a bordo, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ es:
|
||||||
edit_profile_action: Configurar el perfil
|
edit_profile_action: Configurar el perfil
|
||||||
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte.
|
||||||
explanation: Aquí hay algunos consejos para empezar
|
explanation: Aquí hay algunos consejos para empezar
|
||||||
final_action: Empezar a publicar
|
|
||||||
final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #presentación."
|
|
||||||
full_handle: Su sobrenombre completo
|
|
||||||
full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
|
|
||||||
subject: Bienvenido a Mastodon
|
subject: Bienvenido a Mastodon
|
||||||
title: Te damos la bienvenida a bordo, %{name}!
|
title: Te damos la bienvenida a bordo, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ et:
|
||||||
|
|
||||||
Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q
|
Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q
|
||||||
explanation: Siin on mõned nõuanded, mis aitavad alustada
|
explanation: Siin on mõned nõuanded, mis aitavad alustada
|
||||||
final_action: Alusta postitamist
|
|
||||||
final_step: 'Nüüd tee oma esimene postitus. Hea tava on uues kohas ennast tutvustada ning kindlasti kasuta selles postituses ka silti #tutvustus. Isegi kui sul ei ole veel jälgijaid, siis su postitusi näevad kohalikul ajajoonel ka kõik teised serveri kasutajad.'
|
|
||||||
full_handle: Kasutajanimi Mastodon võrgustikus
|
|
||||||
full_handle_hint: Kui jagad kasutajanime väljaspool serverit, siis kasuta kindlasti pikka nime. Erinevates serverites võib olla sama kasutajanimega liikmeid.
|
|
||||||
subject: Tere tulemast Mastodoni
|
subject: Tere tulemast Mastodoni
|
||||||
title: Tere tulemast, %{name}!
|
title: Tere tulemast, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1847,10 +1847,6 @@ eu:
|
||||||
edit_profile_action: Ezarri profila
|
edit_profile_action: Ezarri profila
|
||||||
edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu.
|
edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu.
|
||||||
explanation: Hona hasteko aholku batzuk
|
explanation: Hona hasteko aholku batzuk
|
||||||
final_action: Hasi bidalketak argitaratzen
|
|
||||||
final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure bidalketa publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.'
|
|
||||||
full_handle: Helbide osoa
|
|
||||||
full_handle_hint: Hau da lagunei esango zeniekeena beste zerbitzari batetik zu jarraitzeko edo zuri mezuak bidaltzeko.
|
|
||||||
subject: Ongi etorri Mastodon-era
|
subject: Ongi etorri Mastodon-era
|
||||||
title: Ongi etorri, %{name}!
|
title: Ongi etorri, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1579,10 +1579,6 @@ fa:
|
||||||
edit_profile_action: تنظیم نمایه
|
edit_profile_action: تنظیم نمایه
|
||||||
edit_profile_step: میتوانید نمایهتان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از اینها سفارشی کنید. میتوانید تعیین کنید که پیگیران جدید را پیشاز این که بتوانند دنبالتان کنند بازبینی کنید.
|
edit_profile_step: میتوانید نمایهتان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از اینها سفارشی کنید. میتوانید تعیین کنید که پیگیران جدید را پیشاز این که بتوانند دنبالتان کنند بازبینی کنید.
|
||||||
explanation: نکتههایی که برای آغاز کار به شما کمک میکنند
|
explanation: نکتههایی که برای آغاز کار به شما کمک میکنند
|
||||||
final_action: چیزی منتشر کنید
|
|
||||||
final_step: 'چیزی بنویسید! حتا بدون پیگیر ممکن است فرستههای عمومیتان دیده شود. برای مثال روی خط زمانی محلی یا در برچسبها. شاید بخواهید با برچسب #معرفی خودتان را معرّفی کنید.'
|
|
||||||
full_handle: نام کاربری کامل شما
|
|
||||||
full_handle_hint: این چیزی است که باید به دوستانتان بگویید تا بتوانند از کارسازی دیگر به شما پیام داده یا پیگیرتان شوند.
|
|
||||||
subject: به ماستودون خوش آمدید
|
subject: به ماستودون خوش آمدید
|
||||||
title: خوش آمدید، کاربر %{name}!
|
title: خوش آمدید، کاربر %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ fi:
|
||||||
edit_profile_action: Määritä profiili
|
edit_profile_action: Määritä profiili
|
||||||
edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse.
|
edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse.
|
||||||
explanation: Näillä vinkeillä pääset alkuun
|
explanation: Näillä vinkeillä pääset alkuun
|
||||||
final_action: Ala julkaista
|
|
||||||
final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.'
|
|
||||||
full_handle: Koko käyttäjätunnuksesi
|
|
||||||
full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta.
|
|
||||||
subject: Tervetuloa Mastodoniin
|
subject: Tervetuloa Mastodoniin
|
||||||
title: Tervetuloa mukaan, %{name}!
|
title: Tervetuloa mukaan, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ fo:
|
||||||
edit_profile_action: Set upp vanga
|
edit_profile_action: Set upp vanga
|
||||||
edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær.
|
edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær.
|
||||||
explanation: Her eru nøkur ráð so tú kann koma gott ígongd
|
explanation: Her eru nøkur ráð so tú kann koma gott ígongd
|
||||||
final_action: Byrja at posta
|
|
||||||
final_step: 'Byrja at posta! Sjálvt uttan fylgjarar, so kunnu tínir almennu postar vera sæddir av øðrum, til dømis á lokalu tíðarlinjuni ella í frámerkjum. Kanska vilt tú greiða frá um teg sjálva/n við frámerkinum #introductions.'
|
|
||||||
full_handle: Fulla brúkaranavn títt
|
|
||||||
full_handle_hint: Hetta er tað, sum tú fortelur vinum tínum, soleiðis at tey kunnu senda tær boð ella fylgja tær frá einum øðrum ambætara.
|
|
||||||
subject: Vælkomin til Mastodon
|
subject: Vælkomin til Mastodon
|
||||||
title: Vælkomin umborð, %{name}!
|
title: Vælkomin umborð, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ fr-CA:
|
||||||
edit_profile_action: Configuration du profil
|
edit_profile_action: Configuration du profil
|
||||||
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
|
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
|
||||||
explanation: Voici quelques conseils pour vous aider à démarrer
|
explanation: Voici quelques conseils pour vous aider à démarrer
|
||||||
final_action: Commencez à publier
|
|
||||||
final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
|
|
||||||
full_handle: Votre identifiant complet
|
|
||||||
full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur.
|
|
||||||
subject: Bienvenue sur Mastodon
|
subject: Bienvenue sur Mastodon
|
||||||
title: Bienvenue à bord, %{name} !
|
title: Bienvenue à bord, %{name} !
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ fr:
|
||||||
edit_profile_action: Configuration du profil
|
edit_profile_action: Configuration du profil
|
||||||
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
|
edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte.
|
||||||
explanation: Voici quelques conseils pour vous aider à démarrer
|
explanation: Voici quelques conseils pour vous aider à démarrer
|
||||||
final_action: Commencez à publier
|
|
||||||
final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
|
|
||||||
full_handle: Votre identifiant complet
|
|
||||||
full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur.
|
|
||||||
subject: Bienvenue sur Mastodon
|
subject: Bienvenue sur Mastodon
|
||||||
title: Bienvenue à bord, %{name} !
|
title: Bienvenue à bord, %{name} !
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1841,10 +1841,6 @@ fy:
|
||||||
edit_profile_action: Profyl ynstelle
|
edit_profile_action: Profyl ynstelle
|
||||||
edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle.
|
edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle.
|
||||||
explanation: Hjir binne inkelde tips om jo op wei te helpen
|
explanation: Hjir binne inkelde tips om jo op wei te helpen
|
||||||
final_action: Begjin mei berjochten te pleatsen
|
|
||||||
final_step: 'Begjin berjochten te pleatsen! Sels sûnder folgers kinne jo iepenbiere berjochten troch oaren besjoen wurde, bygelyks op de lokale tiidline en ûnder hashtags. Jo kinne josels foarstelle mei it gebrûk fan de hashtag #introductions.'
|
|
||||||
full_handle: Jo folsleine Mastodon-adres
|
|
||||||
full_handle_hint: Dit jouwe jo oan jo freonen, sadat se jo berjochten stjoere kinne of (fan in oare Mastodon-server ôf) folgje kinne.
|
|
||||||
subject: Wolkom op Mastodon
|
subject: Wolkom op Mastodon
|
||||||
title: Wolkom oan board %{name}!
|
title: Wolkom oan board %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1880,10 +1880,6 @@ gd:
|
||||||
edit_profile_action: Suidhich a’ phròifil agad
|
edit_profile_action: Suidhich a’ phròifil agad
|
||||||
edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu."
|
edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu."
|
||||||
explanation: Seo gliocas no dhà gus tòiseachadh
|
explanation: Seo gliocas no dhà gus tòiseachadh
|
||||||
final_action: Tòisich air postadh
|
|
||||||
final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith ’gad leantainn, chì cuid mhath na postaichean poblach agad, can air an loidhne-ama ionadail no le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #fàilte?'
|
|
||||||
full_handle: D’ ainm-cleachdaiche slàn
|
|
||||||
full_handle_hint: Seo na bheir thu dha na caraidean agad ach an urrainn dhaibh teachdaireachd a chur thugad no ’gad leantainn o fhrithealaiche eile.
|
|
||||||
subject: Fàilte gu Mastodon
|
subject: Fàilte gu Mastodon
|
||||||
title: Fàilte air bòrd, %{name}!
|
title: Fàilte air bòrd, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ gl:
|
||||||
edit_profile_action: Configurar perfil
|
edit_profile_action: Configurar perfil
|
||||||
edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan.
|
edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan.
|
||||||
explanation: Aquí tes algunhas endereitas para ir aprendendo
|
explanation: Aquí tes algunhas endereitas para ir aprendendo
|
||||||
final_action: Comeza a publicar
|
|
||||||
final_step: 'Publica! Incluso sen seguidoras, as túas mensaxes públicas serán vistas por outras persoas, por exemplo na cronoloxía local e nos cancelos. Poderías presentarte ao #fediverso utilizando o cancelo #introductions.'
|
|
||||||
full_handle: O teu alcume completo
|
|
||||||
full_handle_hint: Compárteo coas túas amizades para que poidan seguirte ou enviarche mensaxes desde outros servidores.
|
|
||||||
subject: Benvida a Mastodon
|
subject: Benvida a Mastodon
|
||||||
title: Benvida, %{name}!
|
title: Benvida, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1910,10 +1910,6 @@ he:
|
||||||
edit_profile_action: הגדרת פרופיל
|
edit_profile_action: הגדרת פרופיל
|
||||||
edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך.
|
edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך.
|
||||||
explanation: הנה כמה טיפים לעזור לך להתחיל
|
explanation: הנה כמה טיפים לעזור לך להתחיל
|
||||||
final_action: התחל/ילי לחצרץ
|
|
||||||
final_step: 'התחל/ילי לחצצר! אפילו ללא עוקבים ייתכן שהחצרוצים הפומביים שלך יראו ע"י אחרים, למשל בציר הזמן המקומי או בתגיות הקבצה (האשתגים). כדאי להציג את עצמך תחת התגית #introductions או #היכרות'
|
|
||||||
full_handle: שם המשתמש המלא שלך
|
|
||||||
full_handle_hint: זה מה שתאמר.י לחברייך כדי שיוכלו לשלוח לך הודעה או לעקוב אחרייך ממופע אחר.
|
|
||||||
subject: ברוכים הבאים למסטודון
|
subject: ברוכים הבאים למסטודון
|
||||||
title: ברוך/ה הבא/ה, %{name} !
|
title: ברוך/ה הבא/ה, %{name} !
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ hu:
|
||||||
edit_profile_action: Készítsd el profilod
|
edit_profile_action: Készítsd el profilod
|
||||||
edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek.
|
edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek.
|
||||||
explanation: Néhány tipp a kezdeti lépésekhez
|
explanation: Néhány tipp a kezdeti lépésekhez
|
||||||
final_action: Kezdj bejegyzéseket írni
|
|
||||||
final_step: 'Kezdj tülkölni! A nyilvános bejegyzéseid még követők híján is megjelennek másoknak, például a helyi idővonalon vagy a hashtageknél. Kezdd azzal, hogy bemutatkozol a #bemutatkozas vagy az #introductions hashtag használatával.'
|
|
||||||
full_handle: Teljes felhasználóneved
|
|
||||||
full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más szerverekről.
|
|
||||||
subject: Üdvözöl a Mastodon
|
subject: Üdvözöl a Mastodon
|
||||||
title: Üdv a fedélzeten, %{name}!
|
title: Üdv a fedélzeten, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -875,7 +875,6 @@ hy:
|
||||||
suspend: Հաշիւը արգելափակուած է
|
suspend: Հաշիւը արգելափակուած է
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: Կարգաւորել հաշիւը
|
edit_profile_action: Կարգաւորել հաշիւը
|
||||||
final_action: Սկսել գրել
|
|
||||||
subject: Բարի գալուստ Մաստոդոն
|
subject: Բարի գալուստ Մաստոդոն
|
||||||
title: Բարի գալուստ նաւամատոյց, %{name}
|
title: Բարի գալուստ նաւամատոյց, %{name}
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -256,7 +256,6 @@ ia:
|
||||||
disable: Disactivar 2FA
|
disable: Disactivar 2FA
|
||||||
user_mailer:
|
user_mailer:
|
||||||
welcome:
|
welcome:
|
||||||
final_step: 'Comencia a publicar! Mesmo sin sequitores, tu messages public poterea esser reguardate per alteres, per exemplo in le chronologia local o in hashtags. Tu poterea voler introducer te con le hashtag #introductiones.'
|
|
||||||
subject: Benvenite in Mastodon
|
subject: Benvenite in Mastodon
|
||||||
webauthn_credentials:
|
webauthn_credentials:
|
||||||
delete: Deler
|
delete: Deler
|
||||||
|
|
|
@ -1560,10 +1560,6 @@ id:
|
||||||
edit_profile_action: Siapkan profil
|
edit_profile_action: Siapkan profil
|
||||||
edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda.
|
edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda.
|
||||||
explanation: Beberapa tips sebelum Anda memulai
|
explanation: Beberapa tips sebelum Anda memulai
|
||||||
final_action: Mulai mengirim
|
|
||||||
final_step: 'Mulai mengirim! Bahkan tanpa pengikut, kiriman publik Anda dapat dilihat oleh orang lain, misalkan di linimasa lokal atau dalam tagar. Anda dapat memperkenalkan diri Anda dalam tagar #introductions.'
|
|
||||||
full_handle: Penanganan penuh Anda
|
|
||||||
full_handle_hint: Ini yang dapat Anda sampaikan kepada teman agar mereka dapat mengirim pesan atau mengikuti Anda dari server lain.
|
|
||||||
subject: Selamat datang di Mastodon
|
subject: Selamat datang di Mastodon
|
||||||
title: Selamat datang, %{name}!
|
title: Selamat datang, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ ie:
|
||||||
edit_profile_action: Configuration de profil
|
edit_profile_action: Configuration de profil
|
||||||
edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te.
|
edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te.
|
||||||
explanation: Vi quelc suggestiones por que tu mey comensar
|
explanation: Vi quelc suggestiones por que tu mey comensar
|
||||||
final_action: Comensar postar
|
|
||||||
final_step: 'Comensa a postar! Mem sin sequitores, tui public postas posse esser videt de altres, per exemple in li local témpor-linea o in hashtags. Tu fórsan vole introducter te per li hashtag #introductions.'
|
|
||||||
full_handle: Tui plen usator-nómine
|
|
||||||
full_handle_hint: Ti-ci es ti quel tu vell dir a tui amics por que ili mey inviar missages a te o sequer te de un altri servitor.
|
|
||||||
subject: Benevenit a Mastodon
|
subject: Benevenit a Mastodon
|
||||||
title: Benevenit, %{name}!
|
title: Benevenit, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1799,10 +1799,6 @@ io:
|
||||||
edit_profile_action: Facez profilo
|
edit_profile_action: Facez profilo
|
||||||
edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu.
|
edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu.
|
||||||
explanation: Subo esas guidilo por helpar vu komencar
|
explanation: Subo esas guidilo por helpar vu komencar
|
||||||
final_action: Komencez postigar
|
|
||||||
final_step: 'Jus postigez! Mem sen sequanti, vua publika posti povas videsar da altra personi, exemplo es en lokala tempolineo e en hashtagi. Vu povas anke introduktar su en #introductions hashtagi.'
|
|
||||||
full_handle: Vua kompleta profilnomo
|
|
||||||
full_handle_hint: Co esas quon vu dicos a amiki por ke oli povas mesajigar o sequar vu de altra servilo.
|
|
||||||
subject: Bonveno a Mastodon
|
subject: Bonveno a Mastodon
|
||||||
title: Bonveno, %{name}!
|
title: Bonveno, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -769,6 +769,7 @@ is:
|
||||||
disabled: Til engra
|
disabled: Til engra
|
||||||
users: Til innskráðra staðværra notenda
|
users: Til innskráðra staðværra notenda
|
||||||
registrations:
|
registrations:
|
||||||
|
moderation_recommandation: Tryggðu að þú hafir hæft og aðgengilegt umsjónarteymi til taks áður en þú opnar á skráningar fyrir alla!
|
||||||
preamble: Stýrðu því hverjir geta útbúið notandaaðgang á netþjóninum þínum.
|
preamble: Stýrðu því hverjir geta útbúið notandaaðgang á netþjóninum þínum.
|
||||||
title: Nýskráningar
|
title: Nýskráningar
|
||||||
registrations_mode:
|
registrations_mode:
|
||||||
|
@ -776,6 +777,7 @@ is:
|
||||||
approved: Krafist er samþykkt nýskráningar
|
approved: Krafist er samþykkt nýskráningar
|
||||||
none: Enginn getur nýskráð sig
|
none: Enginn getur nýskráð sig
|
||||||
open: Allir geta nýskráð sig
|
open: Allir geta nýskráð sig
|
||||||
|
warning_hint: Við mælum með því að nota "Krafist er samþykkt nýskráningar" nema ef þú sért viss um að umsjónarteymið þitt geti brugðist tímanlega við ruslpósti og skráningum í misjöfnum tilgangi.
|
||||||
security:
|
security:
|
||||||
authorized_fetch: Krefjast auðkenningar frá netþjónum í skýjasambandi
|
authorized_fetch: Krefjast auðkenningar frá netþjónum í skýjasambandi
|
||||||
authorized_fetch_hint: Að krefjast auðkenningar frá netþjónum í skýjasambandi kallar fram strangari útfærslu á útilokunum, bæði varðandi notendur og netþjóna. Hins vegar kemur þetta niður á afköstum, minnkar útbreiðslu á svörum þínum og gæti valdið samhæfnivandamálum við sumar sambandsþjónustur. Að auki kemur þetta ekki í veg fyrir að aðilar sem ætla sér að ná í opinberar færslur og notendaaðganga frá þér geri það.
|
authorized_fetch_hint: Að krefjast auðkenningar frá netþjónum í skýjasambandi kallar fram strangari útfærslu á útilokunum, bæði varðandi notendur og netþjóna. Hins vegar kemur þetta niður á afköstum, minnkar útbreiðslu á svörum þínum og gæti valdið samhæfnivandamálum við sumar sambandsþjónustur. Að auki kemur þetta ekki í veg fyrir að aðilar sem ætla sér að ná í opinberar færslur og notendaaðganga frá þér geri það.
|
||||||
|
@ -968,6 +970,9 @@ is:
|
||||||
title: Webhook-vefkrækjur
|
title: Webhook-vefkrækjur
|
||||||
webhook: Webhook-vefkrækja
|
webhook: Webhook-vefkrækja
|
||||||
admin_mailer:
|
admin_mailer:
|
||||||
|
auto_close_registrations:
|
||||||
|
body: Vegna skorts á virkni umsjónaraðila að undanförnu, hafa nýskráningar á %{instance} sjálfkrafa verið stilltar á að þarfnast samþykktar umsjónaraðila, til að koma í veg fyrir að %{instance} verði mögulega misnotað af óprúttnum aðilum. Þú getur skipt hvenær sem er aftur yfir í opnar nýskráningar.
|
||||||
|
subject: Nýskráningar á %{instance} hafa sjálfkrafa verið stilltar á að krefjast samþykktar
|
||||||
new_appeal:
|
new_appeal:
|
||||||
actions:
|
actions:
|
||||||
delete_statuses: að eyða færslum viðkomandi
|
delete_statuses: að eyða færslum viðkomandi
|
||||||
|
@ -1845,10 +1850,6 @@ is:
|
||||||
edit_profile_action: Setja upp notandasnið
|
edit_profile_action: Setja upp notandasnið
|
||||||
edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér.
|
edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér.
|
||||||
explanation: Hér eru nokkrar ábendingar til að koma þér í gang
|
explanation: Hér eru nokkrar ábendingar til að koma þér í gang
|
||||||
final_action: Byrjaðu að skrifa
|
|
||||||
final_step: 'Byrjaðu að tjá þig! Jafnvel án fylgjenda geta aðrir séð opinberar færslur frá þér, til dæmis á staðværu tímalínunni eða í myllumerkjum. Þú gætir jafnvel viljað kynna þig á myllumerkinu #introductions.'
|
|
||||||
full_handle: Fullt auðkenni þitt
|
|
||||||
full_handle_hint: Þetta er það sem þú myndir gefa upp við vini þína svo þeir geti sent þér skilaboð eða fylgst með þér af öðrum netþjóni.
|
|
||||||
subject: Velkomin í Mastodon
|
subject: Velkomin í Mastodon
|
||||||
title: Velkomin/n um borð, %{name}!
|
title: Velkomin/n um borð, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1848,10 +1848,6 @@ it:
|
||||||
edit_profile_action: Configura profilo
|
edit_profile_action: Configura profilo
|
||||||
edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti.
|
edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti.
|
||||||
explanation: Ecco alcuni suggerimenti per iniziare
|
explanation: Ecco alcuni suggerimenti per iniziare
|
||||||
final_action: Inizia a pubblicare
|
|
||||||
final_step: 'Inizia a pubblicare! Anche senza seguaci, i tuoi post pubblici possono essere visti da altri, ad esempio sulla timeline locale o negli hashtag. Potresti presentarti con l''hashtag #presentazione.'
|
|
||||||
full_handle: Il tuo nome utente completo
|
|
||||||
full_handle_hint: Questo è ciò che diresti ai tuoi amici in modo che possano seguirti o contattarti da un altro server.
|
|
||||||
subject: Benvenuto/a su Mastodon
|
subject: Benvenuto/a su Mastodon
|
||||||
title: Benvenuto a bordo, %{name}!
|
title: Benvenuto a bordo, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -2206,10 +2206,6 @@ ja:
|
||||||
edit_profile_action: プロフィールを設定
|
edit_profile_action: プロフィールを設定
|
||||||
edit_profile_step: "プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。\n新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。"
|
edit_profile_step: "プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。\n新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。"
|
||||||
explanation: 始めるにあたってのアドバイスです
|
explanation: 始めるにあたってのアドバイスです
|
||||||
final_action: 始めましょう
|
|
||||||
final_step: 'さあ、始めましょう! たとえフォロワーがまだいなくても、あなたの公開した投稿はローカルタイムラインやハッシュタグなどを通じて誰かの目にとまるはずです。自己紹介をしたいときには #introductions ハッシュタグが便利かもしれません。'
|
|
||||||
full_handle: あなたの正式なユーザーID
|
|
||||||
full_handle_hint: 別のサーバーの友達とフォローやメッセージをやり取りする際には、これを伝えることになります。
|
|
||||||
subject: Mastodonへようこそ
|
subject: Mastodonへようこそ
|
||||||
title: ようこそ、%{name}さん!
|
title: ようこそ、%{name}さん!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -472,9 +472,6 @@ ka:
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: პროფილის მოწყობა
|
edit_profile_action: პროფილის მოწყობა
|
||||||
explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის
|
explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის
|
||||||
final_action: დაიწყე პოსტვა
|
|
||||||
full_handle: თქვენი სრული სახელური
|
|
||||||
full_handle_hint: ეს არის ის რასაც ეტყვით თქვენს მეგობრებს, რათა მოგწერონ ან გამოგყვნენ სხვა ინსტანციიდან.
|
|
||||||
subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში
|
subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში
|
||||||
title: კეთილი იყოს თქვენი მობრძანება, %{name}!
|
title: კეთილი იყოს თქვენი მობრძანება, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -794,8 +794,6 @@ kab:
|
||||||
silence: Amiḍan yesɛa talast
|
silence: Amiḍan yesɛa talast
|
||||||
suspend: Amiḍan yettwaḥbas
|
suspend: Amiḍan yettwaḥbas
|
||||||
welcome:
|
welcome:
|
||||||
final_action: Bdu asuffeɣ
|
|
||||||
full_handle: Tansa umiḍan-ik takemmalit
|
|
||||||
subject: Ansuf ɣer Maṣṭudun
|
subject: Ansuf ɣer Maṣṭudun
|
||||||
title: Ansuf yessek·em, %{name}!
|
title: Ansuf yessek·em, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -721,9 +721,6 @@ kk:
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: Профиль өңдеу
|
edit_profile_action: Профиль өңдеу
|
||||||
explanation: Мына кеңестерді шолып өтіңіз
|
explanation: Мына кеңестерді шолып өтіңіз
|
||||||
final_action: Жазба жазу
|
|
||||||
full_handle: Желі тұтқасы
|
|
||||||
full_handle_hint: This is what you would tell your friends so they can message or follow you frоm another server.
|
|
||||||
subject: Mastodon Желісіне қош келдіңіз
|
subject: Mastodon Желісіне қош келдіңіз
|
||||||
title: Ортаға қош келдің, %{name}!
|
title: Ортаға қош келдің, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1816,10 +1816,6 @@ ko:
|
||||||
edit_profile_action: 프로필 설정
|
edit_profile_action: 프로필 설정
|
||||||
edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다.
|
edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다.
|
||||||
explanation: 시작하기 전에 몇가지 팁들을 준비했습니다
|
explanation: 시작하기 전에 몇가지 팁들을 준비했습니다
|
||||||
final_action: 포스팅 시작하기
|
|
||||||
final_step: '게시물을 올리세요! 팔로워가 없더라도, 공개 게시물들은 다른 사람에게 보여질 수 있습니다, 예를 들자면 로컬이나 연합 타임라인 등이 있습니다. 사람들에게 자신을 소개하고 싶다면 #툿친소 해시태그를 이용해보세요.'
|
|
||||||
full_handle: 당신의 풀 핸들은 다음과 같습니다
|
|
||||||
full_handle_hint: 이것을 당신의 친구들에게 알려주면 다른 서버에서 팔로우 하거나 메시지를 보낼 수 있습니다.
|
|
||||||
subject: 마스토돈에 오신 것을 환영합니다
|
subject: 마스토돈에 오신 것을 환영합니다
|
||||||
title: 환영합니다 %{name} 님!
|
title: 환영합니다 %{name} 님!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1594,10 +1594,6 @@ ku:
|
||||||
edit_profile_action: Profîlê saz bike
|
edit_profile_action: Profîlê saz bike
|
||||||
edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî.
|
edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî.
|
||||||
explanation: Li vir çend serişte hene ku tu dest pê bike
|
explanation: Li vir çend serişte hene ku tu dest pê bike
|
||||||
final_action: Dest bi weşandinê bike
|
|
||||||
final_step: 'Dest bi weşandinê bike! Bêyî şopîneran jî dibe ku şandiyên te yên gelemperî ji hêla kesên din ve werin dîtin, mînakî li ser demjimêra herêmî û di hashtagan de. Dibe ku tu bixwazî xwe li ser hashtagê #nasname bidî nasandin.'
|
|
||||||
full_handle: Hemî destikê te
|
|
||||||
full_handle_hint: Ji hevalên xwe re, ji bona ji rajekarekê din peyam bişîne an jî ji bona ku te bikaribe bişopîne tişta ku tu bibêjî ev e.
|
|
||||||
subject: Tu bi xêr hatî Mastodon
|
subject: Tu bi xêr hatî Mastodon
|
||||||
title: Bi xêr hatî, %{name}!
|
title: Bi xêr hatî, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1846,10 +1846,6 @@ lad:
|
||||||
edit_profile_action: Konfigurasyon de profil
|
edit_profile_action: Konfigurasyon de profil
|
||||||
edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte.
|
edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte.
|
||||||
explanation: Aki ay algunos konsejos para ampesar
|
explanation: Aki ay algunos konsejos para ampesar
|
||||||
final_action: Ampesa a publikar
|
|
||||||
final_step: 'Ampesa a publikar! Inkluzo sin suivantes, tus publikasyones publikas pueden ser vistas por otros, por enshemplo en la linya de tiempo lokal o en etiketas. Tal vez keras aprezentarte kon la etiketa de #introduksiones.'
|
|
||||||
full_handle: Tu sovrenombre kompleto
|
|
||||||
full_handle_hint: Esto es lo ke le dirias a tus haverim para ke eyos puedan embiarte mesajes o segirte dizde otra instansya.
|
|
||||||
subject: Bienvenido a Mastodon
|
subject: Bienvenido a Mastodon
|
||||||
title: Bienvenido, %{name}!
|
title: Bienvenido, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -319,7 +319,7 @@ lt:
|
||||||
guide_link_text: Visi gali prisidėti.
|
guide_link_text: Visi gali prisidėti.
|
||||||
application_mailer:
|
application_mailer:
|
||||||
notification_preferences: Keisti el pašto parinktis
|
notification_preferences: Keisti el pašto parinktis
|
||||||
settings: 'Keisti el pašto parinktis: %{link}'
|
settings: 'Keisti el. pašto nuostatas: %{link}'
|
||||||
view: 'Peržiūra:'
|
view: 'Peržiūra:'
|
||||||
view_profile: Peržiurėti profilį
|
view_profile: Peržiurėti profilį
|
||||||
view_status: Peržiūrėti statusą
|
view_status: Peržiūrėti statusą
|
||||||
|
@ -608,10 +608,6 @@ lt:
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: Nustatyti profilį
|
edit_profile_action: Nustatyti profilį
|
||||||
explanation: Štai keletas patarimų, kaip pradėti
|
explanation: Štai keletas patarimų, kaip pradėti
|
||||||
final_action: Pradėti kelti įrašus
|
|
||||||
final_step: 'Pradėk skelbti! Net jei ir neturi sekėjų, tavo viešus įrašus gali matyti kiti, pavyzdžiui, vietinėje laiko skalėje arba saitažodžiuose. Galbūt norėsi prisistatyti saitažodyje #introductions.'
|
|
||||||
full_handle: Tavo pilnas slapyvardis
|
|
||||||
full_handle_hint: Štai ką pasakytum savo draugams, kad jie galėtų parašyti arba sekti tave iš kito serverio.
|
|
||||||
subject: Sveiki atvykę į Mastodon
|
subject: Sveiki atvykę į Mastodon
|
||||||
title: Sveiki atvykę, %{name}!
|
title: Sveiki atvykę, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|