forked from treehouse/mastodon
Merge pull request #957 from ThibG/glitch-soc/merge-upstream
Merge upstream changessignup-info-prompt
commit
3005e473a0
|
@ -43,7 +43,7 @@ GEM
|
|||
activemodel (>= 4.1, < 6)
|
||||
case_transform (>= 0.2)
|
||||
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)
|
||||
activesupport (= 5.2.2)
|
||||
globalid (>= 0.3.6)
|
||||
|
@ -148,7 +148,7 @@ GEM
|
|||
cocaine (0.5.8)
|
||||
climate_control (>= 0.0.3, < 1.0)
|
||||
coderay (1.1.2)
|
||||
concurrent-ruby (1.1.4)
|
||||
concurrent-ruby (1.1.5)
|
||||
connection_pool (2.2.2)
|
||||
crack (0.4.3)
|
||||
safe_yaml (~> 1.0.0)
|
||||
|
|
|
@ -2,21 +2,17 @@
|
|||
|
||||
class AboutController < ApplicationController
|
||||
before_action :set_pack
|
||||
before_action :set_body_classes
|
||||
layout 'public'
|
||||
|
||||
before_action :set_instance_presenter, only: [:show, :more, :terms]
|
||||
|
||||
def show
|
||||
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
|
||||
@initial_state_json = serializable_resource.to_json
|
||||
@hide_navbar = true
|
||||
end
|
||||
|
||||
def more
|
||||
render layout: 'public'
|
||||
end
|
||||
def more; end
|
||||
|
||||
def terms
|
||||
render layout: 'public'
|
||||
end
|
||||
def terms; end
|
||||
|
||||
private
|
||||
|
||||
|
@ -27,21 +23,10 @@ class AboutController < ApplicationController
|
|||
helper_method :new_user
|
||||
|
||||
def set_pack
|
||||
use_pack action_name == 'show' ? 'about' : 'common'
|
||||
use_pack 'common'
|
||||
end
|
||||
|
||||
def set_instance_presenter
|
||||
@instance_presenter = InstancePresenter.new
|
||||
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
|
||||
|
|
|
@ -81,7 +81,13 @@ class AccountsController < ApplicationController
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
def set_account
|
||||
|
|
|
@ -69,7 +69,13 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
def pagination_params(core_params)
|
||||
|
|
|
@ -14,7 +14,7 @@ class Api::V1::Timelines::TagController < Api::BaseController
|
|||
private
|
||||
|
||||
def load_tag
|
||||
@tag = Tag.find_by(name: params[:id].downcase)
|
||||
@tag = Tag.find_normalized(params[:id])
|
||||
end
|
||||
|
||||
def load_statuses
|
||||
|
|
|
@ -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
|
|
@ -9,13 +9,15 @@ class TagsController < ApplicationController
|
|||
before_action :set_instance_presenter
|
||||
|
||||
def show
|
||||
@tag = Tag.find_by!(name: params[:id].downcase)
|
||||
@tag = Tag.find_normalized!(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
use_pack 'about'
|
||||
serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
|
||||
@initial_state_json = serializable_resource.to_json
|
||||
@initial_state_json = ActiveModelSerializers::SerializableResource.new(
|
||||
InitialStatePresenter.new(settings: {}, token: current_session&.token),
|
||||
serializer: InitialStateSerializer
|
||||
).to_json
|
||||
end
|
||||
|
||||
format.rss do
|
||||
|
@ -26,8 +28,7 @@ class TagsController < ApplicationController
|
|||
end
|
||||
|
||||
format.json do
|
||||
@statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, params[:local])
|
||||
.paginate_by_max_id(PAGE_SIZE, params[:max_id])
|
||||
@statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
render json: collection_presenter,
|
||||
|
@ -56,11 +57,4 @@ class TagsController < ApplicationController
|
|||
items: @statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) }
|
||||
)
|
||||
end
|
||||
|
||||
def initial_state_params
|
||||
{
|
||||
settings: {},
|
||||
token: current_session&.token,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -56,4 +56,12 @@ module HomeHelper
|
|||
'emojify'
|
||||
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
|
||||
|
|
|
@ -47,6 +47,15 @@ module JsonLdHelper
|
|||
!uri.start_with?('http://', 'https://')
|
||||
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)
|
||||
graph = RDF::Graph.new << JSON::LD::API.toRdf(json, documentLoader: method(:load_jsonld_context))
|
||||
graph.dump(:normalize)
|
||||
|
|
|
@ -7,7 +7,6 @@ import { hydrateStore } from 'flavours/glitch/actions/store';
|
|||
import { IntlProvider, addLocaleData } from 'react-intl';
|
||||
import { getLocale } from 'mastodon/locales';
|
||||
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 ModalContainer from 'flavours/glitch/features/ui/containers/modal_container';
|
||||
import initialState from 'flavours/glitch/util/initial_state';
|
||||
|
@ -26,24 +25,22 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
static propTypes = {
|
||||
locale: PropTypes.string.isRequired,
|
||||
hashtag: PropTypes.string,
|
||||
showPublicTimeline: PropTypes.bool.isRequired,
|
||||
local: PropTypes.bool,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
showPublicTimeline: initialState.settings.known_fediverse,
|
||||
local: !initialState.settings.known_fediverse,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { locale, hashtag, showPublicTimeline } = this.props;
|
||||
const { locale, hashtag, local } = this.props;
|
||||
|
||||
let timeline;
|
||||
|
||||
if (hashtag) {
|
||||
timeline = <HashtagTimeline hashtag={hashtag} />;
|
||||
} else if (showPublicTimeline) {
|
||||
timeline = <PublicTimeline />;
|
||||
} else {
|
||||
timeline = <CommunityTimeline />;
|
||||
timeline = <PublicTimeline local={local} />;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -51,6 +48,7 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
<Provider store={store}>
|
||||
<Fragment>
|
||||
{timeline}
|
||||
|
||||
{ReactDOM.createPortal(
|
||||
<ModalContainer />,
|
||||
document.getElementById('modal-container'),
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,70 +1,112 @@
|
|||
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 { expandPublicTimeline } 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 { connectPublicStream } from 'flavours/glitch/actions/streaming';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { expandPublicTimeline, expandCommunityTimeline } from 'flavours/glitch/actions/timelines';
|
||||
import { connectPublicStream, connectCommunityStream } from 'flavours/glitch/actions/streaming';
|
||||
import Masonry from 'react-masonry-infinite';
|
||||
import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
|
||||
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({
|
||||
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
|
||||
});
|
||||
const mapStateToProps = (state, { local }) => {
|
||||
const timeline = state.getIn(['timelines', local ? 'community' : 'public'], ImmutableMap());
|
||||
|
||||
@connect()
|
||||
@injectIntl
|
||||
export default class PublicTimeline extends React.PureComponent {
|
||||
return {
|
||||
statusIds: timeline.get('items', ImmutableList()),
|
||||
isLoading: timeline.get('isLoading', false),
|
||||
hasMore: timeline.get('hasMore', false),
|
||||
};
|
||||
};
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
class PublicTimeline extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
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 () {
|
||||
const { dispatch } = this.props;
|
||||
this._connect();
|
||||
}
|
||||
|
||||
dispatch(expandPublicTimeline());
|
||||
this.disconnect = dispatch(connectPublicStream());
|
||||
componentDidUpdate (prevProps) {
|
||||
if (prevProps.local !== this.props.local) {
|
||||
this._disconnect();
|
||||
this._connect();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
this._disconnect();
|
||||
}
|
||||
|
||||
_connect () {
|
||||
const { dispatch, local } = this.props;
|
||||
|
||||
dispatch(local ? expandCommunityTimeline() : expandPublicTimeline());
|
||||
this.disconnect = dispatch(local ? connectCommunityStream() : connectPublicStream());
|
||||
}
|
||||
|
||||
_disconnect () {
|
||||
if (this.disconnect) {
|
||||
this.disconnect();
|
||||
this.disconnect = null;
|
||||
}
|
||||
}
|
||||
|
||||
handleLoadMore = maxId => {
|
||||
this.props.dispatch(expandPublicTimeline({ maxId }));
|
||||
handleLoadMore = () => {
|
||||
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 () {
|
||||
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 (
|
||||
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
||||
<ColumnHeader
|
||||
icon='globe'
|
||||
title={intl.formatMessage(messages.title)}
|
||||
onClick={this.handleHeaderClick}
|
||||
<Masonry ref={this.setRef} className='statuses-grid' hasMore={hasMore} loadMore={this.handleLoadMore} sizes={sizes} loader={loader}>
|
||||
{statusIds.map(statusId => (
|
||||
<div className='statuses-grid__item' key={statusId}>
|
||||
<DetailedStatusContainer
|
||||
id={statusId}
|
||||
compact
|
||||
measureHeight
|
||||
onHeightChange={this.handleHeightChange}
|
||||
/>
|
||||
|
||||
<StatusListContainer
|
||||
timelineId='public'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
scrollKey='standalone_public_timeline'
|
||||
trackScroll={false}
|
||||
/>
|
||||
</Column>
|
||||
</div>
|
||||
)).toArray()}
|
||||
</Masonry>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
|||
};
|
||||
|
||||
static propTypes = {
|
||||
status: ImmutablePropTypes.map.isRequired,
|
||||
status: ImmutablePropTypes.map,
|
||||
settings: ImmutablePropTypes.map.isRequired,
|
||||
onOpenMedia: PropTypes.func.isRequired,
|
||||
onOpenVideo: PropTypes.func.isRequired,
|
||||
|
|
|
@ -193,6 +193,7 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
strong {
|
||||
font-family: $font-display, sans-serif;
|
||||
font-weight: 500;
|
||||
font-size: 32px;
|
||||
line-height: 48px;
|
||||
|
@ -282,168 +283,6 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
.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,
|
||||
li {
|
||||
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 {
|
||||
display: inline;
|
||||
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,
|
||||
&__forms {
|
||||
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) {
|
||||
.container-alt {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.information-board {
|
||||
.container-alt {
|
||||
padding-right: 20px;
|
||||
|
@ -1214,109 +642,217 @@ $small-breakpoint: 960px;
|
|||
.features .container-alt {
|
||||
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 {
|
||||
margin: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&.tag-page {
|
||||
@media screen and (max-width: $column-breakpoint) {
|
||||
padding: 0;
|
||||
.landing {
|
||||
margin-bottom: 100px;
|
||||
|
||||
.container {
|
||||
padding: 0;
|
||||
@media screen and (max-width: 738px) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#mastodon-timeline {
|
||||
&__brand {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
.grid {
|
||||
@media screen and (min-width: $small-breakpoint) {
|
||||
grid-template-columns: 33% 67%;
|
||||
.hero-widget,
|
||||
.box-widget,
|
||||
.directory__tag {
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
}
|
||||
|
||||
.column-2 {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
.directory {
|
||||
margin-top: 0;
|
||||
|
||||
&__tag {
|
||||
margin-bottom: 0;
|
||||
|
||||
& > a,
|
||||
& > div {
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.brand {
|
||||
text-align: unset;
|
||||
padding: 0;
|
||||
|
||||
img {
|
||||
height: 48px;
|
||||
width: auto;
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.brand {
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand__tagline {
|
||||
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;
|
||||
margin-top: 20px;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,17 @@ code {
|
|||
top: 2px;
|
||||
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;
|
||||
}
|
||||
|
||||
&:focus:invalid {
|
||||
&:focus:invalid:not(:placeholder-shown) {
|
||||
border-color: lighten($error-red, 12%);
|
||||
}
|
||||
|
||||
|
@ -346,6 +357,10 @@ code {
|
|||
}
|
||||
}
|
||||
|
||||
.input.disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.actions {
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
|
@ -392,6 +407,10 @@ code {
|
|||
background-color: darken($ui-highlight-color, 5%);
|
||||
}
|
||||
|
||||
&:disabled:hover {
|
||||
background-color: $ui-primary-color;
|
||||
}
|
||||
|
||||
&.negative {
|
||||
background: $error-value-color;
|
||||
|
||||
|
|
|
@ -191,3 +191,15 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -295,6 +295,11 @@
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
&.disabled > div {
|
||||
opacity: 0.5;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
h4 {
|
||||
flex: 1 1 auto;
|
||||
font-size: 18px;
|
||||
|
|
|
@ -7,7 +7,6 @@ import { hydrateStore } from '../actions/store';
|
|||
import { IntlProvider, addLocaleData } from 'react-intl';
|
||||
import { getLocale } from '../locales';
|
||||
import PublicTimeline from '../features/standalone/public_timeline';
|
||||
import CommunityTimeline from '../features/standalone/community_timeline';
|
||||
import HashtagTimeline from '../features/standalone/hashtag_timeline';
|
||||
import ModalContainer from '../features/ui/containers/modal_container';
|
||||
import initialState from '../initial_state';
|
||||
|
@ -26,24 +25,22 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
static propTypes = {
|
||||
locale: PropTypes.string.isRequired,
|
||||
hashtag: PropTypes.string,
|
||||
showPublicTimeline: PropTypes.bool.isRequired,
|
||||
local: PropTypes.bool,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
showPublicTimeline: initialState.settings.known_fediverse,
|
||||
local: !initialState.settings.known_fediverse,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { locale, hashtag, showPublicTimeline } = this.props;
|
||||
const { locale, hashtag, local } = this.props;
|
||||
|
||||
let timeline;
|
||||
|
||||
if (hashtag) {
|
||||
timeline = <HashtagTimeline hashtag={hashtag} />;
|
||||
} else if (showPublicTimeline) {
|
||||
timeline = <PublicTimeline />;
|
||||
} else {
|
||||
timeline = <CommunityTimeline />;
|
||||
timeline = <PublicTimeline local={local} />;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -51,6 +48,7 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
<Provider store={store}>
|
||||
<Fragment>
|
||||
{timeline}
|
||||
|
||||
{ReactDOM.createPortal(
|
||||
<ModalContainer />,
|
||||
document.getElementById('modal-container'),
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -2,13 +2,13 @@ import React from 'react';
|
|||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { expandHashtagTimeline } from '../../../actions/timelines';
|
||||
import { connectHashtagStream } from '../../../actions/streaming';
|
||||
import { expandHashtagTimeline } from 'mastodon/actions/timelines';
|
||||
import { connectHashtagStream } from 'mastodon/actions/streaming';
|
||||
import Masonry from 'react-masonry-infinite';
|
||||
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 LoadingIndicator from '../../../components/loading_indicator';
|
||||
import LoadingIndicator from 'mastodon/components/loading_indicator';
|
||||
|
||||
const mapStateToProps = (state, { hashtag }) => ({
|
||||
statusIds: state.getIn(['timelines', `hashtag:${hashtag}`, 'items'], ImmutableList()),
|
||||
|
|
|
@ -1,70 +1,112 @@
|
|||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import StatusListContainer from '../../ui/containers/status_list_container';
|
||||
import { expandPublicTimeline } from '../../../actions/timelines';
|
||||
import Column from '../../../components/column';
|
||||
import ColumnHeader from '../../../components/column_header';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import { connectPublicStream } from '../../../actions/streaming';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { expandPublicTimeline, expandCommunityTimeline } from 'mastodon/actions/timelines';
|
||||
import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming';
|
||||
import Masonry from 'react-masonry-infinite';
|
||||
import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
|
||||
import DetailedStatusContainer from 'mastodon/features/status/containers/detailed_status_container';
|
||||
import { debounce } from 'lodash';
|
||||
import LoadingIndicator from 'mastodon/components/loading_indicator';
|
||||
|
||||
const messages = defineMessages({
|
||||
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
|
||||
});
|
||||
const mapStateToProps = (state, { local }) => {
|
||||
const timeline = state.getIn(['timelines', local ? 'community' : 'public'], ImmutableMap());
|
||||
|
||||
export default @connect()
|
||||
@injectIntl
|
||||
return {
|
||||
statusIds: timeline.get('items', ImmutableList()),
|
||||
isLoading: timeline.get('isLoading', false),
|
||||
hasMore: timeline.get('hasMore', false),
|
||||
};
|
||||
};
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
class PublicTimeline extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
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 () {
|
||||
const { dispatch } = this.props;
|
||||
this._connect();
|
||||
}
|
||||
|
||||
dispatch(expandPublicTimeline());
|
||||
this.disconnect = dispatch(connectPublicStream());
|
||||
componentDidUpdate (prevProps) {
|
||||
if (prevProps.local !== this.props.local) {
|
||||
this._disconnect();
|
||||
this._connect();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
this._disconnect();
|
||||
}
|
||||
|
||||
_connect () {
|
||||
const { dispatch, local } = this.props;
|
||||
|
||||
dispatch(local ? expandCommunityTimeline() : expandPublicTimeline());
|
||||
this.disconnect = dispatch(local ? connectCommunityStream() : connectPublicStream());
|
||||
}
|
||||
|
||||
_disconnect () {
|
||||
if (this.disconnect) {
|
||||
this.disconnect();
|
||||
this.disconnect = null;
|
||||
}
|
||||
}
|
||||
|
||||
handleLoadMore = maxId => {
|
||||
this.props.dispatch(expandPublicTimeline({ maxId }));
|
||||
handleLoadMore = () => {
|
||||
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 () {
|
||||
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 (
|
||||
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
||||
<ColumnHeader
|
||||
icon='globe'
|
||||
title={intl.formatMessage(messages.title)}
|
||||
onClick={this.handleHeaderClick}
|
||||
<Masonry ref={this.setRef} className='statuses-grid' hasMore={hasMore} loadMore={this.handleLoadMore} sizes={sizes} loader={loader}>
|
||||
{statusIds.map(statusId => (
|
||||
<div className='statuses-grid__item' key={statusId}>
|
||||
<DetailedStatusContainer
|
||||
id={statusId}
|
||||
compact
|
||||
measureHeight
|
||||
onHeightChange={this.handleHeightChange}
|
||||
/>
|
||||
|
||||
<StatusListContainer
|
||||
timelineId='public'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
scrollKey='standalone_public_timeline'
|
||||
trackScroll={false}
|
||||
/>
|
||||
</Column>
|
||||
</div>
|
||||
)).toArray()}
|
||||
</Masonry>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
|||
};
|
||||
|
||||
static propTypes = {
|
||||
status: ImmutablePropTypes.map.isRequired,
|
||||
status: ImmutablePropTypes.map,
|
||||
onOpenMedia: PropTypes.func.isRequired,
|
||||
onOpenVideo: PropTypes.func.isRequired,
|
||||
onToggleHidden: PropTypes.func.isRequired,
|
||||
|
|
|
@ -193,6 +193,7 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
strong {
|
||||
font-family: $font-display, sans-serif;
|
||||
font-weight: 500;
|
||||
font-size: 32px;
|
||||
line-height: 48px;
|
||||
|
@ -280,168 +281,6 @@ $small-breakpoint: 960px;
|
|||
}
|
||||
|
||||
.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,
|
||||
li {
|
||||
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 {
|
||||
display: inline;
|
||||
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,
|
||||
&__forms {
|
||||
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) {
|
||||
.container-alt {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.information-board {
|
||||
.container-alt {
|
||||
padding-right: 20px;
|
||||
|
@ -1211,109 +639,217 @@ $small-breakpoint: 960px;
|
|||
.features .container-alt {
|
||||
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 {
|
||||
margin: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&.tag-page {
|
||||
@media screen and (max-width: $column-breakpoint) {
|
||||
padding: 0;
|
||||
.landing {
|
||||
margin-bottom: 100px;
|
||||
|
||||
.container {
|
||||
padding: 0;
|
||||
@media screen and (max-width: 738px) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#mastodon-timeline {
|
||||
&__brand {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
.grid {
|
||||
@media screen and (min-width: $small-breakpoint) {
|
||||
grid-template-columns: 33% 67%;
|
||||
.hero-widget,
|
||||
.box-widget,
|
||||
.directory__tag {
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
}
|
||||
|
||||
.column-2 {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
.directory {
|
||||
margin-top: 0;
|
||||
|
||||
&__tag {
|
||||
margin-bottom: 0;
|
||||
|
||||
& > a,
|
||||
& > div {
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.brand {
|
||||
text-align: unset;
|
||||
padding: 0;
|
||||
|
||||
img {
|
||||
height: 48px;
|
||||
width: auto;
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.brand {
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand__tagline {
|
||||
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;
|
||||
margin-top: 20px;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,17 @@ code {
|
|||
top: 2px;
|
||||
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;
|
||||
}
|
||||
|
||||
&:focus:invalid {
|
||||
&:focus:invalid:not(:placeholder-shown) {
|
||||
border-color: lighten($error-red, 12%);
|
||||
}
|
||||
|
||||
|
@ -346,6 +357,10 @@ code {
|
|||
}
|
||||
}
|
||||
|
||||
.input.disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.actions {
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
|
@ -392,6 +407,10 @@ code {
|
|||
background-color: darken($ui-highlight-color, 5%);
|
||||
}
|
||||
|
||||
&:disabled:hover {
|
||||
background-color: $ui-primary-color;
|
||||
}
|
||||
|
||||
&.negative {
|
||||
background: $error-value-color;
|
||||
|
||||
|
|
|
@ -190,3 +190,15 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -295,6 +295,11 @@
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
&.disabled > div {
|
||||
opacity: 0.5;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
h4 {
|
||||
flex: 1 1 auto;
|
||||
font-size: 18px;
|
||||
|
|
|
@ -241,9 +241,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
|
||||
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 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'])
|
||||
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
|
||||
end
|
||||
|
||||
|
@ -371,15 +374,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
@skip_download ||= DomainBlock.find_by(domain: @account.domain)&.reject_media?
|
||||
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?
|
||||
!replied_to_status.nil? && replied_to_status.account.local?
|
||||
end
|
||||
|
|
|
@ -75,13 +75,4 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||
def lock_options
|
||||
{ redis: Redis.current, key: "create:#{object_uri}" }
|
||||
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
|
||||
|
|
|
@ -4,8 +4,11 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
|
|||
SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze
|
||||
|
||||
def perform
|
||||
update_account if equals_or_includes_any?(@object['type'], SUPPORTED_TYPES)
|
||||
update_poll if equals_or_includes_any?(@object['type'], %w(Question))
|
||||
if equals_or_includes_any?(@object['type'], SUPPORTED_TYPES)
|
||||
update_account
|
||||
elsif equals_or_includes_any?(@object['type'], %w(Question))
|
||||
update_poll
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -18,11 +21,10 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
|
|||
|
||||
def update_poll
|
||||
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
|
||||
|
|
|
@ -474,6 +474,7 @@ class Account < ApplicationRecord
|
|||
|
||||
before_create :generate_keys
|
||||
before_validation :prepare_contents, if: :local?
|
||||
before_validation :prepare_username, on: :create
|
||||
before_destroy :clean_feed_manager
|
||||
|
||||
private
|
||||
|
@ -483,6 +484,10 @@ class Account < ApplicationRecord
|
|||
note&.strip!
|
||||
end
|
||||
|
||||
def prepare_username
|
||||
username&.squish!
|
||||
end
|
||||
|
||||
def generate_keys
|
||||
return unless local? && !Rails.env.test?
|
||||
|
||||
|
|
|
@ -18,7 +18,11 @@ module Expireable
|
|||
end
|
||||
|
||||
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
|
||||
|
|
|
@ -72,6 +72,14 @@ class Tag < ApplicationRecord
|
|||
.limit(limit)
|
||||
.offset(offset)
|
||||
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
|
||||
|
||||
private
|
||||
|
|
|
@ -21,6 +21,10 @@ class InstancePresenter
|
|||
Rails.cache.fetch('user_count') { User.confirmed.joins(:account).merge(Account.without_suspended).count }
|
||||
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
|
||||
Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i
|
||||
end
|
||||
|
@ -29,6 +33,10 @@ class InstancePresenter
|
|||
Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) }
|
||||
end
|
||||
|
||||
def sample_accounts
|
||||
Rails.cache.fetch('sample_accounts', expires_in: 12.hours) { Account.discoverable.popular.limit(3) }
|
||||
end
|
||||
|
||||
def version_number
|
||||
Mastodon::Version
|
||||
end
|
||||
|
|
|
@ -46,13 +46,4 @@ class ActivityPub::FetchRepliesService < BaseService
|
|||
# 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)
|
||||
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
|
||||
|
|
|
@ -92,7 +92,7 @@ class NotifyService < BaseService
|
|||
|
||||
def blocked?
|
||||
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?
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ class RemoveStatusService < BaseService
|
|||
@account = status.account
|
||||
@tags = status.tags.pluck(:name).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
|
||||
@options = options
|
||||
|
||||
|
@ -78,8 +78,8 @@ class RemoveStatusService < BaseService
|
|||
end
|
||||
|
||||
# ActivityPub
|
||||
ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:inbox_url)) do |target_account|
|
||||
[signed_activity_json, @account.id, target_account.inbox_url]
|
||||
ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:preferred_inbox_url)) do |target_account|
|
||||
[signed_activity_json, @account.id, target_account.preferred_inbox_url]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -20,8 +20,26 @@ class VoteService < BaseService
|
|||
end
|
||||
|
||||
if @poll.account.local?
|
||||
ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, @poll.status.id) unless @poll.hide_totals
|
||||
distribute_poll!
|
||||
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|
|
||||
ActivityPub::DeliveryWorker.perform_async(
|
||||
build_json(vote),
|
||||
|
@ -29,11 +47,7 @@ class VoteService < BaseService
|
|||
@poll.account.inbox_url
|
||||
)
|
||||
end
|
||||
PollExpirationNotifyWorker.perform_at(@poll.expires_at + 5.minutes, @poll.id) unless @poll.expires_at.nil?
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build_json(vote)
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
|
|
|
@ -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'
|
|
@ -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'
|
|
@ -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;' }
|
|
@ -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
|
|
@ -1,12 +1,16 @@
|
|||
= simple_form_for(new_user, url: user_registration_path) do |f|
|
||||
= f.simple_fields_for :account do |account_fields|
|
||||
= 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
|
||||
%p.lead= t('about.federation_hint_html', instance: content_tag(:strong, site_hostname))
|
||||
|
||||
= 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
|
||||
= 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.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
|
||||
.fields-group
|
||||
= f.simple_fields_for :account do |account_fields|
|
||||
= 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
|
||||
= f.button :button, t('auth.register'), type: :submit, class: 'button button-primary'
|
||||
|
||||
%p.hint.subtle-hint=t('auth.agreement_html', rules_path: about_more_path, terms_path: terms_path)
|
||||
= 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
|
||||
|
|
|
@ -3,143 +3,76 @@
|
|||
|
||||
- content_for :header_tags do
|
||||
%link{ rel: 'canonical', href: about_url }/
|
||||
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
|
||||
= render partial: 'shared/og'
|
||||
|
||||
.landing-page.alternative
|
||||
.container
|
||||
.grid
|
||||
.column-0
|
||||
.brand
|
||||
= link_to root_url do
|
||||
.landing
|
||||
.landing__brand
|
||||
= link_to root_url, class: 'brand' do
|
||||
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
|
||||
%span.brand__tagline=t 'about.tagline'
|
||||
|
||||
- if Setting.timeline_preview
|
||||
.column-1
|
||||
.landing-page__forms
|
||||
.brand
|
||||
= link_to root_url do
|
||||
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
|
||||
.landing__grid
|
||||
.landing__grid__column.landing__grid__column-registration
|
||||
.box-widget
|
||||
= render 'registration'
|
||||
|
||||
= 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
|
||||
.column-1.non-preview
|
||||
.landing-page__forms
|
||||
.brand
|
||||
= link_to root_url do
|
||||
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
|
||||
.avatar-stack
|
||||
- @instance_presenter.sample_accounts.each do |account|
|
||||
= 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'
|
||||
|
||||
= 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
|
||||
.column-2
|
||||
.landing-page__hero
|
||||
.directory__tag
|
||||
= link_to 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener' do
|
||||
%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
|
||||
|
||||
.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{ 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
|
||||
- if @instance_presenter.site_short_description.present?
|
||||
.hero-widget__text
|
||||
%p
|
||||
= link_to t('about.source_code'), @instance_presenter.source_url
|
||||
= " (#{@instance_presenter.version_number})"
|
||||
= @instance_presenter.site_short_description.html_safe.presence
|
||||
= link_to about_more_path do
|
||||
= t('about.learn_more')
|
||||
= fa_icon 'angle-double-right'
|
||||
|
||||
- else
|
||||
.column-4.non-preview.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'))
|
||||
.hero-widget__footer
|
||||
.hero-widget__footer__column
|
||||
%h4= t 'about.administered_by'
|
||||
|
||||
= render 'features'
|
||||
= account_link_to @instance_presenter.contact_account
|
||||
|
||||
.landing-page__features__action
|
||||
= link_to t('about.learn_more'), 'https://joinmastodon.org/', class: 'button button-alternative'
|
||||
.hero-widget__footer__column
|
||||
%h4= t 'about.server_stats'
|
||||
|
||||
.landing-page__footer
|
||||
%p
|
||||
= link_to t('about.source_code'), @instance_presenter.source_url
|
||||
= " (#{@instance_presenter.version_number})"
|
||||
|
||||
#modal-container
|
||||
%div{ style: 'display: flex' }
|
||||
.hero-widget__counter{ style: 'width: 50%' }
|
||||
%strong= number_to_human @instance_presenter.user_count, strip_insignificant_zeros: true
|
||||
%span= t 'about.user_count_after', count: @instance_presenter.user_count
|
||||
.hero-widget__counter{ style: 'width: 50%' }
|
||||
%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') } *
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
- content_for :content do
|
||||
.public-layout
|
||||
- unless @hide_navbar
|
||||
.container
|
||||
%nav.header
|
||||
.nav-left
|
||||
|
|
|
@ -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
|
|
@ -1,5 +1,4 @@
|
|||
- content_for :header_tags do
|
||||
- if @account.user&.setting_noindex
|
||||
%meta{ name: 'robots', content: 'noindex' }/
|
||||
|
||||
.form-container
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
- content_for :header_tags do
|
||||
%meta{ name: 'robots', content: 'noindex' }/
|
||||
|
||||
.form-container
|
||||
.follow-prompt
|
||||
%h2= t("remote_interaction.#{@interaction_type}.prompt")
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
= "##{@tag.name}"
|
||||
|
||||
- content_for :header_tags do
|
||||
%meta{ name: 'robots', content: 'noindex' }/
|
||||
%link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/
|
||||
|
||||
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
|
||||
|
|
|
@ -28,13 +28,16 @@ class ActivityPub::DistributePollUpdateWorker
|
|||
|
||||
def inboxes
|
||||
return @inboxes if defined?(@inboxes)
|
||||
target_accounts = @status.mentions.map(&:account).reject(&:local?)
|
||||
target_accounts += @status.reblogs.map(&:account).reject(&:local?)
|
||||
target_accounts += @status.poll.votes.map(&:account).reject(&:local?)
|
||||
target_accounts.uniq!(&:id)
|
||||
@inboxes = target_accounts.select(&:activitypub?).pluck(&:inbox_url)
|
||||
@inboxes += @account.followers.inboxes unless @status.direct_visibility?
|
||||
|
||||
@inboxes = [@status.mentions, @status.reblogs, @status.poll.votes].flat_map do |relation|
|
||||
relation.includes(:account).map do |record|
|
||||
record.account.preferred_inbox_url if !record.account.local? && record.account.activitypub?
|
||||
end
|
||||
end
|
||||
|
||||
@inboxes.concat(@account.followers.inboxes) unless @status.direct_visibility?
|
||||
@inboxes.uniq!
|
||||
@inboxes.compact!
|
||||
@inboxes
|
||||
end
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ ar:
|
|||
administered_by: 'يُديره :'
|
||||
api: واجهة برمجة التطبيقات
|
||||
apps: تطبيقات الأجهزة المحمولة
|
||||
closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا. غير أنه بامكانك العثور على خادم آخر لإنشاء حسابك و مِن ثم النفاذ إلى نفس الشبكة مِن هناك.
|
||||
contact: للتواصل معنا
|
||||
contact_missing: لم يتم تعيينه
|
||||
contact_unavailable: غير متوفر
|
||||
|
@ -15,19 +14,9 @@ ar:
|
|||
extended_description_html: |
|
||||
<h3>مكان جيد للقواعد</h3>
|
||||
<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} هو سيرفر من بين سيرفرات الشبكة"
|
||||
hosted_on: ماستدون مُستضاف على %{domain}
|
||||
learn_more: تعلم المزيد
|
||||
other_instances: خوادم أخرى
|
||||
privacy_policy: سياسة الخصوصية
|
||||
source_code: الشفرة المصدرية
|
||||
status_count_after:
|
||||
|
@ -524,13 +513,11 @@ ar:
|
|||
logout: خروج
|
||||
migrate_account: الإنتقال إلى حساب آخر
|
||||
migrate_account_html: إن كنت ترغب في تحويل هذا الحساب نحو حساب آخَر، يُمكِنُك <a href="%{path}">إعداده هنا</a>.
|
||||
or: أو
|
||||
or_log_in_with: أو قم بتسجيل الدخول بواسطة
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: إنشاء حساب
|
||||
register_elsewhere: التسجيل على خادوم آخَر
|
||||
resend_confirmation: إعادة إرسال تعليمات التأكيد
|
||||
reset_password: إعادة تعيين كلمة المرور
|
||||
security: الأمان
|
||||
|
|
|
@ -12,12 +12,6 @@ ast:
|
|||
extended_description_html: |
|
||||
<h3>Un llugar bonu pa les regles</h3>
|
||||
<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}
|
||||
learn_more: Deprendi más
|
||||
source_code: Códigu fonte
|
||||
|
@ -141,7 +135,6 @@ ast:
|
|||
cas: CAS
|
||||
saml: SAML
|
||||
register: Rexistrase
|
||||
register_elsewhere: Rexistrase n'otru sirvidor
|
||||
security: Seguranza
|
||||
authorize_follow:
|
||||
already_following: Yá tas siguiendo a esta cuenta
|
||||
|
|
|
@ -3,9 +3,7 @@ bg:
|
|||
about:
|
||||
about_mastodon_html: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>.
|
||||
about_this: За тази инстанция
|
||||
closed_registrations: В момента регистрациите за тази инстанция са затворени.
|
||||
contact: За контакти
|
||||
other_instances: Други инстанции
|
||||
source_code: Програмен код
|
||||
status_count_after: публикации
|
||||
status_count_before: Написали
|
||||
|
|
|
@ -7,7 +7,6 @@ bn:
|
|||
administered_by: 'পরিচালনা করছেন:'
|
||||
api: সফটওয়্যার তৈরীর নিয়ম (API)
|
||||
apps: মোবাইল অ্যাপ
|
||||
closed_registrations: এই সার্ভারে এখন নিবন্ধন বন্ধ। কিন্তু ! অন্য একটি সার্ভার খুঁজে নিবন্ধন করলেও একই নেটওয়ার্কে ঢুকতে পারবেন।
|
||||
contact: যোগাযোগ
|
||||
contact_missing: নেই
|
||||
contact_unavailable: প্রযোজ্য নয়
|
||||
|
@ -15,8 +14,3 @@ bn:
|
|||
extended_description_html: |
|
||||
<h3>নিয়মের জন্য উপযুক্ত জায়গা</h3>
|
||||
<p>বিস্তারিত বিবরণ এখনো যুক্ত করা হয়নি</p>
|
||||
features:
|
||||
humane_approach_body: অনন্যা নেটওয়ার্কের ব্যর্থতা থেকে শিখে, মাস্টাডনের লক্ষ্য নৈতিক পরিকল্পনার দ্বারা সামাজিক মাধ্যমের অপব্যবহারের বিরোধিতা করা।
|
||||
humane_approach_title: একটি মনুষ্যত্বপূর্ণ চেষ্টা
|
||||
not_a_product_body: মাস্টাডন কোনো ব্যবসায়িক নেটওয়ার্ক না। কোনো বিজ্ঞাপন নেই, কোনো তথ্য খনি নেই, কোনো বাধার দেয়াল নেই। এর কোনো কেন্দ্রীয় কর্তৃপক্ষ নেই।
|
||||
not_a_product_title: আপনি একজন মানুষ, পণ্য নন
|
||||
|
|
|
@ -7,7 +7,6 @@ ca:
|
|||
administered_by: 'Administrat per:'
|
||||
api: API
|
||||
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_missing: No configurat
|
||||
contact_unavailable: N/D
|
||||
|
@ -15,19 +14,9 @@ ca:
|
|||
extended_description_html: |
|
||||
<h3>Un bon lloc per les regles</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon allotjat a %{domain}
|
||||
learn_more: Més informació
|
||||
other_instances: Altres instàncies
|
||||
privacy_policy: Política de privacitat
|
||||
source_code: Codi font
|
||||
status_count_after:
|
||||
|
@ -507,13 +496,11 @@ ca:
|
|||
logout: Tanca sessió
|
||||
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>.
|
||||
or: o
|
||||
or_log_in_with: O inicia sessió amb
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registre
|
||||
register_elsewhere: Registra't en un altre servidor
|
||||
resend_confirmation: Torna a enviar el correu de confirmació
|
||||
reset_password: Restableix la contrasenya
|
||||
security: Seguretat
|
||||
|
|
|
@ -7,7 +7,6 @@ co:
|
|||
administered_by: 'Amministratu da:'
|
||||
api: API
|
||||
apps: Applicazione per u telefuninu
|
||||
closed_registrations: Pè avà, l’arregistramenti sò chjosi nant’à stu servore. Mà pudete truvà un’altru per fà un contu è avè accessu à listessa reta da quallà.
|
||||
contact: Cuntattu
|
||||
contact_missing: Mancante
|
||||
contact_unavailable: Micca dispunibule
|
||||
|
@ -15,19 +14,9 @@ co:
|
|||
extended_description_html: |
|
||||
<h3>Una bona piazza per e regule</h3>
|
||||
<p>A descrizzione stesa ùn hè micca stata riempiuta.</p>
|
||||
features:
|
||||
humane_approach_body: Mastodon hà amparatu da i sbagli di l’altre rete suciale, è prova à fà scelte di cuncezzione più etiche per luttà contr’à l’abusu 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 d’API accessibile à i prugrammatori, vi permettenu d’avè accessu à i vostri amichi senza prublemi.
|
||||
within_reach_title: Sempre accessibile
|
||||
generic_description: "%{domain} hè un servore di a rete"
|
||||
hosted_on: Mastodon allughjatu nant’à %{domain}
|
||||
learn_more: Amparà di più
|
||||
other_instances: Lista di i servori
|
||||
privacy_policy: Pulitica di vita privata
|
||||
source_code: Codice di fonte
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ co:
|
|||
logout: Scunnettassi
|
||||
migrate_account: Cambià di contu
|
||||
migrate_account_html: S’è voi vulete riindirizà stu contu versu un’altru, <a href="%{path}">ghjè pussibule quì</a>.
|
||||
or: o
|
||||
or_log_in_with: O cunnettatevi cù
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Arregistrassi
|
||||
register_elsewhere: Arregistrassi altrò
|
||||
resend_confirmation: Rimandà l’istruzzioni di cunfirmazione
|
||||
reset_password: Cambià a chjave d’accessu
|
||||
security: Sicurità
|
||||
|
|
|
@ -7,7 +7,6 @@ cs:
|
|||
administered_by: 'Server spravuje:'
|
||||
api: API
|
||||
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_missing: Nenastaveno
|
||||
contact_unavailable: Neuvedeno
|
||||
|
@ -15,19 +14,9 @@ cs:
|
|||
extended_description_html: |
|
||||
<h3>Dobré místo pro pravidla</h3>
|
||||
<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"
|
||||
hosted_on: Server Mastodon na adrese %{domain}
|
||||
learn_more: Zjistit více
|
||||
other_instances: Seznam serverů
|
||||
privacy_policy: Zásady soukromí
|
||||
source_code: Zdrojový kód
|
||||
status_count_after:
|
||||
|
@ -514,13 +503,11 @@ cs:
|
|||
logout: Odhlásit
|
||||
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>.
|
||||
or: nebo
|
||||
or_log_in_with: Nebo se přihlaste pomocí
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registrovat
|
||||
register_elsewhere: Registrovat na jiném serveru
|
||||
resend_confirmation: Znovu odeslat pokyny pro potvrzení
|
||||
reset_password: Obnovit heslo
|
||||
security: Zabezpečení
|
||||
|
|
|
@ -7,7 +7,6 @@ cy:
|
|||
administered_by: 'Gweinyddir gan:'
|
||||
api: API
|
||||
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_missing: Heb ei osod
|
||||
contact_unavailable: Ddim yn berthnasol
|
||||
|
@ -15,19 +14,9 @@ cy:
|
|||
extended_description_html: |
|
||||
<h3>Lle da ar gyfer rheolau</h3>
|
||||
<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
|
||||
hosted_on: Mastodon wedi ei weinyddu ar %{domain}
|
||||
learn_more: Dysu mwy
|
||||
other_instances: Rhestr achosion
|
||||
privacy_policy: Polisi preifatrwydd
|
||||
source_code: Cod ffynhonnell
|
||||
status_count_after:
|
||||
|
@ -529,13 +518,11 @@ cy:
|
|||
logout: Allgofnodi
|
||||
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>.
|
||||
or: neu
|
||||
or_log_in_with: Neu logiwch mewn a
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Cofrestru
|
||||
register_elsewhere: Cofrestru ar weinydd gwahanol
|
||||
resend_confirmation: Ailanfon cyfarwyddiadau cadarnhau
|
||||
reset_password: Ailosod cyfrinair
|
||||
security: Diogelwch
|
||||
|
|
|
@ -7,7 +7,6 @@ da:
|
|||
administered_by: 'Administreret af:'
|
||||
api: API
|
||||
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_missing: Ikke sat
|
||||
contact_unavailable: Ikke tilgængeligt
|
||||
|
@ -15,19 +14,9 @@ da:
|
|||
extended_description_html: |
|
||||
<h3>Et godt sted for regler</h3>
|
||||
<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"
|
||||
hosted_on: Mostodon hostet på %{domain}
|
||||
learn_more: Lær mere
|
||||
other_instances: Liste over instanser
|
||||
privacy_policy: Privatlivspolitik
|
||||
source_code: Kildekode
|
||||
status_count_after:
|
||||
|
@ -457,13 +446,11 @@ da:
|
|||
logout: Log ud
|
||||
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>.
|
||||
or: eller
|
||||
or_log_in_with: Eller log in med
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Opret dig
|
||||
register_elsewhere: Opret dig på en anden server
|
||||
resend_confirmation: Gensend bekræftelses instrukser
|
||||
reset_password: Nulstil kodeord
|
||||
security: Sikkerhed
|
||||
|
|
|
@ -7,7 +7,6 @@ de:
|
|||
administered_by: 'Administriert von:'
|
||||
api: API
|
||||
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_missing: Nicht angegeben
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ de:
|
|||
extended_description_html: |
|
||||
<h3>Ein guter Platz für Regeln</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon, beherbergt auf %{domain}
|
||||
learn_more: Mehr erfahren
|
||||
other_instances: Andere Server
|
||||
privacy_policy: Datenschutzerklärung
|
||||
source_code: Quellcode
|
||||
status_count_after:
|
||||
|
@ -507,13 +496,11 @@ de:
|
|||
logout: Abmelden
|
||||
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>.
|
||||
or: oder
|
||||
or_log_in_with: Oder anmelden mit
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registrieren
|
||||
register_elsewhere: Registrieren auf einem anderen Server
|
||||
resend_confirmation: Bestätigungs-Mail erneut versenden
|
||||
reset_password: Passwort zurücksetzen
|
||||
security: Sicherheit
|
||||
|
|
|
@ -7,7 +7,6 @@ el:
|
|||
administered_by: 'Διαχειριστής:'
|
||||
api: API
|
||||
apps: Εφαρμογές κινητών
|
||||
closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
|
||||
contact: Επικοινωνία
|
||||
contact_missing: Δεν έχει οριστεί
|
||||
contact_unavailable: Μ/Δ
|
||||
|
@ -15,19 +14,9 @@ el:
|
|||
extended_description_html: |
|
||||
<h3>Ένα καλό σημείο για κανόνες</h3>
|
||||
<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} είναι ένας εξυπηρετητής στο δίκτυο"
|
||||
hosted_on: Το Mastodon φιλοξενείται στο %{domain}
|
||||
learn_more: Μάθε περισσότερα
|
||||
other_instances: Λίστα κόμβων
|
||||
privacy_policy: Πολιτική απορρήτου
|
||||
source_code: Πηγαίος κώδικας
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ el:
|
|||
logout: Αποσύνδεση
|
||||
migrate_account: Μετακόμισε σε διαφορετικό λογαριασμό
|
||||
migrate_account_html: Αν θέλεις να ανακατευθύνεις αυτό τον λογαριασμό σε έναν διαφορετικό, μπορείς να το <a href="%{path}">διαμορφώσεις εδώ</a>.
|
||||
or: ή
|
||||
or_log_in_with: Ή συνδέσου με
|
||||
providers:
|
||||
cas: Υπηρεσία Κεντρικής Πιστοποίησης (CAS)
|
||||
saml: SAML
|
||||
register: Εγγραφή
|
||||
register_elsewhere: Εγγραφή σε διαφορετικό εξυπηρετητή
|
||||
resend_confirmation: Στείλε ξανά τις οδηγίες επιβεβαίωσης
|
||||
reset_password: Επαναφορά συνθηματικού
|
||||
security: Ασφάλεια
|
||||
|
|
|
@ -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_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
|
||||
active_count_after: active
|
||||
active_footnote: Monthly Active Users (MAU)
|
||||
administered_by: 'Administered by:'
|
||||
api: API
|
||||
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_missing: Not set
|
||||
contact_unavailable: N/A
|
||||
discover_users: Discover users
|
||||
documentation: Documentation
|
||||
extended_description_html: |
|
||||
<h3>A good place for rules</h3>
|
||||
<p>The extended description has not been set up yet.</p>
|
||||
features:
|
||||
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: You’re 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
|
||||
federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
|
||||
generic_description: "%{domain} is one server in the network"
|
||||
get_apps: Try a mobile app
|
||||
hosted_on: Mastodon hosted on %{domain}
|
||||
learn_more: Learn more
|
||||
other_instances: Server list
|
||||
privacy_policy: Privacy policy
|
||||
see_whats_happening: See what's happening
|
||||
server_stats: 'Server stats:'
|
||||
source_code: Source code
|
||||
status_count_after:
|
||||
one: status
|
||||
other: statuses
|
||||
status_count_before: Who authored
|
||||
tagline: Follow friends and discover new ones
|
||||
terms: Terms of service
|
||||
user_count_after:
|
||||
one: user
|
||||
|
@ -501,6 +501,7 @@ en:
|
|||
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>.
|
||||
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
|
||||
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.
|
||||
|
@ -511,17 +512,17 @@ en:
|
|||
logout: Logout
|
||||
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>.
|
||||
or: or
|
||||
or_log_in_with: Or log in with
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Sign up
|
||||
register_elsewhere: Sign up on another server
|
||||
registration_closed: "%{instance} is not accepting new members"
|
||||
resend_confirmation: Resend confirmation instructions
|
||||
reset_password: Reset password
|
||||
security: Security
|
||||
set_new_password: Set new password
|
||||
trouble_logging_in: Trouble logging in?
|
||||
authorize_follow:
|
||||
already_following: You are already following this account
|
||||
error: Unfortunately, there was an error looking up the remote account
|
||||
|
|
|
@ -7,7 +7,6 @@ eo:
|
|||
administered_by: 'Administrata de:'
|
||||
api: API
|
||||
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_missing: Ne elektita
|
||||
contact_unavailable: Ne disponebla
|
||||
|
@ -15,19 +14,9 @@ eo:
|
|||
extended_description_html: |
|
||||
<h3>Bona loko por reguloj</h3>
|
||||
<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"
|
||||
hosted_on: "%{domain} estas nodo de Mastodon"
|
||||
learn_more: Lerni pli
|
||||
other_instances: Listo de serviloj
|
||||
privacy_policy: Privateca politiko
|
||||
source_code: Fontkodo
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ eo:
|
|||
logout: Elsaluti
|
||||
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>.
|
||||
or: aŭ
|
||||
or_log_in_with: Aŭ ensaluti per
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registriĝi
|
||||
register_elsewhere: Registriĝi en alia servilo
|
||||
resend_confirmation: Resendi la instrukciojn por konfirmi
|
||||
reset_password: Ŝanĝi pasvorton
|
||||
security: Sekureco
|
||||
|
|
|
@ -7,7 +7,6 @@ es:
|
|||
administered_by: 'Administrado por:'
|
||||
api: API
|
||||
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_missing: No especificado
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ es:
|
|||
extended_description_html: |
|
||||
<h3>Un buen lugar para las reglas</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon hosteado en %{domain}
|
||||
learn_more: Aprende más
|
||||
other_instances: Otras instancias
|
||||
privacy_policy: Política de privacidad
|
||||
source_code: Código fuente
|
||||
status_count_after:
|
||||
|
@ -460,13 +449,11 @@ es:
|
|||
logout: Cerrar sesión
|
||||
migrate_account: Mudarse a otra cuenta
|
||||
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
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registrarse
|
||||
register_elsewhere: Registrarse en otro servidor
|
||||
resend_confirmation: Volver a enviar el correo de confirmación
|
||||
reset_password: Restablecer contraseña
|
||||
security: Cambiar contraseña
|
||||
|
|
|
@ -7,7 +7,6 @@ eu:
|
|||
administered_by: 'Administratzailea(k):'
|
||||
api: APIa
|
||||
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_missing: Ezarri gabe
|
||||
contact_unavailable: E/E
|
||||
|
@ -15,19 +14,9 @@ eu:
|
|||
extended_description_html: |
|
||||
<h3>Arauentzako toki egoki bat</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon %{domain} domeinuan ostatatua
|
||||
learn_more: Ikasi gehiago
|
||||
other_instances: Zerbitzarien zerrenda
|
||||
privacy_policy: Pribatutasun politika
|
||||
source_code: Iturburu kodea
|
||||
status_count_after:
|
||||
|
@ -507,13 +496,11 @@ eu:
|
|||
logout: Amaitu saioa
|
||||
migrate_account: Lekualdatu beste kontu batera
|
||||
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
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Eman izena
|
||||
register_elsewhere: Eman izena beste zerbitzari batean
|
||||
resend_confirmation: Birbidali berresteko argibideak
|
||||
reset_password: Berrezarri pasahitza
|
||||
security: Segurtasuna
|
||||
|
|
|
@ -7,7 +7,6 @@ fa:
|
|||
administered_by: 'با مدیریت:'
|
||||
api: رابط برنامهنویسی کاربردی
|
||||
apps: اپهای موبایل
|
||||
closed_registrations: ثبتنام روی این سرور هماینک فعال نیست. اما شما میتوانید سرور دیگری بیابید و با حسابی که آنجا میسازید دقیقاً به همین شبکه دسترسی داشته باشید.
|
||||
contact: تماس
|
||||
contact_missing: تعیین نشده
|
||||
contact_unavailable: موجود نیست
|
||||
|
@ -15,19 +14,9 @@ fa:
|
|||
extended_description_html: |
|
||||
<h3>جای خوبی برای قانونها</h3>
|
||||
<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} یک سرور روی شبکه است"
|
||||
hosted_on: ماستدون، میزبانیشده روی %{domain}
|
||||
learn_more: بیشتر بدانید
|
||||
other_instances: فهرست سرورها
|
||||
privacy_policy: سیاست رازداری
|
||||
source_code: کدهای منبع
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ fa:
|
|||
logout: خروج
|
||||
migrate_account: نقل مکان به یک حساب دیگر
|
||||
migrate_account_html: اگر میخواهید این حساب را به حساب دیگری منتقل کنید، <a href="%{path}">اینجا را کلیک کنید</a>.
|
||||
or: یا
|
||||
or_log_in_with: یا ورود به وسیلهٔ
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: عضو شوید
|
||||
register_elsewhere: ثبت نام روی یک سرور دیگر
|
||||
resend_confirmation: راهنمایی برای تأیید را دوباره بفرست
|
||||
reset_password: بازنشانی رمز
|
||||
security: امنیت
|
||||
|
|
|
@ -7,7 +7,6 @@ fi:
|
|||
administered_by: 'Ylläpitäjä:'
|
||||
api: API
|
||||
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_missing: Ei asetettu
|
||||
contact_unavailable: Ei saatavilla
|
||||
|
@ -15,19 +14,9 @@ fi:
|
|||
extended_description_html: |
|
||||
<h3>Hyvä paikka säännöille</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon palvelimella %{domain}
|
||||
learn_more: Lisätietoja
|
||||
other_instances: Muut palvelimet
|
||||
privacy_policy: Tietosuojaseloste
|
||||
source_code: Lähdekoodi
|
||||
status_count_after:
|
||||
|
@ -396,13 +385,11 @@ fi:
|
|||
logout: Kirjaudu ulos
|
||||
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>.
|
||||
or: tai
|
||||
or_log_in_with: Tai käytä kirjautumiseen
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Rekisteröidy
|
||||
register_elsewhere: Rekisteröidy toiselle palvelimelle
|
||||
resend_confirmation: Lähetä vahvistusohjeet uudestaan
|
||||
reset_password: Palauta salasana
|
||||
security: Tunnukset
|
||||
|
|
|
@ -7,7 +7,6 @@ fr:
|
|||
administered_by: 'Administrée par :'
|
||||
api: API
|
||||
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_missing: Manquant
|
||||
contact_unavailable: Non disponible
|
||||
|
@ -15,19 +14,9 @@ fr:
|
|||
extended_description_html: |
|
||||
<h3>Un bon endroit pour les règles</h3>
|
||||
<p>La description étendue n’a pas été remplie.</p>
|
||||
features:
|
||||
humane_approach_body: Ayant appris des échecs d’autres réseaux, Mastodon à l’ambition de combattre l’abus des médias sociaux en effectuant des choix de conception éthiques.
|
||||
humane_approach_title: Une approche plus humaine
|
||||
not_a_product_body: Mastodon n’est pas un réseau commercial. Ici, pas de publicités, pas de prospection de données et pas d’environnements fermés. Il n’y 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 à l’existence d’un environnement API accueillant pour les développeur·se·s, de multiples applications pour iOS, Android et d’autres 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"
|
||||
hosted_on: Instance Mastodon hébergée par %{domain}
|
||||
learn_more: En savoir plus
|
||||
other_instances: Liste des instances
|
||||
privacy_policy: Politique de vie privée
|
||||
source_code: Code source
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ fr:
|
|||
logout: Se déconnecter
|
||||
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>.
|
||||
or: ou
|
||||
or_log_in_with: Ou authentifiez-vous avec
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: S’inscrire
|
||||
register_elsewhere: S’inscrire sur un autre serveur
|
||||
resend_confirmation: Envoyer à nouveau les consignes de confirmation
|
||||
reset_password: Réinitialiser le mot de passe
|
||||
security: Sécurité
|
||||
|
|
|
@ -7,7 +7,6 @@ gl:
|
|||
administered_by: 'Administrada por:'
|
||||
api: API
|
||||
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_missing: Non establecido
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ gl:
|
|||
extended_description_html: |
|
||||
<h3>Un bo lugar para regras</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon aloxado en %{domain}
|
||||
learn_more: Coñeza máis
|
||||
other_instances: Lista de servidores
|
||||
privacy_policy: Política de intimidade
|
||||
source_code: Código fonte
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ gl:
|
|||
logout: Desconectar
|
||||
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>.
|
||||
or: ou
|
||||
or_log_in_with: ou conectar con
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Rexistro
|
||||
register_elsewhere: Rexístrese en outro servidor
|
||||
resend_confirmation: Voltar a enviar intruccións de confirmación
|
||||
reset_password: Restablecer contrasinal
|
||||
security: Seguridade
|
||||
|
|
|
@ -6,7 +6,6 @@ he:
|
|||
about_this: אודות שרת זה
|
||||
api: API
|
||||
apps: יישומונים לנייד
|
||||
closed_registrations: הרשמות סגורות לשרת זה לעת עתה.
|
||||
contact: יצירת קשר
|
||||
contact_missing: ללא הגדרה
|
||||
contact_unavailable: לא רלוונטי/חסר
|
||||
|
@ -14,19 +13,9 @@ he:
|
|||
extended_description_html: |
|
||||
<h3>מקום טוב לכללים</h3>
|
||||
<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} הוא שרת אחד בתוך הרשת"
|
||||
hosted_on: מסטודון שיושב בכתובת %{domain}
|
||||
learn_more: מידע נוסף
|
||||
other_instances: שרתים אחרים
|
||||
source_code: קוד מקור
|
||||
status_count_after: הודעות
|
||||
status_count_before: שכתבו
|
||||
|
|
|
@ -3,9 +3,7 @@ hr:
|
|||
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 — 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
|
||||
closed_registrations: Registracije na ovoj instanci su trenutno zatvorene.
|
||||
contact: Kontakt
|
||||
other_instances: Druge instance
|
||||
source_code: Izvorni kod
|
||||
status_count_after: statusi
|
||||
status_count_before: Tko je autor
|
||||
|
|
|
@ -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_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
|
||||
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_missing: Nincs megadva
|
||||
contact_unavailable: N/A
|
||||
extended_description_html: |
|
||||
<h3>Ez itt a szabályzat helye</h3>
|
||||
<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"
|
||||
hosted_on: "%{domain} Mastodon instancia"
|
||||
learn_more: Tudj meg többet
|
||||
other_instances: Instanciák listája
|
||||
source_code: Forráskód
|
||||
status_count_after: tülköt küldött
|
||||
status_count_before: eddig
|
||||
|
|
|
@ -7,7 +7,6 @@ id:
|
|||
administered_by: 'Dikelola oleh:'
|
||||
api: API
|
||||
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_missing: Belum diset
|
||||
contact_unavailable: Tidak Tersedia
|
||||
|
@ -15,19 +14,9 @@ id:
|
|||
extended_description_html: |
|
||||
<h3>Tempat yang baik untuk peraturan</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon dihosting di %{domain}
|
||||
learn_more: Pelajari selengkapnya
|
||||
other_instances: Daftar Server
|
||||
privacy_policy: Kebijakan Privasi
|
||||
source_code: Kode sumber
|
||||
status_count_after:
|
||||
|
|
|
@ -3,9 +3,7 @@ io:
|
|||
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_this: Pri ta instaluro
|
||||
closed_registrations: Membresko ne nun esas posible en ta instaluro.
|
||||
contact: Kontaktar
|
||||
other_instances: Altra instaluri
|
||||
source_code: Fontkodexo
|
||||
status_count_after: mesaji
|
||||
status_count_before: Qua publikigis
|
||||
|
|
|
@ -7,7 +7,6 @@ it:
|
|||
administered_by: 'Amministrato da:'
|
||||
api: API
|
||||
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_missing: Non impostato
|
||||
contact_unavailable: N/D
|
||||
|
@ -15,19 +14,9 @@ it:
|
|||
extended_description_html: |
|
||||
<h3>Un buon posto per le regole</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon ospitato su %{domain}
|
||||
learn_more: Scopri altro
|
||||
other_instances: Elenco server
|
||||
privacy_policy: Politica della privacy
|
||||
source_code: Codice sorgente
|
||||
status_count_after:
|
||||
|
@ -484,10 +473,8 @@ it:
|
|||
logout: Esci da Mastodon
|
||||
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>.
|
||||
or: o
|
||||
or_log_in_with: Oppure accedi con
|
||||
register: Iscriviti
|
||||
register_elsewhere: Iscriviti su un altro server
|
||||
resend_confirmation: Invia di nuovo le istruzioni di conferma
|
||||
reset_password: Resetta la password
|
||||
security: Credenziali
|
||||
|
|
|
@ -7,7 +7,6 @@ ja:
|
|||
administered_by: '管理者:'
|
||||
api: API
|
||||
apps: アプリ
|
||||
closed_registrations: 現在このサーバーでの新規登録は受け付けていません。しかし、他のサーバーにアカウントを作成しても全く同じネットワークに参加することができます。
|
||||
contact: 連絡先
|
||||
contact_missing: 未設定
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ ja:
|
|||
extended_description_html: |
|
||||
<h3>ルールを書くのに適した場所</h3>
|
||||
<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 サーバーの一つです"
|
||||
hosted_on: Mastodon hosted on %{domain}
|
||||
learn_more: もっと詳しく
|
||||
other_instances: 他のサーバー
|
||||
privacy_policy: プライバシーポリシー
|
||||
source_code: ソースコード
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ ja:
|
|||
logout: ログアウト
|
||||
migrate_account: 別のアカウントに引っ越す
|
||||
migrate_account_html: 引っ越し先を明記したい場合は<a href="%{path}">こちら</a>で設定できます。
|
||||
or: または
|
||||
or_log_in_with: または次のサービスでログイン
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: 登録する
|
||||
register_elsewhere: 他のサーバーで新規登録
|
||||
resend_confirmation: 確認メールを再送する
|
||||
reset_password: パスワードを再発行
|
||||
security: セキュリティ
|
||||
|
|
|
@ -7,7 +7,6 @@ ka:
|
|||
administered_by: 'ადმინისტრატორი:'
|
||||
api: აპი
|
||||
apps: მობილური აპლიკაციები
|
||||
closed_registrations: რეგისტრაციები ამჟამად ინსტანციაზე დახურულია. თუმცა! ანგარიშის შესაქმნელად შეგიძლიათ იპოვოთ სხვა ინსტანცია და იმავე ქსელზე იქონიოთ წვდომა იქიდან.
|
||||
contact: კონტაქტი
|
||||
contact_missing: არაა დაყენებული
|
||||
contact_unavailable: მიუწ.
|
||||
|
@ -15,19 +14,9 @@ ka:
|
|||
extended_description_html: |
|
||||
<h3>კარგი ადგილი წესებისთვის</h3>
|
||||
<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} ერთი სერვერია ქსელში"
|
||||
hosted_on: მასტოდონს მასპინძლობს %{domain}
|
||||
learn_more: გაიგე მეტი
|
||||
other_instances: ინსტანციების სია
|
||||
privacy_policy: კონფიდენციალურობის პოლიტიკა
|
||||
source_code: კოდი
|
||||
status_count_after: სტატუსები
|
||||
|
@ -427,13 +416,11 @@ ka:
|
|||
logout: გასვლა
|
||||
migrate_account: სხვა ანგარიშზე გადასვლა
|
||||
migrate_account_html: თუ გსურთ ამ ანგარიშის რედირექტის ხვაზე, შეგიძლიათ <a href="%{path}">გაუწიოთ კონფიგურაცია აქ</a>.
|
||||
or: ან
|
||||
or_log_in_with: ან გამოიყენეთ
|
||||
providers:
|
||||
cas: ქეს
|
||||
saml: სამლ
|
||||
register: რეგისტრაცია
|
||||
register_elsewhere: რეგისტრაცია სხვა სერვერზე
|
||||
resend_confirmation: დამოწმების ინსტრუქციების ხელახალი გამოგზავნა
|
||||
reset_password: პაროლის გადატვირთვა
|
||||
security: უსაფრთხოება
|
||||
|
|
|
@ -7,7 +7,6 @@ kk:
|
|||
administered_by: 'Админ:'
|
||||
api: API
|
||||
apps: Мобиль қосымшалар
|
||||
closed_registrations: Бұл серверде тіркелу уақытша тоқтатылған. Дегенмен, сіз басқа сервер арқылы тіркеліп, сол аккаунтыңызбен қолдана берсеңіз болады.
|
||||
contact: Байланыс
|
||||
contact_missing: Бапталмаған
|
||||
contact_unavailable: Белгісіз
|
||||
|
@ -15,19 +14,9 @@ kk:
|
|||
extended_description_html: |
|
||||
<h3>Ережелерге арналған жақсы орын</h3>
|
||||
<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} желідегі серверлердің бірі"
|
||||
hosted_on: Mastodon орнатылған %{domain} доменінде
|
||||
learn_more: Көбірек білу
|
||||
other_instances: Серверлер тізімі
|
||||
privacy_policy: Құпиялылық саясаты
|
||||
source_code: Ашық коды
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ kk:
|
|||
logout: Шығу
|
||||
migrate_account: Басқа аккаунтқа көшіру
|
||||
migrate_account_html: Егер аккаунтыңызды басқасына байлағыңыз келсе, <a href="%{path}">мына жерге келіңіз</a>.
|
||||
or: немесе
|
||||
or_log_in_with: Немесе былай кіріңіз
|
||||
providers:
|
||||
cas: САS
|
||||
saml: SАML
|
||||
register: Тіркелу
|
||||
register_elsewhere: Басқа серверге тіркелу
|
||||
resend_confirmation: Растау нұсқаулықтарын жіберу
|
||||
reset_password: Құпиясөзді қалпына келтіру
|
||||
security: Қауіпсіздік
|
||||
|
|
|
@ -7,7 +7,6 @@ ko:
|
|||
administered_by: '관리자:'
|
||||
api: API
|
||||
apps: 모바일 앱
|
||||
closed_registrations: 현재 이 서버에서는 신규 등록을 받고 있지 않습니다. 하지만! 다른 서버에 계정을 만들어 똑같은 네트워크에 접속 할 수 있습니다.
|
||||
contact: 연락처
|
||||
contact_missing: 미설정
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ ko:
|
|||
extended_description_html: |
|
||||
<h3>룰을 작성하는 장소</h3>
|
||||
<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} 은 네트워크에 있는 한 서버입니다"
|
||||
hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
|
||||
learn_more: 자세히
|
||||
other_instances: 서버 목록
|
||||
privacy_policy: 개인정보 정책
|
||||
source_code: 소스 코드
|
||||
status_count_after:
|
||||
|
@ -510,13 +499,11 @@ ko:
|
|||
logout: 로그아웃
|
||||
migrate_account: 계정 옮기기
|
||||
migrate_account_html: 이 계정을 다른 계정으로 리디렉션 하길 원하는 경우 <a href="%{path}">여기</a>에서 설정할 수 있습니다.
|
||||
or: 또는
|
||||
or_log_in_with: 다른 방법으로 로그인 하려면
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: 등록하기
|
||||
register_elsewhere: 다른 인스턴스에서 가입
|
||||
resend_confirmation: 확인 메일을 다시 보내기
|
||||
reset_password: 비밀번호 재설정
|
||||
security: 보안
|
||||
|
|
|
@ -7,7 +7,6 @@ lt:
|
|||
administered_by: 'Administruoja:'
|
||||
api: API
|
||||
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_missing: Nenustatyta
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ lt:
|
|||
extended_description_html: |
|
||||
<h3>Taisyklės</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu
|
||||
learn_more: Daugiau
|
||||
other_instances: Serverių sąrašas
|
||||
privacy_policy: Privatumo Politika
|
||||
source_code: Šaltinio kodas
|
||||
status_count_after:
|
||||
|
@ -516,13 +505,11 @@ lt:
|
|||
logout: Atsijungti
|
||||
migrate_account: Prisijungti prie kitos paskyros
|
||||
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
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Užsiregistruoti
|
||||
register_elsewhere: Užsiregistruoti kitame serveryje
|
||||
resend_confirmation: Išsiųsti dar kartą patvirtinimo instrukcijas
|
||||
reset_password: Atstatyti slaptažodį
|
||||
security: Apsauga
|
||||
|
|
|
@ -7,7 +7,6 @@ ms:
|
|||
administered_by: 'Ditadbir oleh:'
|
||||
api: API
|
||||
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_missing: Tidak ditetapkan
|
||||
contact_unavailable: Tidak tersedia
|
||||
|
@ -15,19 +14,9 @@ ms:
|
|||
extended_description_html: |
|
||||
<h3>Tempat sesuai untuk peraturan</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon dihoskan di %{domain}
|
||||
learn_more: Ketahui lebih lanjut
|
||||
other_instances: Senarai tika
|
||||
privacy_policy: Polisi privasi
|
||||
source_code: Kod sumber
|
||||
status_count_after:
|
||||
|
|
|
@ -7,7 +7,6 @@ nl:
|
|||
administered_by: 'Beheerd door:'
|
||||
api: API
|
||||
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_missing: Niet ingesteld
|
||||
contact_unavailable: n.v.t
|
||||
|
@ -15,19 +14,9 @@ nl:
|
|||
extended_description_html: |
|
||||
<h3>Een goede plek voor richtlijnen</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon op %{domain}
|
||||
learn_more: Meer leren
|
||||
other_instances: Andere servers
|
||||
privacy_policy: Privacybeleid
|
||||
source_code: Broncode
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ nl:
|
|||
logout: Uitloggen
|
||||
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>.
|
||||
or: of
|
||||
or_log_in_with: Of inloggen met
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registreren
|
||||
register_elsewhere: Op een andere server registreren
|
||||
resend_confirmation: Verstuur de bevestigingsinstructies nogmaals
|
||||
reset_password: Wachtwoord opnieuw instellen
|
||||
security: Beveiliging
|
||||
|
|
|
@ -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_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å — 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
|
||||
closed_registrations: Registreringer er for øyeblikket lukket på denne instansen.
|
||||
contact: Kontakt
|
||||
contact_missing: Ikke innstilt
|
||||
contact_unavailable: Ikke tilgjengelig
|
||||
extended_description_html: |
|
||||
<h3>En god plassering for regler</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon driftet på %{domain}
|
||||
learn_more: Lær mer
|
||||
other_instances: Andre instanser
|
||||
source_code: Kildekode
|
||||
status_count_after: statuser
|
||||
status_count_before: Som skrev
|
||||
|
|
|
@ -7,7 +7,6 @@ oc:
|
|||
administered_by: 'Gerida per :'
|
||||
api: API
|
||||
apps: Aplicacions per mobil
|
||||
closed_registrations: Las inscripcions son clavadas pel moment sus aquesta instància.
|
||||
contact: Contacte
|
||||
contact_missing: Pas parametrat
|
||||
contact_unavailable: Pas disponible
|
||||
|
@ -15,19 +14,9 @@ oc:
|
|||
extended_description_html: |
|
||||
<h3>Una bona plaça per las règlas</h3>
|
||||
<p>La descripcion longa es pas estada causida pel moment.</p>
|
||||
features:
|
||||
humane_approach_body: Amb l’experiéncia dels fracasses d’autres 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, d’utilizacion de vòstras donadas o d’òrt daurat clavat. I a pas cap d’autoritat 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"
|
||||
hosted_on: Mastodon albergat sus %{domain}
|
||||
learn_more: Ne saber mai
|
||||
other_instances: Lista d’instàncias
|
||||
privacy_policy: Politica de confidencialitat
|
||||
source_code: Còdi font
|
||||
status_count_after:
|
||||
|
@ -508,13 +497,11 @@ oc:
|
|||
logout: Se desconnectar
|
||||
migrate_account: Mudar endacòm mai
|
||||
migrate_account_html: Se volètz mandar los visitors d’aqueste compte a un autre, podètz<a href="%{path}"> o configurar aquí</a>.
|
||||
or: o
|
||||
or_log_in_with: O autentificatz-vos amb
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Se marcar
|
||||
register_elsewhere: Se marcar endacòm mai
|
||||
resend_confirmation: Tornar mandar las instruccions de confirmacion
|
||||
reset_password: Reïnicializar lo senhal
|
||||
security: Seguretat
|
||||
|
|
|
@ -7,7 +7,6 @@ pl:
|
|||
administered_by: 'Administrowana przez:'
|
||||
api: API
|
||||
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_missing: Nie ustawiono
|
||||
contact_unavailable: Nie dotyczy
|
||||
|
@ -15,19 +14,9 @@ pl:
|
|||
extended_description_html: |
|
||||
<h3>Dobre miejsce na zasady użytkowania</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon uruchomiony na %{domain}
|
||||
learn_more: Dowiedz się więcej
|
||||
other_instances: Lista instancji
|
||||
privacy_policy: Polityka prywatności
|
||||
source_code: Kod źródłowy
|
||||
status_count_after:
|
||||
|
@ -519,13 +508,11 @@ pl:
|
|||
logout: Wyloguj się
|
||||
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>.
|
||||
or: lub
|
||||
or_log_in_with: Lub zaloguj się z użyciem
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Rejestracja
|
||||
register_elsewhere: Zarejestruj się na innym serwerze
|
||||
resend_confirmation: Ponownie prześlij instrukcje weryfikacji
|
||||
reset_password: Zresetuj hasło
|
||||
security: Bezpieczeństwo
|
||||
|
|
|
@ -7,7 +7,6 @@ pt-BR:
|
|||
administered_by: 'Administrado por:'
|
||||
api: API
|
||||
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_missing: Não definido
|
||||
contact_unavailable: Não disponível
|
||||
|
@ -15,19 +14,9 @@ pt-BR:
|
|||
extended_description_html: |
|
||||
<h3>Um bom lugar para regras</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon hospedado em %{domain}
|
||||
learn_more: Saiba mais
|
||||
other_instances: Lista de instâncias
|
||||
privacy_policy: Política de Privacidade
|
||||
source_code: Código-fonte
|
||||
status_count_after:
|
||||
|
@ -507,13 +496,11 @@ pt-BR:
|
|||
logout: Sair
|
||||
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>.
|
||||
or: ou
|
||||
or_log_in_with: Ou faça login com
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Cadastrar-se
|
||||
register_elsewhere: Cadastrar-se em um outro servidor
|
||||
resend_confirmation: Reenviar instruções de confirmação
|
||||
reset_password: Redefinir senha
|
||||
security: Segurança
|
||||
|
|
|
@ -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_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
|
||||
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_missing: Não configurado
|
||||
contact_unavailable: n.d.
|
||||
extended_description_html: |
|
||||
<h3>Um bom lugar para regras</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon em %{domain}
|
||||
learn_more: Saber mais
|
||||
other_instances: Outras instâncias
|
||||
source_code: Código fonte
|
||||
status_count_after: publicações
|
||||
status_count_before: Que fizeram
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
---
|
||||
ro:
|
||||
about:
|
||||
features:
|
||||
not_a_product_title: Ești o persoană, nu un produs
|
||||
hosted_on: Mastodon găzduit de %{domain}
|
||||
accounts:
|
||||
posts:
|
||||
|
@ -22,13 +20,11 @@ ro:
|
|||
logout: Deconectare
|
||||
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>.
|
||||
or: sau
|
||||
or_log_in_with: Sau conectează-te cu
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Înregistrare
|
||||
register_elsewhere: Înregistrează-te pe un alt server
|
||||
resend_confirmation: Retrimite instrucțiunile de confirmare
|
||||
reset_password: Resetare parolă
|
||||
security: Securitate
|
||||
|
|
|
@ -7,26 +7,15 @@ ru:
|
|||
administered_by: 'Администратор узла:'
|
||||
api: API
|
||||
apps: Приложения
|
||||
closed_registrations: В данный момент регистрация на этом узле закрыта. Но вы можете найти другой узел, создать на нём учётную запись и получить доступ к той же сети оттуда.
|
||||
contact: Связаться
|
||||
contact_missing: Не установлено
|
||||
contact_unavailable: Недоступен
|
||||
extended_description_html: |
|
||||
<h3>Хорошее место для правил</h3>
|
||||
<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} - один из серверов сети"
|
||||
hosted_on: Mastodon размещен на %{domain}
|
||||
learn_more: Узнать больше
|
||||
other_instances: Другие узлы
|
||||
privacy_policy: Политика конфиденциальности
|
||||
source_code: Исходный код
|
||||
status_count_after:
|
||||
|
@ -450,13 +439,11 @@ ru:
|
|||
logout: Выйти
|
||||
migrate_account: Перенести аккаунт
|
||||
migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
|
||||
or: или
|
||||
or_log_in_with: Или войти с помощью
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Зарегистрироваться
|
||||
register_elsewhere: Зарегистрироваться на другом узле
|
||||
resend_confirmation: Повторить отправку инструкции для подтверждения
|
||||
reset_password: Сбросить пароль
|
||||
security: Безопасность
|
||||
|
|
|
@ -7,7 +7,6 @@ sk:
|
|||
administered_by: 'Správcom je:'
|
||||
api: API
|
||||
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_missing: Nezadaný
|
||||
contact_unavailable: Neuvedený
|
||||
|
@ -15,19 +14,9 @@ sk:
|
|||
extended_description_html: |
|
||||
<h3>Pravidlá</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon hostovaný na %{domain}
|
||||
learn_more: Zisti viac
|
||||
other_instances: Zoznam serverov
|
||||
privacy_policy: Ustanovenia o súkromí
|
||||
source_code: Zdrojový kód
|
||||
status_count_after:
|
||||
|
@ -514,13 +503,11 @@ sk:
|
|||
logout: Odhlás sa
|
||||
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>.
|
||||
or: alebo
|
||||
or_log_in_with: Alebo prihlásiť z
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Zaregistruj sa
|
||||
register_elsewhere: Zaregistruj sa na inom serveri
|
||||
resend_confirmation: Poslať potvrdzujúce pokyny znovu
|
||||
reset_password: Resetovať heslo
|
||||
security: Zabezpečenie
|
||||
|
|
|
@ -7,7 +7,6 @@ sl:
|
|||
administered_by: 'Upravlja:'
|
||||
api: API
|
||||
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_missing: Ni nastavljeno
|
||||
contact_unavailable: Ni na voljo
|
||||
|
@ -15,19 +14,9 @@ sl:
|
|||
extended_description_html: |
|
||||
<h3>Dober prostor za pravila</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon gostuje na %{domain}
|
||||
learn_more: Spoznaj več
|
||||
other_instances: Seznam vozlišč
|
||||
privacy_policy: Politika zasebnosti
|
||||
source_code: Izvorna koda
|
||||
status_count_after:
|
||||
|
|
|
@ -7,7 +7,6 @@ sq:
|
|||
administered_by: 'Administruar nga:'
|
||||
api: API
|
||||
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_missing: I parregulluar
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ sq:
|
|||
extended_description_html: |
|
||||
<h3>Një vend i mirë për rregulla</h3>
|
||||
<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. S’ka autoritet qendror.
|
||||
not_a_product_title: Jeni një person, jo një produkt
|
||||
real_conversation_body: Me 500 shenja në dorën tuaj për t’i 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"
|
||||
hosted_on: Mastodon i strehuar në %{domain}
|
||||
learn_more: Mësoni më tepër
|
||||
other_instances: Listë shërbyesish
|
||||
privacy_policy: Rregulla privatësie
|
||||
source_code: Kod burim
|
||||
status_count_after:
|
||||
|
@ -505,13 +494,11 @@ sq:
|
|||
logout: Dalje
|
||||
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>.
|
||||
or: ose
|
||||
or_log_in_with: Ose bëni hyrjen me
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Regjistrohuni
|
||||
register_elsewhere: Regjistrohuni në një tjetër shërbyes
|
||||
resend_confirmation: Ridërgo udhëzime ripohimi
|
||||
reset_password: Ricaktoni fjalëkalimin
|
||||
security: Siguri
|
||||
|
|
|
@ -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_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
|
||||
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_missing: Nije postavljeno
|
||||
contact_unavailable: N/A
|
||||
extended_description_html: |
|
||||
<h3>Dobro mesto za pravila</h3>
|
||||
<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"
|
||||
hosted_on: Mastodont hostovan na %{domain}
|
||||
learn_more: Saznajte više
|
||||
other_instances: Lista instanci
|
||||
source_code: Izvorni kod
|
||||
status_count_after: statusa
|
||||
status_count_before: Koji su napisali
|
||||
|
|
|
@ -7,7 +7,6 @@ sr:
|
|||
administered_by: 'Администрирано од стране:'
|
||||
api: API
|
||||
apps: Мобилне апликације
|
||||
closed_registrations: Регистрације су тренутно затворене на овој инстанци. Међутим! Можете наћи другу инстанцу на којој ћете направити налог и одатле добити приступ на истој овој мрежи.
|
||||
contact: Контакт
|
||||
contact_missing: Није постављено
|
||||
contact_unavailable: N/A
|
||||
|
@ -15,19 +14,9 @@ sr:
|
|||
extended_description_html: |
|
||||
<h3>Добро место за правила</h3>
|
||||
<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} је сервер на мрежи"
|
||||
hosted_on: Мастодонт хостован на %{domain}
|
||||
learn_more: Сазнајте више
|
||||
other_instances: Листа инстанци
|
||||
privacy_policy: Полиса приватности
|
||||
source_code: Изворни код
|
||||
status_count_after:
|
||||
|
@ -518,13 +507,11 @@ sr:
|
|||
logout: Одјава
|
||||
migrate_account: Помери у други налог
|
||||
migrate_account_html: Ако желите да преусмерите овај налог на неки други, можете то <a href="%{path}">подесити овде</a>.
|
||||
or: или
|
||||
or_log_in_with: Или се пријавите са
|
||||
providers:
|
||||
cas: CAS-ом
|
||||
saml: SAML-ом
|
||||
register: Региструј се
|
||||
register_elsewhere: Региструјте се на другом серверу
|
||||
resend_confirmation: Пошаљи поруку са упутствима о потврди налога поново
|
||||
reset_password: Ресетуј лозинку
|
||||
security: Безбедност
|
||||
|
|
|
@ -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_this: Om
|
||||
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_missing: Inte inställd
|
||||
contact_unavailable: N/A
|
||||
extended_description_html: |
|
||||
<h3>En bra plats för regler</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon värd på %{domain}
|
||||
learn_more: Lär dig mer
|
||||
other_instances: Instanslista
|
||||
source_code: Källkod
|
||||
status_count_after: statusar
|
||||
status_count_before: Som skapat
|
||||
|
@ -380,13 +369,11 @@ sv:
|
|||
logout: Logga ut
|
||||
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>.
|
||||
or: eller
|
||||
or_log_in_with: Eller logga in med
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registrera
|
||||
register_elsewhere: Registrera dig på en annan server
|
||||
resend_confirmation: Skicka instruktionerna om bekräftelse igen
|
||||
reset_password: Återställ lösenord
|
||||
security: Säkerhet
|
||||
|
|
|
@ -7,7 +7,6 @@ te:
|
|||
administered_by: 'నిర్వహణలో:'
|
||||
api: API
|
||||
apps: మొబైల్ యాప్స్
|
||||
closed_registrations: ప్రస్తుతం ఈ ఇన్స్టెన్స్ లో రిజిస్టేషన్లు మూసివేయబడ్డాయి. అయితే, వేరే ఇన్స్టెన్స్ లో ఖాతా తెరచికూడా ఈ ఇన్స్టెన్స్ ను అక్కడినుండే యాక్సెస్ చేయవచ్చు.
|
||||
contact: సంప్రదించండి
|
||||
contact_missing: ఇంకా సెట్ చేయలేదు
|
||||
contact_unavailable: వర్తించదు
|
||||
|
@ -15,19 +14,9 @@ te:
|
|||
extended_description_html: |
|
||||
<h3>నియమాలకు ఒక మంచి ప్రదేశం</h3>
|
||||
<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} అనేది నెట్వర్కులోని ఒక సర్వరు"
|
||||
hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది
|
||||
learn_more: మరింత తెలుసుకోండి
|
||||
other_instances: ఇన్స్టాన్స్ ల జాబితా
|
||||
privacy_policy: గోప్యత విధానము
|
||||
source_code: సోర్సు కోడ్
|
||||
status_count_after:
|
||||
|
|
|
@ -3,9 +3,7 @@ th:
|
|||
about:
|
||||
about_mastodon_html: แมสโทดอน เป็น <em>ดีเซ็นทรัลไลซ์</em><em>ฟรีโอเพ่นซอร์ส</em> โซเชี่ยวเน็ตเวริ์ค. เป็นทางเลือกทดแทนโซเชี่ยวเน็ตเวิร์คที่ทำเป็นธุรกิจการค้า, ป้องกันการผูกขาดช่องทางการสื่อสารของคุณ. เลือกเซร์ฟเวอร์ที่คุณไว้ใจ — ที่คุณเลือกได้เอง, สื่อสารกับคนที่คุณต้องการได้เสมอ. ใครๆก็รันแมสโทดอนอินซะแตนซ์ได้ และ เชื่อมต่อกับ<em>โซเชี่ยวเน็ตเวิร์ค</em> โดยไม่มีอะไรมาขวางกั้น.
|
||||
about_this: เกี่ยวกับอินซะแตนซ์นี้
|
||||
closed_registrations: อินซะแตนซ์นี้ปิดรับลงทะเบียนแล้ว.
|
||||
contact: ติดต่อ
|
||||
other_instances: อินซะแตนซ์อื่นๆ
|
||||
source_code: ซอร์สโค๊ด
|
||||
status_count_after: สถานะ
|
||||
status_count_before: Who authored
|
||||
|
|
|
@ -7,7 +7,6 @@ tr:
|
|||
administered_by: 'Tarafından yönetildi:'
|
||||
api: API
|
||||
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_missing: Ayarlanmadı
|
||||
contact_unavailable: Yok
|
||||
|
@ -15,19 +14,9 @@ tr:
|
|||
extended_description_html: |
|
||||
<h3>Kural için iyi bir yer</h3>
|
||||
<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"
|
||||
hosted_on: Mastodon %{domain} üzerinde barındırılıyor
|
||||
learn_more: Daha fazla bilgi edinin
|
||||
other_instances: Sunucu listesi
|
||||
privacy_policy: Gizlilik politikası
|
||||
source_code: Kaynak kodu
|
||||
status_count_after:
|
||||
|
|
|
@ -6,7 +6,6 @@ uk:
|
|||
about_this: Про цю інстанцію
|
||||
administered_by: 'Адміністратор:'
|
||||
api: API
|
||||
closed_registrations: На даний момент реєстрація на цій інстанції закрита.
|
||||
contact: Зв'язатися
|
||||
contact_missing: Не зазначено
|
||||
contact_unavailable: Недоступно
|
||||
|
@ -14,19 +13,9 @@ uk:
|
|||
extended_description_html: |
|
||||
<h3>Гарне місце для правил</h3>
|
||||
<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} є одним сервером у мережі"
|
||||
hosted_on: Mastodon розміщено на %{domain}
|
||||
learn_more: Дізнатися більше
|
||||
other_instances: Інші інстанції
|
||||
privacy_policy: Політика приватності
|
||||
source_code: Вихідний код
|
||||
status_count_after: статусів
|
||||
|
@ -412,13 +401,11 @@ uk:
|
|||
logout: Вийти
|
||||
migrate_account: Переїхати до іншого аккаунту
|
||||
migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете <a href="%{path}">налаштувати це тут</a>.
|
||||
or: або
|
||||
or_log_in_with: Або увійдіть з
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Зареєструватися
|
||||
register_elsewhere: Зареєструватися на іншому сервері
|
||||
resend_confirmation: Повторно відправити інструкції з підтвердження
|
||||
reset_password: Скинути пароль
|
||||
security: Зміна паролю
|
||||
|
|
|
@ -7,7 +7,6 @@ zh-CN:
|
|||
administered_by: 本实例的管理员:
|
||||
api: API
|
||||
apps: 移动应用
|
||||
closed_registrations: 这个实例目前没有开放注册。不过,你可以前往其他实例注册一个帐户,同样可以加入到这个网络中哦!
|
||||
contact: 联系方式
|
||||
contact_missing: 未设定
|
||||
contact_unavailable: 未公开
|
||||
|
@ -15,19 +14,9 @@ zh-CN:
|
|||
extended_description_html: |
|
||||
<h3>这里可以写一些规定</h3>
|
||||
<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} 是这个庞大网络中的一台服务器"
|
||||
hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例
|
||||
learn_more: 了解详情
|
||||
other_instances: 其他实例
|
||||
privacy_policy: 隐私政策
|
||||
source_code: 源代码
|
||||
status_count_after: 条嘟文
|
||||
|
@ -430,13 +419,11 @@ zh-CN:
|
|||
logout: 登出
|
||||
migrate_account: 迁移到另一个帐户
|
||||
migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。
|
||||
or: 或者
|
||||
or_log_in_with: 或通过其他方式登录
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: 注册
|
||||
register_elsewhere: 前往其他实例注册
|
||||
resend_confirmation: 重新发送确认邮件
|
||||
reset_password: 重置密码
|
||||
security: 帐户安全
|
||||
|
|
|
@ -5,26 +5,15 @@ zh-HK:
|
|||
about_mastodon_html: Mastodon(萬象)是<em>自由、開源</em>的社交網絡。服務站<em>各自獨立而互連</em>,避免單一商業機構壟斷。找你所信任的服務站,建立帳號,你即可與任何服務站上的用戶溝通,享受無縫的<em>網絡交流</em>。
|
||||
about_this: 關於本服務站
|
||||
administered_by: 管理者:
|
||||
closed_registrations: 本服務站暫時停止接受登記。
|
||||
contact: 聯絡
|
||||
contact_missing: 未設定
|
||||
contact_unavailable: 未公開
|
||||
extended_description_html: |
|
||||
<h3>這裡可以寫一些網站規則</h3>
|
||||
<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 網絡中其中一個服務站"
|
||||
hosted_on: 在 %{domain} 運作的 Mastodon 服務站
|
||||
learn_more: 了解更多
|
||||
other_instances: 其他服務站
|
||||
source_code: 源代碼
|
||||
status_count_after: 篇文章
|
||||
status_count_before: 他們共發佈了
|
||||
|
@ -378,13 +367,11 @@ zh-HK:
|
|||
logout: 登出
|
||||
migrate_account: 轉移到另一個帳號
|
||||
migrate_account_html: 想要將這個帳號指向另一個帳號可<a href="%{path}">到這裡設定</a>。
|
||||
or: 或
|
||||
or_log_in_with: 或登入於
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: 登記
|
||||
register_elsewhere: 在其他服務站登記
|
||||
resend_confirmation: 重發確認指示電郵
|
||||
reset_password: 重設密碼
|
||||
security: 登入資訊
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue