Merge pull request #957 from ThibG/glitch-soc/merge-upstream

Merge upstream changes
lolsob-rspec
ThibG 2019-03-13 16:55:07 +01:00 committed by GitHub
commit ce9a322c0a
105 changed files with 962 additions and 2463 deletions

View File

@ -43,7 +43,7 @@ GEM
activemodel (>= 4.1, < 6) activemodel (>= 4.1, < 6)
case_transform (>= 0.2) case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3) jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.6.1) active_record_query_trace (1.6.2)
activejob (5.2.2) activejob (5.2.2)
activesupport (= 5.2.2) activesupport (= 5.2.2)
globalid (>= 0.3.6) globalid (>= 0.3.6)
@ -148,7 +148,7 @@ GEM
cocaine (0.5.8) cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
coderay (1.1.2) coderay (1.1.2)
concurrent-ruby (1.1.4) concurrent-ruby (1.1.5)
connection_pool (2.2.2) connection_pool (2.2.2)
crack (0.4.3) crack (0.4.3)
safe_yaml (~> 1.0.0) safe_yaml (~> 1.0.0)

View File

@ -2,21 +2,17 @@
class AboutController < ApplicationController class AboutController < ApplicationController
before_action :set_pack before_action :set_pack
before_action :set_body_classes layout 'public'
before_action :set_instance_presenter, only: [:show, :more, :terms] before_action :set_instance_presenter, only: [:show, :more, :terms]
def show def show
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer) @hide_navbar = true
@initial_state_json = serializable_resource.to_json
end end
def more def more; end
render layout: 'public'
end
def terms def terms; end
render layout: 'public'
end
private private
@ -27,21 +23,10 @@ class AboutController < ApplicationController
helper_method :new_user helper_method :new_user
def set_pack def set_pack
use_pack action_name == 'show' ? 'about' : 'common' use_pack 'common'
end end
def set_instance_presenter def set_instance_presenter
@instance_presenter = InstancePresenter.new @instance_presenter = InstancePresenter.new
end end
def set_body_classes
@body_classes = 'with-modals'
end
def initial_state_params
{
settings: { known_fediverse: Setting.show_known_fediverse_at_about_page },
token: current_session&.token,
}
end
end end

View File

@ -81,7 +81,13 @@ class AccountsController < ApplicationController
end end
def hashtag_scope def hashtag_scope
Status.tagged_with(Tag.find_by(name: params[:tag].downcase)&.id) tag = Tag.find_normalized(params[:tag])
if tag
Status.tagged_with(tag.id)
else
Status.none
end
end end
def set_account def set_account

View File

@ -69,7 +69,13 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
end end
def hashtag_scope def hashtag_scope
Status.tagged_with(Tag.find_by(name: params[:tagged])&.id) tag = Tag.find_normalized(params[:tagged])
if tag
Status.tagged_with(tag.id)
else
Status.none
end
end end
def pagination_params(core_params) def pagination_params(core_params)

View File

@ -14,7 +14,7 @@ class Api::V1::Timelines::TagController < Api::BaseController
private private
def load_tag def load_tag
@tag = Tag.find_by(name: params[:id].downcase) @tag = Tag.find_normalized(params[:id])
end end
def load_statuses def load_statuses

View File

@ -0,0 +1,39 @@
# frozen_string_literal: true
class PublicTimelinesController < ApplicationController
before_action :set_pack
layout 'public'
before_action :check_enabled
before_action :set_body_classes
before_action :set_instance_presenter
def show
respond_to do |format|
format.html do
@initial_state_json = ActiveModelSerializers::SerializableResource.new(
InitialStatePresenter.new(settings: { known_fediverse: Setting.show_known_fediverse_at_about_page }, token: current_session&.token),
serializer: InitialStateSerializer
).to_json
end
end
end
private
def check_enabled
raise ActiveRecord::RecordNotFound unless Setting.timeline_preview
end
def set_body_classes
@body_classes = 'with-modals'
end
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def set_pack
use_pack 'about'
end
end

View File

@ -9,13 +9,15 @@ class TagsController < ApplicationController
before_action :set_instance_presenter before_action :set_instance_presenter
def show def show
@tag = Tag.find_by!(name: params[:id].downcase) @tag = Tag.find_normalized!(params[:id])
respond_to do |format| respond_to do |format|
format.html do format.html do
use_pack 'about' use_pack 'about'
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer) @initial_state_json = ActiveModelSerializers::SerializableResource.new(
@initial_state_json = serializable_resource.to_json InitialStatePresenter.new(settings: {}, token: current_session&.token),
serializer: InitialStateSerializer
).to_json
end end
format.rss do format.rss do
@ -26,8 +28,7 @@ class TagsController < ApplicationController
end end
format.json do format.json do
@statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, params[:local]) @statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
.paginate_by_max_id(PAGE_SIZE, params[:max_id])
@statuses = cache_collection(@statuses, Status) @statuses = cache_collection(@statuses, Status)
render json: collection_presenter, render json: collection_presenter,
@ -56,11 +57,4 @@ class TagsController < ApplicationController
items: @statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) } items: @statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) }
) )
end end
def initial_state_params
{
settings: {},
token: current_session&.token,
}
end
end end

View File

@ -56,4 +56,12 @@ module HomeHelper
'emojify' 'emojify'
end end
end end
def optional_link_to(condition, path, options = {}, &block)
if condition
link_to(path, options, &block)
else
content_tag(:div, &block)
end
end
end end

View File

@ -47,6 +47,15 @@ module JsonLdHelper
!uri.start_with?('http://', 'https://') !uri.start_with?('http://', 'https://')
end end
def invalid_origin?(url)
return true if unsupported_uri_scheme?(url)
needle = Addressable::URI.parse(url).host
haystack = Addressable::URI.parse(@account.uri).host
!haystack.casecmp(needle).zero?
end
def canonicalize(json) def canonicalize(json)
graph = RDF::Graph.new << JSON::LD::API.toRdf(json, documentLoader: method(:load_jsonld_context)) graph = RDF::Graph.new << JSON::LD::API.toRdf(json, documentLoader: method(:load_jsonld_context))
graph.dump(:normalize) graph.dump(:normalize)

View File

@ -7,7 +7,6 @@ import { hydrateStore } from 'flavours/glitch/actions/store';
import { IntlProvider, addLocaleData } from 'react-intl'; import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'mastodon/locales'; import { getLocale } from 'mastodon/locales';
import PublicTimeline from 'flavours/glitch/features/standalone/public_timeline'; import PublicTimeline from 'flavours/glitch/features/standalone/public_timeline';
import CommunityTimeline from 'flavours/glitch/features/standalone/community_timeline';
import HashtagTimeline from 'flavours/glitch/features/standalone/hashtag_timeline'; import HashtagTimeline from 'flavours/glitch/features/standalone/hashtag_timeline';
import ModalContainer from 'flavours/glitch/features/ui/containers/modal_container'; import ModalContainer from 'flavours/glitch/features/ui/containers/modal_container';
import initialState from 'flavours/glitch/util/initial_state'; import initialState from 'flavours/glitch/util/initial_state';
@ -26,24 +25,22 @@ export default class TimelineContainer extends React.PureComponent {
static propTypes = { static propTypes = {
locale: PropTypes.string.isRequired, locale: PropTypes.string.isRequired,
hashtag: PropTypes.string, hashtag: PropTypes.string,
showPublicTimeline: PropTypes.bool.isRequired, local: PropTypes.bool,
}; };
static defaultProps = { static defaultProps = {
showPublicTimeline: initialState.settings.known_fediverse, local: !initialState.settings.known_fediverse,
}; };
render () { render () {
const { locale, hashtag, showPublicTimeline } = this.props; const { locale, hashtag, local } = this.props;
let timeline; let timeline;
if (hashtag) { if (hashtag) {
timeline = <HashtagTimeline hashtag={hashtag} />; timeline = <HashtagTimeline hashtag={hashtag} />;
} else if (showPublicTimeline) {
timeline = <PublicTimeline />;
} else { } else {
timeline = <CommunityTimeline />; timeline = <PublicTimeline local={local} />;
} }
return ( return (
@ -51,6 +48,7 @@ export default class TimelineContainer extends React.PureComponent {
<Provider store={store}> <Provider store={store}>
<Fragment> <Fragment>
{timeline} {timeline}
{ReactDOM.createPortal( {ReactDOM.createPortal(
<ModalContainer />, <ModalContainer />,
document.getElementById('modal-container'), document.getElementById('modal-container'),

View File

@ -1,71 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
import { expandCommunityTimeline } from 'flavours/glitch/actions/timelines';
import Column from 'flavours/glitch/components/column';
import ColumnHeader from 'flavours/glitch/components/column_header';
import { defineMessages, injectIntl } from 'react-intl';
import { connectCommunityStream } from 'flavours/glitch/actions/streaming';
const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
});
@connect()
@injectIntl
export default class CommunityTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
handleHeaderClick = () => {
this.column.scrollTop();
}
setRef = c => {
this.column = c;
}
componentDidMount () {
const { dispatch } = this.props;
dispatch(expandCommunityTimeline());
this.disconnect = dispatch(connectCommunityStream());
}
componentWillUnmount () {
if (this.disconnect) {
this.disconnect();
this.disconnect = null;
}
}
handleLoadMore = maxId => {
this.props.dispatch(expandCommunityTimeline({ maxId }));
}
render () {
const { intl } = this.props;
return (
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}>
<ColumnHeader
icon='users'
title={intl.formatMessage(messages.title)}
onClick={this.handleHeaderClick}
/>
<StatusListContainer
timelineId='community'
onLoadMore={this.handleLoadMore}
scrollKey='standalone_public_timeline'
trackScroll={false}
/>
</Column>
);
}
}

View File

@ -1,70 +1,112 @@
import React from 'react'; import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { expandPublicTimeline } from 'flavours/glitch/actions/timelines'; import { expandPublicTimeline, expandCommunityTimeline } from 'flavours/glitch/actions/timelines';
import Column from 'flavours/glitch/components/column'; import { connectPublicStream, connectCommunityStream } from 'flavours/glitch/actions/streaming';
import ColumnHeader from 'flavours/glitch/components/column_header'; import Masonry from 'react-masonry-infinite';
import { defineMessages, injectIntl } from 'react-intl'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import { connectPublicStream } from 'flavours/glitch/actions/streaming'; import DetailedStatusContainer from 'flavours/glitch/features/status/containers/detailed_status_container';
import { debounce } from 'lodash';
import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
const messages = defineMessages({ const mapStateToProps = (state, { local }) => {
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' }, const timeline = state.getIn(['timelines', local ? 'community' : 'public'], ImmutableMap());
});
@connect() return {
@injectIntl statusIds: timeline.get('items', ImmutableList()),
export default class PublicTimeline extends React.PureComponent { isLoading: timeline.get('isLoading', false),
hasMore: timeline.get('hasMore', false),
};
};
export default @connect(mapStateToProps)
class PublicTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired, statusIds: ImmutablePropTypes.list.isRequired,
isLoading: PropTypes.bool.isRequired,
hasMore: PropTypes.bool.isRequired,
local: PropTypes.bool,
}; };
handleHeaderClick = () => {
this.column.scrollTop();
}
setRef = c => {
this.column = c;
}
componentDidMount () { componentDidMount () {
const { dispatch } = this.props; this._connect();
}
dispatch(expandPublicTimeline()); componentDidUpdate (prevProps) {
this.disconnect = dispatch(connectPublicStream()); if (prevProps.local !== this.props.local) {
this._disconnect();
this._connect();
}
} }
componentWillUnmount () { componentWillUnmount () {
this._disconnect();
}
_connect () {
const { dispatch, local } = this.props;
dispatch(local ? expandCommunityTimeline() : expandPublicTimeline());
this.disconnect = dispatch(local ? connectCommunityStream() : connectPublicStream());
}
_disconnect () {
if (this.disconnect) { if (this.disconnect) {
this.disconnect(); this.disconnect();
this.disconnect = null; this.disconnect = null;
} }
} }
handleLoadMore = maxId => { handleLoadMore = () => {
this.props.dispatch(expandPublicTimeline({ maxId })); const { dispatch, statusIds, local } = this.props;
const maxId = statusIds.last();
if (maxId) {
dispatch(local ? expandCommunityTimeline({ maxId }) : expandPublicTimeline({ maxId }));
}
} }
setRef = c => {
this.masonry = c;
}
handleHeightChange = debounce(() => {
if (!this.masonry) {
return;
}
this.masonry.forcePack();
}, 50)
render () { render () {
const { intl } = this.props; const { statusIds, hasMore, isLoading } = this.props;
const sizes = [
{ columns: 1, gutter: 0 },
{ mq: '415px', columns: 1, gutter: 10 },
{ mq: '640px', columns: 2, gutter: 10 },
{ mq: '960px', columns: 3, gutter: 10 },
{ mq: '1255px', columns: 3, gutter: 10 },
];
const loader = (isLoading && statusIds.isEmpty()) ? <LoadingIndicator key={0} /> : undefined;
return ( return (
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}> <Masonry ref={this.setRef} className='statuses-grid' hasMore={hasMore} loadMore={this.handleLoadMore} sizes={sizes} loader={loader}>
<ColumnHeader {statusIds.map(statusId => (
icon='globe' <div className='statuses-grid__item' key={statusId}>
title={intl.formatMessage(messages.title)} <DetailedStatusContainer
onClick={this.handleHeaderClick} id={statusId}
compact
measureHeight
onHeightChange={this.handleHeightChange}
/> />
</div>
<StatusListContainer )).toArray()}
timelineId='public' </Masonry>
onLoadMore={this.handleLoadMore}
scrollKey='standalone_public_timeline'
trackScroll={false}
/>
</Column>
); );
} }

View File

@ -23,7 +23,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
}; };
static propTypes = { static propTypes = {
status: ImmutablePropTypes.map.isRequired, status: ImmutablePropTypes.map,
settings: ImmutablePropTypes.map.isRequired, settings: ImmutablePropTypes.map.isRequired,
onOpenMedia: PropTypes.func.isRequired, onOpenMedia: PropTypes.func.isRequired,
onOpenVideo: PropTypes.func.isRequired, onOpenVideo: PropTypes.func.isRequired,

View File

@ -193,6 +193,7 @@ $small-breakpoint: 960px;
} }
strong { strong {
font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 32px; font-size: 32px;
line-height: 48px; line-height: 48px;
@ -282,168 +283,6 @@ $small-breakpoint: 960px;
} }
.landing-page { .landing-page {
.grid {
display: grid;
grid-gap: 10px;
grid-template-columns: 1fr 2fr;
grid-auto-columns: 25%;
grid-auto-rows: max-content;
.column-0 {
display: none;
}
.column-1 {
grid-column: 1;
grid-row: 1;
}
.column-2 {
grid-column: 2;
grid-row: 1;
}
.column-3 {
grid-column: 3;
grid-row: 1 / 3;
}
.column-4 {
grid-column: 1 / 3;
grid-row: 2;
}
}
@media screen and (max-width: $small-breakpoint) {
.grid {
grid-template-columns: 40% 60%;
.column-0 {
display: none;
}
.column-1 {
grid-column: 1;
grid-row: 1;
&.non-preview .landing-page__forms {
height: 100%;
}
}
.column-2 {
grid-column: 2;
grid-row: 1 / 3;
&.non-preview {
grid-column: 2;
grid-row: 1;
}
}
.column-3 {
grid-column: 1;
grid-row: 2 / 4;
}
.column-4 {
grid-column: 2;
grid-row: 3;
&.non-preview {
grid-column: 1 / 3;
grid-row: 2;
}
}
}
}
@media screen and (max-width: $column-breakpoint) {
.grid {
grid-template-columns: 100%;
.column-0 {
display: block;
grid-column: 1;
grid-row: 1;
}
.column-1 {
grid-column: 1;
grid-row: 3;
.brand {
display: none;
}
}
.column-2 {
grid-column: 1;
grid-row: 2;
.landing-page__logo,
.landing-page__call-to-action {
display: none;
}
&.non-preview {
grid-column: 1;
grid-row: 2;
}
}
.column-3 {
grid-column: 1;
grid-row: 5;
}
.column-4 {
grid-column: 1;
grid-row: 4;
&.non-preview {
grid-column: 1;
grid-row: 4;
}
}
}
}
.column-flex {
display: flex;
flex-direction: column;
}
.separator-or {
position: relative;
margin: 40px 0;
text-align: center;
&::before {
content: "";
display: block;
width: 100%;
height: 0;
border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
position: absolute;
top: 50%;
left: 0;
}
span {
display: inline-block;
background: $ui-base-color;
font-size: 12px;
font-weight: 500;
color: $darker-text-color;
text-transform: uppercase;
position: relative;
z-index: 1;
padding: 0 8px;
cursor: default;
}
}
p, p,
li { li {
font-family: $font-sans-serif, sans-serif; font-family: $font-sans-serif, sans-serif;
@ -460,28 +299,6 @@ $small-breakpoint: 960px;
} }
} }
.closed-registrations-message {
margin-top: 20px;
&,
p {
text-align: center;
font-size: 12px;
line-height: 18px;
color: $darker-text-color;
margin-bottom: 0;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
p:last-child {
margin-bottom: 0;
}
}
em { em {
display: inline; display: inline;
margin: 0; margin: 0;
@ -595,187 +412,6 @@ $small-breakpoint: 960px;
} }
} }
.container-alt {
width: 100%;
box-sizing: border-box;
max-width: 800px;
margin: 0 auto;
word-wrap: break-word;
}
.header-wrapper {
padding-top: 15px;
background: $ui-base-color;
background: linear-gradient(150deg, lighten($ui-base-color, 8%), $ui-base-color);
position: relative;
&.compact {
background: $ui-base-color;
padding-bottom: 15px;
.hero .heading {
padding-bottom: 20px;
font-family: $font-sans-serif, sans-serif;
font-size: 16px;
font-weight: 400;
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
}
}
.brand {
a {
padding-left: 0;
padding-right: 0;
color: $white;
}
img {
height: 32px;
position: relative;
top: 4px;
left: -10px;
}
}
.header {
line-height: 30px;
overflow: hidden;
.container-alt {
display: flex;
justify-content: space-between;
}
.links {
position: relative;
z-index: 4;
a {
display: flex;
justify-content: center;
align-items: center;
color: $darker-text-color;
text-decoration: none;
padding: 12px 16px;
line-height: 32px;
font-family: $font-display, sans-serif;
font-weight: 500;
font-size: 14px;
&:hover {
color: $secondary-text-color;
}
}
ul {
list-style: none;
margin: 0;
li {
display: inline-block;
vertical-align: bottom;
margin: 0;
&:first-child a {
padding-left: 0;
}
&:last-child a {
padding-right: 0;
}
}
}
}
.hero {
margin-top: 50px;
align-items: center;
position: relative;
.heading {
position: relative;
z-index: 4;
padding-bottom: 150px;
}
.simple_form,
.closed-registrations-message {
background: darken($ui-base-color, 4%);
width: 280px;
padding: 15px 20px;
border-radius: 4px 4px 0 0;
line-height: initial;
position: relative;
z-index: 4;
.actions {
margin-bottom: 0;
button,
.button,
.block-button {
margin-bottom: 0;
}
}
}
.closed-registrations-message {
min-height: 330px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
}
.about-short {
background: darken($ui-base-color, 4%);
padding: 50px 0 30px;
font-family: $font-sans-serif, sans-serif;
font-size: 16px;
font-weight: 400;
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
&.alternative {
padding: 10px 0;
.brand {
text-align: center;
padding: 30px 0;
margin-bottom: 10px;
img {
position: static;
padding: 10px 0;
}
@media screen and (max-width: $small-breakpoint) {
padding: 15px 0;
}
@media screen and (max-width: $column-breakpoint) {
padding: 0;
margin-bottom: -10px;
}
}
}
&__information, &__information,
&__forms { &__forms {
padding: 20px; padding: 20px;
@ -970,215 +606,7 @@ $small-breakpoint: 960px;
} }
} }
&__forms {
height: 100%;
@media screen and (max-width: $small-breakpoint) {
height: auto;
}
@media screen and (max-width: $column-breakpoint) {
background: transparent;
box-shadow: none;
padding: 0 20px;
margin-top: 30px;
margin-bottom: 40px;
.separator-or {
span {
background: darken($ui-base-color, 8%);
}
}
}
hr {
margin: 40px 0;
}
.button {
display: block;
}
.subtle-hint a {
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
}
}
#mastodon-timeline {
display: flex;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
font-family: $font-sans-serif, sans-serif;
font-size: 13px;
line-height: 18px;
font-weight: 400;
color: $primary-text-color;
width: 100%;
flex: 1 1 auto;
overflow: hidden;
height: 100%;
.column-header {
color: inherit;
font-family: inherit;
font-size: 16px;
line-height: inherit;
font-weight: inherit;
margin: 0;
padding: 0;
}
.column {
padding: 0;
border-radius: 4px;
overflow: hidden;
width: 100%;
}
.scrollable {
height: 400px;
}
p {
font-size: inherit;
line-height: inherit;
font-weight: inherit;
color: $primary-text-color;
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
a {
color: $secondary-text-color;
text-decoration: none;
}
}
.attachment-list__list {
margin-left: 0;
list-style: none;
li {
font-size: inherit;
line-height: inherit;
font-weight: inherit;
margin-bottom: 0;
a {
color: $dark-text-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
}
@media screen and (max-width: $column-breakpoint) {
display: none;
}
}
&__features {
& > p {
padding-right: 60px;
}
.features-list {
margin: 40px 0;
margin-top: 30px;
}
&__action {
text-align: center;
}
}
.features-list {
.features-list__row {
display: flex;
padding: 10px 0;
justify-content: space-between;
.visual {
flex: 0 0 auto;
display: flex;
align-items: center;
margin-left: 15px;
.fa {
display: block;
color: $darker-text-color;
font-size: 48px;
}
}
.text {
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
h6 {
font-size: inherit;
line-height: inherit;
margin-bottom: 0;
}
}
}
@media screen and (min-width: $small-breakpoint) {
display: grid;
grid-gap: 30px;
grid-template-columns: 1fr 1fr;
grid-auto-columns: 50%;
grid-auto-rows: max-content;
}
}
.footer-links {
padding-bottom: 50px;
text-align: right;
color: $dark-text-color;
p {
font-size: 14px;
}
a {
color: inherit;
text-decoration: underline;
}
}
&__footer {
margin-top: 10px;
text-align: center;
color: $dark-text-color;
p {
font-size: 14px;
a {
color: inherit;
text-decoration: underline;
}
}
}
@media screen and (max-width: 840px) { @media screen and (max-width: 840px) {
.container-alt {
padding: 0 20px;
}
.information-board { .information-board {
.container-alt { .container-alt {
padding-right: 20px; padding-right: 20px;
@ -1214,109 +642,217 @@ $small-breakpoint: 960px;
.features .container-alt { .features .container-alt {
display: block; display: block;
} }
.header {
.links {
padding-top: 15px;
background: darken($ui-base-color, 4%);
a {
padding: 12px 8px;
}
.nav {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.brand img {
left: 0;
top: 0;
}
}
.hero {
margin-top: 30px;
padding: 0;
.heading {
padding: 30px 20px;
text-align: center;
}
.simple_form,
.closed-registrations-message {
background: darken($ui-base-color, 8%);
width: 100%;
border-radius: 0;
box-sizing: border-box;
}
}
}
} }
.cta { .cta {
margin: 20px; margin: 20px;
} }
&.tag-page {
@media screen and (max-width: $column-breakpoint) {
padding: 0;
.container {
padding: 0;
} }
#mastodon-timeline { .landing {
margin-bottom: 100px;
@media screen and (max-width: 738px) {
margin-bottom: 0;
}
&__brand {
display: flex; display: flex;
height: 100vh; justify-content: center;
align-items: center;
padding: 100px;
img {
height: 52px;
}
@media screen and (max-width: $no-gap-breakpoint) {
padding: 0;
margin-bottom: 30px;
}
}
.directory {
margin-top: 30px;
background: transparent;
box-shadow: none;
border-radius: 0;
}
.hero-widget {
margin-top: 30px;
margin-bottom: 0;
h4 {
padding: 10px;
text-transform: uppercase;
font-weight: 700;
font-size: 13px;
color: $darker-text-color;
}
&__text {
border-radius: 0;
padding-bottom: 0;
}
&__footer {
background: $ui-base-color;
padding: 10px;
border-radius: 0 0 4px 4px;
display: flex;
&__column {
flex: 1 1 50%;
}
}
.account {
padding: 10px 0;
border-bottom: 0;
.account__display-name {
display: flex;
align-items: center;
}
.account__avatar {
width: 44px;
height: 44px;
background-size: 44px 44px;
}
}
&__counter {
padding: 10px;
strong {
font-family: $font-display, sans-serif;
font-size: 15px;
font-weight: 700;
display: block;
}
span {
font-size: 14px;
color: $darker-text-color;
}
}
}
.simple_form .user_agreement .label_input > label {
font-weight: 400;
color: $darker-text-color;
}
.simple_form p.lead {
color: $darker-text-color;
font-size: 15px;
line-height: 20px;
font-weight: 400;
margin-bottom: 25px;
}
&__grid {
max-width: 960px;
margin: 0 auto;
display: grid;
grid-template-columns: minmax(0, 50%) minmax(0, 50%);
grid-gap: 30px;
@media screen and (max-width: 738px) {
grid-template-columns: minmax(0, 100%);
grid-gap: 10px;
&__column-login {
grid-row: 1;
display: flex;
flex-direction: column;
.box-widget {
order: 2;
flex: 0 0 auto;
}
.hero-widget {
margin-top: 0;
margin-bottom: 10px;
order: 1;
flex: 0 0 auto;
}
}
&__column-registration {
grid-row: 2;
}
.directory {
margin-top: 10px;
}
}
@media screen and (max-width: $no-gap-breakpoint) {
grid-gap: 0;
.hero-widget {
display: block;
margin-bottom: 0;
box-shadow: none;
&__img,
&__img img,
&__footer {
border-radius: 0; border-radius: 0;
} }
} }
.grid { .hero-widget,
@media screen and (min-width: $small-breakpoint) { .box-widget,
grid-template-columns: 33% 67%; .directory__tag {
border-bottom: 1px solid lighten($ui-base-color, 8%);
} }
.column-2 { .directory {
grid-column: 2; margin-top: 0;
grid-row: 1;
&__tag {
margin-bottom: 0;
& > a,
& > div {
border-radius: 0;
box-shadow: none;
}
&:last-child {
border-bottom: 0;
}
}
}
}
} }
} }
.brand { .brand {
text-align: unset; position: relative;
padding: 0; text-decoration: none;
}
img { .brand__tagline {
height: 48px; display: block;
position: absolute;
bottom: -10px;
left: 50px;
width: 300px;
color: $ui-primary-color;
text-decoration: none;
font-size: 14px;
@media screen and (max-width: $no-gap-breakpoint) {
position: static;
width: auto; width: auto;
margin-top: 20px;
color: $dark-text-color;
} }
} }
.cta {
margin: 0;
.button {
margin-right: 4px;
}
}
@media screen and (max-width: $column-breakpoint) {
.grid {
grid-gap: 0;
.column-1 {
grid-column: 1;
grid-row: 1;
}
.column-2 {
display: none;
}
}
}
}
}

View File

@ -68,6 +68,17 @@ code {
top: 2px; top: 2px;
left: 0; left: 0;
} }
label a {
color: $highlight-text-color;
text-decoration: underline;
&:hover,
&:active,
&:focus {
text-decoration: none;
}
}
} }
} }
@ -305,7 +316,7 @@ code {
box-shadow: none; box-shadow: none;
} }
&:focus:invalid { &:focus:invalid:not(:placeholder-shown) {
border-color: lighten($error-red, 12%); border-color: lighten($error-red, 12%);
} }
@ -346,6 +357,10 @@ code {
} }
} }
.input.disabled {
opacity: 0.5;
}
.actions { .actions {
margin-top: 30px; margin-top: 30px;
display: flex; display: flex;
@ -392,6 +407,10 @@ code {
background-color: darken($ui-highlight-color, 5%); background-color: darken($ui-highlight-color, 5%);
} }
&:disabled:hover {
background-color: $ui-primary-color;
}
&.negative { &.negative {
background: $error-value-color; background: $error-value-color;

View File

@ -191,3 +191,15 @@
color: darken($simple-background-color, 14%); color: darken($simple-background-color, 14%);
} }
} }
.muted .poll {
color: $dark-text-color;
&__chart {
background: rgba(darken($ui-primary-color, 14%), 0.2);
&.leading {
background: rgba($ui-highlight-color, 0.2);
}
}
}

View File

@ -295,6 +295,11 @@
cursor: default; cursor: default;
} }
&.disabled > div {
opacity: 0.5;
cursor: default;
}
h4 { h4 {
flex: 1 1 auto; flex: 1 1 auto;
font-size: 18px; font-size: 18px;

View File

@ -7,7 +7,6 @@ import { hydrateStore } from '../actions/store';
import { IntlProvider, addLocaleData } from 'react-intl'; import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from '../locales'; import { getLocale } from '../locales';
import PublicTimeline from '../features/standalone/public_timeline'; import PublicTimeline from '../features/standalone/public_timeline';
import CommunityTimeline from '../features/standalone/community_timeline';
import HashtagTimeline from '../features/standalone/hashtag_timeline'; import HashtagTimeline from '../features/standalone/hashtag_timeline';
import ModalContainer from '../features/ui/containers/modal_container'; import ModalContainer from '../features/ui/containers/modal_container';
import initialState from '../initial_state'; import initialState from '../initial_state';
@ -26,24 +25,22 @@ export default class TimelineContainer extends React.PureComponent {
static propTypes = { static propTypes = {
locale: PropTypes.string.isRequired, locale: PropTypes.string.isRequired,
hashtag: PropTypes.string, hashtag: PropTypes.string,
showPublicTimeline: PropTypes.bool.isRequired, local: PropTypes.bool,
}; };
static defaultProps = { static defaultProps = {
showPublicTimeline: initialState.settings.known_fediverse, local: !initialState.settings.known_fediverse,
}; };
render () { render () {
const { locale, hashtag, showPublicTimeline } = this.props; const { locale, hashtag, local } = this.props;
let timeline; let timeline;
if (hashtag) { if (hashtag) {
timeline = <HashtagTimeline hashtag={hashtag} />; timeline = <HashtagTimeline hashtag={hashtag} />;
} else if (showPublicTimeline) {
timeline = <PublicTimeline />;
} else { } else {
timeline = <CommunityTimeline />; timeline = <PublicTimeline local={local} />;
} }
return ( return (
@ -51,6 +48,7 @@ export default class TimelineContainer extends React.PureComponent {
<Provider store={store}> <Provider store={store}>
<Fragment> <Fragment>
{timeline} {timeline}
{ReactDOM.createPortal( {ReactDOM.createPortal(
<ModalContainer />, <ModalContainer />,
document.getElementById('modal-container'), document.getElementById('modal-container'),

View File

@ -1,71 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import StatusListContainer from '../../ui/containers/status_list_container';
import { expandCommunityTimeline } from '../../../actions/timelines';
import Column from '../../../components/column';
import ColumnHeader from '../../../components/column_header';
import { defineMessages, injectIntl } from 'react-intl';
import { connectCommunityStream } from '../../../actions/streaming';
const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
});
export default @connect()
@injectIntl
class CommunityTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
handleHeaderClick = () => {
this.column.scrollTop();
}
setRef = c => {
this.column = c;
}
componentDidMount () {
const { dispatch } = this.props;
dispatch(expandCommunityTimeline());
this.disconnect = dispatch(connectCommunityStream());
}
componentWillUnmount () {
if (this.disconnect) {
this.disconnect();
this.disconnect = null;
}
}
handleLoadMore = maxId => {
this.props.dispatch(expandCommunityTimeline({ maxId }));
}
render () {
const { intl } = this.props;
return (
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}>
<ColumnHeader
icon='users'
title={intl.formatMessage(messages.title)}
onClick={this.handleHeaderClick}
/>
<StatusListContainer
timelineId='community'
onLoadMore={this.handleLoadMore}
scrollKey='standalone_public_timeline'
trackScroll={false}
/>
</Column>
);
}
}

View File

@ -2,13 +2,13 @@ import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { expandHashtagTimeline } from '../../../actions/timelines'; import { expandHashtagTimeline } from 'mastodon/actions/timelines';
import { connectHashtagStream } from '../../../actions/streaming'; import { connectHashtagStream } from 'mastodon/actions/streaming';
import Masonry from 'react-masonry-infinite'; import Masonry from 'react-masonry-infinite';
import { List as ImmutableList } from 'immutable'; import { List as ImmutableList } from 'immutable';
import DetailedStatusContainer from '../../status/containers/detailed_status_container'; import DetailedStatusContainer from 'mastodon/features/status/containers/detailed_status_container';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import LoadingIndicator from '../../../components/loading_indicator'; import LoadingIndicator from 'mastodon/components/loading_indicator';
const mapStateToProps = (state, { hashtag }) => ({ const mapStateToProps = (state, { hashtag }) => ({
statusIds: state.getIn(['timelines', `hashtag:${hashtag}`, 'items'], ImmutableList()), statusIds: state.getIn(['timelines', `hashtag:${hashtag}`, 'items'], ImmutableList()),

View File

@ -1,70 +1,112 @@
import React from 'react'; import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import StatusListContainer from '../../ui/containers/status_list_container'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { expandPublicTimeline } from '../../../actions/timelines'; import { expandPublicTimeline, expandCommunityTimeline } from 'mastodon/actions/timelines';
import Column from '../../../components/column'; import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming';
import ColumnHeader from '../../../components/column_header'; import Masonry from 'react-masonry-infinite';
import { defineMessages, injectIntl } from 'react-intl'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import { connectPublicStream } from '../../../actions/streaming'; import DetailedStatusContainer from 'mastodon/features/status/containers/detailed_status_container';
import { debounce } from 'lodash';
import LoadingIndicator from 'mastodon/components/loading_indicator';
const messages = defineMessages({ const mapStateToProps = (state, { local }) => {
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' }, const timeline = state.getIn(['timelines', local ? 'community' : 'public'], ImmutableMap());
});
export default @connect() return {
@injectIntl statusIds: timeline.get('items', ImmutableList()),
isLoading: timeline.get('isLoading', false),
hasMore: timeline.get('hasMore', false),
};
};
export default @connect(mapStateToProps)
class PublicTimeline extends React.PureComponent { class PublicTimeline extends React.PureComponent {
static propTypes = { static propTypes = {
dispatch: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired, statusIds: ImmutablePropTypes.list.isRequired,
isLoading: PropTypes.bool.isRequired,
hasMore: PropTypes.bool.isRequired,
local: PropTypes.bool,
}; };
handleHeaderClick = () => {
this.column.scrollTop();
}
setRef = c => {
this.column = c;
}
componentDidMount () { componentDidMount () {
const { dispatch } = this.props; this._connect();
}
dispatch(expandPublicTimeline()); componentDidUpdate (prevProps) {
this.disconnect = dispatch(connectPublicStream()); if (prevProps.local !== this.props.local) {
this._disconnect();
this._connect();
}
} }
componentWillUnmount () { componentWillUnmount () {
this._disconnect();
}
_connect () {
const { dispatch, local } = this.props;
dispatch(local ? expandCommunityTimeline() : expandPublicTimeline());
this.disconnect = dispatch(local ? connectCommunityStream() : connectPublicStream());
}
_disconnect () {
if (this.disconnect) { if (this.disconnect) {
this.disconnect(); this.disconnect();
this.disconnect = null; this.disconnect = null;
} }
} }
handleLoadMore = maxId => { handleLoadMore = () => {
this.props.dispatch(expandPublicTimeline({ maxId })); const { dispatch, statusIds, local } = this.props;
const maxId = statusIds.last();
if (maxId) {
dispatch(local ? expandCommunityTimeline({ maxId }) : expandPublicTimeline({ maxId }));
}
} }
setRef = c => {
this.masonry = c;
}
handleHeightChange = debounce(() => {
if (!this.masonry) {
return;
}
this.masonry.forcePack();
}, 50)
render () { render () {
const { intl } = this.props; const { statusIds, hasMore, isLoading } = this.props;
const sizes = [
{ columns: 1, gutter: 0 },
{ mq: '415px', columns: 1, gutter: 10 },
{ mq: '640px', columns: 2, gutter: 10 },
{ mq: '960px', columns: 3, gutter: 10 },
{ mq: '1255px', columns: 3, gutter: 10 },
];
const loader = (isLoading && statusIds.isEmpty()) ? <LoadingIndicator key={0} /> : undefined;
return ( return (
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}> <Masonry ref={this.setRef} className='statuses-grid' hasMore={hasMore} loadMore={this.handleLoadMore} sizes={sizes} loader={loader}>
<ColumnHeader {statusIds.map(statusId => (
icon='globe' <div className='statuses-grid__item' key={statusId}>
title={intl.formatMessage(messages.title)} <DetailedStatusContainer
onClick={this.handleHeaderClick} id={statusId}
compact
measureHeight
onHeightChange={this.handleHeightChange}
/> />
</div>
<StatusListContainer )).toArray()}
timelineId='public' </Masonry>
onLoadMore={this.handleLoadMore}
scrollKey='standalone_public_timeline'
trackScroll={false}
/>
</Column>
); );
} }

View File

@ -23,7 +23,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
}; };
static propTypes = { static propTypes = {
status: ImmutablePropTypes.map.isRequired, status: ImmutablePropTypes.map,
onOpenMedia: PropTypes.func.isRequired, onOpenMedia: PropTypes.func.isRequired,
onOpenVideo: PropTypes.func.isRequired, onOpenVideo: PropTypes.func.isRequired,
onToggleHidden: PropTypes.func.isRequired, onToggleHidden: PropTypes.func.isRequired,

View File

@ -193,6 +193,7 @@ $small-breakpoint: 960px;
} }
strong { strong {
font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 32px; font-size: 32px;
line-height: 48px; line-height: 48px;
@ -280,168 +281,6 @@ $small-breakpoint: 960px;
} }
.landing-page { .landing-page {
.grid {
display: grid;
grid-gap: 10px;
grid-template-columns: 1fr 2fr;
grid-auto-columns: 25%;
grid-auto-rows: max-content;
.column-0 {
display: none;
}
.column-1 {
grid-column: 1;
grid-row: 1;
}
.column-2 {
grid-column: 2;
grid-row: 1;
}
.column-3 {
grid-column: 3;
grid-row: 1 / 3;
}
.column-4 {
grid-column: 1 / 3;
grid-row: 2;
}
}
@media screen and (max-width: $small-breakpoint) {
.grid {
grid-template-columns: 40% 60%;
.column-0 {
display: none;
}
.column-1 {
grid-column: 1;
grid-row: 1;
&.non-preview .landing-page__forms {
height: 100%;
}
}
.column-2 {
grid-column: 2;
grid-row: 1 / 3;
&.non-preview {
grid-column: 2;
grid-row: 1;
}
}
.column-3 {
grid-column: 1;
grid-row: 2 / 4;
}
.column-4 {
grid-column: 2;
grid-row: 3;
&.non-preview {
grid-column: 1 / 3;
grid-row: 2;
}
}
}
}
@media screen and (max-width: $column-breakpoint) {
.grid {
grid-template-columns: 100%;
.column-0 {
display: block;
grid-column: 1;
grid-row: 1;
}
.column-1 {
grid-column: 1;
grid-row: 3;
.brand {
display: none;
}
}
.column-2 {
grid-column: 1;
grid-row: 2;
.landing-page__logo,
.landing-page__call-to-action {
display: none;
}
&.non-preview {
grid-column: 1;
grid-row: 2;
}
}
.column-3 {
grid-column: 1;
grid-row: 5;
}
.column-4 {
grid-column: 1;
grid-row: 4;
&.non-preview {
grid-column: 1;
grid-row: 4;
}
}
}
}
.column-flex {
display: flex;
flex-direction: column;
}
.separator-or {
position: relative;
margin: 40px 0;
text-align: center;
&::before {
content: "";
display: block;
width: 100%;
height: 0;
border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
position: absolute;
top: 50%;
left: 0;
}
span {
display: inline-block;
background: $ui-base-color;
font-size: 12px;
font-weight: 500;
color: $darker-text-color;
text-transform: uppercase;
position: relative;
z-index: 1;
padding: 0 8px;
cursor: default;
}
}
p, p,
li { li {
font-family: $font-sans-serif, sans-serif; font-family: $font-sans-serif, sans-serif;
@ -458,28 +297,6 @@ $small-breakpoint: 960px;
} }
} }
.closed-registrations-message {
margin-top: 20px;
&,
p {
text-align: center;
font-size: 12px;
line-height: 18px;
color: $darker-text-color;
margin-bottom: 0;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
p:last-child {
margin-bottom: 0;
}
}
em { em {
display: inline; display: inline;
margin: 0; margin: 0;
@ -593,187 +410,6 @@ $small-breakpoint: 960px;
} }
} }
.container-alt {
width: 100%;
box-sizing: border-box;
max-width: 800px;
margin: 0 auto;
word-wrap: break-word;
}
.header-wrapper {
padding-top: 15px;
background: $ui-base-color;
background: linear-gradient(150deg, lighten($ui-base-color, 8%), $ui-base-color);
position: relative;
&.compact {
background: $ui-base-color;
padding-bottom: 15px;
.hero .heading {
padding-bottom: 20px;
font-family: $font-sans-serif, sans-serif;
font-size: 16px;
font-weight: 400;
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
}
}
.brand {
a {
padding-left: 0;
padding-right: 0;
color: $white;
}
img {
height: 32px;
position: relative;
top: 4px;
left: -10px;
}
}
.header {
line-height: 30px;
overflow: hidden;
.container-alt {
display: flex;
justify-content: space-between;
}
.links {
position: relative;
z-index: 4;
a {
display: flex;
justify-content: center;
align-items: center;
color: $darker-text-color;
text-decoration: none;
padding: 12px 16px;
line-height: 32px;
font-family: $font-display, sans-serif;
font-weight: 500;
font-size: 14px;
&:hover {
color: $secondary-text-color;
}
}
ul {
list-style: none;
margin: 0;
li {
display: inline-block;
vertical-align: bottom;
margin: 0;
&:first-child a {
padding-left: 0;
}
&:last-child a {
padding-right: 0;
}
}
}
}
.hero {
margin-top: 50px;
align-items: center;
position: relative;
.heading {
position: relative;
z-index: 4;
padding-bottom: 150px;
}
.simple_form,
.closed-registrations-message {
background: darken($ui-base-color, 4%);
width: 280px;
padding: 15px 20px;
border-radius: 4px 4px 0 0;
line-height: initial;
position: relative;
z-index: 4;
.actions {
margin-bottom: 0;
button,
.button,
.block-button {
margin-bottom: 0;
}
}
}
.closed-registrations-message {
min-height: 330px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
}
.about-short {
background: darken($ui-base-color, 4%);
padding: 50px 0 30px;
font-family: $font-sans-serif, sans-serif;
font-size: 16px;
font-weight: 400;
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
a {
color: $highlight-text-color;
text-decoration: underline;
}
}
&.alternative {
padding: 10px 0;
.brand {
text-align: center;
padding: 30px 0;
margin-bottom: 10px;
img {
position: static;
padding: 10px 0;
}
@media screen and (max-width: $small-breakpoint) {
padding: 15px 0;
}
@media screen and (max-width: $column-breakpoint) {
padding: 0;
margin-bottom: -10px;
}
}
}
&__information, &__information,
&__forms { &__forms {
padding: 20px; padding: 20px;
@ -967,215 +603,7 @@ $small-breakpoint: 960px;
} }
} }
&__forms {
height: 100%;
@media screen and (max-width: $small-breakpoint) {
height: auto;
}
@media screen and (max-width: $column-breakpoint) {
background: transparent;
box-shadow: none;
padding: 0 20px;
margin-top: 30px;
margin-bottom: 40px;
.separator-or {
span {
background: darken($ui-base-color, 8%);
}
}
}
hr {
margin: 40px 0;
}
.button {
display: block;
}
.subtle-hint a {
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
}
}
#mastodon-timeline {
display: flex;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
font-family: $font-sans-serif, sans-serif;
font-size: 13px;
line-height: 18px;
font-weight: 400;
color: $primary-text-color;
width: 100%;
flex: 1 1 auto;
overflow: hidden;
height: 100%;
.column-header {
color: inherit;
font-family: inherit;
font-size: 16px;
line-height: inherit;
font-weight: inherit;
margin: 0;
padding: 0;
}
.column {
padding: 0;
border-radius: 4px;
overflow: hidden;
width: 100%;
}
.scrollable {
height: 400px;
}
p {
font-size: inherit;
line-height: inherit;
font-weight: inherit;
color: $primary-text-color;
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
a {
color: $secondary-text-color;
text-decoration: none;
}
}
.attachment-list__list {
margin-left: 0;
list-style: none;
li {
font-size: inherit;
line-height: inherit;
font-weight: inherit;
margin-bottom: 0;
a {
color: $dark-text-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
}
@media screen and (max-width: $column-breakpoint) {
display: none;
}
}
&__features {
& > p {
padding-right: 60px;
}
.features-list {
margin: 40px 0;
margin-top: 30px;
}
&__action {
text-align: center;
}
}
.features-list {
.features-list__row {
display: flex;
padding: 10px 0;
justify-content: space-between;
.visual {
flex: 0 0 auto;
display: flex;
align-items: center;
margin-left: 15px;
.fa {
display: block;
color: $darker-text-color;
font-size: 48px;
}
}
.text {
font-size: 16px;
line-height: 30px;
color: $darker-text-color;
h6 {
font-size: inherit;
line-height: inherit;
margin-bottom: 0;
}
}
}
@media screen and (min-width: $small-breakpoint) {
display: grid;
grid-gap: 30px;
grid-template-columns: 1fr 1fr;
grid-auto-columns: 50%;
grid-auto-rows: max-content;
}
}
.footer-links {
padding-bottom: 50px;
text-align: right;
color: $dark-text-color;
p {
font-size: 14px;
}
a {
color: inherit;
text-decoration: underline;
}
}
&__footer {
margin-top: 10px;
text-align: center;
color: $dark-text-color;
p {
font-size: 14px;
a {
color: inherit;
text-decoration: underline;
}
}
}
@media screen and (max-width: 840px) { @media screen and (max-width: 840px) {
.container-alt {
padding: 0 20px;
}
.information-board { .information-board {
.container-alt { .container-alt {
padding-right: 20px; padding-right: 20px;
@ -1211,109 +639,217 @@ $small-breakpoint: 960px;
.features .container-alt { .features .container-alt {
display: block; display: block;
} }
.header {
.links {
padding-top: 15px;
background: darken($ui-base-color, 4%);
a {
padding: 12px 8px;
}
.nav {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.brand img {
left: 0;
top: 0;
}
}
.hero {
margin-top: 30px;
padding: 0;
.heading {
padding: 30px 20px;
text-align: center;
}
.simple_form,
.closed-registrations-message {
background: darken($ui-base-color, 8%);
width: 100%;
border-radius: 0;
box-sizing: border-box;
}
}
}
} }
.cta { .cta {
margin: 20px; margin: 20px;
} }
&.tag-page {
@media screen and (max-width: $column-breakpoint) {
padding: 0;
.container {
padding: 0;
} }
#mastodon-timeline { .landing {
margin-bottom: 100px;
@media screen and (max-width: 738px) {
margin-bottom: 0;
}
&__brand {
display: flex; display: flex;
height: 100vh; justify-content: center;
align-items: center;
padding: 100px;
img {
height: 52px;
}
@media screen and (max-width: $no-gap-breakpoint) {
padding: 0;
margin-bottom: 30px;
}
}
.directory {
margin-top: 30px;
background: transparent;
box-shadow: none;
border-radius: 0;
}
.hero-widget {
margin-top: 30px;
margin-bottom: 0;
h4 {
padding: 10px;
text-transform: uppercase;
font-weight: 700;
font-size: 13px;
color: $darker-text-color;
}
&__text {
border-radius: 0;
padding-bottom: 0;
}
&__footer {
background: $ui-base-color;
padding: 10px;
border-radius: 0 0 4px 4px;
display: flex;
&__column {
flex: 1 1 50%;
}
}
.account {
padding: 10px 0;
border-bottom: 0;
.account__display-name {
display: flex;
align-items: center;
}
.account__avatar {
width: 44px;
height: 44px;
background-size: 44px 44px;
}
}
&__counter {
padding: 10px;
strong {
font-family: $font-display, sans-serif;
font-size: 15px;
font-weight: 700;
display: block;
}
span {
font-size: 14px;
color: $darker-text-color;
}
}
}
.simple_form .user_agreement .label_input > label {
font-weight: 400;
color: $darker-text-color;
}
.simple_form p.lead {
color: $darker-text-color;
font-size: 15px;
line-height: 20px;
font-weight: 400;
margin-bottom: 25px;
}
&__grid {
max-width: 960px;
margin: 0 auto;
display: grid;
grid-template-columns: minmax(0, 50%) minmax(0, 50%);
grid-gap: 30px;
@media screen and (max-width: 738px) {
grid-template-columns: minmax(0, 100%);
grid-gap: 10px;
&__column-login {
grid-row: 1;
display: flex;
flex-direction: column;
.box-widget {
order: 2;
flex: 0 0 auto;
}
.hero-widget {
margin-top: 0;
margin-bottom: 10px;
order: 1;
flex: 0 0 auto;
}
}
&__column-registration {
grid-row: 2;
}
.directory {
margin-top: 10px;
}
}
@media screen and (max-width: $no-gap-breakpoint) {
grid-gap: 0;
.hero-widget {
display: block;
margin-bottom: 0;
box-shadow: none;
&__img,
&__img img,
&__footer {
border-radius: 0; border-radius: 0;
} }
} }
.grid { .hero-widget,
@media screen and (min-width: $small-breakpoint) { .box-widget,
grid-template-columns: 33% 67%; .directory__tag {
border-bottom: 1px solid lighten($ui-base-color, 8%);
} }
.column-2 { .directory {
grid-column: 2; margin-top: 0;
grid-row: 1;
&__tag {
margin-bottom: 0;
& > a,
& > div {
border-radius: 0;
box-shadow: none;
}
&:last-child {
border-bottom: 0;
}
}
}
}
} }
} }
.brand { .brand {
text-align: unset; position: relative;
padding: 0; text-decoration: none;
}
img { .brand__tagline {
height: 48px; display: block;
position: absolute;
bottom: -10px;
left: 50px;
width: 300px;
color: $ui-primary-color;
text-decoration: none;
font-size: 14px;
@media screen and (max-width: $no-gap-breakpoint) {
position: static;
width: auto; width: auto;
margin-top: 20px;
color: $dark-text-color;
} }
} }
.cta {
margin: 0;
.button {
margin-right: 4px;
}
}
@media screen and (max-width: $column-breakpoint) {
.grid {
grid-gap: 0;
.column-1 {
grid-column: 1;
grid-row: 1;
}
.column-2 {
display: none;
}
}
}
}
}

View File

@ -68,6 +68,17 @@ code {
top: 2px; top: 2px;
left: 0; left: 0;
} }
label a {
color: $highlight-text-color;
text-decoration: underline;
&:hover,
&:active,
&:focus {
text-decoration: none;
}
}
} }
} }
@ -305,7 +316,7 @@ code {
box-shadow: none; box-shadow: none;
} }
&:focus:invalid { &:focus:invalid:not(:placeholder-shown) {
border-color: lighten($error-red, 12%); border-color: lighten($error-red, 12%);
} }
@ -346,6 +357,10 @@ code {
} }
} }
.input.disabled {
opacity: 0.5;
}
.actions { .actions {
margin-top: 30px; margin-top: 30px;
display: flex; display: flex;
@ -392,6 +407,10 @@ code {
background-color: darken($ui-highlight-color, 5%); background-color: darken($ui-highlight-color, 5%);
} }
&:disabled:hover {
background-color: $ui-primary-color;
}
&.negative { &.negative {
background: $error-value-color; background: $error-value-color;

View File

@ -190,3 +190,15 @@
color: darken($simple-background-color, 14%); color: darken($simple-background-color, 14%);
} }
} }
.muted .poll {
color: $dark-text-color;
&__chart {
background: rgba(darken($ui-primary-color, 14%), 0.2);
&.leading {
background: rgba($ui-highlight-color, 0.2);
}
}
}

View File

@ -295,6 +295,11 @@
cursor: default; cursor: default;
} }
&.disabled > div {
opacity: 0.5;
cursor: default;
}
h4 { h4 {
flex: 1 1 auto; flex: 1 1 auto;
font-size: 18px; font-size: 18px;

View File

@ -241,9 +241,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def poll_vote? def poll_vote?
return false if replied_to_status.nil? || replied_to_status.poll.nil? || !replied_to_status.local? || !replied_to_status.poll.options.include?(@object['name']) return false if replied_to_status.nil? || replied_to_status.poll.nil? || !replied_to_status.local? || !replied_to_status.poll.options.include?(@object['name'])
return true if replied_to_status.poll.expired?
unless replied_to_status.poll.expired?
replied_to_status.poll.votes.create!(account: @account, choice: replied_to_status.poll.options.index(@object['name']), uri: @object['id']) replied_to_status.poll.votes.create!(account: @account, choice: replied_to_status.poll.options.index(@object['name']), uri: @object['id'])
ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, replied_to_status.id) unless replied_to_status.poll.hide_totals ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, replied_to_status.id) unless replied_to_status.poll.hide_totals?
end
true true
end end
@ -371,15 +374,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
@skip_download ||= DomainBlock.find_by(domain: @account.domain)&.reject_media? @skip_download ||= DomainBlock.find_by(domain: @account.domain)&.reject_media?
end end
def invalid_origin?(url)
return true if unsupported_uri_scheme?(url)
needle = Addressable::URI.parse(url).host
haystack = Addressable::URI.parse(@account.uri).host
!haystack.casecmp(needle).zero?
end
def reply_to_local? def reply_to_local?
!replied_to_status.nil? && replied_to_status.account.local? !replied_to_status.nil? && replied_to_status.account.local?
end end

View File

@ -75,13 +75,4 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
def lock_options def lock_options
{ redis: Redis.current, key: "create:#{object_uri}" } { redis: Redis.current, key: "create:#{object_uri}" }
end end
def invalid_origin?(url)
return true if unsupported_uri_scheme?(url)
needle = Addressable::URI.parse(url).host
haystack = Addressable::URI.parse(@account.uri).host
!haystack.casecmp(needle).zero?
end
end end

View File

@ -4,8 +4,11 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze
def perform def perform
update_account if equals_or_includes_any?(@object['type'], SUPPORTED_TYPES) if equals_or_includes_any?(@object['type'], SUPPORTED_TYPES)
update_poll if equals_or_includes_any?(@object['type'], %w(Question)) update_account
elsif equals_or_includes_any?(@object['type'], %w(Question))
update_poll
end
end end
private private
@ -18,11 +21,10 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
def update_poll def update_poll
return reject_payload! if invalid_origin?(@object['id']) return reject_payload! if invalid_origin?(@object['id'])
status = Status.find_by(uri: object_uri, account_id: @account.id)
return if status.nil? || status.poll_id.nil?
poll = Poll.find(status.poll_id)
return if poll.nil?
ActivityPub::ProcessPollService.new.call(poll, @object) status = Status.find_by(uri: object_uri, account_id: @account.id)
return if status.nil? || status.poll.nil?
ActivityPub::ProcessPollService.new.call(status.poll, @object)
end end
end end

View File

@ -474,6 +474,7 @@ class Account < ApplicationRecord
before_create :generate_keys before_create :generate_keys
before_validation :prepare_contents, if: :local? before_validation :prepare_contents, if: :local?
before_validation :prepare_username, on: :create
before_destroy :clean_feed_manager before_destroy :clean_feed_manager
private private
@ -483,6 +484,10 @@ class Account < ApplicationRecord
note&.strip! note&.strip!
end end
def prepare_username
username&.squish!
end
def generate_keys def generate_keys
return unless local? && !Rails.env.test? return unless local? && !Rails.env.test?

View File

@ -18,7 +18,11 @@ module Expireable
end end
def expired? def expired?
!expires_at.nil? && expires_at < Time.now.utc expires? && expires_at < Time.now.utc
end
def expires?
!expires_at.nil?
end end
end end
end end

View File

@ -72,6 +72,14 @@ class Tag < ApplicationRecord
.limit(limit) .limit(limit)
.offset(offset) .offset(offset)
end end
def find_normalized(name)
find_by(name: name.mb_chars.downcase.to_s)
end
def find_normalized!(name)
find_normalized(name) || raise(ActiveRecord::RecordNotFound)
end
end end
private private

View File

@ -21,6 +21,10 @@ class InstancePresenter
Rails.cache.fetch('user_count') { User.confirmed.joins(:account).merge(Account.without_suspended).count } Rails.cache.fetch('user_count') { User.confirmed.joins(:account).merge(Account.without_suspended).count }
end end
def active_user_count
Rails.cache.fetch('active_user_count') { Redis.current.pfcount(*(0..3).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) }
end
def status_count def status_count
Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i
end end
@ -29,6 +33,10 @@ class InstancePresenter
Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) } Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) }
end end
def sample_accounts
Rails.cache.fetch('sample_accounts', expires_in: 12.hours) { Account.discoverable.popular.limit(3) }
end
def version_number def version_number
Mastodon::Version Mastodon::Version
end end

View File

@ -46,13 +46,4 @@ class ActivityPub::FetchRepliesService < BaseService
# Also limit to 5 fetched replies to limit potential for DoS. # Also limit to 5 fetched replies to limit potential for DoS.
@items.map { |item| value_or_id(item) }.reject { |uri| invalid_origin?(uri) }.take(5) @items.map { |item| value_or_id(item) }.reject { |uri| invalid_origin?(uri) }.take(5)
end end
def invalid_origin?(url)
return true if unsupported_uri_scheme?(url)
needle = Addressable::URI.parse(url).host
haystack = Addressable::URI.parse(@account.uri).host
!haystack.casecmp(needle).zero?
end
end end

View File

@ -92,7 +92,7 @@ class NotifyService < BaseService
def blocked? def blocked?
blocked = @recipient.suspended? # Skip if the recipient account is suspended anyway blocked = @recipient.suspended? # Skip if the recipient account is suspended anyway
blocked ||= from_self? unless @notification.type == :poll # Skip for interactions with self blocked ||= from_self? && @notification.type != :poll # Skip for interactions with self
return blocked if message? && from_staff? return blocked if message? && from_staff?

View File

@ -10,7 +10,7 @@ class RemoveStatusService < BaseService
@account = status.account @account = status.account
@tags = status.tags.pluck(:name).to_a @tags = status.tags.pluck(:name).to_a
@mentions = status.active_mentions.includes(:account).to_a @mentions = status.active_mentions.includes(:account).to_a
@reblogs = status.reblogs.to_a @reblogs = status.reblogs.includes(:account).to_a
@stream_entry = status.stream_entry @stream_entry = status.stream_entry
@options = options @options = options
@ -78,8 +78,8 @@ class RemoveStatusService < BaseService
end end
# ActivityPub # ActivityPub
ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:inbox_url)) do |target_account| ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:preferred_inbox_url)) do |target_account|
[signed_activity_json, @account.id, target_account.inbox_url] [signed_activity_json, @account.id, target_account.preferred_inbox_url]
end end
end end

View File

@ -20,8 +20,26 @@ class VoteService < BaseService
end end
if @poll.account.local? if @poll.account.local?
ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, @poll.status.id) unless @poll.hide_totals distribute_poll!
else else
deliver_votes!
queue_final_poll_check!
end
end
private
def distribute_poll!
return if @poll.hide_totals?
ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, @poll.status.id)
end
def queue_final_poll_check!
return unless @poll.expires?
PollExpirationNotifyWorker.perform_at(@poll.expires_at + 5.minutes, @poll.id)
end
def deliver_votes!
@votes.each do |vote| @votes.each do |vote|
ActivityPub::DeliveryWorker.perform_async( ActivityPub::DeliveryWorker.perform_async(
build_json(vote), build_json(vote),
@ -29,11 +47,7 @@ class VoteService < BaseService
@poll.account.inbox_url @poll.account.inbox_url
) )
end end
PollExpirationNotifyWorker.perform_at(@poll.expires_at + 5.minutes, @poll.id) unless @poll.expires_at.nil?
end end
end
private
def build_json(vote) def build_json(vote)
ActiveModelSerializers::SerializableResource.new( ActiveModelSerializers::SerializableResource.new(

View File

@ -1,25 +0,0 @@
.features-list
.features-list__row
.text
%h6= t 'about.features.real_conversation_title'
= t 'about.features.real_conversation_body'
.visual
= fa_icon 'fw comments'
.features-list__row
.text
%h6= t 'about.features.not_a_product_title'
= t 'about.features.not_a_product_body'
.visual
= fa_icon 'fw users'
.features-list__row
.text
%h6= t 'about.features.within_reach_title'
= t 'about.features.within_reach_body'
.visual
= fa_icon 'fw mobile'
.features-list__row
.text
%h6= t 'about.features.humane_approach_title'
= t 'about.features.humane_approach_body'
.visual
= fa_icon 'fw leaf'

View File

@ -1,15 +0,0 @@
- if @instance_presenter.open_registrations
= render 'registration'
- else
= link_to t('auth.register_elsewhere'), 'https://joinmastodon.org/#getting-started', class: 'button button-primary'
.closed-registrations-message
- if @instance_presenter.closed_registrations_message.blank?
%p= t('about.closed_registrations')
- else
= @instance_presenter.closed_registrations_message.html_safe
.separator-or
%span= t('auth.or')
= link_to t('auth.login'), new_user_session_path, class: 'button button-alternative-2 webapp-btn'

View File

@ -1,16 +0,0 @@
.container-alt.links
.brand
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
%ul.nav
%li
- if user_signed_in?
= link_to t('settings.back'), root_url, class: 'webapp-btn'
- else
= link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
%li= link_to t('about.about_this'), about_more_path
%li
= link_to 'https://joinmastodon.org/#getting-started' do
= "#{t('about.other_instances')}"
%i.fa.fa-external-link{ style: 'padding-left: 5px;' }

View File

@ -0,0 +1,13 @@
= simple_form_for(new_user, url: user_session_path) do |f|
.fields-group
- if use_seamless_external_login?
= f.input :email, placeholder: t('simple_form.labels.defaults.username_or_email'), input_html: { 'aria-label' => t('simple_form.labels.defaults.username_or_email') }, hint: false
- else
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, hint: false
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }, hint: false
.actions
= f.button :button, t('auth.login'), type: :submit, class: 'button button-primary'
%p.hint.subtle-hint= link_to t('auth.trouble_logging_in'), new_user_password_path

View File

@ -1,12 +1,16 @@
= simple_form_for(new_user, url: user_registration_path) do |f| = simple_form_for(new_user, url: user_registration_path) do |f|
= f.simple_fields_for :account do |account_fields| %p.lead= t('about.federation_hint_html', instance: content_tag(:strong, site_hostname))
= account_fields.input :username, wrapper: :with_label, autofocus: true, label: false, required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', placeholder: t('simple_form.labels.defaults.username') }, append: "@#{site_hostname}", hint: false
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false .fields-group
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }, hint: false = f.simple_fields_for :account do |account_fields|
= f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false = account_fields.input :username, wrapper: :with_label, autofocus: true, label: false, required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', placeholder: t('simple_form.labels.defaults.username') }, append: "@#{site_hostname}", hint: false, disabled: !Setting.open_registrations
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
= f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
.fields-group
= f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), disabled: !Setting.open_registrations
.actions .actions
= f.button :button, t('auth.register'), type: :submit, class: 'button button-primary' = f.button :button, Setting.open_registrations ? t('auth.register') : t('auth.registration_closed', instance: site_hostname), type: :submit, class: 'button button-primary', disabled: !Setting.open_registrations
%p.hint.subtle-hint=t('auth.agreement_html', rules_path: about_more_path, terms_path: terms_path)

View File

@ -3,143 +3,76 @@
- content_for :header_tags do - content_for :header_tags do
%link{ rel: 'canonical', href: about_url }/ %link{ rel: 'canonical', href: about_url }/
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
= render partial: 'shared/og' = render partial: 'shared/og'
.landing-page.alternative .landing
.container .landing__brand
.grid = link_to root_url, class: 'brand' do
.column-0
.brand
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
%span.brand__tagline=t 'about.tagline'
- if Setting.timeline_preview .landing__grid
.column-1 .landing__grid__column.landing__grid__column-registration
.landing-page__forms .box-widget
.brand = render 'registration'
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
= render 'forms' .directory
.directory__tag{ class: Setting.profile_directory ? nil : 'disabled' }
= optional_link_to Setting.profile_directory, explore_path do
%h4
= fa_icon 'address-book fw'
= t('about.discover_users')
%small= t('about.browse_directory')
- else .avatar-stack
.column-1.non-preview - @instance_presenter.sample_accounts.each do |account|
.landing-page__forms = image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar'
.brand
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
= render 'forms' .directory__tag{ class: Setting.timeline_preview ? nil : 'disabled' }
= optional_link_to Setting.timeline_preview, public_timeline_path do
%h4
= fa_icon 'globe fw'
= t('about.see_whats_happening')
%small= t('about.browse_public_posts')
- if Setting.timeline_preview .directory__tag
.column-2 = link_to 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener' do
.landing-page__hero %h4
= fa_icon 'tablet fw'
= t('about.get_apps')
%small= t('about.apps_platforms')
.landing__grid__column.landing__grid__column-login
.box-widget
= render 'login'
.hero-widget
.hero-widget__img
= image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title
.landing-page__information - if @instance_presenter.site_short_description.present?
.landing-page__short-description .hero-widget__text
.row
.landing-page__logo
= image_tag asset_pack_path('logo_transparent.svg'), alt: 'Mastodon'
%h1
= @instance_presenter.site_title
%small!= t 'about.hosted_on', domain: content_tag(:span, site_hostname)
%p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
.landing-page__call-to-action{ dir: 'ltr' }
.row
.row__information-board
.information-board__section
%span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count
%span= t 'about.user_count_after', count: @instance_presenter.user_count
.information-board__section
%span= t 'about.status_count_before'
%strong= number_with_delimiter @instance_presenter.status_count
%span= t 'about.status_count_after', count: @instance_presenter.status_count
.row__mascot
.landing-page__mascot
= image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('elephant_ui_plane.svg'), alt: ''
- else
.column-2.non-preview
.landing-page__hero
= image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title
.landing-page__information
.landing-page__short-description
.row
.landing-page__logo
= image_tag asset_pack_path('logo_transparent.svg'), alt: 'Mastodon'
%h1
= @instance_presenter.site_title
%small!= t 'about.hosted_on', domain: content_tag(:span, site_hostname)
%p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
.landing-page__call-to-action
.row
.row__information-board
.information-board__section
%span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count
%span= t 'about.user_count_after', count: @instance_presenter.user_count
.information-board__section
%span= t 'about.status_count_before'
%strong= number_with_delimiter @instance_presenter.status_count
%span= t 'about.status_count_after', count: @instance_presenter.status_count
.row__mascot
.landing-page__mascot
= image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('elephant_ui_plane.svg'), alt: ''
- if Setting.timeline_preview
.column-3
#mastodon-timeline{ data: { props: Oj.dump(default_props) } }
- if Setting.timeline_preview
.column-4.landing-page__information
.landing-page__features
.features-list
%div
%h3= t 'about.what_is_mastodon'
%p= t 'about.about_mastodon_html'
%div.contact
%h3= t 'about.administered_by'
= account_link_to(@instance_presenter.contact_account, link_to(t('about.learn_more'), about_more_path, class: 'button button-alternative'))
= render 'features'
.landing-page__features__action
= link_to t('about.learn_more'), 'https://joinmastodon.org/', class: 'button button-alternative'
.landing-page__footer
%p %p
= link_to t('about.source_code'), @instance_presenter.source_url = @instance_presenter.site_short_description.html_safe.presence
= " (#{@instance_presenter.version_number})" = link_to about_more_path do
= t('about.learn_more')
= fa_icon 'angle-double-right'
- else .hero-widget__footer
.column-4.non-preview.landing-page__information .hero-widget__footer__column
.landing-page__features %h4= t 'about.administered_by'
.features-list
%div
%h3= t 'about.what_is_mastodon'
%p= t 'about.about_mastodon_html'
%div.contact
%h3= t 'about.administered_by'
= account_link_to(@instance_presenter.contact_account, link_to(t('about.learn_more'), about_more_path, class: 'button button-alternative'))
= render 'features' = account_link_to @instance_presenter.contact_account
.landing-page__features__action .hero-widget__footer__column
= link_to t('about.learn_more'), 'https://joinmastodon.org/', class: 'button button-alternative' %h4= t 'about.server_stats'
.landing-page__footer %div{ style: 'display: flex' }
%p .hero-widget__counter{ style: 'width: 50%' }
= link_to t('about.source_code'), @instance_presenter.source_url %strong= number_to_human @instance_presenter.user_count, strip_insignificant_zeros: true
= " (#{@instance_presenter.version_number})" %span= t 'about.user_count_after', count: @instance_presenter.user_count
.hero-widget__counter{ style: 'width: 50%' }
#modal-container %strong= number_to_human @instance_presenter.active_user_count, strip_insignificant_zeros: true
%span
= t 'about.active_count_after'
%abbr{ title: t('about.active_footnote') } *

View File

@ -1,5 +1,6 @@
- content_for :content do - content_for :content do
.public-layout .public-layout
- unless @hide_navbar
.container .container
%nav.header %nav.header
.nav-left .nav-left

View File

@ -0,0 +1,13 @@
- content_for :page_title do
= t('about.see_whats_happening')
- content_for :header_tags do
%meta{ name: 'robots', content: 'noindex' }/
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
.page-header
%h1= t('about.see_whats_happening')
%p= t('about.browse_public_posts')
#mastodon-timeline{ data: { props: Oj.dump(default_props) }}
#modal-container

View File

@ -1,5 +1,4 @@
- content_for :header_tags do - content_for :header_tags do
- if @account.user&.setting_noindex
%meta{ name: 'robots', content: 'noindex' }/ %meta{ name: 'robots', content: 'noindex' }/
.form-container .form-container

View File

@ -1,3 +1,6 @@
- content_for :header_tags do
%meta{ name: 'robots', content: 'noindex' }/
.form-container .form-container
.follow-prompt .follow-prompt
%h2= t("remote_interaction.#{@interaction_type}.prompt") %h2= t("remote_interaction.#{@interaction_type}.prompt")

View File

@ -2,6 +2,7 @@
= "##{@tag.name}" = "##{@tag.name}"
- content_for :header_tags do - content_for :header_tags do
%meta{ name: 'robots', content: 'noindex' }/
%link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/ %link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)

View File

@ -28,13 +28,16 @@ class ActivityPub::DistributePollUpdateWorker
def inboxes def inboxes
return @inboxes if defined?(@inboxes) return @inboxes if defined?(@inboxes)
target_accounts = @status.mentions.map(&:account).reject(&:local?)
target_accounts += @status.reblogs.map(&:account).reject(&:local?) @inboxes = [@status.mentions, @status.reblogs, @status.poll.votes].flat_map do |relation|
target_accounts += @status.poll.votes.map(&:account).reject(&:local?) relation.includes(:account).map do |record|
target_accounts.uniq!(&:id) record.account.preferred_inbox_url if !record.account.local? && record.account.activitypub?
@inboxes = target_accounts.select(&:activitypub?).pluck(&:inbox_url) end
@inboxes += @account.followers.inboxes unless @status.direct_visibility? end
@inboxes.concat(@account.followers.inboxes) unless @status.direct_visibility?
@inboxes.uniq! @inboxes.uniq!
@inboxes.compact!
@inboxes @inboxes
end end

View File

@ -7,7 +7,6 @@ ar:
administered_by: 'يُديره :' administered_by: 'يُديره :'
api: واجهة برمجة التطبيقات api: واجهة برمجة التطبيقات
apps: تطبيقات الأجهزة المحمولة apps: تطبيقات الأجهزة المحمولة
closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا. غير أنه بامكانك العثور على خادم آخر لإنشاء حسابك و مِن ثم النفاذ إلى نفس الشبكة مِن هناك.
contact: للتواصل معنا contact: للتواصل معنا
contact_missing: لم يتم تعيينه contact_missing: لم يتم تعيينه
contact_unavailable: غير متوفر contact_unavailable: غير متوفر
@ -15,19 +14,9 @@ ar:
extended_description_html: | extended_description_html: |
<h3>مكان جيد للقواعد</h3> <h3>مكان جيد للقواعد</h3>
<p>لم يتم بعد إدخال الوصف الطويل.</p> <p>لم يتم بعد إدخال الوصف الطويل.</p>
features:
humane_approach_body: تعلُّمًا مِن فشل الشبكات الأخرى، غاية ماستدون هي بلوغ الخيارات الأخلاقية في التصميم لمُحارَبة إسائة إستعمال شبكات التواصل الإجتماعية.
humane_approach_title: أسلوب يُعيد الإعتبار للفَرد
not_a_product_body: ماستدون ليس شبكة تجارية. لا يحتوي على إعلانات و لا يقوم باستغلال البيانات و لا هو بِبُستان مُسيَّج. لا تحكم فيه وليس له أية هيئةٍ مركزيةٍ.
not_a_product_title: إنك فرد و لست سلعة
real_conversation_body: يُمكنكم التعبير عن آرائكم بكل حرية بفضل 500 حرف و انتقاء دقيق للمحتوى و الوسائط بفضل أدوات التحذير التي هي بين أيديكم.
real_conversation_title: مبني لتحقيق تواصل حقيقي
within_reach_body: إبقوا على اتصال دائم بأصدقائكم حيثما كانوا عبر عدة تطبيقات لنظام آي أواس و أندرويد و عدة منصات أخرى بفضل واجهة برمجية للتطبيقات و بيئة صديقة للتطوير.
within_reach_title: في مُتناوَل يدك دائمًا
generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة" generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة"
hosted_on: ماستدون مُستضاف على %{domain} hosted_on: ماستدون مُستضاف على %{domain}
learn_more: تعلم المزيد learn_more: تعلم المزيد
other_instances: خوادم أخرى
privacy_policy: سياسة الخصوصية privacy_policy: سياسة الخصوصية
source_code: الشفرة المصدرية source_code: الشفرة المصدرية
status_count_after: status_count_after:
@ -524,13 +513,11 @@ ar:
logout: خروج logout: خروج
migrate_account: الإنتقال إلى حساب آخر migrate_account: الإنتقال إلى حساب آخر
migrate_account_html: إن كنت ترغب في تحويل هذا الحساب نحو حساب آخَر، يُمكِنُك <a href="%{path}">إعداده هنا</a>. migrate_account_html: إن كنت ترغب في تحويل هذا الحساب نحو حساب آخَر، يُمكِنُك <a href="%{path}">إعداده هنا</a>.
or: أو
or_log_in_with: أو قم بتسجيل الدخول بواسطة or_log_in_with: أو قم بتسجيل الدخول بواسطة
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: إنشاء حساب register: إنشاء حساب
register_elsewhere: التسجيل على خادوم آخَر
resend_confirmation: إعادة إرسال تعليمات التأكيد resend_confirmation: إعادة إرسال تعليمات التأكيد
reset_password: إعادة تعيين كلمة المرور reset_password: إعادة تعيين كلمة المرور
security: الأمان security: الأمان

View File

@ -12,12 +12,6 @@ ast:
extended_description_html: | extended_description_html: |
<h3>Un llugar bonu pa les regles</h3> <h3>Un llugar bonu pa les regles</h3>
<p>Entá nun se configuró la descripción estendida.</p> <p>Entá nun se configuró la descripción estendida.</p>
features:
humane_approach_title: Una visión más humana
not_a_product_body: Mastodon nun ye una rede comercial, nun hai anuncios, nun recueye datos o nun pon muries a xardinos. Nin siquier tien una autoridá central.
not_a_product_title: Yes una persona, non un productu
real_conversation_title: Fechu pa conversaciones de verdá
within_reach_title: Siempres al algame
hosted_on: Mastodon ta agospiáu en %{domain} hosted_on: Mastodon ta agospiáu en %{domain}
learn_more: Deprendi más learn_more: Deprendi más
source_code: Códigu fonte source_code: Códigu fonte
@ -141,7 +135,6 @@ ast:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Rexistrase register: Rexistrase
register_elsewhere: Rexistrase n'otru sirvidor
security: Seguranza security: Seguranza
authorize_follow: authorize_follow:
already_following: Yá tas siguiendo a esta cuenta already_following: Yá tas siguiendo a esta cuenta

View File

@ -3,9 +3,7 @@ bg:
about: about:
about_mastodon_html: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>. about_mastodon_html: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>.
about_this: За тази инстанция about_this: За тази инстанция
closed_registrations: В момента регистрациите за тази инстанция са затворени.
contact: За контакти contact: За контакти
other_instances: Други инстанции
source_code: Програмен код source_code: Програмен код
status_count_after: публикации status_count_after: публикации
status_count_before: Написали status_count_before: Написали

View File

@ -7,7 +7,6 @@ bn:
administered_by: 'পরিচালনা করছেন:' administered_by: 'পরিচালনা করছেন:'
api: সফটওয়্যার তৈরীর নিয়ম (API) api: সফটওয়্যার তৈরীর নিয়ম (API)
apps: মোবাইল অ্যাপ apps: মোবাইল অ্যাপ
closed_registrations: এই সার্ভারে এখন নিবন্ধন বন্ধ। কিন্তু ! অন্য একটি সার্ভার খুঁজে নিবন্ধন করলেও একই নেটওয়ার্কে ঢুকতে পারবেন।
contact: যোগাযোগ contact: যোগাযোগ
contact_missing: নেই contact_missing: নেই
contact_unavailable: প্রযোজ্য নয় contact_unavailable: প্রযোজ্য নয়
@ -15,8 +14,3 @@ bn:
extended_description_html: | extended_description_html: |
<h3>নিয়মের জন্য উপযুক্ত জায়গা</h3> <h3>নিয়মের জন্য উপযুক্ত জায়গা</h3>
<p>বিস্তারিত বিবরণ এখনো যুক্ত করা হয়নি</p> <p>বিস্তারিত বিবরণ এখনো যুক্ত করা হয়নি</p>
features:
humane_approach_body: অনন্যা নেটওয়ার্কের ব্যর্থতা থেকে শিখে, মাস্টাডনের লক্ষ্য নৈতিক পরিকল্পনার দ্বারা সামাজিক মাধ্যমের অপব্যবহারের বিরোধিতা করা।
humane_approach_title: একটি মনুষ্যত্বপূর্ণ চেষ্টা
not_a_product_body: মাস্টাডন কোনো ব্যবসায়িক নেটওয়ার্ক না। কোনো বিজ্ঞাপন নেই, কোনো তথ্য খনি নেই, কোনো বাধার দেয়াল নেই। এর কোনো কেন্দ্রীয় কর্তৃপক্ষ নেই।
not_a_product_title: আপনি একজন মানুষ, পণ্য নন

View File

@ -7,7 +7,6 @@ ca:
administered_by: 'Administrat per:' administered_by: 'Administrat per:'
api: API api: API
apps: Apps mòbil apps: Apps mòbil
closed_registrations: Actualment, el registre està tancat en aquesta instància. Malgrat això! Pots trobar una altra instància per fer-te un compte i obtenir accés a la mateixa xarxa des d'allà.
contact: Contacte contact: Contacte
contact_missing: No configurat contact_missing: No configurat
contact_unavailable: N/D contact_unavailable: N/D
@ -15,19 +14,9 @@ ca:
extended_description_html: | extended_description_html: |
<h3>Un bon lloc per les regles</h3> <h3>Un bon lloc per les regles</h3>
<p>Encara no s'ha configurat la descripció ampliada.</p> <p>Encara no s'ha configurat la descripció ampliada.</p>
features:
humane_approach_body: Aprenent dels errors d'altres xarxes, Mastodon té com a objectiu fer eleccions ètiques de disseny per a combatre el mal ús de les xarxes socials.
humane_approach_title: Un enfocament més humà
not_a_product_body: Mastodon no és una xarxa comercial. Sense publicitat, sense mineria de dades, sense jardins emmurallats. No hi ha cap autoritat central.
not_a_product_title: Ets una persona, no un producte
real_conversation_body: Amb 500 caràcters a la teva disposició i suport per a continguts granulars i avisos multimèdia, pots expressar-te de la manera que vulguis.
real_conversation_title: Construït per a converses reals
within_reach_body: Diverses aplicacions per a iOS, Android i altres plataformes gràcies a un ecosistema API amable amb el desenvolupador, et permet mantenir-te al dia amb els amics en qualsevol lloc..
within_reach_title: Sempre a l'abast
generic_description: "%{domain} és un servidor a la xarxa" generic_description: "%{domain} és un servidor a la xarxa"
hosted_on: Mastodon allotjat a %{domain} hosted_on: Mastodon allotjat a %{domain}
learn_more: Més informació learn_more: Més informació
other_instances: Altres instàncies
privacy_policy: Política de privacitat privacy_policy: Política de privacitat
source_code: Codi font source_code: Codi font
status_count_after: status_count_after:
@ -507,13 +496,11 @@ ca:
logout: Tanca sessió logout: Tanca sessió
migrate_account: Mou a un compte diferent migrate_account: Mou a un compte diferent
migrate_account_html: Si vols redirigir aquest compte a un altre diferent, el pots <a href="%{path}">configurar aquí</a>. migrate_account_html: Si vols redirigir aquest compte a un altre diferent, el pots <a href="%{path}">configurar aquí</a>.
or: o
or_log_in_with: O inicia sessió amb or_log_in_with: O inicia sessió amb
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registre register: Registre
register_elsewhere: Registra't en un altre servidor
resend_confirmation: Torna a enviar el correu de confirmació resend_confirmation: Torna a enviar el correu de confirmació
reset_password: Restableix la contrasenya reset_password: Restableix la contrasenya
security: Seguretat security: Seguretat

View File

@ -7,7 +7,6 @@ co:
administered_by: 'Amministratu da:' administered_by: 'Amministratu da:'
api: API api: API
apps: Applicazione per u telefuninu apps: Applicazione per u telefuninu
closed_registrations: Pè avà, larregistramenti sò chjosi nantà stu servore. Mà pudete truvà unaltru per fà un contu è avè accessu à listessa reta da quallà.
contact: Cuntattu contact: Cuntattu
contact_missing: Mancante contact_missing: Mancante
contact_unavailable: Micca dispunibule contact_unavailable: Micca dispunibule
@ -15,19 +14,9 @@ co:
extended_description_html: | extended_description_html: |
<h3>Una bona piazza per e regule</h3> <h3>Una bona piazza per e regule</h3>
<p>A descrizzione stesa ùn hè micca stata riempiuta.</p> <p>A descrizzione stesa ùn hè micca stata riempiuta.</p>
features:
humane_approach_body: Mastodon hà amparatu da i sbagli di laltre rete suciale, è prova à fà scelte di cuncezzione più etiche per luttà contrà labusu di i media suciali.
humane_approach_title: Una mentalità più umana
not_a_product_body: Mastodon ùn hè micca una rete cummerciale. Micca pubblicità, micca pruspizzione di dati, micca ambienti chjosi, è micca auturità centrale.
not_a_product_title: Site una parsona, micca un pruduttu
real_conversation_body: Cù 500 caratteri dispunibuli, diffusione persunalizata di u cuntinutu è avertimenti per media sensibili, pudete cumunicà cumè voi vulete.
real_conversation_title: Fattu per una vera cunversazione
within_reach_body: Parechje app per iOS, Android è altre piattaforme, create cù un sistemu dAPI accessibile à i prugrammatori, vi permettenu davè accessu à i vostri amichi senza prublemi.
within_reach_title: Sempre accessibile
generic_description: "%{domain} hè un servore di a rete" generic_description: "%{domain} hè un servore di a rete"
hosted_on: Mastodon allughjatu nantà %{domain} hosted_on: Mastodon allughjatu nantà %{domain}
learn_more: Amparà di più learn_more: Amparà di più
other_instances: Lista di i servori
privacy_policy: Pulitica di vita privata privacy_policy: Pulitica di vita privata
source_code: Codice di fonte source_code: Codice di fonte
status_count_after: status_count_after:
@ -508,13 +497,11 @@ co:
logout: Scunnettassi logout: Scunnettassi
migrate_account: Cambià di contu migrate_account: Cambià di contu
migrate_account_html: Sè voi vulete riindirizà stu contu versu unaltru, <a href="%{path}">ghjè pussibule quì</a>. migrate_account_html: Sè voi vulete riindirizà stu contu versu unaltru, <a href="%{path}">ghjè pussibule quì</a>.
or: o
or_log_in_with: O cunnettatevi cù or_log_in_with: O cunnettatevi cù
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Arregistrassi register: Arregistrassi
register_elsewhere: Arregistrassi altrò
resend_confirmation: Rimandà listruzzioni di cunfirmazione resend_confirmation: Rimandà listruzzioni di cunfirmazione
reset_password: Cambià a chjave daccessu reset_password: Cambià a chjave daccessu
security: Sicurità security: Sicurità

View File

@ -7,7 +7,6 @@ cs:
administered_by: 'Server spravuje:' administered_by: 'Server spravuje:'
api: API api: API
apps: Mobilní aplikace apps: Mobilní aplikace
closed_registrations: Registrace na tomto serveru jsou momentálně uzavřené. Ale pozor! Můžete si najít jiný server, vytvořit si na něm účet a získat z něj přístup do naprosto stejné sítě.
contact: Kontakt contact: Kontakt
contact_missing: Nenastaveno contact_missing: Nenastaveno
contact_unavailable: Neuvedeno contact_unavailable: Neuvedeno
@ -15,19 +14,9 @@ cs:
extended_description_html: | extended_description_html: |
<h3>Dobré místo pro pravidla</h3> <h3>Dobré místo pro pravidla</h3>
<p>Rozšířený popis ještě nebyl nastaven.</p> <p>Rozšířený popis ještě nebyl nastaven.</p>
features:
humane_approach_body: Mastodon se učí z chyb jiných sociálních sítí a volením etických rozhodnutí při designu se snaží bojovat s jejich zneužíváním.
humane_approach_title: Lidštější přístup
not_a_product_body: Mastodon není komerční síť. Žádné reklamy, žádné dolování dat, žádné hranice. Žádná centrální autorita.
not_a_product_title: Jste osoba, ne produkt
real_conversation_body: S 500 znaky k vaší dispozici a podporou pro varování o obsahu a médiích se můžete vyjadřovat tak, jak chcete.
real_conversation_title: Vytvořen pro opravdovou konverzaci
within_reach_body: Několik aplikací pro iOS, Android a jiné platformy vám díky jednoduchému API ekosystému dovolují držet krok s vašimi přáteli, ať už jste kdekoliv.
within_reach_title: Vždy v dosahu
generic_description: "%{domain} je jedním ze serverů v síti" generic_description: "%{domain} je jedním ze serverů v síti"
hosted_on: Server Mastodon na adrese %{domain} hosted_on: Server Mastodon na adrese %{domain}
learn_more: Zjistit více learn_more: Zjistit více
other_instances: Seznam serverů
privacy_policy: Zásady soukromí privacy_policy: Zásady soukromí
source_code: Zdrojový kód source_code: Zdrojový kód
status_count_after: status_count_after:
@ -514,13 +503,11 @@ cs:
logout: Odhlásit logout: Odhlásit
migrate_account: Přesunout se na jiný účet migrate_account: Přesunout se na jiný účet
migrate_account_html: Chcete-li přesměrovat tento účet na jiný, můžete to <a href="%{path}">nastavit zde</a>. migrate_account_html: Chcete-li přesměrovat tento účet na jiný, můžete to <a href="%{path}">nastavit zde</a>.
or: nebo
or_log_in_with: Nebo se přihlaste pomocí or_log_in_with: Nebo se přihlaste pomocí
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registrovat register: Registrovat
register_elsewhere: Registrovat na jiném serveru
resend_confirmation: Znovu odeslat pokyny pro potvrzení resend_confirmation: Znovu odeslat pokyny pro potvrzení
reset_password: Obnovit heslo reset_password: Obnovit heslo
security: Zabezpečení security: Zabezpečení

View File

@ -7,7 +7,6 @@ cy:
administered_by: 'Gweinyddir gan:' administered_by: 'Gweinyddir gan:'
api: API api: API
apps: Apiau symudol apps: Apiau symudol
closed_registrations: Mae cofrestru wedi cau ar yr achos hwn ar hyn o bryd. Fodd bynnag, mae modd ffeindio achos arall er mwyn creu cyfrif arno a chael mynediad at union yr un rhwydwaith o'r man hwnnw.
contact: Cyswllt contact: Cyswllt
contact_missing: Heb ei osod contact_missing: Heb ei osod
contact_unavailable: Ddim yn berthnasol contact_unavailable: Ddim yn berthnasol
@ -15,19 +14,9 @@ cy:
extended_description_html: | extended_description_html: |
<h3>Lle da ar gyfer rheolau</h3> <h3>Lle da ar gyfer rheolau</h3>
<p>Nid yw'r disgrifiad estynedig wedi ei osod eto.</p> <p>Nid yw'r disgrifiad estynedig wedi ei osod eto.</p>
features:
humane_approach_body: Gan ddysgu o fethiannau rhwydweithiau eraill, mae Mastodon yn anelu i wneud penderfyniadau dylunio moesol i ymladd camddefnydd o gyfryngau cymdeithasol.
humane_approach_title: Agwedd fwy dynol
not_a_product_body: Nid yw Mastodon yn rwydwaith masnachol. Nid oes hysbysebion, cloddio data na gerddi caeedig. Nid oes awdurdod canolog.
not_a_product_title: Rwyt yn berson, nid yn beth
real_conversation_body: Gyda'r modd i ddefnyddio hyd at 500 o nodau a chefnogaeth ar gyfer cynnwys gronynnol a rhybuddion cyfryngau, mae modd i chi fynegi'ch hun yn y ffordd yr hoffech chi.
real_conversation_title: Wedi ei adeiladu ar gyfer sgyrsiau go iawn
within_reach_body: Nifer o apiau ar gyfer iOS, Android, a nifer blatfformau eraill diolch i amgylchedd API hygyrch i ddatblygwyr sy'n caniatau i chi gadw mewn cysylltiad a'ch ffrindiau o unrhywle.
within_reach_title: Bob tro o fewn gafael
generic_description: Mae %{domain} yn un gweinydd yn y rhwydwaith generic_description: Mae %{domain} yn un gweinydd yn y rhwydwaith
hosted_on: Mastodon wedi ei weinyddu ar %{domain} hosted_on: Mastodon wedi ei weinyddu ar %{domain}
learn_more: Dysu mwy learn_more: Dysu mwy
other_instances: Rhestr achosion
privacy_policy: Polisi preifatrwydd privacy_policy: Polisi preifatrwydd
source_code: Cod ffynhonnell source_code: Cod ffynhonnell
status_count_after: status_count_after:
@ -529,13 +518,11 @@ cy:
logout: Allgofnodi logout: Allgofnodi
migrate_account: Symud i gyfrif gwahanol migrate_account: Symud i gyfrif gwahanol
migrate_account_html: Os hoffech chi ailgyfeirio'r cyfrif hwn at un gwahanol, mae modd <a href="%{path}">ei ffurfweddu yma</a>. migrate_account_html: Os hoffech chi ailgyfeirio'r cyfrif hwn at un gwahanol, mae modd <a href="%{path}">ei ffurfweddu yma</a>.
or: neu
or_log_in_with: Neu logiwch mewn a or_log_in_with: Neu logiwch mewn a
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Cofrestru register: Cofrestru
register_elsewhere: Cofrestru ar weinydd gwahanol
resend_confirmation: Ailanfon cyfarwyddiadau cadarnhau resend_confirmation: Ailanfon cyfarwyddiadau cadarnhau
reset_password: Ailosod cyfrinair reset_password: Ailosod cyfrinair
security: Diogelwch security: Diogelwch

View File

@ -7,7 +7,6 @@ da:
administered_by: 'Administreret af:' administered_by: 'Administreret af:'
api: API api: API
apps: Apps til mobilen apps: Apps til mobilen
closed_registrations: Registreringer er på nuværrende tidspunkt lukkede for denne instans. Du kan dog finde andre instanser du kan oprette dig på og få adgang til det samme netværk derfra.
contact: Kontakt contact: Kontakt
contact_missing: Ikke sat contact_missing: Ikke sat
contact_unavailable: Ikke tilgængeligt contact_unavailable: Ikke tilgængeligt
@ -15,19 +14,9 @@ da:
extended_description_html: | extended_description_html: |
<h3>Et godt sted for regler</h3> <h3>Et godt sted for regler</h3>
<p>Den udvidede beskrivelse er endnu ikke blevet opsat.</p> <p>Den udvidede beskrivelse er endnu ikke blevet opsat.</p>
features:
humane_approach_body: Ved at lære fra fejl fra andre netværk, sigter Mastodon for at tage etisk designmæssig valg for at bekæmpe misbrug af sociale medier.
humane_approach_title: En mere human tilgang
not_a_product_body: Mastodon er ikke et kommercielt netværk. Ingen reklamer, ingen datamining, ingen indhegnet haver. Der er ingen central regering.
not_a_product_title: Du er en person, ikke et produkt
real_conversation_body: Med 500 tegn til din rådighed og understøttelse af granulært indhold og medie advarsler, kan du udtrykke dig på en hvilken som helst måde du ønsker.
real_conversation_title: Bygget til rigtige samtaler
within_reach_body: Adskillige apps for iOS, Android og andre platforme takket være et udviklervenligt API økosystem tillader dig at holde kontakten med dine venner hvor som helst.
within_reach_title: Altid indenfor rækkevidde
generic_description: "%{domain} er en server i netværket" generic_description: "%{domain} er en server i netværket"
hosted_on: Mostodon hostet på %{domain} hosted_on: Mostodon hostet på %{domain}
learn_more: Lær mere learn_more: Lær mere
other_instances: Liste over instanser
privacy_policy: Privatlivspolitik privacy_policy: Privatlivspolitik
source_code: Kildekode source_code: Kildekode
status_count_after: status_count_after:
@ -457,13 +446,11 @@ da:
logout: Log ud logout: Log ud
migrate_account: Flyt til en anden konto migrate_account: Flyt til en anden konto
migrate_account_html: Hvis du ønsker at omdirigere denne konto til en anden, kan du <a href="%{path}">gøre det her</a>. migrate_account_html: Hvis du ønsker at omdirigere denne konto til en anden, kan du <a href="%{path}">gøre det her</a>.
or: eller
or_log_in_with: Eller log in med or_log_in_with: Eller log in med
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Opret dig register: Opret dig
register_elsewhere: Opret dig på en anden server
resend_confirmation: Gensend bekræftelses instrukser resend_confirmation: Gensend bekræftelses instrukser
reset_password: Nulstil kodeord reset_password: Nulstil kodeord
security: Sikkerhed security: Sikkerhed

View File

@ -7,7 +7,6 @@ de:
administered_by: 'Administriert von:' administered_by: 'Administriert von:'
api: API api: API
apps: Mobile Apps apps: Mobile Apps
closed_registrations: Die Registrierung auf diesem Server ist momentan geschlossen. Aber du kannst dein Konto auch auf einem anderen Server erstellen! Von dort hast du genauso Zugriff auf das Mastodon-Netzwerk.
contact: Kontakt contact: Kontakt
contact_missing: Nicht angegeben contact_missing: Nicht angegeben
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ de:
extended_description_html: | extended_description_html: |
<h3>Ein guter Platz für Regeln</h3> <h3>Ein guter Platz für Regeln</h3>
<p>Die erweiterte Beschreibung wurde noch nicht aufgesetzt.</p> <p>Die erweiterte Beschreibung wurde noch nicht aufgesetzt.</p>
features:
humane_approach_body: Aus den Fehlern anderer Netzwerke lernend, zielt Mastodon darauf ab, mit ethischen Design-Entscheidungen den Missbrauch sozialer Medien zu verhindern.
humane_approach_title: Ein menschlicherer Ansatz
not_a_product_body: Mastodon ist kein kommerzielles Netzwerk. Keine Werbung, kein Abgraben deiner Daten, keine geschlossene Plattform. Es gibt keine Zentrale.
not_a_product_title: Du bist ein Mensch und keine Ware
real_conversation_body: Mit 500 Zeichen pro Beitrag und Features wie Inhalts- und Bilderwarnungen kannst du dich so ausdrücken, wie du es möchtest.
real_conversation_title: Geschaffen für echte Gespräche
within_reach_body: Verschiedene Apps für iOS, Android und andere Plattformen erlauben es dir, dank unseres blühenden API-Ökosystems, dich von überall auf dem Laufenden zu halten.
within_reach_title: Immer für dich da
generic_description: "%{domain} ist ein Server im Netzwerk" generic_description: "%{domain} ist ein Server im Netzwerk"
hosted_on: Mastodon, beherbergt auf %{domain} hosted_on: Mastodon, beherbergt auf %{domain}
learn_more: Mehr erfahren learn_more: Mehr erfahren
other_instances: Andere Server
privacy_policy: Datenschutzerklärung privacy_policy: Datenschutzerklärung
source_code: Quellcode source_code: Quellcode
status_count_after: status_count_after:
@ -507,13 +496,11 @@ de:
logout: Abmelden logout: Abmelden
migrate_account: Ziehe zu einem anderen Konto um migrate_account: Ziehe zu einem anderen Konto um
migrate_account_html: Wenn du wünschst, dieses Konto zu einem anderen umzuziehen, kannst du <a href="%{path}">dies hier einstellen</a>. migrate_account_html: Wenn du wünschst, dieses Konto zu einem anderen umzuziehen, kannst du <a href="%{path}">dies hier einstellen</a>.
or: oder
or_log_in_with: Oder anmelden mit or_log_in_with: Oder anmelden mit
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registrieren register: Registrieren
register_elsewhere: Registrieren auf einem anderen Server
resend_confirmation: Bestätigungs-Mail erneut versenden resend_confirmation: Bestätigungs-Mail erneut versenden
reset_password: Passwort zurücksetzen reset_password: Passwort zurücksetzen
security: Sicherheit security: Sicherheit

View File

@ -7,7 +7,6 @@ el:
administered_by: 'Διαχειριστής:' administered_by: 'Διαχειριστής:'
api: API api: API
apps: Εφαρμογές κινητών apps: Εφαρμογές κινητών
closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
contact: Επικοινωνία contact: Επικοινωνία
contact_missing: Δεν έχει οριστεί contact_missing: Δεν έχει οριστεί
contact_unavailable: Μ contact_unavailable: Μ
@ -15,19 +14,9 @@ el:
extended_description_html: | extended_description_html: |
<h3>Ένα καλό σημείο για κανόνες</h3> <h3>Ένα καλό σημείο για κανόνες</h3>
<p>Η αναλυτική περιγραφή δεν έχει ακόμα οριστεί</p> <p>Η αναλυτική περιγραφή δεν έχει ακόμα οριστεί</p>
features:
humane_approach_body: Μαθαίνοντας από τις αποτυχίες άλλων δικτύων, το Mastodon στοχεύει να κάνει σχεδιαστικά ηθικές επιλογές για να καταπολεμήσει την κακόβουλη χρήση των κοινωνικών δικτύων.
humane_approach_title: Μια πιο ανθρώπινη προσέγγιση
not_a_product_body: Το Mastodon δεν είναι ένα εμπορικό δίκτυο. Δεν έχει διαφημίσεις, δεν έχει εξόρυξη δεδομένων, δεν έχει περιφραγμένους κήπους. Δεν υπάρχει κεντρικό σημείο ελέγχου.
not_a_product_title: Είσαι άνθρωπος, όχι προϊόν
real_conversation_body: Με 500 χαρακτήρες στη διάθεσή σου και υποστήριξη για λεπτομερή έλεγχο και προειδοποιήσεις πολυμέσων, μπορείς να εκφραστείς με τον τρόπο που θέλεις.
real_conversation_title: Φτιαγμένο για αληθινή συζήτηση
within_reach_body: Οι πολλαπλές εφαρμογές για το iOS, το Android και τις υπόλοιπες πλατφόρμες, χάρη σε ένα φιλικό προς τους προγραμματιστές οικοσύστημα API, σου επιτρέπουν να κρατάς επαφή με τους φίλους και τις φίλες σου οπουδήποτε.
within_reach_title: Πάντα προσβάσιμο
generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο" generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο"
hosted_on: Το Mastodon φιλοξενείται στο %{domain} hosted_on: Το Mastodon φιλοξενείται στο %{domain}
learn_more: Μάθε περισσότερα learn_more: Μάθε περισσότερα
other_instances: Λίστα κόμβων
privacy_policy: Πολιτική απορρήτου privacy_policy: Πολιτική απορρήτου
source_code: Πηγαίος κώδικας source_code: Πηγαίος κώδικας
status_count_after: status_count_after:
@ -508,13 +497,11 @@ el:
logout: Αποσύνδεση logout: Αποσύνδεση
migrate_account: Μετακόμισε σε διαφορετικό λογαριασμό migrate_account: Μετακόμισε σε διαφορετικό λογαριασμό
migrate_account_html: Αν θέλεις να ανακατευθύνεις αυτό τον λογαριασμό σε έναν διαφορετικό, μπορείς να το <a href="%{path}">διαμορφώσεις εδώ</a>. migrate_account_html: Αν θέλεις να ανακατευθύνεις αυτό τον λογαριασμό σε έναν διαφορετικό, μπορείς να το <a href="%{path}">διαμορφώσεις εδώ</a>.
or: ή
or_log_in_with: Ή συνδέσου με or_log_in_with: Ή συνδέσου με
providers: providers:
cas: Υπηρεσία Κεντρικής Πιστοποίησης (CAS) cas: Υπηρεσία Κεντρικής Πιστοποίησης (CAS)
saml: SAML saml: SAML
register: Εγγραφή register: Εγγραφή
register_elsewhere: Εγγραφή σε διαφορετικό εξυπηρετητή
resend_confirmation: Στείλε ξανά τις οδηγίες επιβεβαίωσης resend_confirmation: Στείλε ξανά τις οδηγίες επιβεβαίωσης
reset_password: Επαναφορά συνθηματικού reset_password: Επαναφορά συνθηματικού
security: Ασφάλεια security: Ασφάλεια

View File

@ -4,36 +4,36 @@ en:
about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse. about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail. about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail.
about_this: About about_this: About
active_count_after: active
active_footnote: Monthly Active Users (MAU)
administered_by: 'Administered by:' administered_by: 'Administered by:'
api: API api: API
apps: Mobile apps apps: Mobile apps
closed_registrations: Registrations are currently closed on this server. However! You can find a different server to make an account on and get access to the very same network from there. apps_platforms: Use Mastodon from iOS, Android and other platforms
browse_directory: Browse a profile directory and filter by interests
browse_public_posts: Browse a live stream of public posts on Mastodon
contact: Contact contact: Contact
contact_missing: Not set contact_missing: Not set
contact_unavailable: N/A contact_unavailable: N/A
discover_users: Discover users
documentation: Documentation documentation: Documentation
extended_description_html: | extended_description_html: |
<h3>A good place for rules</h3> <h3>A good place for rules</h3>
<p>The extended description has not been set up yet.</p> <p>The extended description has not been set up yet.</p>
features: federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
humane_approach_body: Learning from failures of other networks, Mastodon aims to make ethical design choices to combat the misuse of social media.
humane_approach_title: A more humane approach
not_a_product_body: Mastodon is not a commercial network. No advertising, no data mining, no walled gardens. There is no central authority.
not_a_product_title: Youre a person, not a product
real_conversation_body: With 500 characters at your disposal and support for granular content and media warnings, you can express yourself the way you want to.
real_conversation_title: Built for real conversation
within_reach_body: Multiple apps for iOS, Android, and other platforms thanks to a developer-friendly API ecosystem allow you to keep up with your friends anywhere.
within_reach_title: Always within reach
generic_description: "%{domain} is one server in the network" generic_description: "%{domain} is one server in the network"
get_apps: Try a mobile app
hosted_on: Mastodon hosted on %{domain} hosted_on: Mastodon hosted on %{domain}
learn_more: Learn more learn_more: Learn more
other_instances: Server list
privacy_policy: Privacy policy privacy_policy: Privacy policy
see_whats_happening: See what's happening
server_stats: 'Server stats:'
source_code: Source code source_code: Source code
status_count_after: status_count_after:
one: status one: status
other: statuses other: statuses
status_count_before: Who authored status_count_before: Who authored
tagline: Follow friends and discover new ones
terms: Terms of service terms: Terms of service
user_count_after: user_count_after:
one: user one: user
@ -501,6 +501,7 @@ en:
auth: auth:
agreement_html: By clicking "Sign up" below you agree to follow <a href="%{rules_path}">the rules of the server</a> and <a href="%{terms_path}">our terms of service</a>. agreement_html: By clicking "Sign up" below you agree to follow <a href="%{rules_path}">the rules of the server</a> and <a href="%{terms_path}">our terms of service</a>.
change_password: Password change_password: Password
checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a>
confirm_email: Confirm email confirm_email: Confirm email
delete_account: Delete account delete_account: Delete account
delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation. delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation.
@ -511,17 +512,17 @@ en:
logout: Logout logout: Logout
migrate_account: Move to a different account migrate_account: Move to a different account
migrate_account_html: If you wish to redirect this account to a different one, you can <a href="%{path}">configure it here</a>. migrate_account_html: If you wish to redirect this account to a different one, you can <a href="%{path}">configure it here</a>.
or: or
or_log_in_with: Or log in with or_log_in_with: Or log in with
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Sign up register: Sign up
register_elsewhere: Sign up on another server registration_closed: "%{instance} is not accepting new members"
resend_confirmation: Resend confirmation instructions resend_confirmation: Resend confirmation instructions
reset_password: Reset password reset_password: Reset password
security: Security security: Security
set_new_password: Set new password set_new_password: Set new password
trouble_logging_in: Trouble logging in?
authorize_follow: authorize_follow:
already_following: You are already following this account already_following: You are already following this account
error: Unfortunately, there was an error looking up the remote account error: Unfortunately, there was an error looking up the remote account

View File

@ -7,7 +7,6 @@ eo:
administered_by: 'Administrata de:' administered_by: 'Administrata de:'
api: API api: API
apps: Poŝtelefonaj aplikaĵoj apps: Poŝtelefonaj aplikaĵoj
closed_registrations: Registriĝoj estas nuntempe fermitaj en ĉi tiu servilo. Tamen, vi povas trovi alian servilon por fari konton kaj aliri al la sama reto de tie.
contact: Kontakti contact: Kontakti
contact_missing: Ne elektita contact_missing: Ne elektita
contact_unavailable: Ne disponebla contact_unavailable: Ne disponebla
@ -15,19 +14,9 @@ eo:
extended_description_html: | extended_description_html: |
<h3>Bona loko por reguloj</h3> <h3>Bona loko por reguloj</h3>
<p>La detala priskribo ne estis elektita.</p> <p>La detala priskribo ne estis elektita.</p>
features:
humane_approach_body: Lernante de eraroj de aliaj retoj, Mastodon celas fari etikajn fasonajn elektojn por batali kontraŭ misuzado de sociaj retoj.
humane_approach_title: Aliro pli humana
not_a_product_body: Mastodon ne estas komerca reto. Neniu reklamo, neniu kolektado de datumoj, neniu privilegio. Ne estas centra aŭtoritato.
not_a_product_title: Vi estas homo, ne produkto
real_conversation_body: Per 500 disponeblaj signoj, per elektebloj pri videbleco, kaj per avertoj pri enhavo, vi povas esprimi vin tiel, kiel vi volas.
real_conversation_title: Konstruita por veraj konversacioj
within_reach_body: Pluraj aplikaĵoj por iOS, Android, kaj aliaj platformoj danke al API-medio bonveniga por programistoj permesas resti en kontakto kun viaj amikoj ĉie.
within_reach_title: Ĉiam kontaktebla
generic_description: "%{domain} estas unu servilo en la reto" generic_description: "%{domain} estas unu servilo en la reto"
hosted_on: "%{domain} estas nodo de Mastodon" hosted_on: "%{domain} estas nodo de Mastodon"
learn_more: Lerni pli learn_more: Lerni pli
other_instances: Listo de serviloj
privacy_policy: Privateca politiko privacy_policy: Privateca politiko
source_code: Fontkodo source_code: Fontkodo
status_count_after: status_count_after:
@ -508,13 +497,11 @@ eo:
logout: Elsaluti logout: Elsaluti
migrate_account: Movi al alia konto migrate_account: Movi al alia konto
migrate_account_html: Se vi deziras alidirekti ĉi tiun konton al alia, vi povas <a href="%{path}">agordi ĝin ĉi tie</a>. migrate_account_html: Se vi deziras alidirekti ĉi tiun konton al alia, vi povas <a href="%{path}">agordi ĝin ĉi tie</a>.
or:
or_log_in_with: Aŭ ensaluti per or_log_in_with: Aŭ ensaluti per
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registriĝi register: Registriĝi
register_elsewhere: Registriĝi en alia servilo
resend_confirmation: Resendi la instrukciojn por konfirmi resend_confirmation: Resendi la instrukciojn por konfirmi
reset_password: Ŝanĝi pasvorton reset_password: Ŝanĝi pasvorton
security: Sekureco security: Sekureco

View File

@ -7,7 +7,6 @@ es:
administered_by: 'Administrado por:' administered_by: 'Administrado por:'
api: API api: API
apps: Aplicaciones móviles apps: Aplicaciones móviles
closed_registrations: Los registros están actualmente cerrados en este servidor. Aun así, puedes encontrar un servidor diferente para registrarte y tener acceso a la misma comunidad
contact: Contacto contact: Contacto
contact_missing: No especificado contact_missing: No especificado
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ es:
extended_description_html: | extended_description_html: |
<h3>Un buen lugar para las reglas</h3> <h3>Un buen lugar para las reglas</h3>
<p>La descripción extendida no se ha colocado aún.</p> <p>La descripción extendida no se ha colocado aún.</p>
features:
humane_approach_body: Aprendiendo de los errores de otras redes, Mastodon apunta a las decisiones de diseño ético para combatir el desuso de las redes sociales.
humane_approach_title: Una misión más humana
not_a_product_body: Mastodon no es una red comercial. Nada de publicidad, nada de minado de datos, nada de jardines murados. No hay ninguna autoridad central.
not_a_product_title: Eres una persona, no un producto
real_conversation_body: Con 500 caracteres a tu disposición y soporte para contenido granular y advertencias de contenido, puedes expresarte como quieras.
real_conversation_title: Hecho para verdaderas conversaciones
within_reach_body: Aplicaciones múltiples para iOS, Android, y otras plataformas gracias a un ecosistema de APIs amigable al desarrollador para permitirte estar con tus amigos donde sea.
within_reach_title: Siempre al alcance
generic_description: "%{domain} es un servidor en la red" generic_description: "%{domain} es un servidor en la red"
hosted_on: Mastodon hosteado en %{domain} hosted_on: Mastodon hosteado en %{domain}
learn_more: Aprende más learn_more: Aprende más
other_instances: Otras instancias
privacy_policy: Política de privacidad privacy_policy: Política de privacidad
source_code: Código fuente source_code: Código fuente
status_count_after: status_count_after:
@ -460,13 +449,11 @@ es:
logout: Cerrar sesión logout: Cerrar sesión
migrate_account: Mudarse a otra cuenta migrate_account: Mudarse a otra cuenta
migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>. migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>.
or: o
or_log_in_with: O inicia sesión con or_log_in_with: O inicia sesión con
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registrarse register: Registrarse
register_elsewhere: Registrarse en otro servidor
resend_confirmation: Volver a enviar el correo de confirmación resend_confirmation: Volver a enviar el correo de confirmación
reset_password: Restablecer contraseña reset_password: Restablecer contraseña
security: Cambiar contraseña security: Cambiar contraseña

View File

@ -7,7 +7,6 @@ eu:
administered_by: 'Administratzailea(k):' administered_by: 'Administratzailea(k):'
api: APIa api: APIa
apps: Aplikazio mugikorrak apps: Aplikazio mugikorrak
closed_registrations: Harpidetza itxita dago orain zerbitzari honetan. Hala ere, beste zerbitzari bat aurkitu dezakezu kontua egiteko eta hona ere sarbidea izan.
contact: Kontaktua contact: Kontaktua
contact_missing: Ezarri gabe contact_missing: Ezarri gabe
contact_unavailable: E/E contact_unavailable: E/E
@ -15,19 +14,9 @@ eu:
extended_description_html: | extended_description_html: |
<h3>Arauentzako toki egoki bat</h3> <h3>Arauentzako toki egoki bat</h3>
<p>Azalpen luzea ez da ezarri oraindik.</p> <p>Azalpen luzea ez da ezarri oraindik.</p>
features:
humane_approach_body: Beste sareen akatsetatik ikasiz, Mastodon diseinu erabaki etikoak hartzen saiatzen da gizarte sareen erabilera okerrak borrokatzeko.
humane_approach_title: Ikuspuntu humanoago bat
not_a_product_body: Mastodon ez da sare komertzial bat. Ez du iragarkirik, eta ditu datuak mehatzen, ez da hormaz babestutako lorategi bat. Ez dago autoritate zentralik.
not_a_product_title: Pertsona bat zara, ez produktu bat
real_conversation_body: 500 karaktere dituzu eskura, edukia xehetasunez kudeatu daiteke eta multimediari abisuak jarri, adierazi zure burua zure erara.
real_conversation_title: Egiazko elkarrizketarako eraikia
within_reach_body: iOS, Android eta beste plataformetarako aplikazio ugari, eta garatzaileentzako erabilterraza den API ekosistema bati esker beste plataforma batzuetako lagunekin aritzeko aukera.
within_reach_title: Beti eskura
generic_description: "%{domain} sareko zerbitzari bat da" generic_description: "%{domain} sareko zerbitzari bat da"
hosted_on: Mastodon %{domain} domeinuan ostatatua hosted_on: Mastodon %{domain} domeinuan ostatatua
learn_more: Ikasi gehiago learn_more: Ikasi gehiago
other_instances: Zerbitzarien zerrenda
privacy_policy: Pribatutasun politika privacy_policy: Pribatutasun politika
source_code: Iturburu kodea source_code: Iturburu kodea
status_count_after: status_count_after:
@ -507,13 +496,11 @@ eu:
logout: Amaitu saioa logout: Amaitu saioa
migrate_account: Lekualdatu beste kontu batera migrate_account: Lekualdatu beste kontu batera
migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu. migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu.
or: edo
or_log_in_with: Edo hasi saioa honekin or_log_in_with: Edo hasi saioa honekin
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Eman izena register: Eman izena
register_elsewhere: Eman izena beste zerbitzari batean
resend_confirmation: Birbidali berresteko argibideak resend_confirmation: Birbidali berresteko argibideak
reset_password: Berrezarri pasahitza reset_password: Berrezarri pasahitza
security: Segurtasuna security: Segurtasuna

View File

@ -7,7 +7,6 @@ fa:
administered_by: 'با مدیریت:' administered_by: 'با مدیریت:'
api: رابط برنامه‌نویسی کاربردی api: رابط برنامه‌نویسی کاربردی
apps: اپ‌های موبایل apps: اپ‌های موبایل
closed_registrations: ثبت‌نام روی این سرور هم‌اینک فعال نیست. اما شما می‌توانید سرور دیگری بیابید و با حسابی که آن‌جا می‌سازید دقیقاً به همین شبکه دسترسی داشته باشید.
contact: تماس contact: تماس
contact_missing: تعیین نشده contact_missing: تعیین نشده
contact_unavailable: موجود نیست contact_unavailable: موجود نیست
@ -15,19 +14,9 @@ fa:
extended_description_html: | extended_description_html: |
<h3>جای خوبی برای قانون‌ها</h3> <h3>جای خوبی برای قانون‌ها</h3>
<p>توضیحات تکمیلی نوشته نشده است.</p> <p>توضیحات تکمیلی نوشته نشده است.</p>
features:
humane_approach_body: با آموختن از کاستی‌های شبکه‌های دیگر، ماستدون می‌خواهد به کمک انتخاب‌های اخلاقی‌تر در طراحی خودش با آسیب‌های شبکه‌های اجتماعی مبارزه کند.
humane_approach_title: رویکردی انسانی‌تر
not_a_product_body: ماستدون یک شبکهٔ تجاری نیست. بدون تبلیغات، بدون داده‌کاوی، بدون حصارکشی. هیچ قدرت مرکزی‌ای وجود ندارد.
not_a_product_title: شما یک انسان هستید، نه یک محصول
real_conversation_body: با ۵۰۰ نویسه برای هر نوشته و با پشتیبانی از هشدارهای موردی برای نوشته‌ها و تصاویر، می‌توانید خود را همان گونه که می‌خواهید ابراز کنید.
real_conversation_title: برای گفتگوهای واقعی
within_reach_body: اپ‌های متنوع برای iOS، اندروید، و سیستم‌های دیگر به خاطر وجود یک اکوسیستم API دوستانه برای برنامه‌نویسان. از همه جا با دوستان خود ارتباط داشته باشید.
within_reach_title: همیشه در دسترس
generic_description: "%{domain} یک سرور روی شبکه است" generic_description: "%{domain} یک سرور روی شبکه است"
hosted_on: ماستدون، میزبانی‌شده روی %{domain} hosted_on: ماستدون، میزبانی‌شده روی %{domain}
learn_more: بیشتر بدانید learn_more: بیشتر بدانید
other_instances: فهرست سرورها
privacy_policy: سیاست رازداری privacy_policy: سیاست رازداری
source_code: کدهای منبع source_code: کدهای منبع
status_count_after: status_count_after:
@ -508,13 +497,11 @@ fa:
logout: خروج logout: خروج
migrate_account: نقل مکان به یک حساب دیگر migrate_account: نقل مکان به یک حساب دیگر
migrate_account_html: اگر می‌خواهید این حساب را به حساب دیگری منتقل کنید، <a href="%{path}">این‌جا را کلیک کنید</a>. migrate_account_html: اگر می‌خواهید این حساب را به حساب دیگری منتقل کنید، <a href="%{path}">این‌جا را کلیک کنید</a>.
or: یا
or_log_in_with: یا ورود به وسیلهٔ or_log_in_with: یا ورود به وسیلهٔ
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: عضو شوید register: عضو شوید
register_elsewhere: ثبت نام روی یک سرور دیگر
resend_confirmation: راهنمایی برای تأیید را دوباره بفرست resend_confirmation: راهنمایی برای تأیید را دوباره بفرست
reset_password: بازنشانی رمز reset_password: بازنشانی رمز
security: امنیت security: امنیت

View File

@ -7,7 +7,6 @@ fi:
administered_by: 'Ylläpitäjä:' administered_by: 'Ylläpitäjä:'
api: API api: API
apps: Mobiili sovellukset apps: Mobiili sovellukset
closed_registrations: Tähän instanssiin ei voi tällä hetkellä rekisteröityä. Voit kuitenkin luoda tilin johonkin toiseen instanssiin ja käyttää samaa verkostoa sitä kautta.
contact: Ota yhteyttä contact: Ota yhteyttä
contact_missing: Ei asetettu contact_missing: Ei asetettu
contact_unavailable: Ei saatavilla contact_unavailable: Ei saatavilla
@ -15,19 +14,9 @@ fi:
extended_description_html: | extended_description_html: |
<h3>Hyvä paikka säännöille</h3> <h3>Hyvä paikka säännöille</h3>
<p>Pidempää kuvausta ei ole vielä laadittu.</p> <p>Pidempää kuvausta ei ole vielä laadittu.</p>
features:
humane_approach_body: Mastodonissa otetaan oppia muiden verkostojen virheistä, ja sen suunnittelussa pyritään toimimaan eettisesti ja ehkäisemään sosiaalisen median väärinkäyttöä.
humane_approach_title: Ihmisläheisempi ote
not_a_product_body: Mastodon ei ole kaupallinen verkosto. Ei mainoksia, ei tiedonlouhintaa, ei suljettuja protokollia. Mastodonissa ei ole keskusjohtoa.
not_a_product_title: Olet henkilö, et tuote
real_conversation_body: 'Voit ilmaista itseäsi niin kuin itse haluat: tilaa on 500 merkkiä, ja sisältövaroituksia voi tehdä monin tavoin.'
real_conversation_title: Tehty oikeaa keskustelua varten
within_reach_body: Rajapintoja on tarjolla moniin eri kehitysympäristöihin, minkä ansiosta iOS:lle, Androidille ja muille alustoille on saatavana useita eri sovelluksia. Näin voit pitää yhteyttä ystäviisi missä vain.
within_reach_title: Aina lähellä
generic_description: "%{domain} on yksi verkostoon kuuluvista palvelimista" generic_description: "%{domain} on yksi verkostoon kuuluvista palvelimista"
hosted_on: Mastodon palvelimella %{domain} hosted_on: Mastodon palvelimella %{domain}
learn_more: Lisätietoja learn_more: Lisätietoja
other_instances: Muut palvelimet
privacy_policy: Tietosuojaseloste privacy_policy: Tietosuojaseloste
source_code: Lähdekoodi source_code: Lähdekoodi
status_count_after: status_count_after:
@ -396,13 +385,11 @@ fi:
logout: Kirjaudu ulos logout: Kirjaudu ulos
migrate_account: Muuta toiseen tiliin migrate_account: Muuta toiseen tiliin
migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit <a href="%{path}">asettaa toisen tilin tästä</a>. migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit <a href="%{path}">asettaa toisen tilin tästä</a>.
or: tai
or_log_in_with: Tai käytä kirjautumiseen or_log_in_with: Tai käytä kirjautumiseen
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Rekisteröidy register: Rekisteröidy
register_elsewhere: Rekisteröidy toiselle palvelimelle
resend_confirmation: Lähetä vahvistusohjeet uudestaan resend_confirmation: Lähetä vahvistusohjeet uudestaan
reset_password: Palauta salasana reset_password: Palauta salasana
security: Tunnukset security: Tunnukset

View File

@ -7,7 +7,6 @@ fr:
administered_by: 'Administrée par:' administered_by: 'Administrée par:'
api: API api: API
apps: Applications mobiles apps: Applications mobiles
closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau.
contact: Contact contact: Contact
contact_missing: Manquant contact_missing: Manquant
contact_unavailable: Non disponible contact_unavailable: Non disponible
@ -15,19 +14,9 @@ fr:
extended_description_html: | extended_description_html: |
<h3>Un bon endroit pour les règles</h3> <h3>Un bon endroit pour les règles</h3>
<p>La description étendue na pas été remplie.</p> <p>La description étendue na pas été remplie.</p>
features:
humane_approach_body: Ayant appris des échecs dautres réseaux, Mastodon à lambition de combattre labus des médias sociaux en effectuant des choix de conception éthiques.
humane_approach_title: Une approche plus humaine
not_a_product_body: Mastodon nest pas un réseau commercial. Ici, pas de publicités, pas de prospection de données et pas denvironnements fermés. Il ny existe aucune autorité centrale.
not_a_product_title: Vous êtes une personne, pas un produit
real_conversation_body: Avec 500 caractères à votre disposition, une grande granularité en termes de diffusion et la possibilité de masquer vos messages derrière des avertissements, vous êtes libre de vous exprimer de la manière qui vous plaît.
real_conversation_title: Construit pour de vraies conversations
within_reach_body: Grâce à lexistence dun environnement API accueillant pour les développeur·se·s, de multiples applications pour iOS, Android et dautres plateformes vous permettent de rester en contact avec vos ami·e·s où que vous soyez.
within_reach_title: Toujours à portée de main
generic_description: "%{domain} est seulement un serveur du réseau" generic_description: "%{domain} est seulement un serveur du réseau"
hosted_on: Instance Mastodon hébergée par %{domain} hosted_on: Instance Mastodon hébergée par %{domain}
learn_more: En savoir plus learn_more: En savoir plus
other_instances: Liste des instances
privacy_policy: Politique de vie privée privacy_policy: Politique de vie privée
source_code: Code source source_code: Code source
status_count_after: status_count_after:
@ -508,13 +497,11 @@ fr:
logout: Se déconnecter logout: Se déconnecter
migrate_account: Déplacer vers un compte différent migrate_account: Déplacer vers un compte différent
migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le <a href="%{path}">configurer ici</a>. migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le <a href="%{path}">configurer ici</a>.
or: ou
or_log_in_with: Ou authentifiez-vous avec or_log_in_with: Ou authentifiez-vous avec
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Sinscrire register: Sinscrire
register_elsewhere: Sinscrire sur un autre serveur
resend_confirmation: Envoyer à nouveau les consignes de confirmation resend_confirmation: Envoyer à nouveau les consignes de confirmation
reset_password: Réinitialiser le mot de passe reset_password: Réinitialiser le mot de passe
security: Sécurité security: Sécurité

View File

@ -7,7 +7,6 @@ gl:
administered_by: 'Administrada por:' administered_by: 'Administrada por:'
api: API api: API
apps: Apps móbiles apps: Apps móbiles
closed_registrations: O rexistro en este servidor está pechado neste momento. Porén! Pode atopar un servidor diferente para obter unha conta e ter acceso exactamente a misma rede desde alí.
contact: Contacto contact: Contacto
contact_missing: Non establecido contact_missing: Non establecido
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ gl:
extended_description_html: | extended_description_html: |
<h3>Un bo lugar para regras</h3> <h3>Un bo lugar para regras</h3>
<p>A descrición extendida aínda non se proporcionou.</p> <p>A descrición extendida aínda non se proporcionou.</p>
features:
humane_approach_body: Aprendendo dos erros de outras redes, Mastodon intenta tomar decisións éticas de deseño para loitar contra os usos incorrectos da rede.
humane_approach_title: Unha aproximación máis humana
not_a_product_body: Mastodon non é unha rede comercial. Sen anuncios, sen minería de datos, sen xardíns privados. Non hai autoridade centralizada.
not_a_product_title: Vostede é unha persoa, non un producto
real_conversation_body: Con 500 caracteres a súa disposición, soporte para contido polo miúdo e avisos sobre o contido, pode expresarse vostede con libertade.
real_conversation_title: Construído para conversacións reais
within_reach_body: Existen múltiples aplicacións para iOS, Android e outras plataformas grazas a un entorno API amigable para o desenvolvedor que lle permite estar ao tanto cos seus amigos en calquer lugar.
within_reach_title: Sempre en contacto
generic_description: "%{domain} é un servidor na rede" generic_description: "%{domain} é un servidor na rede"
hosted_on: Mastodon aloxado en %{domain} hosted_on: Mastodon aloxado en %{domain}
learn_more: Coñeza máis learn_more: Coñeza máis
other_instances: Lista de servidores
privacy_policy: Política de intimidade privacy_policy: Política de intimidade
source_code: Código fonte source_code: Código fonte
status_count_after: status_count_after:
@ -508,13 +497,11 @@ gl:
logout: Desconectar logout: Desconectar
migrate_account: Mover a unha conta diferente migrate_account: Mover a unha conta diferente
migrate_account_html: Se desexa redirixir esta conta hacia outra diferente, pode <a href="%{path}">configuralo aquí</a>. migrate_account_html: Se desexa redirixir esta conta hacia outra diferente, pode <a href="%{path}">configuralo aquí</a>.
or: ou
or_log_in_with: ou conectar con or_log_in_with: ou conectar con
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Rexistro register: Rexistro
register_elsewhere: Rexístrese en outro servidor
resend_confirmation: Voltar a enviar intruccións de confirmación resend_confirmation: Voltar a enviar intruccións de confirmación
reset_password: Restablecer contrasinal reset_password: Restablecer contrasinal
security: Seguridade security: Seguridade

View File

@ -6,7 +6,6 @@ he:
about_this: אודות שרת זה about_this: אודות שרת זה
api: API api: API
apps: יישומונים לנייד apps: יישומונים לנייד
closed_registrations: הרשמות סגורות לשרת זה לעת עתה.
contact: יצירת קשר contact: יצירת קשר
contact_missing: ללא הגדרה contact_missing: ללא הגדרה
contact_unavailable: לא רלוונטי/חסר contact_unavailable: לא רלוונטי/חסר
@ -14,19 +13,9 @@ he:
extended_description_html: | extended_description_html: |
<h3>מקום טוב לכללים</h3> <h3>מקום טוב לכללים</h3>
<p>התיאור המורחב טרם הוגדר.</p> <p>התיאור המורחב טרם הוגדר.</p>
features:
humane_approach_body: מתוך למידה מכשלים של רשתות אחרות, מסטודון מכוונת להחלטות תכנוניות אתיות שנאבקות בשימוש לרעה של מדיה חברתית.
humane_approach_title: גישה הומאנית יותר
not_a_product_body: מסטודון איננה רשת מסחרית. אין פרסום, אין כריית מידע, אין גנים סגורים. אין סמכות מרכזית.
not_a_product_title: את(ה) אדם, לא מוצר
real_conversation_body: עם 500 תווים לרשותך, ואפשרויות פרטניות לאזהרות תוכן והסתרת מדיה, יש לך את החופש להתבטא כרצונך.
real_conversation_title: בנוי לשיחות אמתיות
within_reach_body: שלל אפליקציות עבור iOS, אנדרואיד ופלטפורמות אחרות שיאפשרו לך לשמור על קשר עם חברים בכל מקום, תודות למערכת מנשקי תוכנה ידידותיים למפתחים.
within_reach_title: תמיד במרחק נגיעה
generic_description: "%{domain} הוא שרת אחד בתוך הרשת" generic_description: "%{domain} הוא שרת אחד בתוך הרשת"
hosted_on: מסטודון שיושב בכתובת %{domain} hosted_on: מסטודון שיושב בכתובת %{domain}
learn_more: מידע נוסף learn_more: מידע נוסף
other_instances: שרתים אחרים
source_code: קוד מקור source_code: קוד מקור
status_count_after: הודעות status_count_after: הודעות
status_count_before: שכתבו status_count_before: שכתבו

View File

@ -3,9 +3,7 @@ hr:
about: about:
about_mastodon_html: Mastodon je <em>besplatna, open-source</em> socijalna mreža. <em>Decentralizirana</em> alternativa komercijalnim platformama, izbjegava rizik toga da jedna tvrtka monopolizira vašu komunikaciju. Izaberite server kojem ćete vjerovati &mdash; koji god odabrali, moći ćete komunicirati sa svima ostalima. Bilo tko može imati svoju vlastitu Mastodon instancu i sudjelovati u <em>socijalnoj mreži</em> bez problema. about_mastodon_html: Mastodon je <em>besplatna, open-source</em> socijalna mreža. <em>Decentralizirana</em> alternativa komercijalnim platformama, izbjegava rizik toga da jedna tvrtka monopolizira vašu komunikaciju. Izaberite server kojem ćete vjerovati &mdash; koji god odabrali, moći ćete komunicirati sa svima ostalima. Bilo tko može imati svoju vlastitu Mastodon instancu i sudjelovati u <em>socijalnoj mreži</em> bez problema.
about_this: O ovoj instanci about_this: O ovoj instanci
closed_registrations: Registracije na ovoj instanci su trenutno zatvorene.
contact: Kontakt contact: Kontakt
other_instances: Druge instance
source_code: Izvorni kod source_code: Izvorni kod
status_count_after: statusi status_count_after: statusi
status_count_before: Tko je autor status_count_before: Tko je autor

View File

@ -4,26 +4,15 @@ hu:
about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> címkével ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban. about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> címkével ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban.
about_mastodon_html: Mastodon egy <em>szabad, nyílt forráskódú</em> szociális hálózati kiszolgálo. Egy <em>központosítatlan</em> alternatíva a kereskedelmi platformokra, elkerüli a kommunikációd monopolizációját veszélyét. Bárki futtathatja a Mastodon-t és részt vehet a <em>szociális hálózatban</em>. about_mastodon_html: Mastodon egy <em>szabad, nyílt forráskódú</em> szociális hálózati kiszolgálo. Egy <em>központosítatlan</em> alternatíva a kereskedelmi platformokra, elkerüli a kommunikációd monopolizációját veszélyét. Bárki futtathatja a Mastodon-t és részt vehet a <em>szociális hálózatban</em>.
about_this: Rólunk about_this: Rólunk
closed_registrations: A regisztráció jelenleg nem engedélyezett ezen az instancián. De ne csüggedj! Létrehozhatsz fiókot egy másik instancián és azon keresztül is hozzáférsz a teljes föderációhoz.
contact: Kapcsolat contact: Kapcsolat
contact_missing: Nincs megadva contact_missing: Nincs megadva
contact_unavailable: N/A contact_unavailable: N/A
extended_description_html: | extended_description_html: |
<h3>Ez itt a szabályzat helye</h3> <h3>Ez itt a szabályzat helye</h3>
<p>Még nem állítottál be bővebb leírást.</p> <p>Még nem állítottál be bővebb leírást.</p>
features:
humane_approach_body: Más alkalmazások hibáiból tanulva a Mastodon etikus alapokon nyugvó döntésekkel küzd a közösségi média ártalmai ellen.
humane_approach_title: Emberséges attitűd
not_a_product_body: A Mastodon nem a profitszerzésre épül, nem is privát játszótér. Nincsenek reklámok, nincs adatbányászat és központosított döntéshozatal sincsen.
not_a_product_title: Ember vagy, nem pedig árucikk
real_conversation_body: Az 500 karakteres limit, az érzékeny tartalomként jelölés és más kifinomult eszközök segítségével tényleg egyedi módon fejezheted ki önmagad.
real_conversation_title: Valódi beszélgetésekre tervezve
within_reach_body: A fejlesztőbarát API-nak köszönhetően számos iOS, Android és egyéb platformra írt alkalmazás teszi lehetővé, hogy bármikor, bárhonnan részt vehess a társalgásban.
within_reach_title: Mindig elérhetőnek lenni
generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban" generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban"
hosted_on: "%{domain} Mastodon instancia" hosted_on: "%{domain} Mastodon instancia"
learn_more: Tudj meg többet learn_more: Tudj meg többet
other_instances: Instanciák listája
source_code: Forráskód source_code: Forráskód
status_count_after: tülköt küldött status_count_after: tülköt küldött
status_count_before: eddig status_count_before: eddig

View File

@ -7,7 +7,6 @@ id:
administered_by: 'Dikelola oleh:' administered_by: 'Dikelola oleh:'
api: API api: API
apps: Aplikasi hp apps: Aplikasi hp
closed_registrations: Pendaftaran untuk server ini sedang ditutup. Tetapi, anda bisa mencari server lain untuk membuat akun dan mendapatkan akses dari jaringan yang sama di sana.
contact: Kontak contact: Kontak
contact_missing: Belum diset contact_missing: Belum diset
contact_unavailable: Tidak Tersedia contact_unavailable: Tidak Tersedia
@ -15,19 +14,9 @@ id:
extended_description_html: | extended_description_html: |
<h3>Tempat yang baik untuk peraturan</h3> <h3>Tempat yang baik untuk peraturan</h3>
<p>Deskripsi lainnya belum diset.</p> <p>Deskripsi lainnya belum diset.</p>
features:
humane_approach_body: Belajar dari kegagalan jaringan lain, Mastodon berupaya untuk membuat pilihan desain yang etis untuk melawan penyalahgunaan media sosial.
humane_approach_title: Pendekatan yang lebih manusiawi
not_a_product_body: Mastodon bukanlah jaringan komersil. Tidak ada iklan, tidak ada pengumpulan data, tidak ada batasan vendor. Tidak ada otoritas terpusat.
not_a_product_title: Anda adalah orang, bukanlah sebuah produk
real_conversation_body: Dengan 500 karakter dan dukungan konten granular dan peringatan media, anda dapat mengekspresikan diri anda sendiri sesuai yang anda mau.
real_conversation_title: Dibangun untuk percakapan yang sebenarnya
within_reach_body: Berbagai aplikasi untuk iOS, Android, dan platform lainnya berkat ekosistem API yang ramah pada pengembang untuk tetap terhubung dengan teman-teman anda dimanapun.
within_reach_title: Selalu dalam jangkauan
generic_description: "%{domain} adalah satu server dalam jaringan" generic_description: "%{domain} adalah satu server dalam jaringan"
hosted_on: Mastodon dihosting di %{domain} hosted_on: Mastodon dihosting di %{domain}
learn_more: Pelajari selengkapnya learn_more: Pelajari selengkapnya
other_instances: Daftar Server
privacy_policy: Kebijakan Privasi privacy_policy: Kebijakan Privasi
source_code: Kode sumber source_code: Kode sumber
status_count_after: status_count_after:

View File

@ -3,9 +3,7 @@ io:
about: about:
about_mastodon_html: Mastodon esas <em>gratuita, apertitkodexa</em> sociala reto. Ol esas <em>sencentra</em> altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la <em>sociala reto</em> tote glate. about_mastodon_html: Mastodon esas <em>gratuita, apertitkodexa</em> sociala reto. Ol esas <em>sencentra</em> altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la <em>sociala reto</em> tote glate.
about_this: Pri ta instaluro about_this: Pri ta instaluro
closed_registrations: Membresko ne nun esas posible en ta instaluro.
contact: Kontaktar contact: Kontaktar
other_instances: Altra instaluri
source_code: Fontkodexo source_code: Fontkodexo
status_count_after: mesaji status_count_after: mesaji
status_count_before: Qua publikigis status_count_before: Qua publikigis

View File

@ -7,7 +7,6 @@ it:
administered_by: 'Amministrato da:' administered_by: 'Amministrato da:'
api: API api: API
apps: Applicazioni Mobile apps: Applicazioni Mobile
closed_registrations: Al momento le iscrizioni a questo server sono chiuse. Tuttavia! Puoi provare a cercare un server diverso su cui creare un account ed avere accesso alla stessa identica rete.
contact: Contatti contact: Contatti
contact_missing: Non impostato contact_missing: Non impostato
contact_unavailable: N/D contact_unavailable: N/D
@ -15,19 +14,9 @@ it:
extended_description_html: | extended_description_html: |
<h3>Un buon posto per le regole</h3> <h3>Un buon posto per le regole</h3>
<p>La descrizione estesa non è ancora stata preparata.</p> <p>La descrizione estesa non è ancora stata preparata.</p>
features:
humane_approach_body: Imparando dai fallimenti degli altri networks, Mastodon mira a fare scelte etiche di design per combattere l'abuso dei social media.
humane_approach_title: Un approccio più umano
not_a_product_body: Mastodon non è una rete commerciale. Niente pubblicità, niente data mining, nessun recinto dorato. Non c'è nessuna autorità centrale.
not_a_product_title: Tu sei una persona, non un prodotto
real_conversation_body: Con 500 caratteri a disposizione, un supporto per i contenuti granulari ed avvisi sui media potrai esprimerti nel modo desiderato.
real_conversation_title: Creato per conversazioni reali
within_reach_body: Apps per iOS, Android ed altre piattaforme, realizzate grazie ad un ecosistema di API adatto agli sviluppatori, ti consentono di poter stare in contatto con i tuoi amici ovunque ti trovi.
within_reach_title: Sempre a portata di mano
generic_description: "%{domain} è un server nella rete" generic_description: "%{domain} è un server nella rete"
hosted_on: Mastodon ospitato su %{domain} hosted_on: Mastodon ospitato su %{domain}
learn_more: Scopri altro learn_more: Scopri altro
other_instances: Elenco server
privacy_policy: Politica della privacy privacy_policy: Politica della privacy
source_code: Codice sorgente source_code: Codice sorgente
status_count_after: status_count_after:
@ -484,10 +473,8 @@ it:
logout: Esci da Mastodon logout: Esci da Mastodon
migrate_account: Sposta ad un account differente migrate_account: Sposta ad un account differente
migrate_account_html: Se vuoi che questo account sia reindirizzato a uno diverso, puoi <a href="%{path}">configurarlo qui</a>. migrate_account_html: Se vuoi che questo account sia reindirizzato a uno diverso, puoi <a href="%{path}">configurarlo qui</a>.
or: o
or_log_in_with: Oppure accedi con or_log_in_with: Oppure accedi con
register: Iscriviti register: Iscriviti
register_elsewhere: Iscriviti su un altro server
resend_confirmation: Invia di nuovo le istruzioni di conferma resend_confirmation: Invia di nuovo le istruzioni di conferma
reset_password: Resetta la password reset_password: Resetta la password
security: Credenziali security: Credenziali

View File

@ -7,7 +7,6 @@ ja:
administered_by: '管理者:' administered_by: '管理者:'
api: API api: API
apps: アプリ apps: アプリ
closed_registrations: 現在このサーバーでの新規登録は受け付けていません。しかし、他のサーバーにアカウントを作成しても全く同じネットワークに参加することができます。
contact: 連絡先 contact: 連絡先
contact_missing: 未設定 contact_missing: 未設定
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ ja:
extended_description_html: | extended_description_html: |
<h3>ルールを書くのに適した場所</h3> <h3>ルールを書くのに適した場所</h3>
<p>詳細説明が設定されていません。</p> <p>詳細説明が設定されていません。</p>
features:
humane_approach_body: 他の SNS の失敗から学び、Mastodon はソーシャルメディアが誤った使い方をされることの無いように倫理的な設計を目指しています。
humane_approach_title: より思いやりのある設計
not_a_product_body: Mastodon は営利的な SNS ではありません。広告や、データの収集・解析によるターゲティングは無く、またユーザーの囲い込みもありません。ここには中央権力はありません。
not_a_product_title: あなたは人間であり、商品ではありません
real_conversation_body: 好きなように書ける500文字までの投稿や、文章やメディアの内容に警告をつけられる機能で、思い通りに自分自身を表現することができます。
real_conversation_title: 本当のコミュニケーションのために
within_reach_body: デベロッパーフレンドリーな API により実現された、iOS や Android、その他様々なプラットフォームのためのアプリでどこでも友人とやりとりできます。
within_reach_title: いつでも身近に
generic_description: "%{domain} は、Mastodon サーバーの一つです" generic_description: "%{domain} は、Mastodon サーバーの一つです"
hosted_on: Mastodon hosted on %{domain} hosted_on: Mastodon hosted on %{domain}
learn_more: もっと詳しく learn_more: もっと詳しく
other_instances: 他のサーバー
privacy_policy: プライバシーポリシー privacy_policy: プライバシーポリシー
source_code: ソースコード source_code: ソースコード
status_count_after: status_count_after:
@ -508,13 +497,11 @@ ja:
logout: ログアウト logout: ログアウト
migrate_account: 別のアカウントに引っ越す migrate_account: 別のアカウントに引っ越す
migrate_account_html: 引っ越し先を明記したい場合は<a href="%{path}">こちら</a>で設定できます。 migrate_account_html: 引っ越し先を明記したい場合は<a href="%{path}">こちら</a>で設定できます。
or: または
or_log_in_with: または次のサービスでログイン or_log_in_with: または次のサービスでログイン
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: 登録する register: 登録する
register_elsewhere: 他のサーバーで新規登録
resend_confirmation: 確認メールを再送する resend_confirmation: 確認メールを再送する
reset_password: パスワードを再発行 reset_password: パスワードを再発行
security: セキュリティ security: セキュリティ

View File

@ -7,7 +7,6 @@ ka:
administered_by: 'ადმინისტრატორი:' administered_by: 'ადმინისტრატორი:'
api: აპი api: აპი
apps: მობილური აპლიკაციები apps: მობილური აპლიკაციები
closed_registrations: რეგისტრაციები ამჟამად ინსტანციაზე დახურულია. თუმცა! ანგარიშის შესაქმნელად შეგიძლიათ იპოვოთ სხვა ინსტანცია და იმავე ქსელზე იქონიოთ წვდომა იქიდან.
contact: კონტაქტი contact: კონტაქტი
contact_missing: არაა დაყენებული contact_missing: არაა დაყენებული
contact_unavailable: მიუწ. contact_unavailable: მიუწ.
@ -15,19 +14,9 @@ ka:
extended_description_html: | extended_description_html: |
<h3>კარგი ადგილი წესებისთვის</h3> <h3>კარგი ადგილი წესებისთვის</h3>
<p>განვრცობილი აღწერილობა ჯერ არ შექმნილა.</p> <p>განვრცობილი აღწერილობა ჯერ არ შექმნილა.</p>
features:
humane_approach_body: სხვა ქსელების შეცდომების გათვალისწინებით, მასტოდონი მიზნად ისახავს ეტიკური დიზაინის არჩევნების გაკეთებას, დაუპირისპირდეს სოციალური მედიის არასწორ მოხმარებას.
humane_approach_title: უფრო ადამიანური მიდგომა
not_a_product_body: მასტოდონი არ არის კომერციული ქსელი. არაა რეკლამა, არაა მაინინგი, არაა შემოღობილი ბაღები. არაა ცენტრალური ავტორიტეტი.
not_a_product_title: შენ ხარ პერსონა და არა პროდუქტი
real_conversation_body: 500 ნიშნის განკარგულებით, მარცვლოვანი კონტენტის და მედია გაფრთხილებების მხარდაჭერით, შეგიძლიათ გამოხატოთ ისე როგორც გსურთ.
real_conversation_title: შექმნილია ნამდვილი საუბრისთვის
within_reach_body: დეველოპერისთვის-მეგობრული აპი ექოსისტემის წყალობით, მრავალი აპლიკაცია აი-ოსისთვის, ანდროიდისთვის და სხვა პლატფორმებისთვის, საშალებას მოგცემთ ნებისმიერი ადგილიდან იქონიოთ კავშირი თქვენს მეგობრებთან.
within_reach_title: მუდამ წვდომის ქვეშ
generic_description: "%{domain} ერთი სერვერია ქსელში" generic_description: "%{domain} ერთი სერვერია ქსელში"
hosted_on: მასტოდონს მასპინძლობს %{domain} hosted_on: მასტოდონს მასპინძლობს %{domain}
learn_more: გაიგე მეტი learn_more: გაიგე მეტი
other_instances: ინსტანციების სია
privacy_policy: კონფიდენციალურობის პოლიტიკა privacy_policy: კონფიდენციალურობის პოლიტიკა
source_code: კოდი source_code: კოდი
status_count_after: სტატუსები status_count_after: სტატუსები
@ -427,13 +416,11 @@ ka:
logout: გასვლა logout: გასვლა
migrate_account: სხვა ანგარიშზე გადასვლა migrate_account: სხვა ანგარიშზე გადასვლა
migrate_account_html: თუ გსურთ ამ ანგარიშის რედირექტის ხვაზე, შეგიძლიათ <a href="%{path}">გაუწიოთ კონფიგურაცია აქ</a>. migrate_account_html: თუ გსურთ ამ ანგარიშის რედირექტის ხვაზე, შეგიძლიათ <a href="%{path}">გაუწიოთ კონფიგურაცია აქ</a>.
or: ან
or_log_in_with: ან გამოიყენეთ or_log_in_with: ან გამოიყენეთ
providers: providers:
cas: ქეს cas: ქეს
saml: სამლ saml: სამლ
register: რეგისტრაცია register: რეგისტრაცია
register_elsewhere: რეგისტრაცია სხვა სერვერზე
resend_confirmation: დამოწმების ინსტრუქციების ხელახალი გამოგზავნა resend_confirmation: დამოწმების ინსტრუქციების ხელახალი გამოგზავნა
reset_password: პაროლის გადატვირთვა reset_password: პაროლის გადატვირთვა
security: უსაფრთხოება security: უსაფრთხოება

View File

@ -7,7 +7,6 @@ kk:
administered_by: 'Админ:' administered_by: 'Админ:'
api: API api: API
apps: Мобиль қосымшалар apps: Мобиль қосымшалар
closed_registrations: Бұл серверде тіркелу уақытша тоқтатылған. Дегенмен, сіз басқа сервер арқылы тіркеліп, сол аккаунтыңызбен қолдана берсеңіз болады.
contact: Байланыс contact: Байланыс
contact_missing: Бапталмаған contact_missing: Бапталмаған
contact_unavailable: Белгісіз contact_unavailable: Белгісіз
@ -15,19 +14,9 @@ kk:
extended_description_html: | extended_description_html: |
<h3>Ережелерге арналған жақсы орын</h3> <h3>Ережелерге арналған жақсы орын</h3>
<p>Әлі ештеңе жазылмапты</p> <p>Әлі ештеңе жазылмапты</p>
features:
humane_approach_body: Басқа желілердің сәтсіздіктерінен сабақ алып, Mastodon әлеуметтік медианы дұрыс пайдаланбаумен күресу үшін этикалық дизайнды таңдауға бағытталған.
humane_approach_title: Гуманистік көзқарас басым
not_a_product_body: Mastodon коммерциялық желі емес. Жарнама жоқ, деректерді өңдеу, қоршаулы бақтар да жоқ. Орталықтан басқару да жоқ.
not_a_product_title: Сіз тұлғасыз, тауар емес
real_conversation_body: 500 таңба арқылы мазмұнды пікір және қызық медиа қолданып, өз ойыңызды жеткізе аласыз.
real_conversation_title: Нақты әңгімелерге арналған
within_reach_body: Ыңғайлы API экожүйесі арқасында iOS, Android және басқа платформаларға арналған бірнеше қосымшалар арқылы достарыңызбен кез-келген жерде әңгіме құруға мүмкіндік береді.
within_reach_title: Әрқашан қол жетімді
generic_description: "%{domain} желідегі серверлердің бірі" generic_description: "%{domain} желідегі серверлердің бірі"
hosted_on: Mastodon орнатылған %{domain} доменінде hosted_on: Mastodon орнатылған %{domain} доменінде
learn_more: Көбірек білу learn_more: Көбірек білу
other_instances: Серверлер тізімі
privacy_policy: Құпиялылық саясаты privacy_policy: Құпиялылық саясаты
source_code: Ашық коды source_code: Ашық коды
status_count_after: status_count_after:
@ -508,13 +497,11 @@ kk:
logout: Шығу logout: Шығу
migrate_account: Басқа аккаунтқа көшіру migrate_account: Басқа аккаунтқа көшіру
migrate_account_html: Егер аккаунтыңызды басқасына байлағыңыз келсе, <a href="%{path}">мына жерге келіңіз</a>. migrate_account_html: Егер аккаунтыңызды басқасына байлағыңыз келсе, <a href="%{path}">мына жерге келіңіз</a>.
or: немесе
or_log_in_with: Немесе былай кіріңіз or_log_in_with: Немесе былай кіріңіз
providers: providers:
cas: САS cas: САS
saml: SАML saml: SАML
register: Тіркелу register: Тіркелу
register_elsewhere: Басқа серверге тіркелу
resend_confirmation: Растау нұсқаулықтарын жіберу resend_confirmation: Растау нұсқаулықтарын жіберу
reset_password: Құпиясөзді қалпына келтіру reset_password: Құпиясөзді қалпына келтіру
security: Қауіпсіздік security: Қауіпсіздік

View File

@ -7,7 +7,6 @@ ko:
administered_by: '관리자:' administered_by: '관리자:'
api: API api: API
apps: 모바일 앱 apps: 모바일 앱
closed_registrations: 현재 이 서버에서는 신규 등록을 받고 있지 않습니다. 하지만! 다른 서버에 계정을 만들어 똑같은 네트워크에 접속 할 수 있습니다.
contact: 연락처 contact: 연락처
contact_missing: 미설정 contact_missing: 미설정
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ ko:
extended_description_html: | extended_description_html: |
<h3>룰을 작성하는 장소</h3> <h3>룰을 작성하는 장소</h3>
<p>아직 설명이 작성되지 않았습니다.</p> <p>아직 설명이 작성되지 않았습니다.</p>
features:
humane_approach_body: 다른 SNS의 실패를 교훈삼아, 마스토돈은 소셜미디어가 잘못 사용되는 것을 막기 위하여 윤리적인 설계를 추구합니다.
humane_approach_title: 보다 배려를 의식한 설계를 추구
not_a_product_body: 마스토돈은 이익을 추구하는 SNS가 아닙니다. 그러므로 광고와 데이터의 수집 및 분석이 존재하지 않고, 유저를 구속하지도 않습니다.
not_a_product_title: 여러분은 사람이며, 상품이 아닙니다
real_conversation_body: 자유롭게 사용할 수 있는 500문자의 메세지와 미디어 경고 내용을 바탕으로, 자기자신을 자유롭게 표현할 수 있습니다.
real_conversation_title: 진정한 커뮤니케이션을 위하여
within_reach_body: 개발자 친화적인 API에 의해서 실현된 iOS나 Android, 그 외의 여러 Platform들 덕분에 어디서든 친구들과 자유롭게 메세지를 주고 받을 수 있습니다.
within_reach_title: 언제나 유저의 곁에서
generic_description: "%{domain} 은 네트워크에 있는 한 서버입니다" generic_description: "%{domain} 은 네트워크에 있는 한 서버입니다"
hosted_on: "%{domain}에서 호스팅 되는 마스토돈" hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
learn_more: 자세히 learn_more: 자세히
other_instances: 서버 목록
privacy_policy: 개인정보 정책 privacy_policy: 개인정보 정책
source_code: 소스 코드 source_code: 소스 코드
status_count_after: status_count_after:
@ -510,13 +499,11 @@ ko:
logout: 로그아웃 logout: 로그아웃
migrate_account: 계정 옮기기 migrate_account: 계정 옮기기
migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 <a href="%{path}">여기</a>에서 설정할 수 있습니다. migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 <a href="%{path}">여기</a>에서 설정할 수 있습니다.
or: 또는
or_log_in_with: 다른 방법으로 로그인 하려면 or_log_in_with: 다른 방법으로 로그인 하려면
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: 등록하기 register: 등록하기
register_elsewhere: 다른 인스턴스에서 가입
resend_confirmation: 확인 메일을 다시 보내기 resend_confirmation: 확인 메일을 다시 보내기
reset_password: 비밀번호 재설정 reset_password: 비밀번호 재설정
security: 보안 security: 보안

View File

@ -7,7 +7,6 @@ lt:
administered_by: 'Administruoja:' administered_by: 'Administruoja:'
api: API api: API
apps: Mobilioji Aplikacija apps: Mobilioji Aplikacija
closed_registrations: Registracija šiuo metu uždaryta prie šito tinklo. Jūs galite rasti kitą būdą susikurti paskyrą ir gauti prieigą prie to paties tinklo.
contact: Kontaktai contact: Kontaktai
contact_missing: Nenustatyta contact_missing: Nenustatyta
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ lt:
extended_description_html: | extended_description_html: |
<h3>Taisyklės</h3> <h3>Taisyklės</h3>
<p>Ilgas aprašymas dar nėra sudartyas</p> <p>Ilgas aprašymas dar nėra sudartyas</p>
features:
humane_approach_body: Mokantis iš kitų socialinių tinklų, bei jų daromu klaidų, Mastodon siekia sukurti etiška dizainą, kuris kovotu su netinkamu socialinių tinklų naudojimu.
humane_approach_title: Humaniškesnis metodas
not_a_product_body: Mastodon nėra komercinis tinklas. Jokių reklamų, privačios informacijos rinkimo. Čia nėra vieno žmogaus, kuris už viską atsako.
not_a_product_title: Tu esi žmogus, o ne produktas
real_conversation_body: Su 500 simbolių limitu, ir galimybe pažymėti savo įkeliama informacija su įspėjamaisiais ženklais, galite išsireikšti kaip tik norite.
real_conversation_title: Sukurtas tikram bendravimui
within_reach_body: Mobiliosios aplikacijos skirtos iOS, Android, ir kitoms platformoms. Draugiškos API ekosistemos dėka, Jūs galite palaikyti pokalbi su draugais bet kur.
within_reach_title: Visada pasiekama
generic_description: "%{domain} yra vienas serveris tinkle" generic_description: "%{domain} yra vienas serveris tinkle"
hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu
learn_more: Daugiau learn_more: Daugiau
other_instances: Serverių sąrašas
privacy_policy: Privatumo Politika privacy_policy: Privatumo Politika
source_code: Šaltinio kodas source_code: Šaltinio kodas
status_count_after: status_count_after:
@ -516,13 +505,11 @@ lt:
logout: Atsijungti logout: Atsijungti
migrate_account: Prisijungti prie kitos paskyros migrate_account: Prisijungti prie kitos paskyros
migrate_account_html: Jeigu norite nukreipti šią paskyrą į kita, galite tai <a href="%{path}">konfiguruoti čia</a>. migrate_account_html: Jeigu norite nukreipti šią paskyrą į kita, galite tai <a href="%{path}">konfiguruoti čia</a>.
or: arba
or_log_in_with: Arba prisijungti su or_log_in_with: Arba prisijungti su
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Užsiregistruoti register: Užsiregistruoti
register_elsewhere: Užsiregistruoti kitame serveryje
resend_confirmation: Išsiųsti dar kartą patvirtinimo instrukcijas resend_confirmation: Išsiųsti dar kartą patvirtinimo instrukcijas
reset_password: Atstatyti slaptažodį reset_password: Atstatyti slaptažodį
security: Apsauga security: Apsauga

View File

@ -7,7 +7,6 @@ ms:
administered_by: 'Ditadbir oleh:' administered_by: 'Ditadbir oleh:'
api: API api: API
apps: Aplikasi mudah alih apps: Aplikasi mudah alih
closed_registrations: Pendaftaran ditutup di tika ini. Tetapi! Anda boleh mencari tika lain untuk mencipta akaun dan capai ke rangkaian yang sama daripada sana.
contact: Hubungi kami contact: Hubungi kami
contact_missing: Tidak ditetapkan contact_missing: Tidak ditetapkan
contact_unavailable: Tidak tersedia contact_unavailable: Tidak tersedia
@ -15,19 +14,9 @@ ms:
extended_description_html: | extended_description_html: |
<h3>Tempat sesuai untuk peraturan</h3> <h3>Tempat sesuai untuk peraturan</h3>
<p>Kenyataan penuh masih belum ditetapkan.</p> <p>Kenyataan penuh masih belum ditetapkan.</p>
features:
humane_approach_body: Belajar daripada kegagalan rangkaian lain, Mastodon berazam untuk membuat pilihan reka cipta beretika untuk mengatasi penyalahgunaan media sosial.
humane_approach_title: Pendekatan yang lebih berperikemanusiaan
not_a_product_body: Mastodon bukannya rangkaian komersial. Tiada iklan, tiada perlombongan data, tiada kurungan atau tapisan. Tiada pihak berkuasa pusat.
not_a_product_title: Anda seorang manusia, bukannya sebuah produk
real_conversation_body: Dengan had 500 aksara dan sokongan kandungan berbutir serta pemberi amaran media, anda boleh meluahkan diri anda dengan cara yang anda inginkan.
real_conversation_title: Dibina untuk perbualan sebenar
within_reach_body: Pelbagai aplikasi untuk iOS, Android, dan platform lain telah dibangunkan dengan ekosistem API mesra-pembangun membolehkan anda terus berhubung dengan rakan anda di mana-mana sahaja.
within_reach_title: Sentiasa dalam jangkauan
generic_description: "%{domain} ialah salah sebuah pelayan dalam rangkaian Mastodon" generic_description: "%{domain} ialah salah sebuah pelayan dalam rangkaian Mastodon"
hosted_on: Mastodon dihoskan di %{domain} hosted_on: Mastodon dihoskan di %{domain}
learn_more: Ketahui lebih lanjut learn_more: Ketahui lebih lanjut
other_instances: Senarai tika
privacy_policy: Polisi privasi privacy_policy: Polisi privasi
source_code: Kod sumber source_code: Kod sumber
status_count_after: status_count_after:

View File

@ -7,7 +7,6 @@ nl:
administered_by: 'Beheerd door:' administered_by: 'Beheerd door:'
api: API api: API
apps: Mobiele apps apps: Mobiele apps
closed_registrations: Registreren op deze server is momenteel niet mogelijk. Je kunt echter een andere server vinden om zo toegang te krijgen tot het netwerk.
contact: Contact contact: Contact
contact_missing: Niet ingesteld contact_missing: Niet ingesteld
contact_unavailable: n.v.t contact_unavailable: n.v.t
@ -15,19 +14,9 @@ nl:
extended_description_html: | extended_description_html: |
<h3>Een goede plek voor richtlijnen</h3> <h3>Een goede plek voor richtlijnen</h3>
<p>De uitgebreide omschrijving is nog niet ingevuld.</p> <p>De uitgebreide omschrijving is nog niet ingevuld.</p>
features:
humane_approach_body: Mastodon heeft van de fouten van andere sociale netwerken geleerd en probeert aan de hand van ethische ontwerpkeuzes misbruik van sociale media te voorkomen.
humane_approach_title: Een meer menselijke aanpak
not_a_product_body: Mastodon is geen commercieel netwerk. Dus geen advertenties, geen datamining en geen besloten systemen. Er is geen centrale organisatie die alles bepaalt.
not_a_product_title: Jij bent een persoon, geen product
real_conversation_body: Met 500 tekens tot jouw beschikking en ondersteuning voor tekst- en media-waarschuwingen, kan je jezelf uiten zoals jij dat wil.
real_conversation_title: Voor echte gesprekken gemaakt
within_reach_body: Meerdere apps voor iOS, Android en andere platformen, met dank aan het ontwikkelaarsvriendelijke API-systeem, zorgen ervoor dat je overal op de hoogte blijft.
within_reach_title: Altijd binnen bereik
generic_description: "%{domain} is een server in het Mastodonnetwerk" generic_description: "%{domain} is een server in het Mastodonnetwerk"
hosted_on: Mastodon op %{domain} hosted_on: Mastodon op %{domain}
learn_more: Meer leren learn_more: Meer leren
other_instances: Andere servers
privacy_policy: Privacybeleid privacy_policy: Privacybeleid
source_code: Broncode source_code: Broncode
status_count_after: status_count_after:
@ -508,13 +497,11 @@ nl:
logout: Uitloggen logout: Uitloggen
migrate_account: Naar een ander account verhuizen migrate_account: Naar een ander account verhuizen
migrate_account_html: Wanneer je dit account naar een ander account wilt doorverwijzen, kun je <a href="%{path}">dit hier instellen</a>. migrate_account_html: Wanneer je dit account naar een ander account wilt doorverwijzen, kun je <a href="%{path}">dit hier instellen</a>.
or: of
or_log_in_with: Of inloggen met or_log_in_with: Of inloggen met
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registreren register: Registreren
register_elsewhere: Op een andere server registreren
resend_confirmation: Verstuur de bevestigingsinstructies nogmaals resend_confirmation: Verstuur de bevestigingsinstructies nogmaals
reset_password: Wachtwoord opnieuw instellen reset_password: Wachtwoord opnieuw instellen
security: Beveiliging security: Beveiliging

View File

@ -4,26 +4,15 @@
about_hashtag_html: Dette er offentlige toots merket med <strong>#%{hashtag}</strong>. Du kan interagere med dem om du har en konto et sted i fediverset. about_hashtag_html: Dette er offentlige toots merket med <strong>#%{hashtag}</strong>. Du kan interagere med dem om du har en konto et sted i fediverset.
about_mastodon_html: Mastodon er et sosialt nettverk laget med <em>fri programvare</em>. Et <em>desentralisert</em> alternativ til kommersielle plattformer. Slik kan det unngå risikoene ved å ha et enkelt selskap som monopoliserer din kommunikasjon. Velg en tjener du stoler på &mdash; uansett hvilken du velger så kan du kommunisere med alle andre. Alle kan kjøre sin egen Mastodon og delta sømløst i det sosiale nettverket. about_mastodon_html: Mastodon er et sosialt nettverk laget med <em>fri programvare</em>. Et <em>desentralisert</em> alternativ til kommersielle plattformer. Slik kan det unngå risikoene ved å ha et enkelt selskap som monopoliserer din kommunikasjon. Velg en tjener du stoler på &mdash; uansett hvilken du velger så kan du kommunisere med alle andre. Alle kan kjøre sin egen Mastodon og delta sømløst i det sosiale nettverket.
about_this: Om denne instansen about_this: Om denne instansen
closed_registrations: Registreringer er for øyeblikket lukket på denne instansen.
contact: Kontakt contact: Kontakt
contact_missing: Ikke innstilt contact_missing: Ikke innstilt
contact_unavailable: Ikke tilgjengelig contact_unavailable: Ikke tilgjengelig
extended_description_html: | extended_description_html: |
<h3>En god plassering for regler</h3> <h3>En god plassering for regler</h3>
<p>En utvidet beskrivelse er ikke satt opp ennå.</p> <p>En utvidet beskrivelse er ikke satt opp ennå.</p>
features:
humane_approach_body: Mastodon har tatt lærdom fra andre nettverk og har til mål å gjøre etiske designvalg for å bekjempe misbruk av sosiale medier.
humane_approach_title: En mer menneskelig tilnærming
not_a_product_body: Mastodon er ikke et kommerst nettverk. Ingen reklame, ingen datainnsamling, ingen innhegnede hager. Det finnes ingen sentral myndighet.
not_a_product_title: Du er en person, ikke et produkt
real_conversation_body: Med 500 tegn til din disposisjon og støtte for granulært innhold og media-advarsler kan du uttrykke deg på den måten du selv vil.
real_conversation_title: Laget for ekte samtaler
within_reach_body: Takket være et utviklingsvennlig API-økosystem vil flere apper for iOS, Android og andre plattformer la deg holde kontakten med dine venner hvor som helst.
within_reach_title: Alltid innen rekkevidde
generic_description: "%{domain} er en tjener i nettverket" generic_description: "%{domain} er en tjener i nettverket"
hosted_on: Mastodon driftet på %{domain} hosted_on: Mastodon driftet på %{domain}
learn_more: Lær mer learn_more: Lær mer
other_instances: Andre instanser
source_code: Kildekode source_code: Kildekode
status_count_after: statuser status_count_after: statuser
status_count_before: Som skrev status_count_before: Som skrev

View File

@ -7,7 +7,6 @@ oc:
administered_by: 'Gerida per:' administered_by: 'Gerida per:'
api: API api: API
apps: Aplicacions per mobil apps: Aplicacions per mobil
closed_registrations: Las inscripcions son clavadas pel moment sus aquesta instància.
contact: Contacte contact: Contacte
contact_missing: Pas parametrat contact_missing: Pas parametrat
contact_unavailable: Pas disponible contact_unavailable: Pas disponible
@ -15,19 +14,9 @@ oc:
extended_description_html: | extended_description_html: |
<h3>Una bona plaça per las règlas</h3> <h3>Una bona plaça per las règlas</h3>
<p>La descripcion longa es pas estada causida pel moment.</p> <p>La descripcion longa es pas estada causida pel moment.</p>
features:
humane_approach_body: Amb lexperiéncia dels fracasses dautres malhums, Mastodon ten per objectiu de lutar contra los abuses dels malhums socials en far de causidas eticas.
humane_approach_title: Un biais mai uman
not_a_product_body: Mastodon es pas un malhum comercial. Pas cap de reclama, dutilizacion de vòstras donadas o dòrt daurat clavat. I a pas cap dautoritat centrala.
not_a_product_title: Sètz una persona, non pas un produit
real_conversation_body: Amb 500 caractèrs a vòstra disposicion e un nivèl de confidencialitat per cada publicacion, podètz vos exprimir coma volètz.
real_conversation_title: Fach per de conversacions vertadièras
within_reach_body: Multiplas aplicacion per iOS, Android, e autras plataformas mercés a un entorn API de bon utilizar, vos permet de gardar lo contacte pertot.
within_reach_title: Totjorn al costat
generic_description: "%{domain} es un dels servidors del malhum" generic_description: "%{domain} es un dels servidors del malhum"
hosted_on: Mastodon albergat sus %{domain} hosted_on: Mastodon albergat sus %{domain}
learn_more: Ne saber mai learn_more: Ne saber mai
other_instances: Lista dinstàncias
privacy_policy: Politica de confidencialitat privacy_policy: Politica de confidencialitat
source_code: Còdi font source_code: Còdi font
status_count_after: status_count_after:
@ -508,13 +497,11 @@ oc:
logout: Se desconnectar logout: Se desconnectar
migrate_account: Mudar endacòm mai migrate_account: Mudar endacòm mai
migrate_account_html: Se volètz mandar los visitors daqueste compte a un autre, podètz<a href="%{path}"> o configurar aquí</a>. migrate_account_html: Se volètz mandar los visitors daqueste compte a un autre, podètz<a href="%{path}"> o configurar aquí</a>.
or: o
or_log_in_with: O autentificatz-vos amb or_log_in_with: O autentificatz-vos amb
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Se marcar register: Se marcar
register_elsewhere: Se marcar endacòm mai
resend_confirmation: Tornar mandar las instruccions de confirmacion resend_confirmation: Tornar mandar las instruccions de confirmacion
reset_password: Reïnicializar lo senhal reset_password: Reïnicializar lo senhal
security: Seguretat security: Seguretat

View File

@ -7,7 +7,6 @@ pl:
administered_by: 'Administrowana przez:' administered_by: 'Administrowana przez:'
api: API api: API
apps: Aplikacje apps: Aplikacje
closed_registrations: Rejestracja na tej instancji jest obecnie zamknięta. Możesz jednak zarejestrować się na innej instancji, uzyskując dostęp do tej samej sieci.
contact: Kontakt contact: Kontakt
contact_missing: Nie ustawiono contact_missing: Nie ustawiono
contact_unavailable: Nie dotyczy contact_unavailable: Nie dotyczy
@ -15,19 +14,9 @@ pl:
extended_description_html: | extended_description_html: |
<h3>Dobre miejsce na zasady użytkowania</h3> <h3>Dobre miejsce na zasady użytkowania</h3>
<p>Nie ustawiono jeszcze szczegółowego opisu</p> <p>Nie ustawiono jeszcze szczegółowego opisu</p>
features:
humane_approach_body: Nauczeni na błędach innych sieci społecznościowych, zaprojektowaliśmy Mastodona tak, aby uniknąć częstych nadużyć.
humane_approach_title: Bardziej ludzkie podejście
not_a_product_body: Mastodon nie jest komercyjną siecią. Nie doświadczysz tu reklam, zbierania danych, ani centralnego ośrodka, tak jak w przypadku wielu rozwiązań.
not_a_product_title: Jesteś człowiekiem, nie produktem
real_conversation_body: Mając do dyspozycji 500 znaków na wpis, rozdrobnienie zawartości i ostrzeżenia o multimediach, możesz wyrażać siebie na wszystkie możliwe sposoby.
real_conversation_title: Zaprojektowany do prawdziwych rozmów
within_reach_body: Wiele aplikacji dla Androida, iOS i innych platform dzięki przyjaznemu programistom API sprawia, że możesz utrzymywać kontakt ze znajomymi praktycznie wszędzie.
within_reach_title: Zawsze w Twoim zasięgu
generic_description: "%{domain} jest jednym z serwerów sieci" generic_description: "%{domain} jest jednym z serwerów sieci"
hosted_on: Mastodon uruchomiony na %{domain} hosted_on: Mastodon uruchomiony na %{domain}
learn_more: Dowiedz się więcej learn_more: Dowiedz się więcej
other_instances: Lista instancji
privacy_policy: Polityka prywatności privacy_policy: Polityka prywatności
source_code: Kod źródłowy source_code: Kod źródłowy
status_count_after: status_count_after:
@ -519,13 +508,11 @@ pl:
logout: Wyloguj się logout: Wyloguj się
migrate_account: Przenieś konto migrate_account: Przenieś konto
migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz <a href="%{path}">zrobić to tutaj</a>. migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz <a href="%{path}">zrobić to tutaj</a>.
or: lub
or_log_in_with: Lub zaloguj się z użyciem or_log_in_with: Lub zaloguj się z użyciem
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Rejestracja register: Rejestracja
register_elsewhere: Zarejestruj się na innym serwerze
resend_confirmation: Ponownie prześlij instrukcje weryfikacji resend_confirmation: Ponownie prześlij instrukcje weryfikacji
reset_password: Zresetuj hasło reset_password: Zresetuj hasło
security: Bezpieczeństwo security: Bezpieczeństwo

View File

@ -7,7 +7,6 @@ pt-BR:
administered_by: 'Administrado por:' administered_by: 'Administrado por:'
api: API api: API
apps: Apps apps: Apps
closed_registrations: Os cadastros estão atualmente fechados nesta instância. No entanto, você pode procurar uma instância diferente na qual possa criar uma conta e acessar a mesma rede por lá.
contact: Contato contact: Contato
contact_missing: Não definido contact_missing: Não definido
contact_unavailable: Não disponível contact_unavailable: Não disponível
@ -15,19 +14,9 @@ pt-BR:
extended_description_html: | extended_description_html: |
<h3>Um bom lugar para regras</h3> <h3>Um bom lugar para regras</h3>
<p>A descrição da instância ainda não foi feita.</p> <p>A descrição da instância ainda não foi feita.</p>
features:
humane_approach_body: Aprendendo com erros de outras redes, Mastodon tem como objetivo fazer decisões éticas de design para combater o desuso de redes sociais.
humane_approach_title: Uma abordagem mais humana
not_a_product_body: Mastodon não é uma rede comercial. Sem propagandas, coleta de dados, jardins fechados. Não há uma autoridade central.
not_a_product_title: Você é uma pessoa e não um produto
real_conversation_body: Com 500 caracteres à sua disposição e suporte para conteúdo granular e avisos de conteúdo, você pode se expressar da maneira que desejar.
real_conversation_title: Feito para conversas reais
within_reach_body: Vários apps para iOS, Android e outras plataformas graças a um ecossistema de API amigável para desenvolvedores permitem que você possa se manter atualizado sobre seus amigos de qualquer lugar.
within_reach_title: Sempre ao seu alcance
generic_description: "%{domain} é um servidor na rede" generic_description: "%{domain} é um servidor na rede"
hosted_on: Mastodon hospedado em %{domain} hosted_on: Mastodon hospedado em %{domain}
learn_more: Saiba mais learn_more: Saiba mais
other_instances: Lista de instâncias
privacy_policy: Política de Privacidade privacy_policy: Política de Privacidade
source_code: Código-fonte source_code: Código-fonte
status_count_after: status_count_after:
@ -507,13 +496,11 @@ pt-BR:
logout: Sair logout: Sair
migrate_account: Mudar para uma conta diferente migrate_account: Mudar para uma conta diferente
migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode <a href="%{path}">configurar isso aqui</a>. migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode <a href="%{path}">configurar isso aqui</a>.
or: ou
or_log_in_with: Ou faça login com or_log_in_with: Ou faça login com
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Cadastrar-se register: Cadastrar-se
register_elsewhere: Cadastrar-se em um outro servidor
resend_confirmation: Reenviar instruções de confirmação resend_confirmation: Reenviar instruções de confirmação
reset_password: Redefinir senha reset_password: Redefinir senha
security: Segurança security: Segurança

View File

@ -4,26 +4,15 @@ pt:
about_hashtag_html: Estes são toots públicos marcados com <strong>#%{hashtag}</strong>. Podes interagir com eles se tiveres uma conta Mastodon. about_hashtag_html: Estes são toots públicos marcados com <strong>#%{hashtag}</strong>. Podes interagir com eles se tiveres uma conta Mastodon.
about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos da web e software livre e gratuito. É descentralizado como e-mail. about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos da web e software livre e gratuito. É descentralizado como e-mail.
about_this: Sobre esta instância about_this: Sobre esta instância
closed_registrations: Novos registos estão fechados nesta instância. No entanto! Podes procurar uma instância diferente na qual criar uma conta e obter acesso à mesma rede desde lá.
contact: Contacto contact: Contacto
contact_missing: Não configurado contact_missing: Não configurado
contact_unavailable: n.d. contact_unavailable: n.d.
extended_description_html: | extended_description_html: |
<h3>Um bom lugar para regras</h3> <h3>Um bom lugar para regras</h3>
<p>A descrição estendida ainda não foi configurada.</p> <p>A descrição estendida ainda não foi configurada.</p>
features:
humane_approach_body: Aprendendo com erros de outras redes sociais, Mastodon tem como objetivo fazer decisões éticas de design para combater o utilização errada de redes sociais.
humane_approach_title: Uma abordagem mais humana
not_a_product_body: Mastodon não é uma rede comercial. Sem publicidade, sem recolha de dados ou portas fechadas. Não existe uma autoridade central.
not_a_product_title: Tu és uma pessoa, não um produto
real_conversation_body: Com 500 caracteres à sua disposição e suporte para conteúdo granular e avisos de conteúdo, podes te expressar da forma que desejares.
real_conversation_title: Feito para conversas reais
within_reach_body: Várias aplicações para iOS, Android e outras plataformas graças a um ecossistema de API amigável para desenvolvedores, permitem-te que te mantenhas em contacto com os teus amigos em qualquer lugar.
within_reach_title: Sempre ao teu alcance
generic_description: "%{domain} é um servidor na rede" generic_description: "%{domain} é um servidor na rede"
hosted_on: Mastodon em %{domain} hosted_on: Mastodon em %{domain}
learn_more: Saber mais learn_more: Saber mais
other_instances: Outras instâncias
source_code: Código fonte source_code: Código fonte
status_count_after: publicações status_count_after: publicações
status_count_before: Que fizeram status_count_before: Que fizeram

View File

@ -1,8 +1,6 @@
--- ---
ro: ro:
about: about:
features:
not_a_product_title: Ești o persoană, nu un produs
hosted_on: Mastodon găzduit de %{domain} hosted_on: Mastodon găzduit de %{domain}
accounts: accounts:
posts: posts:
@ -22,13 +20,11 @@ ro:
logout: Deconectare logout: Deconectare
migrate_account: Transfer către un alt cont migrate_account: Transfer către un alt cont
migrate_account_html: Dacă dorești să redirecționezi acest cont către un altul, poți <a href="%{path}">configura asta aici</a>. migrate_account_html: Dacă dorești să redirecționezi acest cont către un altul, poți <a href="%{path}">configura asta aici</a>.
or: sau
or_log_in_with: Sau conectează-te cu or_log_in_with: Sau conectează-te cu
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Înregistrare register: Înregistrare
register_elsewhere: Înregistrează-te pe un alt server
resend_confirmation: Retrimite instrucțiunile de confirmare resend_confirmation: Retrimite instrucțiunile de confirmare
reset_password: Resetare parolă reset_password: Resetare parolă
security: Securitate security: Securitate

View File

@ -7,26 +7,15 @@ ru:
administered_by: 'Администратор узла:' administered_by: 'Администратор узла:'
api: API api: API
apps: Приложения apps: Приложения
closed_registrations: В данный момент регистрация на этом узле закрыта. Но вы можете найти другой узел, создать на нём учётную запись и получить доступ к той же сети оттуда.
contact: Связаться contact: Связаться
contact_missing: Не установлено contact_missing: Не установлено
contact_unavailable: Недоступен contact_unavailable: Недоступен
extended_description_html: | extended_description_html: |
<h3>Хорошее место для правил</h3> <h3>Хорошее место для правил</h3>
<p>Расширенное описание еще не настроено.</p> <p>Расширенное описание еще не настроено.</p>
features:
humane_approach_body: Наученный ошибками других проектов, Mastodon направлен на выбор этичных решений в борьбе со злоупотреблениями возможностями социальных сетей.
humane_approach_title: Человечный подход
not_a_product_body: Mastodon - не коммерческая сеть. Здесь нет рекламы, сбора данных, отгороженных мест. Здесь нет централизованного управления.
not_a_product_title: Вы - человек, а не продукт
real_conversation_body: С 500 символами в Вашем распоряжении и поддержкой предупреждений о содержании статусов Вы сможете выражать свои мысли так, как Вы этого хотите.
real_conversation_title: Создан для настоящего общения
within_reach_body: Различные приложения для iOS, Android и других платформ, написанные благодаря дружественной к разработчикам экосистеме API, позволят Вам держать связь с Вашими друзьями где угодно.
within_reach_title: Всегда под рукой
generic_description: "%{domain} - один из серверов сети" generic_description: "%{domain} - один из серверов сети"
hosted_on: Mastodon размещен на %{domain} hosted_on: Mastodon размещен на %{domain}
learn_more: Узнать больше learn_more: Узнать больше
other_instances: Другие узлы
privacy_policy: Политика конфиденциальности privacy_policy: Политика конфиденциальности
source_code: Исходный код source_code: Исходный код
status_count_after: status_count_after:
@ -450,13 +439,11 @@ ru:
logout: Выйти logout: Выйти
migrate_account: Перенести аккаунт migrate_account: Перенести аккаунт
migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>. migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
or: или
or_log_in_with: Или войти с помощью or_log_in_with: Или войти с помощью
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Зарегистрироваться register: Зарегистрироваться
register_elsewhere: Зарегистрироваться на другом узле
resend_confirmation: Повторить отправку инструкции для подтверждения resend_confirmation: Повторить отправку инструкции для подтверждения
reset_password: Сбросить пароль reset_password: Сбросить пароль
security: Безопасность security: Безопасность

View File

@ -7,7 +7,6 @@ sk:
administered_by: 'Správcom je:' administered_by: 'Správcom je:'
api: API api: API
apps: Aplikácie apps: Aplikácie
closed_registrations: Registrácie na tomto serveri sú momentálne uzatvorené. Avšak, môžeš nájsť nejaký iný server kde si založíš účet a získaš tak prístup do presne tej istej siete odtiaľ.
contact: Kontakt contact: Kontakt
contact_missing: Nezadaný contact_missing: Nezadaný
contact_unavailable: Neuvedený contact_unavailable: Neuvedený
@ -15,19 +14,9 @@ sk:
extended_description_html: | extended_description_html: |
<h3>Pravidlá</h3> <h3>Pravidlá</h3>
<p>Žiadne zatiaľ uvedené nie sú</p> <p>Žiadne zatiaľ uvedené nie sú</p>
features:
humane_approach_body: Poučený z chýb iných sociálnych sietí, Mastodon sa snaží bojovať so zneužívaním siete voľbou etických návrhov.
humane_approach_title: Ľudskejší prístup
not_a_product_body: Mastodon nie je komerčná sieť. Žiadne reklamy, žiadne dolovanie dát, žiadne múry. Nieje tu žiadna centrálna autorita.
not_a_product_title: Si človekom, nie produktom
real_conversation_body: K dispozícii s 500 znakmi a podporou pre varovania o obsahu a médiách sa môžeš vyjadriť tak ako budeš chcieť.
real_conversation_title: Vytvorený pre naozajstnú konverzáciu
within_reach_body: Viacero aplikácií pre iOS, Android a iné platformy, ktoré ti vďaka jednoduchému API ekosystému dovoľujú byť online so svojimi priateľmi kdekoľvek.
within_reach_title: Stále v dosahu
generic_description: "%{domain} je jeden server v sieti" generic_description: "%{domain} je jeden server v sieti"
hosted_on: Mastodon hostovaný na %{domain} hosted_on: Mastodon hostovaný na %{domain}
learn_more: Zisti viac learn_more: Zisti viac
other_instances: Zoznam serverov
privacy_policy: Ustanovenia o súkromí privacy_policy: Ustanovenia o súkromí
source_code: Zdrojový kód source_code: Zdrojový kód
status_count_after: status_count_after:
@ -514,13 +503,11 @@ sk:
logout: Odhlás sa logout: Odhlás sa
migrate_account: Presúvam sa na iný účet migrate_account: Presúvam sa na iný účet
migrate_account_html: Pokiaľ si želáš presmerovať tento účet na nejaký iný, môžeš si to <a href="%{path}">nastaviť tu</a>. migrate_account_html: Pokiaľ si želáš presmerovať tento účet na nejaký iný, môžeš si to <a href="%{path}">nastaviť tu</a>.
or: alebo
or_log_in_with: Alebo prihlásiť z or_log_in_with: Alebo prihlásiť z
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Zaregistruj sa register: Zaregistruj sa
register_elsewhere: Zaregistruj sa na inom serveri
resend_confirmation: Poslať potvrdzujúce pokyny znovu resend_confirmation: Poslať potvrdzujúce pokyny znovu
reset_password: Resetovať heslo reset_password: Resetovať heslo
security: Zabezpečenie security: Zabezpečenie

View File

@ -7,7 +7,6 @@ sl:
administered_by: 'Upravlja:' administered_by: 'Upravlja:'
api: API api: API
apps: Mobilne aplikacije apps: Mobilne aplikacije
closed_registrations: Registracije so trenutno zaprte na tem vozlišču. Vendar! Tukaj lahko najdete druga vozlišča, na katerih se prijavite in dostopate do istega omrežja od tam.
contact: Kontakt contact: Kontakt
contact_missing: Ni nastavljeno contact_missing: Ni nastavljeno
contact_unavailable: Ni na voljo contact_unavailable: Ni na voljo
@ -15,19 +14,9 @@ sl:
extended_description_html: | extended_description_html: |
<h3>Dober prostor za pravila</h3> <h3>Dober prostor za pravila</h3>
<p>Razširjen opis še ni bil nastavljen.</p> <p>Razširjen opis še ni bil nastavljen.</p>
features:
humane_approach_body: Na podlagi učenja od neuspehov drugih omrežij, želi Mastodon oblikovati etične načrte za boj proti zlorabi socialnih medijev.
humane_approach_title: Bolj human pristop
not_a_product_body: Mastodon ni komercialno omrežje. Brez oglaševanja, brez podatkovnega rudarjenja, brez obzidanih vrtov. Ni osrednjega organa.
not_a_product_title: Ti si oseba, ne izdelek
real_conversation_body: S 500 znaki, ki so vam na voljo, in podporo za zrnate vsebine ter opozorila pred mediji, se lahko izrazite tako, kot želite.
real_conversation_title: Zgrajen za pravi pogovor
within_reach_body: Zahvaljujoč razvijalcem prijaznemu API ekosistemu, obstaja več aplikacija za iOS, Arduino in druge platforme, ki vam omogočajo, da sledite svojim prijateljem kjerkoli.
within_reach_title: Vedno na dosegu roke
generic_description: "%{domain} je en strežnik v omrežju" generic_description: "%{domain} je en strežnik v omrežju"
hosted_on: Mastodon gostuje na %{domain} hosted_on: Mastodon gostuje na %{domain}
learn_more: Spoznaj več learn_more: Spoznaj več
other_instances: Seznam vozlišč
privacy_policy: Politika zasebnosti privacy_policy: Politika zasebnosti
source_code: Izvorna koda source_code: Izvorna koda
status_count_after: status_count_after:

View File

@ -7,7 +7,6 @@ sq:
administered_by: 'Administruar nga:' administered_by: 'Administruar nga:'
api: API api: API
apps: Aplikacione për celular apps: Aplikacione për celular
closed_registrations: Hëpërhë regjistrimet në këtë shërbyes janë të mbyllura. Por! Mund të gjeni një shërbyes tjetër për të krijuar një llogari dhe të mund të përdorni andej pikërisht të njëjtin rrjet të këtushëm.
contact: Kontakt contact: Kontakt
contact_missing: I parregulluar contact_missing: I parregulluar
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ sq:
extended_description_html: | extended_description_html: |
<h3>Një vend i mirë për rregulla</h3> <h3>Një vend i mirë për rregulla</h3>
<p>Përshkrimi i zgjeruar sështë sajuar ende.</p> <p>Përshkrimi i zgjeruar sështë sajuar ende.</p>
features:
humane_approach_body: Duke nxjerrë mësime nga dështimet e rrjeteve të tjera, Mastodon-i synon të bëjë zgjedhje konceptuale etike, për të luftuar keqpërdorimin e mediave shoqërore.
humane_approach_title: Një trajtim më njerëzor
not_a_product_body: Mastodon-i sështë rrjet komercial. Pa reklama, pa monetarizim të dhënash, pa gardhe. Ska autoritet qendror.
not_a_product_title: Jeni një person, jo një produkt
real_conversation_body: Me 500 shenja në dorën tuaj për ti përdorur dhe mbulim për sinjalizime të imta lidhur me lëndën dhe median, mund të shpreheni ashtu si dëshironi.
real_conversation_title: Ndërtuar për bashkëbisedim të njëmendtë
within_reach_body: Aplikacione të shumtë, për iOS, Android, dhe të tjera platforma, falë një ekosistemi API miqësor ndaj zhvilluesve, ju lejojnë të mbani lidhje me miqtë tuaj kudo.
within_reach_title: Përherë i kapshëm
generic_description: "%{domain} është një shërbyes te rrjeti" generic_description: "%{domain} është një shërbyes te rrjeti"
hosted_on: Mastodon i strehuar në %{domain} hosted_on: Mastodon i strehuar në %{domain}
learn_more: Mësoni më tepër learn_more: Mësoni më tepër
other_instances: Listë shërbyesish
privacy_policy: Rregulla privatësie privacy_policy: Rregulla privatësie
source_code: Kod burim source_code: Kod burim
status_count_after: status_count_after:
@ -505,13 +494,11 @@ sq:
logout: Dalje logout: Dalje
migrate_account: Kaloni në një tjetër llogari migrate_account: Kaloni në një tjetër llogari
migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund <a href="%{path}">ta formësoni këtu</a>. migrate_account_html: Nëse doni ta ridrejtoni këtë llogari te një tjetër, këtë mund <a href="%{path}">ta formësoni këtu</a>.
or: ose
or_log_in_with: Ose bëni hyrjen me or_log_in_with: Ose bëni hyrjen me
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Regjistrohuni register: Regjistrohuni
register_elsewhere: Regjistrohuni në një tjetër shërbyes
resend_confirmation: Ridërgo udhëzime ripohimi resend_confirmation: Ridërgo udhëzime ripohimi
reset_password: Ricaktoni fjalëkalimin reset_password: Ricaktoni fjalëkalimin
security: Siguri security: Siguri

View File

@ -4,26 +4,15 @@ sr-Latn:
about_hashtag_html: Ovo su javni statusi tagovani sa <strong>#%{hashtag}</strong>. Možete odgovarati na njih ako imate nalog bilo gde u fediversu. about_hashtag_html: Ovo su javni statusi tagovani sa <strong>#%{hashtag}</strong>. Možete odgovarati na njih ako imate nalog bilo gde u fediversu.
about_mastodon_html: Mastodont je društvena mreža bazirana na otvorenim protokolima i slobodnom softveru otvorenog koda. Decentralizovana je kao što je decentralizovana e-pošta. about_mastodon_html: Mastodont je društvena mreža bazirana na otvorenim protokolima i slobodnom softveru otvorenog koda. Decentralizovana je kao što je decentralizovana e-pošta.
about_this: O instanci about_this: O instanci
closed_registrations: Registracije su trenutno zatvorene na ovoj instanci. Ipak! Možete naći drugu instancu na kojoj ćete napraviti nalog i odatle dobiti pristup istoj ovoj mreži.
contact: Kontakt contact: Kontakt
contact_missing: Nije postavljeno contact_missing: Nije postavljeno
contact_unavailable: N/A contact_unavailable: N/A
extended_description_html: | extended_description_html: |
<h3>Dobro mesto za pravila</h3> <h3>Dobro mesto za pravila</h3>
<p>Prošireni opis koji još nije postavljen.</p> <p>Prošireni opis koji još nije postavljen.</p>
features:
humane_approach_body: Učeći od grešaka sa ostalih mreža, a da bi se borio protiv zloupotreba na društvenim mrežama, Mastodont pokušava da pravi što etičkije odluke prilikom razvoja.
humane_approach_title: Humaniji pristup
not_a_product_body: Mastodont nije komercijalna mreža. Nema reklama, nema skupljanja privatnih podataka, nema zaštićenih delova. Nema centralnog autoriteta.
not_a_product_title: Vi ste osoba, ne proizvod
real_conversation_body: Sa 500 karaktera na raspolaganju i podrškom za granularniji sadržaj i upozorenja na osetljiviji sadržaj, možete se izraziti kako god želite.
real_conversation_title: Pravljen za pravi razgovor
within_reach_body: Više aplikacija za iOS, Android, kao i druge platforme zahvaljujući ekosistemu dobrih API-ja će Vam omogućiti da ostanete u kontaktu sa prijateljima svuda.
within_reach_title: Uvek u kontaktu
generic_description: "%{domain} je server na mreži" generic_description: "%{domain} je server na mreži"
hosted_on: Mastodont hostovan na %{domain} hosted_on: Mastodont hostovan na %{domain}
learn_more: Saznajte više learn_more: Saznajte više
other_instances: Lista instanci
source_code: Izvorni kod source_code: Izvorni kod
status_count_after: statusa status_count_after: statusa
status_count_before: Koji su napisali status_count_before: Koji su napisali

View File

@ -7,7 +7,6 @@ sr:
administered_by: 'Администрирано од стране:' administered_by: 'Администрирано од стране:'
api: API api: API
apps: Мобилне апликације apps: Мобилне апликације
closed_registrations: Регистрације су тренутно затворене на овој инстанци. Међутим! Можете наћи другу инстанцу на којој ћете направити налог и одатле добити приступ на истој овој мрежи.
contact: Контакт contact: Контакт
contact_missing: Није постављено contact_missing: Није постављено
contact_unavailable: N/A contact_unavailable: N/A
@ -15,19 +14,9 @@ sr:
extended_description_html: | extended_description_html: |
<h3>Добро место за правила</h3> <h3>Добро место за правила</h3>
<p>Проширени опис који још није постављен.</p> <p>Проширени опис који још није постављен.</p>
features:
humane_approach_body: Учећи од грешака са осталих мрежа, а да би се борио против злоупотреба на друштвеним мрежама, Мастодонт покушава да прави што етичкије одлуке приликом развоја.
humane_approach_title: Хуманији приступ
not_a_product_body: Мастодонт није комерцијална мрежа. Нема реклама, нема скупљања приватних података, нема заштићених делова. Нема централног ауторитета.
not_a_product_title: Ви сте особа, не производ
real_conversation_body: Са 500 карактера на располагању и подршком за грануларнији садржај и упозорења на осетљивији садржај, можете се изразити како год желите.
real_conversation_title: Прављен за прави разговор
within_reach_body: Више апликација за iOS, Андроид, као и друге платформе захваљујући екосистему добрих API-ја ће Вам омогућити да останете у контакту са пријатељима свуда.
within_reach_title: Увек у контакту
generic_description: "%{domain} је сервер на мрежи" generic_description: "%{domain} је сервер на мрежи"
hosted_on: Мастодонт хостован на %{domain} hosted_on: Мастодонт хостован на %{domain}
learn_more: Сазнајте више learn_more: Сазнајте више
other_instances: Листа инстанци
privacy_policy: Полиса приватности privacy_policy: Полиса приватности
source_code: Изворни код source_code: Изворни код
status_count_after: status_count_after:
@ -518,13 +507,11 @@ sr:
logout: Одјава logout: Одјава
migrate_account: Помери у други налог migrate_account: Помери у други налог
migrate_account_html: Ако желите да преусмерите овај налог на неки други, можете то <a href="%{path}">подесити овде</a>. migrate_account_html: Ако желите да преусмерите овај налог на неки други, можете то <a href="%{path}">подесити овде</a>.
or: или
or_log_in_with: Или се пријавите са or_log_in_with: Или се пријавите са
providers: providers:
cas: CAS-ом cas: CAS-ом
saml: SAML-ом saml: SAML-ом
register: Региструј се register: Региструј се
register_elsewhere: Региструјте се на другом серверу
resend_confirmation: Пошаљи поруку са упутствима о потврди налога поново resend_confirmation: Пошаљи поруку са упутствима о потврди налога поново
reset_password: Ресетуј лозинку reset_password: Ресетуј лозинку
security: Безбедност security: Безбедност

View File

@ -5,26 +5,15 @@ sv:
about_mastodon_html: Mastodon är ett socialt nätverk baserat på öppna webbprotokoll och gratis, öppen källkodsprogramvara. Det är decentraliserat som e-post. about_mastodon_html: Mastodon är ett socialt nätverk baserat på öppna webbprotokoll och gratis, öppen källkodsprogramvara. Det är decentraliserat som e-post.
about_this: Om about_this: Om
administered_by: 'Administreras av:' administered_by: 'Administreras av:'
closed_registrations: Registreringar är för närvarande stängda i denna instans. Dock så kan du hitta en annan instans för att skapa ett konto och få tillgång till samma nätverk från det.
contact: Kontakt contact: Kontakt
contact_missing: Inte inställd contact_missing: Inte inställd
contact_unavailable: N/A contact_unavailable: N/A
extended_description_html: | extended_description_html: |
<h3>En bra plats för regler</h3> <h3>En bra plats för regler</h3>
<p>Den utökade beskrivningen har inte konfigurerats ännu.</p> <p>Den utökade beskrivningen har inte konfigurerats ännu.</p>
features:
humane_approach_body: Mastodon, har lärt sig från tidigare misslyckanden i andra nätverk och syftar till att göra etiska designval i Mastodon för att bekämpa missbruk av sociala medier.
humane_approach_title: En mer human inställning
not_a_product_body: Mastodon är inte ett kommersiellt nätverk. Ingen reklam, ingen datautvinning, inga muromgärdade trädgårdar. Det finns ingen central myndighet.
not_a_product_title: Du är en person, inte en produkt
real_conversation_body: Med 500 tecken till ditt förfogande och stöd för granulärt innehåll och mediavarningar så kan du uttrycka dig själv, som du vill.
real_conversation_title: Byggd för riktiga konversationer
within_reach_body: Flera appar för iOS, Android och andra plattformar tack vare ett utvecklingsvänligt API-ekosystem gör att du kan hålla kontakten med dina vänner var som helst.
within_reach_title: Alltid inom räckhåll
generic_description: "%{domain} är en server i nätverket" generic_description: "%{domain} är en server i nätverket"
hosted_on: Mastodon värd på %{domain} hosted_on: Mastodon värd på %{domain}
learn_more: Lär dig mer learn_more: Lär dig mer
other_instances: Instanslista
source_code: Källkod source_code: Källkod
status_count_after: statusar status_count_after: statusar
status_count_before: Som skapat status_count_before: Som skapat
@ -380,13 +369,11 @@ sv:
logout: Logga ut logout: Logga ut
migrate_account: Flytta till ett annat konto migrate_account: Flytta till ett annat konto
migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du <a href="%{path}">konfigurera det här</a>. migrate_account_html: Om du vill omdirigera detta konto till ett annat, kan du <a href="%{path}">konfigurera det här</a>.
or: eller
or_log_in_with: Eller logga in med or_log_in_with: Eller logga in med
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Registrera register: Registrera
register_elsewhere: Registrera dig på en annan server
resend_confirmation: Skicka instruktionerna om bekräftelse igen resend_confirmation: Skicka instruktionerna om bekräftelse igen
reset_password: Återställ lösenord reset_password: Återställ lösenord
security: Säkerhet security: Säkerhet

View File

@ -7,7 +7,6 @@ te:
administered_by: 'నిర్వహణలో:' administered_by: 'నిర్వహణలో:'
api: API api: API
apps: మొబైల్ యాప్స్ apps: మొబైల్ యాప్స్
closed_registrations: ప్రస్తుతం ఈ ఇన్స్టెన్స్ లో రిజిస్టేషన్లు మూసివేయబడ్డాయి. అయితే, వేరే ఇన్స్టెన్స్ లో ఖాతా తెరచికూడా ఈ ఇన్స్టెన్స్ ను అక్కడినుండే యాక్సెస్ చేయవచ్చు.
contact: సంప్రదించండి contact: సంప్రదించండి
contact_missing: ఇంకా సెట్ చేయలేదు contact_missing: ఇంకా సెట్ చేయలేదు
contact_unavailable: వర్తించదు contact_unavailable: వర్తించదు
@ -15,19 +14,9 @@ te:
extended_description_html: | extended_description_html: |
<h3>నియమాలకు ఒక మంచి ప్రదేశం</h3> <h3>నియమాలకు ఒక మంచి ప్రదేశం</h3>
<p>మరింత విశదీకరణ ఇంకా సెట్ చేయబడలేదు.</p> <p>మరింత విశదీకరణ ఇంకా సెట్ చేయబడలేదు.</p>
features:
humane_approach_body: వేరే సామాజిక మాధ్యమాల వైఫల్యాల నుండి నేర్చుకుని, నైతిక రూపకల్పనలతో సామాజిక మాధ్యమాల దుర్వినియోగంపై మాస్టొడాన్ పోరాటం చేసే లక్ష్యంతో పనిచేస్తుంది.
humane_approach_title: మరింత మానవత్వంతో కూడిన విధానం
not_a_product_body: మాస్టొడాన్ వ్యాపార సంబంధిత మాధ్యమం కాదు. ఎటువంటి ప్రకటనలు, డేటా మైనింగ్, కంచెలు లేనిది. ఏ కేంద్ర అధికరమూ లేదు.
not_a_product_title: మీరొక వ్యక్తి, వస్తువు కాదు
real_conversation_body: With 500 characters at your disposal and support for granular content and media warnings, you can express yourself the way you want to.
real_conversation_title: నిజమైన సంభాషణలకోసం నిర్మించబడింది
within_reach_body: ఆండ్రాయిడ్, iOS మరియు ఇతర ప్లాట్ఫాంలకు వివిధరకాల యాప్స్ వున్నాయి. డెవలపర్ సహిత API వ్యవస్థే ఇందుకు మూలకారణం. ఇవి మీ స్ణేహితులతో అన్నివేళలా అందుబాటులో వుండడానికి సహాయపడతాయి.
within_reach_title: ఎల్లప్పుడూ అందుబాటులో
generic_description: "%{domain} అనేది నెట్వర్కులోని ఒక సర్వరు" generic_description: "%{domain} అనేది నెట్వర్కులోని ఒక సర్వరు"
hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది
learn_more: మరింత తెలుసుకోండి learn_more: మరింత తెలుసుకోండి
other_instances: ఇన్స్టాన్స్ ల జాబితా
privacy_policy: గోప్యత విధానము privacy_policy: గోప్యత విధానము
source_code: సోర్సు కోడ్ source_code: సోర్సు కోడ్
status_count_after: status_count_after:

View File

@ -3,9 +3,7 @@ th:
about: about:
about_mastodon_html: แมสโทดอน เป็น <em>ดีเซ็นทรัลไลซ์</em><em>ฟรีโอเพ่นซอร์ส</em> โซเชี่ยวเน็ตเวริ์ค. เป็นทางเลือกทดแทนโซเชี่ยวเน็ตเวิร์คที่ทำเป็นธุรกิจการค้า, ป้องกันการผูกขาดช่องทางการสื่อสารของคุณ. เลือกเซร์ฟเวอร์ที่คุณไว้ใจ &mdash; ที่คุณเลือกได้เอง, สื่อสารกับคนที่คุณต้องการได้เสมอ. ใครๆก็รันแมสโทดอนอินซะแตนซ์ได้ และ เชื่อมต่อกับ<em>โซเชี่ยวเน็ตเวิร์ค</em> โดยไม่มีอะไรมาขวางกั้น. about_mastodon_html: แมสโทดอน เป็น <em>ดีเซ็นทรัลไลซ์</em><em>ฟรีโอเพ่นซอร์ส</em> โซเชี่ยวเน็ตเวริ์ค. เป็นทางเลือกทดแทนโซเชี่ยวเน็ตเวิร์คที่ทำเป็นธุรกิจการค้า, ป้องกันการผูกขาดช่องทางการสื่อสารของคุณ. เลือกเซร์ฟเวอร์ที่คุณไว้ใจ &mdash; ที่คุณเลือกได้เอง, สื่อสารกับคนที่คุณต้องการได้เสมอ. ใครๆก็รันแมสโทดอนอินซะแตนซ์ได้ และ เชื่อมต่อกับ<em>โซเชี่ยวเน็ตเวิร์ค</em> โดยไม่มีอะไรมาขวางกั้น.
about_this: เกี่ยวกับอินซะแตนซ์นี้ about_this: เกี่ยวกับอินซะแตนซ์นี้
closed_registrations: อินซะแตนซ์นี้ปิดรับลงทะเบียนแล้ว.
contact: ติดต่อ contact: ติดต่อ
other_instances: อินซะแตนซ์อื่นๆ
source_code: ซอร์สโค๊ด source_code: ซอร์สโค๊ด
status_count_after: สถานะ status_count_after: สถานะ
status_count_before: Who authored status_count_before: Who authored

View File

@ -7,7 +7,6 @@ tr:
administered_by: 'Tarafından yönetildi:' administered_by: 'Tarafından yönetildi:'
api: API api: API
apps: Mobil uygulamalar apps: Mobil uygulamalar
closed_registrations: Bu sunucudaki kayıtlar şu anda kapalı. Ancak! Bir hesap oluşturmak ve oradan aynı ağa erişmek için farklı bir sunucu bulabilirsiniz.
contact: İletişim contact: İletişim
contact_missing: Ayarlanmadı contact_missing: Ayarlanmadı
contact_unavailable: Yok contact_unavailable: Yok
@ -15,19 +14,9 @@ tr:
extended_description_html: | extended_description_html: |
<h3>Kural için iyi bir yer</h3> <h3>Kural için iyi bir yer</h3>
<p>Genişletilmiş açıklama henüz ayarlanmamış.</p> <p>Genişletilmiş açıklama henüz ayarlanmamış.</p>
features:
humane_approach_body: Diğer ağların başarısızlıklarından öğrenen Mastodon, sosyal medyanın kötüye kullanımı ile mücadele etmek için etik tasarım seçimleri yapmayı amaçlamaktadır.
humane_approach_title: Daha insancıl bir yaklaşım
not_a_product_body: Mastodon ticari bir ağ değildir. Reklam yok, Veri madenciliği yok, duvarlı bahçeler yok. Merkezi bir otorite yok.
not_a_product_title: Sen bir insansın, bir ürün değil
real_conversation_body: Emrindeki 500 karakter ve granüler içerik ve medya uyarıları için destek ile kendinizi istediğiniz şekilde ifade edebilirsiniz.
real_conversation_title: Gerçek sohbet için üretildi
within_reach_body: Geliştirici dostu bir API ekosistemi sayesinde iOS, Android ve diğer platformlar için birden fazla uygulama, arkadaşlarınıza her yerden ulaşmanızı sağlar.
within_reach_title: Her zaman ulaşılabilir
generic_description: "%{domain} ağdaki bir sunucudur" generic_description: "%{domain} ağdaki bir sunucudur"
hosted_on: Mastodon %{domain} üzerinde barındırılıyor hosted_on: Mastodon %{domain} üzerinde barındırılıyor
learn_more: Daha fazla bilgi edinin learn_more: Daha fazla bilgi edinin
other_instances: Sunucu listesi
privacy_policy: Gizlilik politikası privacy_policy: Gizlilik politikası
source_code: Kaynak kodu source_code: Kaynak kodu
status_count_after: status_count_after:

View File

@ -6,7 +6,6 @@ uk:
about_this: Про цю інстанцію about_this: Про цю інстанцію
administered_by: 'Адміністратор:' administered_by: 'Адміністратор:'
api: API api: API
closed_registrations: На даний момент реєстрація на цій інстанції закрита.
contact: Зв'язатися contact: Зв'язатися
contact_missing: Не зазначено contact_missing: Не зазначено
contact_unavailable: Недоступно contact_unavailable: Недоступно
@ -14,19 +13,9 @@ uk:
extended_description_html: | extended_description_html: |
<h3>Гарне місце для правил</h3> <h3>Гарне місце для правил</h3>
<p>Детальний опис ще не налаштований.</p> <p>Детальний опис ще не налаштований.</p>
features:
humane_approach_body: Навчаючись з помилок інших соціальних мереж, Mastodon націлений на етичні рішення для боротьби з направильним використанням соціальних медіа.
humane_approach_title: Більш людський підхід
not_a_product_body: Mastodon - це некомерційна мережа. Ніякої реклами, збору даних і залізних стін. Тут немає центральної влади.
not_a_product_title: Ви - особистість, а не продукт
real_conversation_body: Висловлюйте свої думки себе у будь-який спосіб маючи в розпорядженні 500 символів з підтримкою гранульованого контенту та попереджень медіа.
real_conversation_title: Побудований для справжньої розмови
within_reach_body: Велика кількість застосунків для iOS, Android та інших платформ, завдяки дружній до розробника екосистемі дозволяє бути на звязку з друзями звідусіль.
within_reach_title: Завжди на звязку
generic_description: "%{domain} є одним сервером у мережі" generic_description: "%{domain} є одним сервером у мережі"
hosted_on: Mastodon розміщено на %{domain} hosted_on: Mastodon розміщено на %{domain}
learn_more: Дізнатися більше learn_more: Дізнатися більше
other_instances: Інші інстанції
privacy_policy: Політика приватності privacy_policy: Політика приватності
source_code: Вихідний код source_code: Вихідний код
status_count_after: статусів status_count_after: статусів
@ -412,13 +401,11 @@ uk:
logout: Вийти logout: Вийти
migrate_account: Переїхати до іншого аккаунту migrate_account: Переїхати до іншого аккаунту
migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете <a href="%{path}">налаштувати це тут</a>. migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете <a href="%{path}">налаштувати це тут</a>.
or: або
or_log_in_with: Або увійдіть з or_log_in_with: Або увійдіть з
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: Зареєструватися register: Зареєструватися
register_elsewhere: Зареєструватися на іншому сервері
resend_confirmation: Повторно відправити інструкції з підтвердження resend_confirmation: Повторно відправити інструкції з підтвердження
reset_password: Скинути пароль reset_password: Скинути пароль
security: Зміна паролю security: Зміна паролю

View File

@ -7,7 +7,6 @@ zh-CN:
administered_by: 本实例的管理员: administered_by: 本实例的管理员:
api: API api: API
apps: 移动应用 apps: 移动应用
closed_registrations: 这个实例目前没有开放注册。不过,你可以前往其他实例注册一个帐户,同样可以加入到这个网络中哦!
contact: 联系方式 contact: 联系方式
contact_missing: 未设定 contact_missing: 未设定
contact_unavailable: 未公开 contact_unavailable: 未公开
@ -15,19 +14,9 @@ zh-CN:
extended_description_html: | extended_description_html: |
<h3>这里可以写一些规定</h3> <h3>这里可以写一些规定</h3>
<p>本站尚未设置详细介绍。</p> <p>本站尚未设置详细介绍。</p>
features:
humane_approach_body: Mastodon 从其他网络的失败经验中汲取了教训,致力于在与错误的社交媒体使用方式的斗争中做出符合伦理化设计的选择。
humane_approach_title: 更加以人为本
not_a_product_body: Mastodon 绝非一个商业网络。这里既没有广告,也没有数据挖掘,更没有围墙花园。中心机构在这里不复存在。
not_a_product_title: 作为用户,你并非一件商品
real_conversation_body: Mastodon 有着高达 500 字的字数限制,以及对内容的细化控制和媒体警告提示的支持,只为让你能够畅所欲言。
real_conversation_title: 为真正的交流而生
within_reach_body: 通过一个面向开发者友好的 API 生态系统Mastodon 让你可以随时随地通过众多 iOS、Android 以及其他平台的应用与朋友们保持联系。
within_reach_title: 始终触手可及
generic_description: "%{domain} 是这个庞大网络中的一台服务器" generic_description: "%{domain} 是这个庞大网络中的一台服务器"
hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例 hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例
learn_more: 了解详情 learn_more: 了解详情
other_instances: 其他实例
privacy_policy: 隐私政策 privacy_policy: 隐私政策
source_code: 源代码 source_code: 源代码
status_count_after: 条嘟文 status_count_after: 条嘟文
@ -430,13 +419,11 @@ zh-CN:
logout: 登出 logout: 登出
migrate_account: 迁移到另一个帐户 migrate_account: 迁移到另一个帐户
migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。 migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。
or: 或者
or_log_in_with: 或通过其他方式登录 or_log_in_with: 或通过其他方式登录
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: 注册 register: 注册
register_elsewhere: 前往其他实例注册
resend_confirmation: 重新发送确认邮件 resend_confirmation: 重新发送确认邮件
reset_password: 重置密码 reset_password: 重置密码
security: 帐户安全 security: 帐户安全

View File

@ -5,26 +5,15 @@ zh-HK:
about_mastodon_html: Mastodon萬象是<em>自由、開源</em>的社交網絡。服務站<em>各自獨立而互連</em>,避免單一商業機構壟斷。找你所信任的服務站,建立帳號,你即可與任何服務站上的用戶溝通,享受無縫的<em>網絡交流</em>。 about_mastodon_html: Mastodon萬象是<em>自由、開源</em>的社交網絡。服務站<em>各自獨立而互連</em>,避免單一商業機構壟斷。找你所信任的服務站,建立帳號,你即可與任何服務站上的用戶溝通,享受無縫的<em>網絡交流</em>。
about_this: 關於本服務站 about_this: 關於本服務站
administered_by: 管理者: administered_by: 管理者:
closed_registrations: 本服務站暫時停止接受登記。
contact: 聯絡 contact: 聯絡
contact_missing: 未設定 contact_missing: 未設定
contact_unavailable: 未公開 contact_unavailable: 未公開
extended_description_html: | extended_description_html: |
<h3>這裡可以寫一些網站規則</h3> <h3>這裡可以寫一些網站規則</h3>
<p>本站未有詳細介紹</p> <p>本站未有詳細介紹</p>
features:
humane_approach_body: Mastodon 從其他網絡的失敗經驗中汲取教訓,以合乎道德的設計對抗社交媒體的濫用問題。
humane_approach_title: 以人為本
not_a_product_body: Mastodon 不是商業網絡。沒有廣告,沒有數據挖掘,也沒有中央機構操控。平台完全開放。
not_a_product_title: 你是用戶,不是商品
real_conversation_body: Mastodon 的字數限制高達 500 字,並支援仔細的媒體警告選項,令你暢所欲言。
real_conversation_title: 為真正的交流而生
within_reach_body: 簡易的 API 系統,令用戶可以透過不同的 iOS、Android 及其他平台的應用軟件,與朋友保持聯繫。
within_reach_title: 無處不在
generic_description: "%{domain} 是 Mastodon 網絡中其中一個服務站" generic_description: "%{domain} 是 Mastodon 網絡中其中一個服務站"
hosted_on: 在 %{domain} 運作的 Mastodon 服務站 hosted_on: 在 %{domain} 運作的 Mastodon 服務站
learn_more: 了解更多 learn_more: 了解更多
other_instances: 其他服務站
source_code: 源代碼 source_code: 源代碼
status_count_after: 篇文章 status_count_after: 篇文章
status_count_before: 他們共發佈了 status_count_before: 他們共發佈了
@ -378,13 +367,11 @@ zh-HK:
logout: 登出 logout: 登出
migrate_account: 轉移到另一個帳號 migrate_account: 轉移到另一個帳號
migrate_account_html: 想要將這個帳號指向另一個帳號可<a href="%{path}">到這裡設定</a>。 migrate_account_html: 想要將這個帳號指向另一個帳號可<a href="%{path}">到這裡設定</a>。
or:
or_log_in_with: 或登入於 or_log_in_with: 或登入於
providers: providers:
cas: CAS cas: CAS
saml: SAML saml: SAML
register: 登記 register: 登記
register_elsewhere: 在其他服務站登記
resend_confirmation: 重發確認指示電郵 resend_confirmation: 重發確認指示電郵
reset_password: 重設密碼 reset_password: 重設密碼
security: 登入資訊 security: 登入資訊

Some files were not shown because too many files have changed in this diff Show More