Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/javascript/styles/fonts/montserrat.scss`: Code style changes upstream, path changes in glitch-soc. Applied upstream's code style changes. - `app/javascript/styles/fonts/roboto-mono.scss`: Code style changes upstream, path changes in glitch-soc. Applied upstream's code style changes. - `app/javascript/styles/fonts/roboto.scss`: Code style changes upstream, path changes in glitch-soc. Applied upstream's code style changes. - `app/models/account.rb`: Textual conflict only caused by glitch-soc using a different value for character limits in a nearby line. Applied upstream's changes. - `app/views/statuses/_simple_status.html.haml`: Attribute added to a tag modified by glitch-soc. Added upstream's attributes. - `yarn.lock`: Upstream added/updated dependencies close to glitch-soc-only ones. Updated/added upstream dependencies.
@ -26,13 +26,11 @@ plugins:
|
||||
bundler-audit:
|
||||
enabled: true
|
||||
eslint:
|
||||
enabled: true
|
||||
channel: eslint-7
|
||||
enabled: false
|
||||
rubocop:
|
||||
enabled: true
|
||||
channel: rubocop-1-9-1
|
||||
enabled: false
|
||||
sass-lint:
|
||||
enabled: true
|
||||
enabled: false
|
||||
exclude_patterns:
|
||||
- spec/
|
||||
- vendor/asset/
|
||||
|
@ -12,7 +12,7 @@ module.exports = {
|
||||
ATTACHMENT_HOST: false,
|
||||
},
|
||||
|
||||
parser: 'babel-eslint',
|
||||
parser: '@babel/eslint-parser',
|
||||
|
||||
plugins: [
|
||||
'react',
|
||||
@ -27,7 +27,7 @@ module.exports = {
|
||||
experimentalObjectRestSpread: true,
|
||||
jsx: true,
|
||||
},
|
||||
ecmaVersion: 2018,
|
||||
ecmaVersion: 2021,
|
||||
},
|
||||
|
||||
settings: {
|
||||
|
71
.github/workflows/linter.yml
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
---
|
||||
#################################
|
||||
#################################
|
||||
## Super Linter GitHub Actions ##
|
||||
#################################
|
||||
#################################
|
||||
name: Lint Code Base
|
||||
|
||||
#
|
||||
# Documentation:
|
||||
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
|
||||
#
|
||||
|
||||
#############################
|
||||
# Start the job on all push #
|
||||
#############################
|
||||
on:
|
||||
push:
|
||||
branches-ignore: [main]
|
||||
# Remove the line above to run when pushing to master
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
###############
|
||||
# Set the Job #
|
||||
###############
|
||||
permissions:
|
||||
checks: write
|
||||
contents: read
|
||||
pull-requests: write
|
||||
statuses: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# Name the Job
|
||||
name: Lint Code Base
|
||||
# Set the agent to run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
##################
|
||||
# Load all steps #
|
||||
##################
|
||||
steps:
|
||||
##########################
|
||||
# Checkout the code base #
|
||||
##########################
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
# Full git history is needed to get a proper list of changed files within `super-linter`
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Intall dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
|
||||
################################
|
||||
# Run Linter against code base #
|
||||
################################
|
||||
- name: Lint Code Base
|
||||
uses: github/super-linter@v4
|
||||
env:
|
||||
CSS_FILE_NAME: stylelint.config.js
|
||||
DEFAULT_BRANCH: main
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.js
|
||||
LINTER_RULES_PATH: .
|
||||
RUBY_CONFIG_FILE: .rubocop.yml
|
||||
VALIDATE_ALL_CODEBASE: false
|
||||
VALIDATE_CSS: true
|
||||
VALIDATE_JAVASCRIPT_ES: true
|
||||
VALIDATE_RUBY: true
|
@ -1,37 +0,0 @@
|
||||
# Linter Documentation:
|
||||
# https://github.com/sasstools/sass-lint/tree/v1.13.1/docs/options
|
||||
|
||||
files:
|
||||
include: app/javascript/styles/**/*.scss
|
||||
ignore:
|
||||
- app/javascript/styles/mastodon/reset.scss
|
||||
|
||||
rules:
|
||||
# Disallows
|
||||
no-color-literals: 0
|
||||
no-css-comments: 0
|
||||
no-duplicate-properties: 0
|
||||
no-ids: 0
|
||||
no-important: 0
|
||||
no-mergeable-selectors: 0
|
||||
no-misspelled-properties: 0
|
||||
no-qualifying-elements: 0
|
||||
no-transition-all: 0
|
||||
no-vendor-prefixes: 0
|
||||
|
||||
# Nesting
|
||||
force-element-nesting: 0
|
||||
force-attribute-nesting: 0
|
||||
force-pseudo-nesting: 0
|
||||
|
||||
# Name Formats
|
||||
class-name-format: 0
|
||||
leading-zero: 0
|
||||
|
||||
# Style Guide
|
||||
attribute-quotes: 0
|
||||
hex-length: 0
|
||||
indentation: 0
|
||||
nesting-depth: 0
|
||||
property-sort-order: 0
|
||||
quotes: 0
|
2
Gemfile
@ -117,7 +117,7 @@ group :test do
|
||||
gem 'capybara', '~> 3.37'
|
||||
gem 'climate_control', '~> 0.2'
|
||||
gem 'faker', '~> 2.21'
|
||||
gem 'microformats', '~> 4.2'
|
||||
gem 'microformats', '~> 4.4'
|
||||
gem 'rails-controller-testing', '~> 1.0'
|
||||
gem 'rspec-sidekiq', '~> 3.1'
|
||||
gem 'simplecov', '~> 0.21', require: false
|
||||
|
14
Gemfile.lock
@ -125,7 +125,7 @@ GEM
|
||||
bullet (7.0.1)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.11)
|
||||
bundler-audit (0.9.0.1)
|
||||
bundler-audit (0.9.1)
|
||||
bundler (>= 1.2.0, < 3)
|
||||
thor (~> 1.0)
|
||||
byebug (11.1.3)
|
||||
@ -322,7 +322,7 @@ GEM
|
||||
idn-ruby (0.1.4)
|
||||
ipaddress (0.8.3)
|
||||
jmespath (1.6.1)
|
||||
json (2.5.1)
|
||||
json (2.6.2)
|
||||
json-canonicalization (0.3.0)
|
||||
json-jwt (1.13.0)
|
||||
activesupport (>= 4.2)
|
||||
@ -389,7 +389,7 @@ GEM
|
||||
matrix (0.4.2)
|
||||
memory_profiler (1.0.0)
|
||||
method_source (1.0.0)
|
||||
microformats (4.3.1)
|
||||
microformats (4.4.1)
|
||||
json (~> 2.2)
|
||||
nokogiri (~> 1.10)
|
||||
mime-types (3.4.1)
|
||||
@ -414,7 +414,7 @@ GEM
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
sidekiq (>= 3.5)
|
||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
||||
oj (3.13.11)
|
||||
oj (3.13.13)
|
||||
omniauth (1.9.1)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
@ -476,7 +476,7 @@ GEM
|
||||
activesupport (>= 3.0.0)
|
||||
raabro (1.4.0)
|
||||
racc (1.6.0)
|
||||
rack (2.2.3)
|
||||
rack (2.2.3.1)
|
||||
rack-attack (6.6.1)
|
||||
rack (>= 1.0, < 3)
|
||||
rack-cors (1.1.1)
|
||||
@ -614,7 +614,7 @@ GEM
|
||||
rufus-scheduler (~> 3.2)
|
||||
sidekiq (>= 4)
|
||||
tilt (>= 1.4.0)
|
||||
sidekiq-unique-jobs (7.1.22)
|
||||
sidekiq-unique-jobs (7.1.23)
|
||||
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||
sidekiq (>= 5.0, < 8.0)
|
||||
@ -787,7 +787,7 @@ DEPENDENCIES
|
||||
makara (~> 0.5)
|
||||
mario-redis-lock (~> 1.2)
|
||||
memory_profiler
|
||||
microformats (~> 4.2)
|
||||
microformats (~> 4.4)
|
||||
mime-types (~> 3.4.1)
|
||||
net-ldap (~> 0.17)
|
||||
nokogiri (~> 1.13)
|
||||
|
109
app/controllers/api/v1/admin/domain_blocks_controller.rb
Normal file
@ -0,0 +1,109 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Admin::DomainBlocksController < Api::BaseController
|
||||
include Authorization
|
||||
include AccountableConcern
|
||||
|
||||
LIMIT = 100
|
||||
|
||||
before_action -> { authorize_if_got_token! :'admin:read', :'admin:read:domain_blocks' }, only: [:index, :show]
|
||||
before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:domain_blocks' }, except: [:index, :show]
|
||||
before_action :require_staff!
|
||||
before_action :set_domain_blocks, only: :index
|
||||
before_action :set_domain_block, only: [:show, :update, :destroy]
|
||||
|
||||
after_action :insert_pagination_headers, only: :index
|
||||
|
||||
PAGINATION_PARAMS = %i(limit).freeze
|
||||
|
||||
def create
|
||||
authorize :domain_block, :create?
|
||||
|
||||
existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil
|
||||
return render json: existing_domain_block, serializer: REST::Admin::ExistingDomainBlockErrorSerializer, status: 422 if existing_domain_block.present?
|
||||
|
||||
@domain_block = DomainBlock.create!(resource_params)
|
||||
DomainBlockWorker.perform_async(@domain_block.id)
|
||||
log_action :create, @domain_block
|
||||
render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
|
||||
end
|
||||
|
||||
def index
|
||||
authorize :domain_block, :index?
|
||||
render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer
|
||||
end
|
||||
|
||||
def show
|
||||
authorize @domain_block, :show?
|
||||
render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
|
||||
end
|
||||
|
||||
def update
|
||||
authorize @domain_block, :update?
|
||||
|
||||
@domain_block.update(domain_block_params)
|
||||
severity_changed = @domain_block.severity_changed?
|
||||
@domain_block.save!
|
||||
DomainBlockWorker.perform_async(@domain_block.id, severity_changed)
|
||||
log_action :update, @domain_block
|
||||
render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
|
||||
end
|
||||
|
||||
def destroy
|
||||
authorize @domain_block, :destroy?
|
||||
UnblockDomainService.new.call(@domain_block)
|
||||
log_action :destroy, @domain_block
|
||||
render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_domain_blocks
|
||||
@domain_blocks = filtered_domain_blocks.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
|
||||
end
|
||||
|
||||
def set_domain_block
|
||||
@domain_block = DomainBlock.find(params[:id])
|
||||
end
|
||||
|
||||
def filtered_domain_blocks
|
||||
# TODO: no filtering yet
|
||||
DomainBlock.all
|
||||
end
|
||||
|
||||
def domain_block_params
|
||||
params.permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
|
||||
end
|
||||
|
||||
def insert_pagination_headers
|
||||
set_pagination_headers(next_path, prev_path)
|
||||
end
|
||||
|
||||
def next_path
|
||||
api_v1_admin_domain_blocks_url(pagination_params(max_id: pagination_max_id)) if records_continue?
|
||||
end
|
||||
|
||||
def prev_path
|
||||
api_v1_admin_domain_blocks_url(pagination_params(min_id: pagination_since_id)) unless @domain_blocks.empty?
|
||||
end
|
||||
|
||||
def pagination_max_id
|
||||
@domain_blocks.last.id
|
||||
end
|
||||
|
||||
def pagination_since_id
|
||||
@domain_blocks.first.id
|
||||
end
|
||||
|
||||
def records_continue?
|
||||
@domain_blocks.size == limit_param(LIMIT)
|
||||
end
|
||||
|
||||
def pagination_params(core_params)
|
||||
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
|
||||
end
|
||||
|
||||
def resource_params
|
||||
params.permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
|
||||
end
|
||||
end
|
@ -83,7 +83,8 @@ module ApplicationHelper
|
||||
end
|
||||
|
||||
def provider_sign_in_link(provider)
|
||||
link_to I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize), omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
|
||||
label = Devise.omniauth_configs[provider]&.strategy&.display_name.presence || I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize)
|
||||
link_to label, omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
|
||||
end
|
||||
|
||||
def open_deletion?
|
||||
|
Before Width: | Height: | Size: 34 KiB |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216.41507 232.00976"><path d="M211.80683 139.0875c-3.1825 16.36625-28.4925 34.2775-57.5625 37.74875-15.16 1.80875-30.0825 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.3925 27.9425 21.115.7225 39.91625-5.20625 39.91625-5.20625l.86875 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23183 213.82 1.40558 165.31125.20808 116.09125c-.36375-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67058 3.45375 78.20308.2425 107.86433 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.97625 14.7525 32.97625 65.0825 0 0 .4125 37.13375-4.6 62.915" fill="#3088d4"/><path d="M65.68743 96.45938c0 9.01375-7.3075 16.32125-16.3225 16.32125-9.01375 0-16.32-7.3075-16.32-16.32125 0-9.01375 7.30625-16.3225 16.32-16.3225 9.015 0 16.3225 7.30875 16.3225 16.3225M124.52893 96.45938c0 9.01375-7.30875 16.32125-16.3225 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.3225 7.30875 16.3225 16.3225M183.36933 96.45938c0 9.01375-7.3075 16.32125-16.32125 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.32125 7.30875 16.32125 16.3225" fill="#fff"/></svg>
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216.4144 232.00976"><path d="M107.86523 0C78.203984.2425 49.672422 3.4535937 33.044922 11.089844c0 0-32.97656262 14.752031-32.97656262 65.082031 0 11.525-.224375 25.306175.140625 39.919925 1.19750002 49.22 9.02375002 97.72843 54.53124962 109.77343 20.9825 5.55375 38.99711 6.71547 53.505856 5.91797 26.31125-1.45875 41.08203-9.38867 41.08203-9.38867l-.86914-19.08984s-18.80171 5.92758-39.91796 5.20508c-20.921254-.7175-43.006879-2.25516-46.390629-27.94141-.3125-2.25625-.46875-4.66938-.46875-7.20313 0 0 20.536953 5.0204 46.564449 6.21289 15.915.73001 30.8393-.93343 45.99805-2.74218 29.07-3.47125 54.38125-21.3818 57.5625-37.74805 5.0125-25.78125 4.59961-62.916015 4.59961-62.916015 0-50.33-32.97461-65.082031-32.97461-65.082031C166.80539 3.4535938 138.255.2425 108.59375 0h-.72852zM74.296875 39.326172c12.355 0 21.710234 4.749297 27.896485 14.248047l6.01367 10.080078 6.01563-10.080078c6.185-9.49875 15.54023-14.248047 27.89648-14.248047 10.6775 0 19.28156 3.753672 25.85156 11.076172 6.36875 7.3225 9.53907 17.218828 9.53907 29.673828v60.941408h-24.14454V81.869141c0-12.46875-5.24453-18.798829-15.73828-18.798829-11.6025 0-17.41797 7.508516-17.41797 22.353516v32.375002H96.207031V85.423828c0-14.845-5.815468-22.353515-17.417969-22.353516-10.49375 0-15.740234 6.330079-15.740234 18.798829v59.148439H38.904297V80.076172c0-12.455 3.171016-22.351328 9.541015-29.673828 6.568751-7.3225 15.172813-11.076172 25.851563-11.076172z" fill="#000"/></svg>
|
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 27 KiB |
@ -3,7 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import PropTypes from 'prop-types';
|
||||
import Avatar from './avatar';
|
||||
import AvatarOverlay from './avatar_overlay';
|
||||
import AvatarComposite from './avatar_composite';
|
||||
import RelativeTimestamp from './relative_timestamp';
|
||||
import DisplayName from './display_name';
|
||||
import StatusContent from './status_content';
|
||||
@ -70,7 +69,6 @@ class Status extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
status: ImmutablePropTypes.map,
|
||||
account: ImmutablePropTypes.map,
|
||||
otherAccounts: ImmutablePropTypes.list,
|
||||
onClick: PropTypes.func,
|
||||
onReply: PropTypes.func,
|
||||
onFavourite: PropTypes.func,
|
||||
@ -297,7 +295,7 @@ class Status extends ImmutablePureComponent {
|
||||
let media = null;
|
||||
let statusAvatar, prepend, rebloggedByText;
|
||||
|
||||
const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, pictureInPicture } = this.props;
|
||||
const { intl, hidden, featured, unread, showThread, scrollKey, pictureInPicture } = this.props;
|
||||
|
||||
let { status, account, ...other } = this.props;
|
||||
|
||||
@ -456,9 +454,7 @@ class Status extends ImmutablePureComponent {
|
||||
);
|
||||
}
|
||||
|
||||
if (otherAccounts && otherAccounts.size > 0) {
|
||||
statusAvatar = <AvatarComposite accounts={otherAccounts} size={48} />;
|
||||
} else if (account === undefined || account === null) {
|
||||
if (account === undefined || account === null) {
|
||||
statusAvatar = <Avatar account={status.get('account')} size={48} />;
|
||||
} else {
|
||||
statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />;
|
||||
@ -492,7 +488,7 @@ class Status extends ImmutablePureComponent {
|
||||
{statusAvatar}
|
||||
</div>
|
||||
|
||||
<DisplayName account={status.get('account')} others={otherAccounts} />
|
||||
<DisplayName account={status.get('account')} />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
@ -176,6 +176,7 @@ export default class StatusContent extends React.PureComponent {
|
||||
|
||||
const content = { __html: status.get('contentHtml') };
|
||||
const spoilerContent = { __html: status.get('spoilerHtml') };
|
||||
const lang = status.get('language');
|
||||
const classNames = classnames('status__content', {
|
||||
'status__content--with-action': this.props.onClick && this.context.router,
|
||||
'status__content--with-spoiler': status.get('spoiler_text').length > 0,
|
||||
@ -212,14 +213,14 @@ export default class StatusContent extends React.PureComponent {
|
||||
return (
|
||||
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
|
||||
<span dangerouslySetInnerHTML={spoilerContent} className='translate' />
|
||||
<span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={lang} />
|
||||
{' '}
|
||||
<button tabIndex='0' className={`status__content__spoiler-link ${hidden ? 'status__content__spoiler-link--show-more' : 'status__content__spoiler-link--show-less'}`} onClick={this.handleSpoilerClick}>{toggleText}</button>
|
||||
</p>
|
||||
|
||||
{mentionsPlaceholder}
|
||||
|
||||
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''} translate`} dangerouslySetInnerHTML={content} />
|
||||
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''} translate`} lang={lang} dangerouslySetInnerHTML={content} />
|
||||
|
||||
{!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
|
||||
|
||||
@ -229,7 +230,7 @@ export default class StatusContent extends React.PureComponent {
|
||||
} else if (this.props.onClick) {
|
||||
const output = [
|
||||
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<div className='status__content__text status__content__text--visible translate' dangerouslySetInnerHTML={content} />
|
||||
<div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} />
|
||||
|
||||
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
|
||||
|
||||
@ -245,7 +246,7 @@ export default class StatusContent extends React.PureComponent {
|
||||
} else {
|
||||
return (
|
||||
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<div className='status__content__text status__content__text--visible translate' dangerouslySetInnerHTML={content} />
|
||||
<div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} />
|
||||
|
||||
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
|
||||
|
||||
|
@ -28,7 +28,7 @@ const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u20
|
||||
const messages = defineMessages({
|
||||
placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },
|
||||
spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },
|
||||
publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },
|
||||
publish: { id: 'compose_form.publish', defaultMessage: 'Publish' },
|
||||
publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' },
|
||||
saveChanges: { id: 'compose_form.save_changes', defaultMessage: 'Save changes' },
|
||||
});
|
||||
|
@ -1,197 +0,0 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import ReactSwipeableViews from 'react-swipeable-views';
|
||||
import classNames from 'classnames';
|
||||
import { connect } from 'react-redux';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { closeOnboarding } from '../../actions/onboarding';
|
||||
import screenHello from '../../../images/screen_hello.svg';
|
||||
import screenFederation from '../../../images/screen_federation.svg';
|
||||
import screenInteractions from '../../../images/screen_interactions.svg';
|
||||
import logoTransparent from '../../../images/logo_transparent.svg';
|
||||
import { disableSwiping } from 'mastodon/initial_state';
|
||||
|
||||
const FrameWelcome = ({ domain, onNext }) => (
|
||||
<div className='introduction__frame'>
|
||||
<div className='introduction__illustration' style={{ background: `url(${logoTransparent}) no-repeat center center / auto 80%` }}>
|
||||
<img src={screenHello} alt='' />
|
||||
</div>
|
||||
|
||||
<div className='introduction__text introduction__text--centered'>
|
||||
<h3><FormattedMessage id='introduction.welcome.headline' defaultMessage='First steps' /></h3>
|
||||
<p><FormattedMessage id='introduction.welcome.text' defaultMessage="Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name." values={{ domain: <code>{domain}</code> }} /></p>
|
||||
</div>
|
||||
|
||||
<div className='introduction__action'>
|
||||
<button className='button' onClick={onNext}><FormattedMessage id='introduction.welcome.action' defaultMessage="Let's go!" /></button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
FrameWelcome.propTypes = {
|
||||
domain: PropTypes.string.isRequired,
|
||||
onNext: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
const FrameFederation = ({ onNext }) => (
|
||||
<div className='introduction__frame'>
|
||||
<div className='introduction__illustration'>
|
||||
<img src={screenFederation} alt='' />
|
||||
</div>
|
||||
|
||||
<div className='introduction__text introduction__text--columnized'>
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.federation.home.headline' defaultMessage='Home' /></h3>
|
||||
<p><FormattedMessage id='introduction.federation.home.text' defaultMessage='Posts from people you follow will appear in your home feed. You can follow anyone on any server!' /></p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.federation.local.headline' defaultMessage='Local' /></h3>
|
||||
<p><FormattedMessage id='introduction.federation.local.text' defaultMessage='Public posts from people on the same server as you will appear in the local timeline.' /></p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.federation.federated.headline' defaultMessage='Federated' /></h3>
|
||||
<p><FormattedMessage id='introduction.federation.federated.text' defaultMessage='Public posts from other servers of the fediverse will appear in the federated timeline.' /></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='introduction__action'>
|
||||
<button className='button' onClick={onNext}><FormattedMessage id='introduction.federation.action' defaultMessage='Next' /></button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
FrameFederation.propTypes = {
|
||||
onNext: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
const FrameInteractions = ({ onNext }) => (
|
||||
<div className='introduction__frame'>
|
||||
<div className='introduction__illustration'>
|
||||
<img src={screenInteractions} alt='' />
|
||||
</div>
|
||||
|
||||
<div className='introduction__text introduction__text--columnized'>
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.interactions.reply.headline' defaultMessage='Reply' /></h3>
|
||||
<p><FormattedMessage id='introduction.interactions.reply.text' defaultMessage="You can reply to other people's and your own toots, which will chain them together in a conversation." /></p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.interactions.reblog.headline' defaultMessage='Boost' /></h3>
|
||||
<p><FormattedMessage id='introduction.interactions.reblog.text' defaultMessage="You can share other people's toots with your followers by boosting them." /></p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3><FormattedMessage id='introduction.interactions.favourite.headline' defaultMessage='Favourite' /></h3>
|
||||
<p><FormattedMessage id='introduction.interactions.favourite.text' defaultMessage='You can save a toot for later, and let the author know that you liked it, by favouriting it.' /></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='introduction__action'>
|
||||
<button className='button' onClick={onNext}><FormattedMessage id='introduction.interactions.action' defaultMessage='Finish toot-orial!' /></button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
FrameInteractions.propTypes = {
|
||||
onNext: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default @connect(state => ({ domain: state.getIn(['meta', 'domain']) }))
|
||||
class Introduction extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
domain: PropTypes.string.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
currentIndex: 0,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
this.pages = [
|
||||
<FrameWelcome domain={this.props.domain} onNext={this.handleNext} />,
|
||||
<FrameFederation onNext={this.handleNext} />,
|
||||
<FrameInteractions onNext={this.handleFinish} />,
|
||||
];
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
window.addEventListener('keyup', this.handleKeyUp);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
window.addEventListener('keyup', this.handleKeyUp);
|
||||
}
|
||||
|
||||
handleDot = (e) => {
|
||||
const i = Number(e.currentTarget.getAttribute('data-index'));
|
||||
e.preventDefault();
|
||||
this.setState({ currentIndex: i });
|
||||
}
|
||||
|
||||
handlePrev = () => {
|
||||
this.setState(({ currentIndex }) => ({
|
||||
currentIndex: Math.max(0, currentIndex - 1),
|
||||
}));
|
||||
}
|
||||
|
||||
handleNext = () => {
|
||||
const { pages } = this;
|
||||
|
||||
this.setState(({ currentIndex }) => ({
|
||||
currentIndex: Math.min(currentIndex + 1, pages.length - 1),
|
||||
}));
|
||||
}
|
||||
|
||||
handleSwipe = (index) => {
|
||||
this.setState({ currentIndex: index });
|
||||
}
|
||||
|
||||
handleFinish = () => {
|
||||
this.props.dispatch(closeOnboarding());
|
||||
}
|
||||
|
||||
handleKeyUp = ({ key }) => {
|
||||
switch (key) {
|
||||
case 'ArrowLeft':
|
||||
this.handlePrev();
|
||||
break;
|
||||
case 'ArrowRight':
|
||||
this.handleNext();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { currentIndex } = this.state;
|
||||
const { pages } = this;
|
||||
|
||||
return (
|
||||
<div className='introduction'>
|
||||
<ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} disabled={disableSwiping} className='introduction__pager'>
|
||||
{pages.map((page, i) => (
|
||||
<div key={i} className={classNames('introduction__frame-wrapper', { 'active': i === currentIndex })}>{page}</div>
|
||||
))}
|
||||
</ReactSwipeableViews>
|
||||
|
||||
<div className='introduction__dots'>
|
||||
{pages.map((_, i) => (
|
||||
<div
|
||||
key={`dot-${i}`}
|
||||
role='button'
|
||||
tabIndex='0'
|
||||
data-index={i}
|
||||
onClick={this.handleDot}
|
||||
className={classNames('introduction__dot', { active: i === currentIndex })}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Verander taal",
|
||||
"compose.language.search": "Soek tale...",
|
||||
"compose_form.direct_message_warning_learn_more": "Leer meer",
|
||||
"compose_form.encryption_warning": "Plasings op Mastodon het nie end-tot-end enkripsie nie. Moet nie enige gevaarlike inligting oor Mastodon deel nie.",
|
||||
"compose_form.encryption_warning": "Plasings op Mastodon het nie end-tot-end enkripsie nie. Moet nie enige sensitiewe inligting oor Mastodon deel nie.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
|
||||
"compose_form.lock_disclaimer.lock": "gesluit",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "تغيير اللغة",
|
||||
"compose.language.search": "البحث عن لغة…",
|
||||
"compose_form.direct_message_warning_learn_more": "تَعَلَّم المَزيد",
|
||||
"compose_form.encryption_warning": "إنّ المنشورات على ماستدون ليست مشفرة من النهاية إلى النهاية. لا تشارك أي معلومات حساسة عبر ماستدون.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "لن يُدرَج هذا المنشور تحت أي وسم بما أنَّه غير مُدرَج. فقط المنشورات العامة يُمكن البحث عنها بواسطة الوسم.",
|
||||
"compose_form.lock_disclaimer": "حسابُك غير {locked}. يُمكن لأي شخص مُتابعتك لرؤية (منشورات المتابعين فقط).",
|
||||
"compose_form.lock_disclaimer.lock": "مُقفَل",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Canvia d'idioma",
|
||||
"compose.language.search": "Cerca idiomes...",
|
||||
"compose_form.direct_message_warning_learn_more": "Més informació",
|
||||
"compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació perillosa mitjançant Mastodon.",
|
||||
"compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació sensible mitjançant Mastodon.",
|
||||
"compose_form.hashtag_warning": "Aquesta publicació no es mostrarà en cap etiqueta, ja que no està llistada. Només les publicacions públiques es poden cercar per etiqueta.",
|
||||
"compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure les publicacions de només per a seguidors.",
|
||||
"compose_form.lock_disclaimer.lock": "bloquejat",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Změnit jazyk",
|
||||
"compose.language.search": "Prohledat jazyky...",
|
||||
"compose_form.direct_message_warning_learn_more": "Zjistit více",
|
||||
"compose_form.encryption_warning": "Příspěvky na Mastodonu nejsou end-to-end šifrovány. Nesdílejte přes Mastodon žádné nebezpečné informace.",
|
||||
"compose_form.encryption_warning": "Příspěvky na Mastodonu nejsou end-to-end šifrovány. Nesdílejte přes Mastodon žádné citlivé informace.",
|
||||
"compose_form.hashtag_warning": "Tento příspěvek nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné příspěvky mohou být vyhledány podle hashtagu.",
|
||||
"compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky učené pouze pro sledující.",
|
||||
"compose_form.lock_disclaimer.lock": "uzamčen",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Dysgu mwy",
|
||||
"compose_form.encryption_warning": "Dyw postiadau ar Mastodon ddim wedi'u hamgryptio o ben i ben. Peidiwch â rhannu unrhyw wybodaeth beryglus dros Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ni fydd y post hwn wedi ei restru o dan unrhyw hashnod gan ei fod heb ei restru. Dim ond postiadau cyhoeddus gellid chwilio amdanynt drwy hashnod.",
|
||||
"compose_form.lock_disclaimer": "Nid yw eich cyfri wedi'i {locked}. Gall unrhyw un eich dilyn i weld eich postiadau dilynwyr-yn-unig.",
|
||||
"compose_form.lock_disclaimer.lock": "wedi ei gloi",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Få mere at vide",
|
||||
"compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende krypteret. Del derfor ikke sensitiv information over Mastodon.",
|
||||
"compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende krypteret. Del derfor ikke sensitiv information via Mastodon.",
|
||||
"compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, idet kun offentlige indlæg kan søges via hashtags.",
|
||||
"compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.",
|
||||
"compose_form.lock_disclaimer.lock": "låst",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Sprache ändern",
|
||||
"compose.language.search": "Sprachen durchsuchen...",
|
||||
"compose_form.direct_message_warning_learn_more": "Mehr erfahren",
|
||||
"compose_form.encryption_warning": "Beiträge auf Mastodon sind nicht Ende-zu-Ende-verschlüsselt. Teile keine sensiblen Informationen über Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Dieser Beitrag wird nicht durch Hashtags entdeckbar sein, weil er ungelistet ist. Nur öffentliche Beiträge tauchen in Hashtag-Zeitleisten auf.",
|
||||
"compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
|
||||
"compose_form.lock_disclaimer.lock": "gesperrt",
|
||||
|
@ -1182,7 +1182,7 @@
|
||||
"id": "compose_form.spoiler_placeholder"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Toot",
|
||||
"defaultMessage": "Publish",
|
||||
"id": "compose_form.publish"
|
||||
},
|
||||
{
|
||||
@ -1546,7 +1546,7 @@
|
||||
"id": "compose_form.hashtag_warning"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Posts on Mastodon are not end-to-end encrypted. Do not share any sensitive information over Mastodon.",
|
||||
"defaultMessage": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"id": "compose_form.encryption_warning"
|
||||
},
|
||||
{
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Αλλαγή γλώσσας",
|
||||
"compose.language.search": "Αναζήτηση γλωσσών...",
|
||||
"compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα",
|
||||
"compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μην μοιράζεστε επικίνδυνες πληροφορίες μέσω του Mastodon.",
|
||||
"compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μην μοιράζεστε ευαίσθητες πληροφορίες μέσω του Mastodon.",
|
||||
"compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.",
|
||||
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
|
||||
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
|
||||
|
@ -110,7 +110,7 @@
|
||||
"compose_form.poll.remove_option": "Remove this choice",
|
||||
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
|
||||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish": "Publish",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "Save changes",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
|
@ -93,7 +93,7 @@
|
||||
"community.column_settings.media_only": "Nur aŭdovidaĵoj",
|
||||
"community.column_settings.remote_only": "Nur malproksima",
|
||||
"compose.language.change": "Ŝanĝi lingvon",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose.language.search": "Serĉi lingvojn...",
|
||||
"compose_form.direct_message_warning_learn_more": "Lerni pli",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ĉi tiu mesaĝo ne estos listigita per ajna kradvorto. Nur publikaj mesaĝoj estas serĉeblaj per kradvortoj.",
|
||||
@ -169,7 +169,7 @@
|
||||
"empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.",
|
||||
"empty_column.bookmarked_statuses": "Vi ankoraŭ ne aldonis mesaĝon al viaj legosignoj. Kiam vi aldonos iun, tiu aperos ĉi tie.",
|
||||
"empty_column.community": "La loka templinio estas malplena. Skribu ion por plenigi ĝin!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.",
|
||||
"empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
|
||||
"empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!",
|
||||
"empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.",
|
||||
@ -234,7 +234,7 @@
|
||||
"keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj",
|
||||
"keyboard_shortcuts.compose": "enfokusigi la tekstujon",
|
||||
"keyboard_shortcuts.description": "Priskribo",
|
||||
"keyboard_shortcuts.direct": "to open direct messages column",
|
||||
"keyboard_shortcuts.direct": "malfermi la kolumnon de rektaj mesaĝoj",
|
||||
"keyboard_shortcuts.down": "iri suben en la listo",
|
||||
"keyboard_shortcuts.enter": "malfermi mesaĝon",
|
||||
"keyboard_shortcuts.favourite": "stelumi",
|
||||
@ -473,8 +473,8 @@
|
||||
"status.pin": "Alpingli profile",
|
||||
"status.pinned": "Alpinglita mesaĝo",
|
||||
"status.read_more": "Legi pli",
|
||||
"status.reblog": "Diskonigi",
|
||||
"status.reblog_private": "Diskonigi al la originala atentaro",
|
||||
"status.reblog": "Plusendi",
|
||||
"status.reblog_private": "Plusendi kiel la originala videbleco",
|
||||
"status.reblogged_by": "{name} diskonigis",
|
||||
"status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.",
|
||||
"status.redraft": "Forigi kaj reskribi",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Cambiar idioma",
|
||||
"compose.language.search": "Buscar idiomas…",
|
||||
"compose_form.direct_message_warning_learn_more": "Aprendé más",
|
||||
"compose_form.encryption_warning": "Los mensajes en Mastodon no están cifrados de extremo a extremo. No comparta ninguna información sensible al usar Mastodon.",
|
||||
"compose_form.encryption_warning": "Los mensajes en Mastodon no están cifrados de extremo a extremo. No compartas ninguna información sensible al usar Mastodon.",
|
||||
"compose_form.hashtag_warning": "Este mensaje no se mostrará bajo ninguna etiqueta porque no es público. Sólo los mensajes públicos se pueden buscar por etiquetas.",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no es {locked}. Todos pueden seguirte para ver tus mensajes marcados como \"Sólo para seguidores\".",
|
||||
"compose_form.lock_disclaimer.lock": "privada",
|
||||
|
@ -92,10 +92,10 @@
|
||||
"community.column_settings.local_only": "Solo local",
|
||||
"community.column_settings.media_only": "Solo media",
|
||||
"community.column_settings.remote_only": "Solo remoto",
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose.language.change": "Cambiar idioma",
|
||||
"compose.language.search": "Buscar idiomas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Aprender mas",
|
||||
"compose_form.encryption_warning": "Los mensajes en Mastodon no están cifrados de extremo a extremo. No comparta ninguna información confidencial en Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
|
||||
"compose_form.lock_disclaimer.lock": "bloqueado",
|
||||
@ -149,7 +149,7 @@
|
||||
"embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
|
||||
"embed.preview": "Así es como se verá:",
|
||||
"emoji_button.activity": "Actividad",
|
||||
"emoji_button.clear": "Clear",
|
||||
"emoji_button.clear": "Limpiar",
|
||||
"emoji_button.custom": "Personalizado",
|
||||
"emoji_button.flags": "Marcas",
|
||||
"emoji_button.food": "Comida y bebida",
|
||||
@ -267,8 +267,8 @@
|
||||
"lightbox.expand": "Expandir cuadro de visualización de imagen",
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"limited_account_hint.action": "Show profile anyway",
|
||||
"limited_account_hint.title": "This profile has been hidden by the moderators of your server.",
|
||||
"limited_account_hint.action": "Mostrar perfil de todos modos",
|
||||
"limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de tu servidor.",
|
||||
"lists.account.add": "Añadir a lista",
|
||||
"lists.account.remove": "Quitar de lista",
|
||||
"lists.delete": "Borrar lista",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Cambiar idioma",
|
||||
"compose.language.search": "Buscar idiomas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Aprender más",
|
||||
"compose_form.encryption_warning": "Los mensajes en Mastodon no están cifrados de extremo a extremo. No comparta ninguna información confidencial en Mastodon.",
|
||||
"compose_form.encryption_warning": "Las publicaciones en Mastodon no están cifradas de extremo a extremo. No comparta ninguna información sensible en Mastodon.",
|
||||
"compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.",
|
||||
"compose_form.lock_disclaimer.lock": "bloqueado",
|
||||
|
@ -106,7 +106,7 @@
|
||||
"compose_form.poll.remove_option": "Eemalda see valik",
|
||||
"compose_form.poll.switch_to_multiple": "Muuda küsitlust lubamaks mitut valikut",
|
||||
"compose_form.poll.switch_to_single": "Muuda küsitlust lubamaks ainult ühte valikut",
|
||||
"compose_form.publish": "Tuututa",
|
||||
"compose_form.publish": "Tuut",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "Save changes",
|
||||
"compose_form.sensitive.hide": "Märgista meedia tundlikuks",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "بیشتر بدانید",
|
||||
"compose_form.encryption_warning": "فرستههای ماستودون رمزگذاری سرتاسری نشدهاند. هیچ اطّلاعات خطرناکی را روی ماستودون همرسانی نکنید.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "از آنجا که این فرسته فهرست نشده است، در نتایج جستوجوی هشتگها پیدا نخواهد شد. تنها فرستههای عمومی را میتوان با جستوجوی هشتگ یافت.",
|
||||
"compose_form.lock_disclaimer": "حسابتان {locked} نیست. هر کسی میتواند پیگیرتان شده و فرستههای ویژهٔ پیگیرانتان را ببیند.",
|
||||
"compose_form.lock_disclaimer.lock": "قفلشده",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Changer de langue",
|
||||
"compose.language.search": "Rechercher des langues …",
|
||||
"compose_form.direct_message_warning_learn_more": "En savoir plus",
|
||||
"compose_form.encryption_warning": "Les messages sur Mastodon ne sont pas chiffrés de bout en bout. Ne partagez aucune information confidentielle sur Mastodon.",
|
||||
"compose_form.encryption_warning": "Les messages sur Mastodon ne sont pas chiffrés de bout en bout. Ne partagez aucune information sensible sur Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur « non listé ». Seuls les pouets avec une visibilité « publique » peuvent être recherchés par hashtag.",
|
||||
"compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos messages privés.",
|
||||
"compose_form.lock_disclaimer.lock": "verrouillé",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Atharraich an cànan",
|
||||
"compose.language.search": "Lorg cànan…",
|
||||
"compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh",
|
||||
"compose_form.encryption_warning": "Chan eil crioptachadh ceann gu ceann air postaichean Mhastodon. Na co-roinn fiosrachadh cunnartach idir le Mastodon.",
|
||||
"compose_form.encryption_warning": "Chan eil crioptachadh ceann gu ceann air postaichean Mhastodon. Na co-roinn fiosrachadh dìomhair idir le Mastodon.",
|
||||
"compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais on a tha e falaichte o liostaichean. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.",
|
||||
"compose_form.lock_disclaimer": "Chan eil an cunntas agad {locked}. ’S urrainn do dhuine sam bith leantainn ort is na postaichean agad a tha ag amas air an luchd-leantainn agad a-mhàin a shealltainn.",
|
||||
"compose_form.lock_disclaimer.lock": "glaiste",
|
||||
|
@ -135,7 +135,7 @@
|
||||
"confirmations.redraft.confirm": "Eliminar e reescribir",
|
||||
"confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
|
||||
"confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
|
||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||
"confirmations.unfollow.message": "Desexas deixar de seguir a {name}?",
|
||||
"conversation.delete": "Eliminar conversa",
|
||||
@ -480,7 +480,7 @@
|
||||
"status.redraft": "Eliminar e reescribir",
|
||||
"status.remove_bookmark": "Eliminar marcador",
|
||||
"status.reply": "Responder",
|
||||
"status.replyAll": "Responder ó fío",
|
||||
"status.replyAll": "Responder ao tema",
|
||||
"status.report": "Denunciar @{name}",
|
||||
"status.sensitive_warning": "Contido sensíbel",
|
||||
"status.share": "Compartir",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "מידע נוסף",
|
||||
"compose_form.encryption_warning": "חצרוצים במסטודון אינם מוצפנים מקצה לקצה. לעולם אל תחלקו מידע רגיש דרך מסטודון.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.",
|
||||
"compose_form.lock_disclaimer.lock": "נעול",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "और जानें",
|
||||
"compose_form.encryption_warning": "मास्टोडॉन पर पोस्ट एन्ड-टू-एन्ड एन्क्रिप्टेड नहीं है",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।",
|
||||
"compose_form.lock_disclaimer": "आपका खाता {locked} नहीं है। आपको केवल फॉलोवर्स को दिखाई दिए जाने वाले पोस्ट देखने के लिए कोई भी फॉलो कर सकता है।",
|
||||
"compose_form.lock_disclaimer.lock": "लॉक्ड",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Nyelv megváltoztatása",
|
||||
"compose.language.search": "Nyelv keresése...",
|
||||
"compose_form.direct_message_warning_learn_more": "Tudj meg többet",
|
||||
"compose_form.encryption_warning": "A bejegyzések a Mastodonon nem használnak végpontok közötti titkosítást. Ne ossz meg érzékeny információt Mastodonon.",
|
||||
"compose_form.encryption_warning": "A bejegyzések Mastodonon nem használnak végpontok közötti titkosítást. Ne ossz meg semmilyen érzékeny információt Mastodonon.",
|
||||
"compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel listázatlan. Csak a nyilvános bejegyzések kereshetők hashtaggel.",
|
||||
"compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.",
|
||||
"compose_form.lock_disclaimer.lock": "lezárva",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Իմանալ աւելին",
|
||||
"compose_form.encryption_warning": "Մաստոդոնում գրառումները ծայրից-ծայր գաղտնագրուող չեն։ Գաղտնիք պարունակող նամակներ մի ուղարկէք։",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Այս գրառումը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։",
|
||||
"compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։",
|
||||
"compose_form.lock_disclaimer.lock": "փակ",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Ganti bahasa",
|
||||
"compose.language.search": "Telusuri bahasa...",
|
||||
"compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya",
|
||||
"compose_form.encryption_warning": "Kiriman di Mastodon tidak dienkripsi end-to-end. Jangan bagikan informasi rahasial melalui Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah diatur sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.",
|
||||
"compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.",
|
||||
"compose_form.lock_disclaimer.lock": "terkunci",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Chanjez linguo",
|
||||
"compose.language.search": "Trovez linguo...",
|
||||
"compose_form.direct_message_warning_learn_more": "Lernez pluse",
|
||||
"compose_form.encryption_warning": "Posti di Mastodon ne intersequante chifrigesas. Ne partigez irga danjera informo che Mastodon.",
|
||||
"compose_form.encryption_warning": "Posti en Mastodon ne intersequante chifrigesas. Ne partigez irga privata informo che Mastodon.",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Vua konto ne esas {locked}. Irgu povas sequar vu por vidar vua sequanto-nura posti.",
|
||||
"compose_form.lock_disclaimer.lock": "klefagesas",
|
||||
@ -177,7 +177,7 @@
|
||||
"empty_column.follow_recommendations": "Semblas tale nula sugestato povas facesar por vu. Vu povas probar trovar personi quon vu forsan konocas o exploras tendenca hashtagi.",
|
||||
"empty_column.follow_requests": "Vu ne havas irga sequodemandi til nun. Kande vu ganas talo, ol montresos hike.",
|
||||
"empty_column.hashtag": "Esas ankore nulo en ta gretovorto.",
|
||||
"empty_column.home": "Tu sequas ankore nulu. Vizitez {public} od uzez la serchilo por komencar e renkontrar altra uzeri.",
|
||||
"empty_column.home": "Vua hemtempolineo esas vakua! Sequez plu multa personi por plenigar lu. {suggestions}",
|
||||
"empty_column.home.suggestions": "Videz ula sugestati",
|
||||
"empty_column.list": "There is nothing in this list yet.",
|
||||
"empty_column.lists": "Vu ne havas irga listi til nun. Kande vu kreas talo, ol montresos hike.",
|
||||
@ -209,7 +209,7 @@
|
||||
"getting_started.heading": "Debuto",
|
||||
"getting_started.invite": "Invitez personi",
|
||||
"getting_started.open_source_notice": "Mastodon esas programaro kun apertita kodexo. Tu povas kontributar o signalar problemi en GitHub ye {github}.",
|
||||
"getting_started.security": "Security",
|
||||
"getting_started.security": "Kontoopcioni",
|
||||
"getting_started.terms": "Servkondicioni",
|
||||
"hashtag.column_header.tag_mode.all": "e {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||
@ -305,7 +305,7 @@
|
||||
"navigation_bar.follow_requests": "Demandi di sequado",
|
||||
"navigation_bar.follows_and_followers": "Sequati e sequanti",
|
||||
"navigation_bar.info": "Detaloza informi",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.keyboard_shortcuts": "Rapidklavi",
|
||||
"navigation_bar.lists": "Listi",
|
||||
"navigation_bar.logout": "Ekirar",
|
||||
"navigation_bar.mutes": "Celita uzeri",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Cambia lingua",
|
||||
"compose.language.search": "Ricerca lingue...",
|
||||
"compose_form.direct_message_warning_learn_more": "Scopri di più",
|
||||
"compose_form.encryption_warning": "I messaggi su Mastodon non sono crittografati end-to-end. Non condividere alcuna informazione sensibile su Mastodon.",
|
||||
"compose_form.encryption_warning": "I messaggi su Mastodon non sono crittografati end-to-end. Non condividere dati sensibili su Mastodon.",
|
||||
"compose_form.hashtag_warning": "Questo post non sarà elencato sotto alcun hashtag poiché senza elenco. Solo i toot pubblici possono essere ricercati per hashtag.",
|
||||
"compose_form.lock_disclaimer": "Il tuo profilo non è {locked}. Chiunque può seguirti e vedere le tue pubblicazioni visibili solo dai follower.",
|
||||
"compose_form.lock_disclaimer.lock": "bloccato",
|
||||
|
@ -99,7 +99,7 @@
|
||||
"compose.language.change": "言語を変更",
|
||||
"compose.language.search": "言語を検索...",
|
||||
"compose_form.direct_message_warning_learn_more": "もっと詳しく",
|
||||
"compose_form.encryption_warning": "Mastodonの投稿はエンドツーエンド暗号化に対応していません。安全に送受信されるべき情報をMastodonで共有しないでください。",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "この投稿は公開設定ではないのでハッシュタグの一覧に表示されません。公開投稿だけがハッシュタグで検索できます。",
|
||||
"compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。",
|
||||
"compose_form.lock_disclaimer.lock": "承認制",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "언어 변경",
|
||||
"compose.language.search": "언어 검색...",
|
||||
"compose_form.direct_message_warning_learn_more": "더 알아보기",
|
||||
"compose_form.encryption_warning": "마스토돈의 게시물들은 종단간 암호화가 되지 않습니다. 위험한 정보를 마스토돈을 통해 전달하지 마세요.",
|
||||
"compose_form.encryption_warning": "마스토돈의 게시물들은 종단간 암호화가 되지 않습니다. 민감한 정보를 마스토돈을 통해 전달하지 마세요.",
|
||||
"compose_form.hashtag_warning": "이 게시물은 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색 될 수 있습니다.",
|
||||
"compose_form.lock_disclaimer": "이 계정은 {locked}로 설정 되어 있지 않습니다. 누구나 이 계정을 팔로우 할 수 있으며, 팔로워 공개의 포스팅을 볼 수 있습니다.",
|
||||
"compose_form.lock_disclaimer.lock": "비공개",
|
||||
@ -268,7 +268,7 @@
|
||||
"lightbox.next": "다음",
|
||||
"lightbox.previous": "이전",
|
||||
"limited_account_hint.action": "그래도 프로필 보기",
|
||||
"limited_account_hint.title": "이 프로필은 서버 운영진에 의해 숨겨진 상태입니다.",
|
||||
"limited_account_hint.title": "이 프로필은 이 서버의 중재자에 의해 숨겨진 상태입니다.",
|
||||
"lists.account.add": "리스트에 추가",
|
||||
"lists.account.remove": "리스트에서 제거",
|
||||
"lists.delete": "리스트 삭제",
|
||||
|
@ -11,7 +11,7 @@
|
||||
"account.direct": "Peyamekê bişîne @{name}",
|
||||
"account.disable_notifications": "Êdî min agahdar neke gava @{name} diweşîne",
|
||||
"account.domain_blocked": "Navper hate astengkirin",
|
||||
"account.edit_profile": "Profîl serrast bike",
|
||||
"account.edit_profile": "Profîlê serrast bike",
|
||||
"account.enable_notifications": "Min agahdar bike gava @{name} diweşîne",
|
||||
"account.endorse": "Taybetiyên li ser profîl",
|
||||
"account.follow": "Bişopîne",
|
||||
@ -81,7 +81,7 @@
|
||||
"column.notifications": "Agahdarî",
|
||||
"column.pins": "Şandiya derzîkirî",
|
||||
"column.public": "Demnameyê federalîkirî",
|
||||
"column_back_button.label": "Veger",
|
||||
"column_back_button.label": "Vegere",
|
||||
"column_header.hide_settings": "Sazkariyan veşêre",
|
||||
"column_header.moveLeft_settings": "Stûnê bilivîne bo çepê",
|
||||
"column_header.moveRight_settings": "Stûnê bilivîne bo rastê",
|
||||
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Ziman biguherîne",
|
||||
"compose.language.search": "Li zimanan bigere...",
|
||||
"compose_form.direct_message_warning_learn_more": "Bêtir fêr bibe",
|
||||
"compose_form.encryption_warning": "Şandiyên li ser Mastodon dawî-bi-dawî ne şîfrekirî ne. Li ser Mastodon zanyariyên talûke parve neke.",
|
||||
"compose_form.encryption_warning": "Şandiyên li ser Mastodon dawî-bi-dawî ne şîfrekirî ne. Li ser Mastodon zanyariyên hestyar parve neke.",
|
||||
"compose_form.hashtag_warning": "Ev şandî ji ber ku nehatiye tomarkirin dê di binê hashtagê de neyê tomar kirin. Tenê peyamên gelemperî dikarin bi hashtagê werin lêgerîn.",
|
||||
"compose_form.lock_disclaimer": "Ajimêrê te {locked} nîne. Herkes dikare te bişopîne da ku şandiyên te yên tenê şopînerên te ra xûya dibin bibînin.",
|
||||
"compose_form.lock_disclaimer.lock": "girtî ye",
|
||||
@ -207,7 +207,7 @@
|
||||
"getting_started.directory": "Rêgeha profîlê",
|
||||
"getting_started.documentation": "Pelbend",
|
||||
"getting_started.heading": "Destpêkirin",
|
||||
"getting_started.invite": "Mirovan Vexwîne",
|
||||
"getting_started.invite": "Kesan vexwîne",
|
||||
"getting_started.open_source_notice": "Mastodon nermalava çavkaniya vekirî ye. Tu dikarî pirsgirêkan li ser GitHub-ê ragihînî di {github} de an jî dikarî tevkariyê bikî.",
|
||||
"getting_started.security": "Sazkariyên ajimêr",
|
||||
"getting_started.terms": "Mercên karûberan",
|
||||
@ -298,7 +298,7 @@
|
||||
"navigation_bar.direct": "Peyamên rasterast",
|
||||
"navigation_bar.discover": "Vekolê",
|
||||
"navigation_bar.domain_blocks": "Navparên astengkirî",
|
||||
"navigation_bar.edit_profile": "Profîl serrast bike",
|
||||
"navigation_bar.edit_profile": "Profîlê serrast bike",
|
||||
"navigation_bar.explore": "Vekole",
|
||||
"navigation_bar.favourites": "Bijarte",
|
||||
"navigation_bar.filters": "Peyvên bêdengkirî",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Mainīt valodu",
|
||||
"compose.language.search": "Meklēt valodas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Uzzināt vairāk",
|
||||
"compose_form.encryption_warning": "Ziņas vietnē Mastodon nav pilnībā šifrētas. Nedalies ar bīstamu informāciju caur Mastodon.",
|
||||
"compose_form.encryption_warning": "Ziņas vietnē Mastodon nav pilnībā šifrētas. Nedalies ar sensitīvu informāciju caur Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ziņojumu nebūs iespējams atrast zem haštagiem jo tas nav publisks. Tikai publiskos ziņojumus ir iespējams meklēt pēc tiem.",
|
||||
"compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot lai apskatītu tikai sekotājiem paredzētos ziņojumus.",
|
||||
"compose_form.lock_disclaimer.lock": "slēgts",
|
||||
|
@ -48,8 +48,8 @@
|
||||
"account.unmute_notifications": "Meldingen van @{name} niet langer negeren",
|
||||
"account.unmute_short": "Niet langer negeren",
|
||||
"account_note.placeholder": "Klik om een opmerking toe te voegen",
|
||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||
"admin.dashboard.daily_retention": "Retentiegraad van gebruikers per dag, vanaf registratie",
|
||||
"admin.dashboard.monthly_retention": "Retentiegraad van gebruikers per maand, vanaf registratie",
|
||||
"admin.dashboard.retention.average": "Gemiddelde",
|
||||
"admin.dashboard.retention.cohort": "Aanmeldingsmaand",
|
||||
"admin.dashboard.retention.cohort_size": "Nieuwe gebruikers",
|
||||
@ -70,7 +70,7 @@
|
||||
"column.blocks": "Geblokkeerde gebruikers",
|
||||
"column.bookmarks": "Bladwijzers",
|
||||
"column.community": "Lokale tijdlijn",
|
||||
"column.direct": "Direct messages",
|
||||
"column.direct": "Directe berichten",
|
||||
"column.directory": "Gebruikersgids",
|
||||
"column.domain_blocks": "Geblokkeerde domeinen",
|
||||
"column.favourites": "Favorieten",
|
||||
@ -92,10 +92,10 @@
|
||||
"community.column_settings.local_only": "Alleen lokaal",
|
||||
"community.column_settings.media_only": "Alleen media",
|
||||
"community.column_settings.remote_only": "Alleen andere servers",
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose.language.change": "Taal veranderen",
|
||||
"compose.language.search": "Talen zoeken...",
|
||||
"compose_form.direct_message_warning_learn_more": "Meer leren",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.encryption_warning": "Berichten op Mastodon worden, net zoals op andere social media, niet end-to-end versleuteld. Deel daarom geen gevoelige informatie via Mastodon.",
|
||||
"compose_form.hashtag_warning": "Dit bericht valt niet onder een hashtag te bekijken, omdat deze niet op openbare tijdlijnen wordt getoond. Alleen openbare berichten kunnen via hashtags gevonden worden.",
|
||||
"compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de berichten zien die je alleen aan jouw volgers hebt gericht.",
|
||||
"compose_form.lock_disclaimer.lock": "besloten",
|
||||
@ -149,7 +149,7 @@
|
||||
"embed.instructions": "Embed dit bericht op jouw website door de onderstaande code te kopiëren.",
|
||||
"embed.preview": "Zo komt het eruit te zien:",
|
||||
"emoji_button.activity": "Activiteiten",
|
||||
"emoji_button.clear": "Clear",
|
||||
"emoji_button.clear": "Leegmaken",
|
||||
"emoji_button.custom": "Lokale emoji’s",
|
||||
"emoji_button.flags": "Vlaggen",
|
||||
"emoji_button.food": "Eten en drinken",
|
||||
@ -169,7 +169,7 @@
|
||||
"empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.",
|
||||
"empty_column.bookmarked_statuses": "Jij hebt nog geen berichten aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.",
|
||||
"empty_column.community": "De lokale tijdlijn is nog leeg. Plaats een openbaar bericht om de spits af te bijten!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, komt deze hier te staan.",
|
||||
"empty_column.domain_blocks": "Er zijn nog geen geblokkeerde domeinen.",
|
||||
"empty_column.explore_statuses": "Momenteel zijn er geen trends. Kom later terug!",
|
||||
"empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.",
|
||||
@ -234,7 +234,7 @@
|
||||
"keyboard_shortcuts.column": "Op één van de kolommen focussen",
|
||||
"keyboard_shortcuts.compose": "Tekstveld om een bericht te schrijven focussen",
|
||||
"keyboard_shortcuts.description": "Omschrijving",
|
||||
"keyboard_shortcuts.direct": "to open direct messages column",
|
||||
"keyboard_shortcuts.direct": "Directe berichten tonen",
|
||||
"keyboard_shortcuts.down": "Naar beneden in de lijst bewegen",
|
||||
"keyboard_shortcuts.enter": "Volledig bericht tonen",
|
||||
"keyboard_shortcuts.favourite": "Aan jouw favorieten toevoegen",
|
||||
@ -267,8 +267,8 @@
|
||||
"lightbox.expand": "Afbeelding groot weergeven",
|
||||
"lightbox.next": "Volgende",
|
||||
"lightbox.previous": "Vorige",
|
||||
"limited_account_hint.action": "Show profile anyway",
|
||||
"limited_account_hint.title": "This profile has been hidden by the moderators of your server.",
|
||||
"limited_account_hint.action": "Alsnog het profiel tonen",
|
||||
"limited_account_hint.title": "Dit profiel is door de moderatoren van jouw server verborgen.",
|
||||
"lists.account.add": "Aan lijst toevoegen",
|
||||
"lists.account.remove": "Uit lijst verwijderen",
|
||||
"lists.delete": "Lijst verwijderen",
|
||||
@ -295,7 +295,7 @@
|
||||
"navigation_bar.bookmarks": "Bladwijzers",
|
||||
"navigation_bar.community_timeline": "Lokale tijdlijn",
|
||||
"navigation_bar.compose": "Nieuw bericht schrijven",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.direct": "Directe berichten",
|
||||
"navigation_bar.discover": "Ontdekken",
|
||||
"navigation_bar.domain_blocks": "Geblokkeerde domeinen",
|
||||
"navigation_bar.edit_profile": "Profiel bewerken",
|
||||
@ -372,12 +372,12 @@
|
||||
"poll_button.remove_poll": "Poll verwijderen",
|
||||
"privacy.change": "Zichtbaarheid van bericht aanpassen",
|
||||
"privacy.direct.long": "Alleen aan vermelde gebruikers tonen",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.direct.short": "Alleen aan vermelde gebruikers tonen",
|
||||
"privacy.private.long": "Alleen aan volgers tonen",
|
||||
"privacy.private.short": "Alleen volgers",
|
||||
"privacy.public.long": "Voor iedereen zichtbaar",
|
||||
"privacy.public.short": "Openbaar",
|
||||
"privacy.unlisted.long": "Visible for all, but opted-out of discovery features",
|
||||
"privacy.unlisted.long": "Voor iedereen zichtbaar, maar niet onder trends, hashtags en op openbare tijdlijnen",
|
||||
"privacy.unlisted.short": "Minder openbaar",
|
||||
"refresh": "Vernieuwen",
|
||||
"regeneration_indicator.label": "Aan het laden…",
|
||||
|
@ -18,7 +18,7 @@
|
||||
"account.followers": "Seguidors",
|
||||
"account.followers.empty": "Degun sèc pas aqueste utilizaire pel moment.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}",
|
||||
"account.following": "Following",
|
||||
"account.following": "Abonat",
|
||||
"account.following_counter": "{count, plural, one {{counter} Abonaments} other {{counter} Abonaments}}",
|
||||
"account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.",
|
||||
"account.follows_you": "Vos sèc",
|
||||
@ -41,12 +41,12 @@
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Tut} other {{counter} Tuts}}",
|
||||
"account.unblock": "Desblocar @{name}",
|
||||
"account.unblock_domain": "Desblocar {domain}",
|
||||
"account.unblock_short": "Unblock",
|
||||
"account.unblock_short": "Desblocat",
|
||||
"account.unendorse": "Mostrar pas pel perfil",
|
||||
"account.unfollow": "Quitar de sègre",
|
||||
"account.unmute": "Quitar de rescondre @{name}",
|
||||
"account.unmute_notifications": "Mostrar las notificacions de @{name}",
|
||||
"account.unmute_short": "Unmute",
|
||||
"account.unmute_short": "Tornar afichar",
|
||||
"account_note.placeholder": "Clicar per ajustar una nòta",
|
||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||
@ -70,7 +70,7 @@
|
||||
"column.blocks": "Personas blocadas",
|
||||
"column.bookmarks": "Marcadors",
|
||||
"column.community": "Flux public local",
|
||||
"column.direct": "Direct messages",
|
||||
"column.direct": "Messatges dirèctes",
|
||||
"column.directory": "Percórrer los perfils",
|
||||
"column.domain_blocks": "Domenis resconduts",
|
||||
"column.favourites": "Favorits",
|
||||
@ -92,10 +92,10 @@
|
||||
"community.column_settings.local_only": "Sonque local",
|
||||
"community.column_settings.media_only": "Solament los mèdias",
|
||||
"community.column_settings.remote_only": "Sonque alonhat",
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose.language.change": "Cambiar de lenga",
|
||||
"compose.language.search": "Recercar de lengas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Ne saber mai",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.encryption_warning": "Las pubicacions sus Mastodon son pas chifradas del cap a la fin. Partegetz pas d’informacions sensiblas sus Mastodon.",
|
||||
"compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap d’etiqueta estant qu’es pas listat. Òm pòt pas cercar que los tuts publics per etiqueta.",
|
||||
"compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.",
|
||||
"compose_form.lock_disclaimer.lock": "clavat",
|
||||
@ -149,7 +149,7 @@
|
||||
"embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
|
||||
"embed.preview": "Semblarà aquò :",
|
||||
"emoji_button.activity": "Activitats",
|
||||
"emoji_button.clear": "Clear",
|
||||
"emoji_button.clear": "Escafar",
|
||||
"emoji_button.custom": "Personalizats",
|
||||
"emoji_button.flags": "Drapèus",
|
||||
"emoji_button.food": "Beure e manjar",
|
||||
@ -169,7 +169,7 @@
|
||||
"empty_column.blocks": "Avètz pas blocat degun pel moment.",
|
||||
"empty_column.bookmarked_statuses": "Avètz pas cap de tuts marcats pel moment. Quand ne marquetz un, serà mostrat aquí.",
|
||||
"empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
|
||||
"empty_column.domain_blocks": "I a pas encara cap de domeni amagat.",
|
||||
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
|
||||
"empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quand n’auretz un, apareisserà aquí.",
|
||||
@ -191,11 +191,11 @@
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs",
|
||||
"errors.unexpected_crash.report_issue": "Senhalar un problèma",
|
||||
"explore.search_results": "Resultats de recèrca",
|
||||
"explore.suggested_follows": "For you",
|
||||
"explore.suggested_follows": "Per vos",
|
||||
"explore.title": "Explorar",
|
||||
"explore.trending_links": "News",
|
||||
"explore.trending_statuses": "Posts",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
"explore.trending_links": "Novèlas",
|
||||
"explore.trending_statuses": "Publicacions",
|
||||
"explore.trending_tags": "Etiquetas",
|
||||
"follow_recommendations.done": "Acabat",
|
||||
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
|
||||
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
|
||||
@ -295,11 +295,11 @@
|
||||
"navigation_bar.bookmarks": "Marcadors",
|
||||
"navigation_bar.community_timeline": "Flux public local",
|
||||
"navigation_bar.compose": "Escriure un nòu tut",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.direct": "Messatges dirèctes",
|
||||
"navigation_bar.discover": "Trobar",
|
||||
"navigation_bar.domain_blocks": "Domenis resconduts",
|
||||
"navigation_bar.edit_profile": "Modificar lo perfil",
|
||||
"navigation_bar.explore": "Explore",
|
||||
"navigation_bar.explore": "Explorar",
|
||||
"navigation_bar.favourites": "Favorits",
|
||||
"navigation_bar.filters": "Mots ignorats",
|
||||
"navigation_bar.follow_requests": "Demandas d’abonament",
|
||||
@ -314,7 +314,7 @@
|
||||
"navigation_bar.preferences": "Preferéncias",
|
||||
"navigation_bar.public_timeline": "Flux public global",
|
||||
"navigation_bar.security": "Seguretat",
|
||||
"notification.admin.sign_up": "{name} signed up",
|
||||
"notification.admin.sign_up": "{name} se marquèt",
|
||||
"notification.favourite": "{name} a ajustat a sos favorits",
|
||||
"notification.follow": "{name} vos sèc",
|
||||
"notification.follow_request": "{name} a demandat a vos sègre",
|
||||
@ -323,7 +323,7 @@
|
||||
"notification.poll": "Avètz participat a un sondatge que ven de s’acabar",
|
||||
"notification.reblog": "{name} a partejat vòstre estatut",
|
||||
"notification.status": "{name} ven de publicar",
|
||||
"notification.update": "{name} edited a post",
|
||||
"notification.update": "{name} modiquè sa publicacion",
|
||||
"notifications.clear": "Escafar",
|
||||
"notifications.clear_confirmation": "Volètz vertadièrament escafar totas vòstras las notificacions ?",
|
||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||
@ -372,10 +372,10 @@
|
||||
"poll_button.remove_poll": "Levar lo sondatge",
|
||||
"privacy.change": "Ajustar la confidencialitat del messatge",
|
||||
"privacy.direct.long": "Mostrar pas qu’a las personas mencionadas",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.direct.short": "Sonque per las personas mencionadas",
|
||||
"privacy.private.long": "Mostrar pas qu’a vòstres seguidors",
|
||||
"privacy.private.short": "Followers-only",
|
||||
"privacy.public.long": "Visible for all",
|
||||
"privacy.private.short": "Sonque pels seguidors",
|
||||
"privacy.public.long": "Visiblas per totes",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.long": "Visible for all, but opted-out of discovery features",
|
||||
"privacy.unlisted.short": "Pas-listat",
|
||||
|
@ -271,8 +271,8 @@
|
||||
"lightbox.expand": "Rozwiń pole widoku obrazu",
|
||||
"lightbox.next": "Następne",
|
||||
"lightbox.previous": "Poprzednie",
|
||||
"limited_account_hint.action": "Show profile anyway",
|
||||
"limited_account_hint.title": "This profile has been hidden by the moderators of your server.",
|
||||
"limited_account_hint.action": "Pokaż profil mimo wszystko",
|
||||
"limited_account_hint.title": "Ten profil został ukryty przez moderatorów Twojego serwera.",
|
||||
"lists.account.add": "Dodaj do listy",
|
||||
"lists.account.remove": "Usunąć z listy",
|
||||
"lists.delete": "Usuń listę",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Alterar idioma",
|
||||
"compose.language.search": "Pesquisar idiomas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Saiba mais",
|
||||
"compose_form.encryption_warning": "Postagens no Mastodon não são criptografados de ponta a ponta. Não compartilhe nenhuma informação perigosa sobre o Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Este toot não aparecerá em nenhuma hashtag porque está como não-listado. Somente toots públicos podem ser pesquisados por hashtag.",
|
||||
"compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver os toots privados.",
|
||||
"compose_form.lock_disclaimer.lock": "trancado",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Alterar idioma",
|
||||
"compose.language.search": "Pesquisar idiomas...",
|
||||
"compose_form.direct_message_warning_learn_more": "Conhecer mais",
|
||||
"compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.",
|
||||
"compose_form.encryption_warning": "As publicações no Mastodon não são encriptadas ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.",
|
||||
"compose_form.hashtag_warning": "Este toot não será listado em nenhuma hashtag por ser não listado. Apenas toots públics podem ser pesquisados por hashtag.",
|
||||
"compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
|
||||
"compose_form.lock_disclaimer.lock": "bloqueado",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Изменить язык",
|
||||
"compose.language.search": "Поиск языков...",
|
||||
"compose_form.direct_message_warning_learn_more": "Подробнее",
|
||||
"compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь потенциально опасной информацией.",
|
||||
"compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь конфиденциальной информацией через Mastodon.",
|
||||
"compose_form.hashtag_warning": "Так как этот пост не публичный, он не отобразится в поиске по хэштегам.",
|
||||
"compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.",
|
||||
"compose_form.lock_disclaimer.lock": "не закрыта",
|
||||
|
@ -92,7 +92,7 @@
|
||||
"community.column_settings.local_only": "Iba miestna",
|
||||
"community.column_settings.media_only": "Iba médiá",
|
||||
"community.column_settings.remote_only": "Iba odľahlé",
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.change": "Zmeň jazyk",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Zisti viac",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Mësoni më tepër",
|
||||
"compose_form.encryption_warning": "Postimet në Mastodon nuk fshehtëzohen skaj-më-skaj. Mos ndani me të tjerë gjëra me spec në Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ky mesazh s’do të paraqitet nën ndonjë hashtag, ngaqë s’i është caktuar ndonjë. Vetëm mesazhet publike mund të kërkohen sipas hashtagësh.",
|
||||
"compose_form.lock_disclaimer": "Llogaria juaj s’është {locked}. Mund ta ndjekë cilido, për të parë postimet tuaja vetëm për ndjekësit.",
|
||||
"compose_form.lock_disclaimer.lock": "e kyçur",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Change language",
|
||||
"compose.language.search": "Search languages...",
|
||||
"compose_form.direct_message_warning_learn_more": "Lär dig mer",
|
||||
"compose_form.encryption_warning": "Inlägg på Mastodon är inte end-to-end-krypterade. Dela inte någon känslig information över Mastodon.",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "Denna toot kommer inte att visas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.",
|
||||
"compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vem som helst kan följa dig för att se dina inlägg som endast är för följare.",
|
||||
"compose_form.lock_disclaimer.lock": "låst",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "เปลี่ยนภาษา",
|
||||
"compose.language.search": "ค้นหาภาษา...",
|
||||
"compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม",
|
||||
"compose_form.encryption_warning": "โพสต์ใน Mastodon ไม่ได้เข้ารหัสแบบต้นทางถึงปลายทาง อย่าแบ่งปันข้อมูลที่เป็นอันตรายใด ๆ ผ่าน Mastodon",
|
||||
"compose_form.encryption_warning": "โพสต์ใน Mastodon ไม่ได้เข้ารหัสแบบต้นทางถึงปลายทาง อย่าแบ่งปันข้อมูลที่ละเอียดอ่อนใด ๆ ผ่าน Mastodon",
|
||||
"compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก",
|
||||
"compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ",
|
||||
"compose_form.lock_disclaimer.lock": "ล็อคอยู่",
|
||||
|
@ -95,7 +95,7 @@
|
||||
"compose.language.change": "Змінити мову",
|
||||
"compose.language.search": "Шукати мови...",
|
||||
"compose_form.direct_message_warning_learn_more": "Дізнатися більше",
|
||||
"compose_form.encryption_warning": "Дописи на Mastodon не захищені шифруванням. Не поширюйте жодну потенційно небезпечну інформацію.",
|
||||
"compose_form.encryption_warning": "Дописи на Mastodon не захищені шифруванням. Не поширюйте жодну делікатну інформацію.",
|
||||
"compose_form.hashtag_warning": "Цей допис не буде зображений у жодній стрічці гештеґу, оскільки він прихований. Тільки публічні дописи можуть бути знайдені за гештеґом.",
|
||||
"compose_form.lock_disclaimer": "Ваш обліковий запис не {locked}. Будь-який користувач може підписатися на вас та переглядати ваші дописи для підписників.",
|
||||
"compose_form.lock_disclaimer.lock": "приватний",
|
||||
|
@ -106,7 +106,7 @@
|
||||
"compose_form.poll.remove_option": "移除此选项",
|
||||
"compose_form.poll.switch_to_multiple": "将投票改为多选",
|
||||
"compose_form.poll.switch_to_single": "将投票改为单选",
|
||||
"compose_form.publish": "嘟嘟",
|
||||
"compose_form.publish": "Toot!",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "保存更改",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {将媒体标记为敏感内容} other {将媒体标记为敏感内容}}",
|
||||
@ -321,7 +321,7 @@
|
||||
"notification.mention": "{name} 提及了你",
|
||||
"notification.own_poll": "你的投票已经结束",
|
||||
"notification.poll": "你参与的一个投票已经结束",
|
||||
"notification.reblog": "{name} 转嘟了你的嘟文",
|
||||
"notification.reblog": "{name} 转发了你的嘟文",
|
||||
"notification.status": "{name} 刚刚发嘟",
|
||||
"notification.update": "{name} 编辑了嘟文",
|
||||
"notifications.clear": "清空通知列表",
|
||||
@ -373,8 +373,8 @@
|
||||
"privacy.change": "设置嘟文的可见范围",
|
||||
"privacy.direct.long": "只有被提及的用户能看到",
|
||||
"privacy.direct.short": "仅提到的人",
|
||||
"privacy.private.long": "仅关注者可见",
|
||||
"privacy.private.short": "仅对关注者可见",
|
||||
"privacy.private.long": "仅对关注者可见",
|
||||
"privacy.private.short": "仅关注者",
|
||||
"privacy.public.long": "所有人可见",
|
||||
"privacy.public.short": "公开",
|
||||
"privacy.unlisted.long": "对所有人可见,但不加入探索功能",
|
||||
|
@ -328,6 +328,10 @@ export default function compose(state = initialState, action) {
|
||||
map.set('preselectDate', new Date());
|
||||
map.set('idempotencyKey', uuid());
|
||||
|
||||
if (action.status.get('language')) {
|
||||
map.set('language', action.status.get('language'));
|
||||
}
|
||||
|
||||
if (action.status.get('spoiler_text').length > 0) {
|
||||
map.set('spoiler', true);
|
||||
map.set('spoiler_text', action.status.get('spoiler_text'));
|
||||
|
@ -109,7 +109,7 @@ const loadImage = inputFile => new Promise((resolve, reject) => {
|
||||
});
|
||||
|
||||
const getOrientation = (img, type = 'image/png') => new Promise(resolve => {
|
||||
if (type !== 'image/jpeg') {
|
||||
if (!['image/jpeg', 'image/webp'].includes(type)) {
|
||||
resolve(1);
|
||||
return;
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
@import 'mastodon/boost';
|
||||
@import 'mastodon/components';
|
||||
@import 'mastodon/polls';
|
||||
@import 'mastodon/introduction';
|
||||
@import 'mastodon/modal';
|
||||
@import 'mastodon/emoji_picker';
|
||||
@import 'mastodon/about';
|
||||
|
@ -1,6 +1,7 @@
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-display';
|
||||
src: local('Montserrat'),
|
||||
font-family: mastodon-font-display;
|
||||
src:
|
||||
local('Montserrat'),
|
||||
url('~fonts/montserrat/Montserrat-Regular.woff2') format('woff2'),
|
||||
url('~fonts/montserrat/Montserrat-Regular.woff') format('woff'),
|
||||
url('~fonts/montserrat/Montserrat-Regular.ttf') format('truetype');
|
||||
@ -10,8 +11,9 @@
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-display';
|
||||
src: local('Montserrat Medium'),
|
||||
font-family: mastodon-font-display;
|
||||
src:
|
||||
local('Montserrat Medium'),
|
||||
url('~fonts/montserrat/Montserrat-Medium.ttf') format('truetype');
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
|
@ -1,6 +1,7 @@
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-monospace';
|
||||
src: local('Roboto Mono'),
|
||||
font-family: mastodon-font-monospace;
|
||||
src:
|
||||
local('Roboto Mono'),
|
||||
url('~fonts/roboto-mono/robotomono-regular-webfont.woff2') format('woff2'),
|
||||
url('~fonts/roboto-mono/robotomono-regular-webfont.woff') format('woff'),
|
||||
url('~fonts/roboto-mono/robotomono-regular-webfont.ttf') format('truetype'),
|
||||
|
@ -1,6 +1,7 @@
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-sans-serif';
|
||||
src: local('Roboto Italic'),
|
||||
font-family: mastodon-font-sans-serif;
|
||||
src:
|
||||
local('Roboto Italic'),
|
||||
url('~fonts/roboto/roboto-italic-webfont.woff2') format('woff2'),
|
||||
url('~fonts/roboto/roboto-italic-webfont.woff') format('woff'),
|
||||
url('~fonts/roboto/roboto-italic-webfont.ttf') format('truetype'),
|
||||
@ -11,8 +12,9 @@
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-sans-serif';
|
||||
src: local('Roboto Bold'),
|
||||
font-family: mastodon-font-sans-serif;
|
||||
src:
|
||||
local('Roboto Bold'),
|
||||
url('~fonts/roboto/roboto-bold-webfont.woff2') format('woff2'),
|
||||
url('~fonts/roboto/roboto-bold-webfont.woff') format('woff'),
|
||||
url('~fonts/roboto/roboto-bold-webfont.ttf') format('truetype'),
|
||||
@ -23,8 +25,9 @@
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-sans-serif';
|
||||
src: local('Roboto Medium'),
|
||||
font-family: mastodon-font-sans-serif;
|
||||
src:
|
||||
local('Roboto Medium'),
|
||||
url('~fonts/roboto/roboto-medium-webfont.woff2') format('woff2'),
|
||||
url('~fonts/roboto/roboto-medium-webfont.woff') format('woff'),
|
||||
url('~fonts/roboto/roboto-medium-webfont.ttf') format('truetype'),
|
||||
@ -35,8 +38,9 @@
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'mastodon-font-sans-serif';
|
||||
src: local('Roboto'),
|
||||
font-family: mastodon-font-sans-serif;
|
||||
src:
|
||||
local('Roboto'),
|
||||
url('~fonts/roboto/roboto-regular-webfont.woff2') format('woff2'),
|
||||
url('~fonts/roboto/roboto-regular-webfont.woff') format('woff'),
|
||||
url('~fonts/roboto/roboto-regular-webfont.ttf') format('truetype'),
|
||||
|
@ -542,10 +542,10 @@ html {
|
||||
}
|
||||
|
||||
.simple_form {
|
||||
input[type=text],
|
||||
input[type=number],
|
||||
input[type=email],
|
||||
input[type=password],
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="password"],
|
||||
textarea {
|
||||
&:hover {
|
||||
border-color: lighten($ui-base-color, 12%);
|
||||
|
@ -41,7 +41,7 @@ $small-breakpoint: 960px;
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: .85em;
|
||||
margin-bottom: 0.85em;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
@ -73,7 +73,7 @@ $small-breakpoint: 960px;
|
||||
h6 {
|
||||
font-family: $font-display, sans-serif;
|
||||
margin-top: 1.275em;
|
||||
margin-bottom: .85em;
|
||||
margin-bottom: 0.85em;
|
||||
font-weight: 500;
|
||||
color: $secondary-text-color;
|
||||
}
|
||||
@ -436,7 +436,7 @@ $small-breakpoint: 960px;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border: 0;
|
||||
border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
|
||||
border-bottom: 1px solid rgba($ui-base-lighter-color, 0.6);
|
||||
margin: 20px 0;
|
||||
|
||||
&.spacer {
|
||||
|
@ -183,12 +183,9 @@ $content-width: 840px;
|
||||
|
||||
&-heading {
|
||||
display: flex;
|
||||
|
||||
padding-bottom: 36px;
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
|
||||
margin: -15px -15px 40px 0;
|
||||
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
@ -294,7 +291,7 @@ $content-width: 840px;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border: 0;
|
||||
border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
|
||||
border-bottom: 1px solid rgba($ui-base-lighter-color, 0.6);
|
||||
margin: 20px 0;
|
||||
|
||||
&.spacer {
|
||||
|
@ -16,7 +16,7 @@ body {
|
||||
text-rendering: optimizelegibility;
|
||||
font-feature-settings: "kern";
|
||||
text-size-adjust: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0%);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
|
||||
&.system-font {
|
||||
@ -31,7 +31,7 @@ body {
|
||||
// Droid Sans => Older Androids (<4.0)
|
||||
// Helvetica Neue => Older macOS <10.11
|
||||
// $font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0)
|
||||
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", $font-sans-serif, sans-serif;
|
||||
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", $font-sans-serif, sans-serif;
|
||||
}
|
||||
|
||||
&.app-body {
|
||||
@ -202,7 +202,7 @@ button {
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: .85em;
|
||||
margin-bottom: 0.85em;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
|
@ -341,7 +341,6 @@
|
||||
&__sensitive-button {
|
||||
padding: 10px;
|
||||
padding-top: 0;
|
||||
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
|
||||
@ -349,7 +348,7 @@
|
||||
color: $highlight-text-color;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -709,7 +708,7 @@
|
||||
font-size: inherit;
|
||||
vertical-align: middle;
|
||||
object-fit: contain;
|
||||
margin: -.2ex .15em .2ex;
|
||||
margin: -0.2ex 0.15em 0.2ex;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
|
||||
@ -1313,9 +1312,9 @@
|
||||
|
||||
.account__avatar {
|
||||
@include avatar-radius;
|
||||
|
||||
display: block;
|
||||
position: relative;
|
||||
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
background-size: 36px 36px;
|
||||
@ -1328,6 +1327,7 @@
|
||||
|
||||
&-composite {
|
||||
@include avatar-radius;
|
||||
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
@ -1365,6 +1365,7 @@ a .account__avatar {
|
||||
|
||||
img {
|
||||
@include avatar-radius;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
@ -1381,6 +1382,7 @@ a .account__avatar {
|
||||
|
||||
img {
|
||||
@include avatar-radius;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
@ -3980,6 +3982,7 @@ a.status-card.compact:hover {
|
||||
|
||||
&__menu {
|
||||
@include search-popout;
|
||||
|
||||
padding: 0;
|
||||
background: $ui-secondary-color;
|
||||
}
|
||||
@ -4878,7 +4881,7 @@ a.status-card.compact:hover {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 0;
|
||||
transition: opacity .2s ease-in-out;
|
||||
transition: opacity 0.2s ease-in-out;
|
||||
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@ -4933,7 +4936,6 @@ a.status-card.compact:hover {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 25px;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@ -5274,7 +5276,6 @@ a.status-card.compact:hover {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
color: $inverted-text-color;
|
||||
background: $simple-background-color;
|
||||
padding: 10px;
|
||||
@ -5406,7 +5407,6 @@ a.status-card.compact:hover {
|
||||
font-family: inherit;
|
||||
font-size: 14px;
|
||||
resize: none;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
border-radius: 4px;
|
||||
border: 1px solid $ui-secondary-color;
|
||||
@ -5857,6 +5857,7 @@ a.status-card.compact:hover {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/* End Media Gallery */
|
||||
|
||||
.detailed,
|
||||
@ -5869,7 +5870,6 @@ a.status-card.compact:hover {
|
||||
.video-player__volume__handle {
|
||||
bottom: 23px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.audio-player {
|
||||
@ -5991,7 +5991,7 @@ a.status-card.compact:hover {
|
||||
background: linear-gradient(0deg, rgba($base-shadow-color, 0.85) 0, rgba($base-shadow-color, 0.45) 60%, transparent);
|
||||
padding: 0 15px;
|
||||
opacity: 0;
|
||||
transition: opacity .1s ease;
|
||||
transition: opacity 0.1s ease;
|
||||
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@ -6066,7 +6066,6 @@ a.status-card.compact:hover {
|
||||
.player-button {
|
||||
display: inline-block;
|
||||
outline: 0;
|
||||
|
||||
flex: 0 0 auto;
|
||||
background: transparent;
|
||||
padding: 5px;
|
||||
@ -6237,7 +6236,7 @@ a.status-card.compact:hover {
|
||||
box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);
|
||||
|
||||
.no-reduce-motion & {
|
||||
transition: opacity .1s ease;
|
||||
transition: opacity 0.1s ease;
|
||||
}
|
||||
|
||||
&.active {
|
||||
@ -6405,14 +6404,13 @@ a.status-card.compact:hover {
|
||||
display: inline-block;
|
||||
padding: 6px 0;
|
||||
line-height: 18px;
|
||||
cursor: default;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
cursor: pointer;
|
||||
|
||||
input[type=radio],
|
||||
input[type=checkbox] {
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -6505,13 +6503,15 @@ noscript {
|
||||
.navigation-bar__actions {
|
||||
& > .icon-button.close {
|
||||
will-change: opacity transform;
|
||||
transition: opacity $duration * 0.5 $delay,
|
||||
transition:
|
||||
opacity $duration * 0.5 $delay,
|
||||
transform $duration $delay;
|
||||
}
|
||||
|
||||
& > .compose__action-bar .icon-button {
|
||||
will-change: opacity transform;
|
||||
transition: opacity $duration * 0.5 $delay + $duration * 0.5,
|
||||
transition:
|
||||
opacity $duration * 0.5 $delay + $duration * 0.5,
|
||||
transform $duration $delay;
|
||||
}
|
||||
}
|
||||
@ -7286,7 +7286,7 @@ noscript {
|
||||
border-radius: 50%;
|
||||
width: 0.625rem;
|
||||
height: 0.625rem;
|
||||
margin: -.1ex .15em .1ex;
|
||||
margin: -0.1ex 0.15em 0.1ex;
|
||||
}
|
||||
|
||||
&__content {
|
||||
@ -7549,7 +7549,6 @@ noscript {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-left: 2px solid $highlight-text-color;
|
||||
|
@ -37,7 +37,6 @@
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
font-size: 24px;
|
||||
line-height: 21px;
|
||||
color: $primary-text-color;
|
||||
font-family: $font-display, sans-serif;
|
||||
margin-bottom: 20px;
|
||||
|
@ -46,7 +46,7 @@
|
||||
text-align: center;
|
||||
padding: 12px 4px;
|
||||
overflow: hidden;
|
||||
transition: color .1s ease-out;
|
||||
transition: color 0.1s ease-out;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
@ -243,7 +243,7 @@
|
||||
padding-top: 70px;
|
||||
|
||||
.emoji-mart-no-results-label {
|
||||
margin-top: .2em;
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
|
||||
.emoji-mart-emoji:hover::before {
|
||||
|
@ -352,7 +352,7 @@ code {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
input[type="checkbox"] {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 5px;
|
||||
@ -368,11 +368,11 @@ code {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
input[type=number],
|
||||
input[type=email],
|
||||
input[type=password],
|
||||
input[type=url],
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="password"],
|
||||
input[type="url"],
|
||||
textarea {
|
||||
box-sizing: border-box;
|
||||
font-size: 16px;
|
||||
@ -410,10 +410,10 @@ code {
|
||||
}
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
input[type=number],
|
||||
input[type=email],
|
||||
input[type=password] {
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="password"] {
|
||||
&:focus:invalid:not(:placeholder-shown),
|
||||
&:required:invalid:not(:placeholder-shown) {
|
||||
border-color: lighten($error-red, 12%);
|
||||
@ -425,10 +425,10 @@ code {
|
||||
color: lighten($error-red, 12%);
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
input[type=number],
|
||||
input[type=email],
|
||||
input[type=password],
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="password"],
|
||||
textarea,
|
||||
select {
|
||||
border-color: lighten($error-red, 12%);
|
||||
@ -1000,7 +1000,7 @@ code {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
input[type="text"] {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
padding: 10px;
|
||||
|
@ -1,154 +0,0 @@
|
||||
.introduction {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
background: $ui-base-color;
|
||||
|
||||
@media screen and (max-width: 920px) {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
&__pager {
|
||||
background: darken($ui-base-color, 8%);
|
||||
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&__pager,
|
||||
&__frame {
|
||||
border-radius: 10px;
|
||||
width: 50vw;
|
||||
min-width: 920px;
|
||||
|
||||
@media screen and (max-width: 920px) {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
&__frame-wrapper {
|
||||
opacity: 0;
|
||||
transition: opacity 500ms linear;
|
||||
|
||||
&.active {
|
||||
opacity: 1;
|
||||
transition: opacity 50ms linear;
|
||||
}
|
||||
}
|
||||
|
||||
&__frame {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&__illustration {
|
||||
height: 50vh;
|
||||
|
||||
@media screen and (max-width: 630px) {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
img {
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&__text {
|
||||
border-top: 2px solid $ui-highlight-color;
|
||||
|
||||
&--columnized {
|
||||
display: flex;
|
||||
|
||||
& > div {
|
||||
flex: 1 1 33.33%;
|
||||
text-align: center;
|
||||
padding: 25px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 630px) {
|
||||
display: block;
|
||||
padding: 15px 0;
|
||||
padding-bottom: 20px;
|
||||
|
||||
& > div {
|
||||
padding: 10px 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 24px;
|
||||
line-height: 1.5;
|
||||
font-weight: 700;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-weight: 400;
|
||||
color: $darker-text-color;
|
||||
|
||||
code {
|
||||
display: inline-block;
|
||||
background: darken($ui-base-color, 8%);
|
||||
font-size: 15px;
|
||||
border: 1px solid lighten($ui-base-color, 8%);
|
||||
border-radius: 2px;
|
||||
padding: 1px 3px;
|
||||
}
|
||||
}
|
||||
|
||||
&--centered {
|
||||
padding: 25px;
|
||||
padding-bottom: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
&__dots {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 25px;
|
||||
|
||||
@media screen and (max-width: 630px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&__dot {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 14px;
|
||||
border: 1px solid $ui-highlight-color;
|
||||
background: transparent;
|
||||
margin: 0 3px;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: lighten($ui-base-color, 8%);
|
||||
}
|
||||
|
||||
&.active {
|
||||
cursor: default;
|
||||
background: $ui-highlight-color;
|
||||
}
|
||||
}
|
||||
|
||||
&__action {
|
||||
padding: 25px;
|
||||
padding-top: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
@ -64,8 +64,8 @@
|
||||
max-width: calc(100% - 45px - 25px);
|
||||
}
|
||||
|
||||
input[type=radio],
|
||||
input[type=checkbox] {
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
input[type="text"] {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
@ -109,7 +109,6 @@
|
||||
box-sizing: border-box;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
flex: 0 0 auto;
|
||||
margin-right: 10px;
|
||||
top: -1px;
|
||||
border-radius: 50%;
|
||||
@ -198,7 +197,7 @@
|
||||
|
||||
&:active,
|
||||
&:focus {
|
||||
background-color: rgba($dark-text-color, .1);
|
||||
background-color: rgba($dark-text-color, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ a.button.logo-button {
|
||||
|
||||
.embed,
|
||||
.public-layout {
|
||||
.status__content[data-spoiler=folded] {
|
||||
.status__content[data-spoiler="folded"] {
|
||||
.e-content {
|
||||
display: none;
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ $highlight-text-color: $ui-highlight-color !default;
|
||||
$action-button-color: $ui-base-lighter-color !default;
|
||||
$passive-text-color: $gold-star !default;
|
||||
$active-passive-text-color: $success-green !default;
|
||||
|
||||
// For texts on inverted backgrounds
|
||||
$inverted-text-color: $ui-base-color !default;
|
||||
$lighter-text-color: $ui-base-lighter-color !default;
|
||||
@ -48,6 +49,7 @@ $cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
|
||||
|
||||
// Variables for components
|
||||
$media-modal-media-max-width: 100%;
|
||||
|
||||
// put margins on top and bottom of image to avoid the screen covered by image.
|
||||
$media-modal-media-max-height: 80%;
|
||||
|
||||
|
@ -18,7 +18,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.unconfirmed_email.presence || @resource.email,
|
||||
subject: I18n.t(@resource.pending_reconfirmation? ? 'devise.mailer.reconfirmation_instructions.subject' : 'devise.mailer.confirmation_instructions.subject', instance: @instance),
|
||||
template_name: @resource.pending_reconfirmation? ? 'reconfirmation_instructions' : 'confirmation_instructions'
|
||||
@ -32,7 +32,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.reset_password_instructions.subject')
|
||||
end
|
||||
end
|
||||
@ -43,7 +43,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.password_change.subject')
|
||||
end
|
||||
end
|
||||
@ -54,7 +54,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.email_changed.subject')
|
||||
end
|
||||
end
|
||||
@ -65,7 +65,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_enabled.subject')
|
||||
end
|
||||
end
|
||||
@ -76,7 +76,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_disabled.subject')
|
||||
end
|
||||
end
|
||||
@ -87,7 +87,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_recovery_codes_changed.subject')
|
||||
end
|
||||
end
|
||||
@ -98,7 +98,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.webauthn_enabled.subject')
|
||||
end
|
||||
end
|
||||
@ -109,7 +109,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.webauthn_disabled.subject')
|
||||
end
|
||||
end
|
||||
@ -121,7 +121,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.webauthn_credential.added.subject')
|
||||
end
|
||||
end
|
||||
@ -133,7 +133,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('devise.mailer.webauthn_credential.deleted.subject')
|
||||
end
|
||||
end
|
||||
@ -144,7 +144,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('user_mailer.welcome.subject')
|
||||
end
|
||||
end
|
||||
@ -156,7 +156,7 @@ class UserMailer < Devise::Mailer
|
||||
|
||||
return unless @resource.active_for_authentication?
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('user_mailer.backup_ready.subject')
|
||||
end
|
||||
end
|
||||
@ -167,7 +167,7 @@ class UserMailer < Devise::Mailer
|
||||
@instance = Rails.configuration.x.local_domain
|
||||
@statuses = @warning.statuses.includes(:account, :preloadable_poll, :media_attachments, active_mentions: [:account])
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t("user_mailer.warning.subject.#{@warning.action}", acct: "@#{user.account.local_username_and_domain}")
|
||||
end
|
||||
end
|
||||
@ -177,7 +177,7 @@ class UserMailer < Devise::Mailer
|
||||
@instance = Rails.configuration.x.local_domain
|
||||
@appeal = appeal
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('user_mailer.appeal_approved.subject', date: l(@appeal.created_at))
|
||||
end
|
||||
end
|
||||
@ -187,7 +187,7 @@ class UserMailer < Devise::Mailer
|
||||
@instance = Rails.configuration.x.local_domain
|
||||
@appeal = appeal
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('user_mailer.appeal_rejected.subject', date: l(@appeal.created_at))
|
||||
end
|
||||
end
|
||||
@ -200,8 +200,14 @@ class UserMailer < Devise::Mailer
|
||||
@detection = Browser.new(user_agent)
|
||||
@timestamp = timestamp.to_time.utc
|
||||
|
||||
I18n.with_locale(@resource.locale || I18n.default_locale) do
|
||||
I18n.with_locale(locale) do
|
||||
mail to: @resource.email, subject: I18n.t('user_mailer.suspicious_sign_in.subject')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def locale
|
||||
@resource.locale.presence || I18n.default_locale
|
||||
end
|
||||
end
|
||||
|
@ -92,7 +92,7 @@ class Account < ApplicationRecord
|
||||
|
||||
# Local user validations
|
||||
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
|
||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
|
||||
validates :display_name, length: { maximum: MAX_DISPLAY_NAME_LENGTH }, if: -> { local? && will_save_change_to_display_name? }
|
||||
validates :note, note_length: { maximum: MAX_NOTE_LENGTH }, if: -> { local? && will_save_change_to_note? }
|
||||
validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? }
|
||||
|
@ -3,7 +3,7 @@
|
||||
module AccountAvatar
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
|
||||
LIMIT = 2.megabytes
|
||||
|
||||
class_methods do
|
||||
|
@ -3,7 +3,7 @@
|
||||
module AccountHeader
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
|
||||
LIMIT = 2.megabytes
|
||||
MAX_PIXELS = 750_000 # 1500x500px
|
||||
|
||||
|
@ -32,7 +32,7 @@ class CustomEmoji < ApplicationRecord
|
||||
:(#{SHORTCODE_RE_FRAGMENT}):
|
||||
(?=[^[:alnum:]:]|$)/x
|
||||
|
||||
IMAGE_MIME_TYPES = %w(image/png image/gif).freeze
|
||||
IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze
|
||||
|
||||
belongs_to :category, class_name: 'CustomEmojiCategory', optional: true
|
||||
has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode
|
||||
|
@ -16,6 +16,7 @@
|
||||
#
|
||||
|
||||
class DomainBlock < ApplicationRecord
|
||||
include Paginable
|
||||
include DomainNormalizable
|
||||
include DomainMaterializable
|
||||
|
||||
|
@ -44,7 +44,7 @@ class MediaAttachment < ApplicationRecord
|
||||
MAX_VIDEO_MATRIX_LIMIT = 2_304_000 # 1920x1200px
|
||||
MAX_VIDEO_FRAME_RATE = 60
|
||||
|
||||
IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze
|
||||
IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif .webp).freeze
|
||||
VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze
|
||||
AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze
|
||||
|
||||
@ -55,7 +55,7 @@ class MediaAttachment < ApplicationRecord
|
||||
small
|
||||
).freeze
|
||||
|
||||
IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif).freeze
|
||||
IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif image/webp).freeze
|
||||
VIDEO_MIME_TYPES = %w(video/webm video/mp4 video/quicktime video/ogg).freeze
|
||||
VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze
|
||||
AUDIO_MIME_TYPES = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/ogg audio/vorbis audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/x-m4a audio/mp4 audio/3gpp video/x-ms-asf).freeze
|
||||
|
@ -34,7 +34,7 @@
|
||||
class PreviewCard < ApplicationRecord
|
||||
include Attachmentable
|
||||
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
|
||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
|
||||
LIMIT = 1.megabytes
|
||||
|
||||
BLURHASH_OPTIONS = {
|
||||
|
@ -26,7 +26,6 @@
|
||||
# otp_required_for_login :boolean default(FALSE), not null
|
||||
# last_emailed_at :datetime
|
||||
# otp_backup_codes :string is an Array
|
||||
# filtered_languages :string default([]), not null, is an Array
|
||||
# account_id :bigint(8) not null
|
||||
# disabled :boolean default(FALSE), not null
|
||||
# moderator :boolean default(FALSE), not null
|
||||
@ -48,6 +47,7 @@ class User < ApplicationRecord
|
||||
current_sign_in_ip
|
||||
last_sign_in_ip
|
||||
skip_sign_in_token
|
||||
filtered_languages
|
||||
)
|
||||
|
||||
include Settings::Extend
|
||||
|
@ -3,7 +3,7 @@
|
||||
class NodeInfo::Serializer < ActiveModel::Serializer
|
||||
include RoutingHelper
|
||||
|
||||
attributes :version, :software, :protocols, :usage, :open_registrations
|
||||
attributes :version, :software, :protocols, :services, :usage, :open_registrations, :metadata
|
||||
|
||||
def version
|
||||
'2.0'
|
||||
@ -37,6 +37,10 @@ class NodeInfo::Serializer < ActiveModel::Serializer
|
||||
Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode
|
||||
end
|
||||
|
||||
def metadata
|
||||
[]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def instance_presenter
|
||||
|
11
app/serializers/rest/admin/domain_block_serializer.rb
Normal file
@ -0,0 +1,11 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class REST::Admin::DomainBlockSerializer < ActiveModel::Serializer
|
||||
attributes :id, :domain, :created_at, :severity,
|
||||
:reject_media, :reject_reports,
|
||||
:private_comment, :public_comment, :obfuscate
|
||||
|
||||
def id
|
||||
object.id.to_s
|
||||
end
|
||||
end
|
@ -0,0 +1,15 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class REST::Admin::ExistingDomainBlockErrorSerializer < ActiveModel::Serializer
|
||||
attributes :error
|
||||
|
||||
has_one :existing_domain_block, serializer: REST::Admin::DomainBlockSerializer
|
||||
|
||||
def error
|
||||
I18n.t('admin.domain_blocks.existing_domain_block', name: existing_domain_block.domain)
|
||||
end
|
||||
|
||||
def existing_domain_block
|
||||
object
|
||||
end
|
||||
end
|
@ -20,7 +20,7 @@
|
||||
%p<
|
||||
%span.p-summary> #{prerender_custom_emojis(h(status.spoiler_text), status.emojis)}
|
||||
%button.status__content__spoiler-link= t('statuses.show_more')
|
||||
.e-content
|
||||
.e-content{ :lang => status.language }
|
||||
= prerender_custom_emojis(status_content_format(status), status.emojis)
|
||||
|
||||
- if status.preloadable_poll
|
||||
|
@ -32,7 +32,7 @@
|
||||
%p<
|
||||
%span.p-summary> #{prerender_custom_emojis(h(status.spoiler_text), status.emojis)}
|
||||
%button.status__content__spoiler-link= t('statuses.show_more')
|
||||
.e-content<
|
||||
.e-content{ :lang => status.language }<
|
||||
= prerender_custom_emojis(status_content_format(status), status.emojis)
|
||||
|
||||
- if status.preloadable_poll
|
||||
|
@ -47,7 +47,7 @@ class MoveWorker
|
||||
|
||||
def copy_account_notes!
|
||||
AccountNote.where(target_account: @source_account).find_each do |note|
|
||||
text = I18n.with_locale(note.account.user&.locale || I18n.default_locale) do
|
||||
text = I18n.with_locale(note.account.user&.locale.presence || I18n.default_locale) do
|
||||
I18n.t('move_handler.copy_account_note_text', acct: @source_account.acct)
|
||||
end
|
||||
|
||||
@ -90,7 +90,7 @@ class MoveWorker
|
||||
|
||||
def add_account_note_if_needed!(account, id)
|
||||
unless AccountNote.where(account: account, target_account: @target_account).exists?
|
||||
text = I18n.with_locale(account.user&.locale || I18n.default_locale) do
|
||||
text = I18n.with_locale(account.user&.locale.presence || I18n.default_locale) do
|
||||
I18n.t(id, acct: @source_account.acct)
|
||||
end
|
||||
AccountNote.create!(account: account, target_account: @target_account, comment: text)
|
||||
|
@ -51,7 +51,7 @@ class Web::PushNotificationWorker
|
||||
private
|
||||
|
||||
def push_notification_json
|
||||
json = I18n.with_locale(@subscription.locale || I18n.default_locale) do
|
||||
json = I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
@notification,
|
||||
serializer: Web::NotificationSerializer,
|
||||
|
@ -9,7 +9,7 @@ Devise.setup do |config|
|
||||
# CAS strategy
|
||||
if ENV['CAS_ENABLED'] == 'true'
|
||||
cas_options = {}
|
||||
cas_options[:display_name] = ENV['CAS_DISPLAY_NAME'] || 'cas'
|
||||
cas_options[:display_name] = ENV['CAS_DISPLAY_NAME']
|
||||
cas_options[:url] = ENV['CAS_URL'] if ENV['CAS_URL']
|
||||
cas_options[:host] = ENV['CAS_HOST'] if ENV['CAS_HOST']
|
||||
cas_options[:port] = ENV['CAS_PORT'] if ENV['CAS_PORT']
|
||||
@ -38,7 +38,7 @@ Devise.setup do |config|
|
||||
# SAML strategy
|
||||
if ENV['SAML_ENABLED'] == 'true'
|
||||
saml_options = {}
|
||||
saml_options[:display_name] = ENV['SAML_DISPLAY_NAME'] || 'saml'
|
||||
saml_options[:display_name] = ENV['SAML_DISPLAY_NAME']
|
||||
saml_options[:assertion_consumer_service_url] = ENV['SAML_ACS_URL'] if ENV['SAML_ACS_URL']
|
||||
saml_options[:issuer] = ENV['SAML_ISSUER'] if ENV['SAML_ISSUER']
|
||||
saml_options[:idp_sso_target_url] = ENV['SAML_IDP_SSO_TARGET_URL'] if ENV['SAML_IDP_SSO_TARGET_URL']
|
||||
@ -70,7 +70,7 @@ Devise.setup do |config|
|
||||
# OpenID Connect Strategy
|
||||
if ENV['OIDC_ENABLED'] == 'true'
|
||||
oidc_options = {}
|
||||
oidc_options[:display_name] = ENV['OIDC_DISPLAY_NAME'] || 'openid_connect' #OPTIONAL
|
||||
oidc_options[:display_name] = ENV['OIDC_DISPLAY_NAME'] #OPTIONAL
|
||||
oidc_options[:issuer] = ENV['OIDC_ISSUER'] if ENV['OIDC_ISSUER'] #NEED
|
||||
oidc_options[:discovery] = ENV['OIDC_DISCOVERY'] == 'true' if ENV['OIDC_DISCOVERY'] #OPTIONAL (default: false)
|
||||
oidc_options[:client_auth_method] = ENV['OIDC_CLIENT_AUTH_METHOD'] if ENV['OIDC_CLIENT_AUTH_METHOD'] #OPTIONAL (default: basic)
|
||||
|
@ -1472,88 +1472,6 @@ ar:
|
||||
tags:
|
||||
does_not_match_previous_name: لا يطابق الإسم السابق
|
||||
terms:
|
||||
body_html: |
|
||||
<h2>سياسة الخصوصية</h2>
|
||||
<h3 id="collect">ما هي المعلومات التي نجمعها؟</h3>
|
||||
<ul>
|
||||
<li><em>معلومات الحساب الأساسية</em>: إذا سجلت على هذا الخادم، فسيُطلب منك أن تُدخل اسم المستخدم، عنوان بريد إلكتروني، وكلمة سر، وتستطيع أن تُدخل معلومات تعريفية إضافية مثل اسم معروض، وسيرة ذاتية، وصورة رمزية، وصورة رأسية. اسم المستخدم، والاسم المعروض، والسيرة الذاتية، والصورة الرمزية، والصورة الرأسية سيكونون ظاهرين بشكل علني للجميع دائماً.</li>
|
||||
<li><em>المنشورات، المتابَعون، ومعلومات علنية أخرى</em>: قائمة الأشخاص الذين تُتابِعُهم علنية للجميع، نفس الشيء مع قائمة متابِعيك. عندما تُرسل رسالة، يتم تخزين التاريخ والوقت واسم البرنامج المنَشور منه. يُمكن للرسائل أن تحتوي على وسائط مُرفقة مثل الصور ومقاطع الفيديو. المنشورات العامة والغير مُدرجة متوفرات بشكل علني. عندما تُميّز منشور على ملفك الشخصي، فهذه أيضاً معلومات متوفرة بشكل علني. يتم تسليم منشوراتك إلى متابِعيك، في بعض الأحيان، يتم تسليمهم إلى خوادم مختلفة ويتم نسخهم وحفظهم هناك. عندما تحذف منشور معيّن، يتم تسليم هذه المعلومة على نفس المنوال إلى متابِعيك أيضاً، إعادة النشر والإعجاب بمنشور معيّن هما أضاً تصرفات علنية دائماً.</li>
|
||||
<li><em>المنشورات المباشرة ومنشورات المتابِعين فقط</em>: تُخزّن وتُعالج كل المنشورات على الخادم. يتم تسليم "منشورات المتابعين فقط" إلى متابِعيك والأشخاص المذكورين في المنشور، ويتم تسليم المنشورات المباشرة إلى الأشخاص المذكورين في المنشور فقط لا غير. في بعض الأحيان يتم تسليمهم إلى خوادم مختلفة ويتم حفظ نُسخ منهم هناك. نحن نبذل جهداً حسن النية للحد من إمكانية وصول المنشورات إلى الأشخاص المُصرّح لهم فقط، ولكن قد تفشل الخوادم الأخرى في القيام بذلك، لذلك من المهم أن تُراجِع الخوادم التي ينتمي إليها متابِعوك. تستطيع أن تُصحّح في الإعدادات على خيار "الموافقة أو الرفض اليدوي" للمتابِعين الجدد. <em>ضع في الحسبان أنه من الممكن أن يقرأ أيُّ أحد من الخوادم هذه الرسائل أو المنشورات</em>، ومن الممكن أن يلتقط المُستقبِلون لقطات شاشة أو أن ينسخوا أو يعيدوا مشاركتهم بطريقة أخرى، لذلك <em>لا تنشر أي معلومات خطرة على ماستدون.</em></li>
|
||||
|
||||
<li><em>عناوين الـIP وبيانات وصفية أخرى</em>: عندما تُسجل دخولك، نقوم بتسجيل عنوان الـIP الذي دخلت منه، وأيضاً اسم المتصفح الذي دخلت منه، كل عناوين الـIP لتسجيلات الدخول متاحة لك للمراجعة وللإبطال في الإعدادات. يبقى آخر عنوان IP مُسجل لما يصل إلى 12 شهراً. ومن الممكن أن نحتفظ بسجلات الخادم التي تحتوي على عنوان الـIP من كل طلب وصول إلى خادمنا.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="use">بماذا نستعمل معلوماتك؟</h3>
|
||||
|
||||
<p>أي معلومات نجمعها عنك قَد تُستخدم بالطرق التالية:</p>
|
||||
|
||||
<ul>
|
||||
<li>لتوفير الوظائف الأساسية لماستدون، تستطيع أن تتفاعل مع محتوى الآخرين وأن تنشر محتواك الخاص عندما تُسجل دخولك. كمثال، تستطيع أن تُتابِع حسابات أشخاص آخرين لعرض منشوراتهم المُجمّعة في خطك الزمني الشخصي الرئيسي.</li>
|
||||
<li>للمساعدة في اعتدال المجتمع. كمثال، مقارنة عنوان الـIP الخاص بك بعناوين IP أخرى معروفة لمعرفة ما إذا ثمة هناك أي تهرب من الحظر أو انتهاكات أخرى.</li>
|
||||
<li>يمكن أن يُستعمل عنوان بريدك الإلكتروني الذي أدخلته لإرسال معلومات إليك، أو إشعارات عن تفاعل أشخاص آخرين مع محتواك أو إرسالهم راسائل إليك، أو للرد على استفسارات، و/أو طلبات أو أسئلة أخرى.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="protect">كيف نحمي معلوماتك؟</h3>
|
||||
|
||||
<p>نقوم بتنفيذ مجموعة متنوعة من التدابير الأمنية للحفاظ على سلامة معلوماتك الشخصية عندما تدخلها، أو ترسلها، أو تقوم بالوصول إليها. بجاني أشياء أخرى، تؤَمن جلسة المتصفح الخاص بك، وحركة المرور بين تطبيقاتك والـAPI (واجهة برمجة التطبيقات) باستخدام SSL (بروتوكول طبقة المقابس الآمنة)، وتُهَش أو بالأحرى تُجَزأ كلمة السر الخاصة بك باستخدام خوارزمية أحادية الاتجاه، يمكنك تفعيل خاصّية "الاستيثاق بخطوتين" لتؤَمن وتُصعب إمكانية الوصول إلى حسابك أكثر.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="data-retention">ما هي سياسة الاحتفاظ بالبيانات لدينا؟</h3>
|
||||
|
||||
<p>سنبذل جهداً حسن النية لـ:</p>
|
||||
|
||||
<ul>
|
||||
<li>حفظ سجلّات بيانات الخوادم التي تحتوي على عنوان الـIP من كل طلب وصول إلى خادمنا، بقدر ما يتم الاحتفاظ بهذه السجلات، لا تزيد عن 90 يومًا.</li>
|
||||
<li>الاحتفاظ بعناوين الـIP المربوطة بالمُستخدمين المُسجلين دخولهم لمدة لا تزيد عن 12 شهراً.</li>
|
||||
</ul>
|
||||
|
||||
<p>تستطيع أن تطلب وتُنزل أرشيف لمحتواك، الذي يحتوي على منشوراتك، ووسائطك المُرفقة، وصورك الرمزية، وصورك الرأسية.</p>
|
||||
|
||||
<p>تستطيع أن تحذف حسابك بشكل لا رجعة فيه في أي وقت تريد.</p>
|
||||
|
||||
<hr class="spacer"/>
|
||||
|
||||
<h3 id="cookies">هل نستخدم الـCookies (ملفات تعريف الارتباط)؟</h3>
|
||||
|
||||
<p>نعم، الـcookies هي عبارة عن قطعة نصية صغيرة مخزنة على قرص حاسوبك من قبل متصفحك (إذا سمحت له). تسمح هذه الـcookies للموقع بأن يتعرف على متصفحك، وإذا كنت قد سجلت دخولك إلى حسابك، فسيربطه بحسابك المسجل.</p>
|
||||
|
||||
<p>نستعمل الـcookies لفهم ولحفظ تفضيلاتك للزيارات المستقبلية</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="disclose">هل نُفصح عن أي معلومات لأطراف خارجية؟</h3>
|
||||
|
||||
<p>نحن لا نبيع، أو نتاجر، أو بأي طريقة أخرى نُحول بياناتك التعريفية الشخصية إلى جهات خارجية. طبعاً هذا الكلام لا ينطبق على الجهات الموثوقة التي تساعدنا في تشغيل موقعنا، أو في إجراء أعمالنا، أو في خدمتك طالما أنهم يوافقون على الحفاظ على سرّيتها. ومن الممكن أن نُطلق أو أن نُصرّح بمعلوماتك عندما نؤمِن بأن هذا هو التصرّف الصحيح للامتثال للقانون، أو لتطبيق سياسة موقعنا، أو لحفظ الحقوق، أو الأملاك، أو الأمان الخاص بنا أو بغيرنا.</p>
|
||||
|
||||
<p>من الممكن أن يُنزل محتواك من قبل خوادم أخرى في الشبكة، يتم تسليم منشوراتك "العامة" ومنشورات "المتابعين فقط" إلى الخوادم التي يقيم فيها متابِعوك، وتُسلم الرسائل المباشرة إلى خوادم التي يُقيم فيها المُستقبلون، طالما أن هؤلاء المتابِعين أو المُستلمين يقيمون في خوادم مختلفة عن هذا الخادم.</p>
|
||||
|
||||
<p>عندما تخوّل تطبيق معين لاستخدام حسابك، وطبعاً على حسب نطاق الأذونات التي سمحت له بها، فيستطيع هذا التطبيق الوصول إلى معلومات ملفك التعريفي العامة، قائمة المتابَعون منك، قائمة المتابِعون لك، كل منشوراتك، وكل إعجاباتك. لا يمكن للتطبيقات الوصول إلى عنوان بريدك الإلكتروني أو إلى كلمة مرورك.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="children">استخدام الأطفال للموقع</h3>
|
||||
|
||||
<p>إذا كان هذا الخادم في الـEU (الإتحاد الأوروبي) أو في الـEEA (المنطقة الاقتصادية الأوروبية): فموقعنا، ومنتجاتنا وخدماتنا كلها موجهة للأشخاص الذين لا تقل أعمارهم عن الـ16 سنة، إذا كنت تحت هذا السن، حسب متطلبات الـ<a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D9%86%D8%B8%D8%A7%D9%85_%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D9%88%D8%A8%D9%8A_%D8%A7%D9%84%D8%B9%D8%A7%D9%85_%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9_%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA">GDPR</a> (النظام الأوروبي العام لحماية البيانات) فلا تستخدم هذا الموقع.</p>
|
||||
|
||||
|
||||
<p>إذا كان هذا السيرفر في الـUS (الولايات المتحدة الأمريكية): فموقعنا، ومنتجاتنا وخدماتنا كلها موجهة للأشخاص الذين لا تقل أعمارهم عن الـ13 سنة، إذا كنت تحت هذا السن، حسب متطلبات الـ<a href="https://ar.wikipedia.org/wiki/%D9%82%D8%A7%D9%86%D9%88%D9%86_%D8%AD%D9%85%D8%A7%D9%8A%D8%A9_%D8%AE%D8%B5%D9%88%D8%B5%D9%8A%D8%A9_%D8%A7%D9%84%D8%A3%D8%B7%D9%81%D8%A7%D9%84_%D8%B9%D9%84%D9%89_%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA">COPPA</a> (قانون حماية خصوصية الأطفال على الإنترنت) فلا تستخدم هذا الموقع.</p>
|
||||
|
||||
<p>من الممكن أن تكون المتطلبات القانونية مختلفة إذا كان هذا الخادم في ولاية قضائية أخرى.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="changes">تغييرات لسياستنا للخصوصية</h3>
|
||||
|
||||
<p>إذا قررنا أن نغير سياستنا للخصوصية، فسنَنشر هذه التغييرات على هذه الصفحة.</p>
|
||||
|
||||
<p>هذه الوثيقة هي CC-BY-SA (النسبة-الترخيص بالمثل)، تم آخر تحديث لها في 7 مارس، 2018.</p>
|
||||
|
||||
<p>مقتبسة في الأصل من <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
||||
title: شروط الخدمة وسياسة الخصوصية على %{instance}
|
||||
themes:
|
||||
contrast: ماستدون (تباين عالٍ)
|
||||
|
@ -1525,87 +1525,6 @@ ca:
|
||||
tags:
|
||||
does_not_match_previous_name: no coincideix amb el nom anterior
|
||||
terms:
|
||||
body_html: |
|
||||
<h2>Política de Privacitat</h2>
|
||||
<h3 id="collect">Quina informació recollim?</h3>
|
||||
|
||||
<ul>
|
||||
<li><em>Informació bàsica del compte</em>: Si et registres en aquest servidor, se´t pot demanar que introdueixis un nom d'usuari, una adreça de correu electrònic i una contrasenya. També pots introduir informació de perfil addicional, com ara un nom de visualització i una biografia, i carregar una imatge de perfil i de capçalera. El nom d'usuari, el nom de visualització, la biografia, la imatge de perfil i la imatge de capçalera sempre apareixen públicament.</li>
|
||||
<li><em>Publicacions, seguiment i altra informació pública</em>: La llista de persones que segueixes s'enumeren públicament i el mateix passa amb els teus seguidors. Quan envies un missatge, la data i l'hora s'emmagatzemen, així com l'aplicació que va enviar el missatge. Els missatges poden contenir multimèdia, com ara imatges i vídeos. Els toots públics i no llistats estan disponibles públicament. En quan tinguis un toot en el teu perfil, aquest també és informació pública. Les teves entrades es lliuren als teus seguidors que en alguns casos significa que es lliuren a diferents servidors en els quals s'hi emmagatzemen còpies. Quan suprimeixes publicacions, també es lliuraran als teus seguidors. L'acció d'impulsar o marcar com a favorit una publicació sempre és pública.</li>
|
||||
<li><em>Toots directes i per a només seguidors</em>: Totes les publicacions s'emmagatzemen i processen al servidor. Els toots per a només seguidors només es lliuren als teus seguidors i als usuaris que s'esmenten en ells i els toots directes només es lliuren als usuaris esmentats. En alguns casos, significa que es lliuren a diferents servidors i s'hi emmagatzemen còpies. Fem un esforç de bona fe per limitar l'accés a aquestes publicacions només a les persones autoritzades, però és possible que altres servidors no ho facin. Per tant, és important revisar els servidors als quals pertanyen els teus seguidors. Pots canviar la opció de aprovar o rebutjar els nous seguidors manualment a la configuració. <em>Tingues en compte que els operadors del servidor i qualsevol servidor receptor poden visualitzar aquests missatges</em> i els destinataris poden fer una captura de pantalla, copiar-los o tornar-los a compartir. <em>No comparteixis cap informació perillosa a Mastodon.</em></li>
|
||||
<li><em>IPs i altres metadades</em>: Quan inicies sessió registrem l'adreça IP en que l'has iniciat, així com el nom de l'aplicació o navegador. Totes les sessions registrades estan disponibles per a la teva revisió i revocació a la configuració. L'última adreça IP utilitzada s'emmagatzema durant un màxim de 12 mesos. També podrem conservar els registres que inclouen l'adreça IP de cada sol·licitud al nostre servidor.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="use">Per a què utilitzem la teva informació?</h3>
|
||||
|
||||
<p>Qualsevol de la informació que recopilem de tu es pot utilitzar de la manera següent:</p>
|
||||
|
||||
<ul>
|
||||
<li>Per proporcionar la funcionalitat bàsica de Mastodon. Només pots interactuar amb el contingut d'altres persones i publicar el teu propi contingut quan hàgis iniciat la sessió. Per exemple, pots seguir altres persones per veure les publicacions combinades a la teva pròpia línia de temps personalitzada.</li>
|
||||
<li>Per ajudar a la moderació de la comunitat, per exemple comparar la teva adreça IP amb altres conegudes per determinar l'evasió de prohibicions o altres infraccions.</li>
|
||||
<li>L'adreça electrònica que ens proporciones pot utilitzar-se per enviar-te informació, notificacions sobre altres persones que interactuen amb el teu contingut o t'envien missatges, i per respondre a les consultes i / o altres sol·licituds o preguntes.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="protect">Com protegim la teva informació</h3>
|
||||
|
||||
<p>Implementem diverses mesures per mantenir la seguretat quan introdueixes, envies o accedeixes a la teva informació personal. Entre altres mesures, la sessió del teu navegador així com el trànsit entre les teves aplicacions i l'API estan protegides amb SSL i la teva contrasenya es codifica utilitzant un algoritme de direcció única. Pots habilitar l'autenticació de dos factors per a garantir l'accés segur al teu compte.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="data-retention">Quina és la nostra política de retenció de dades?</h3>
|
||||
|
||||
<p>Farem un esforç de bona fe per:</p>
|
||||
|
||||
<ul>
|
||||
<li>Conservar els registres del servidor que continguin l'adreça IP de totes les sol·licituds que rebi, tenint em compte que aquests registres es mantenen no més de 90 dies.</li>
|
||||
<li>Conservar les adreces IP associades als usuaris registrats no més de 12 mesos.</li>
|
||||
</ul>
|
||||
|
||||
<p>Pots sol·licitar i descarregar un arxiu del teu contingut incloses les publicacions, els fitxers adjunts multimèdia, la imatge de perfil i la imatge de capçalera.</p>
|
||||
|
||||
<p>Pots eliminar el teu compte de forma irreversible en qualsevol moment.</p>
|
||||
|
||||
<hr class="spacer"/>
|
||||
|
||||
<h3 id="cookies">Utilitzem cookies?</h3>
|
||||
|
||||
<p>Sí. Les cookies són petits fitxers que un lloc o el proveïdor de serveis transfereix al disc dur del teu ordinador a través del navegador web (si ho permet). Aquestes galetes permeten al lloc reconèixer el teu navegador i, si tens un compte registrat, associar-lo al teu compte registrat.</p>
|
||||
|
||||
<p>Utilitzem cookies per entendre i guardar les teves preferències per a futures visites.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="disclose">Revelem informació a terceres parts?</h3>
|
||||
|
||||
<p>No venem, comercialitzem ni transmetem a tercers la teva informació d'identificació personal. Això no inclou tercers de confiança que ens ajuden a operar el nostre lloc, a dur a terme el nostre servei o a servir-te, sempre que aquestes parts acceptin mantenir confidencial aquesta informació. També podem publicar la teva informació quan creiem que l'alliberament és apropiat per complir amb la llei, fer complir les polítiques del nostre lloc o protegir els nostres drets o altres drets, propietat o seguretat.</p>
|
||||
|
||||
<p>Els altres servidors de la teva xarxa poden descarregar contingut públic. Els teus toots públics i per a només seguidors es lliuren als servidors on resideixen els teus seguidors i els missatges directes s'envien als servidors dels destinataris, sempre que aquests seguidors o destinataris resideixin en un servidor diferent d'aquest.</p>
|
||||
|
||||
<p>Quan autoritzes una aplicació a utilitzar el teu compte, segons l'abast dels permisos que aprovis, pot accedir a la teva informació de perfil pública, a la teva llista de seguits, als teus seguidors, a les teves llistes, a totes les teves publicacions i als teus favorits. Les aplicacions mai no poden accedir a la teva adreça de correu electrònic o contrasenya.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="children">Ús del lloc dels nens</h3>
|
||||
|
||||
<p>Si el servidor és a EU o EEA: el nostre lloc, productes i serveis estan dirigits a persones que tenen almenys 16 anys. Si tens menys de 16 anys, seguint els requisits del GDPR (<a href="https://ca.wikipedia.org/wiki/Reglament_General_de_Protecció_de_Dades">Reglament General de Protecció de Dades</a>) no utilitzis aquest lloc.</p>
|
||||
|
||||
<p>Si aquest servidor es troba als EUA: el nostre lloc, productes i serveis estan dirigits a persones que tenen almenys 13 anys. Si tens menys de 13 anys, segons els requisits de COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) no utilitzis aquest lloc.</p>
|
||||
|
||||
<p>Els requisits legals poden ser diferents si aquest servidor està en una altra jurisdicció.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="changes">Canvis a la nostra política de privacitat</h3>
|
||||
|
||||
<p>Si decidim canviar la nostra política de privadesa, publicarem aquests canvis en aquesta pàgina.</p>
|
||||
|
||||
<p>Aquest document és CC-BY-SA. Actualitzat per darrera vegada el 7 de Març del 2018.</p>
|
||||
|
||||
<p>Originalment adaptat des del <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
||||
title: "%{instance} Condicions del servei i política de privadesa"
|
||||
themes:
|
||||
contrast: Mastodon (alt contrast)
|
||||
|
@ -1208,83 +1208,6 @@ ckb:
|
||||
tags:
|
||||
does_not_match_previous_name: لەگەڵ ناوی پێشوو یەک ناگرێتەوە
|
||||
terms:
|
||||
body_html: |
|
||||
<h2>سیاسەتی تایبەت</h2>
|
||||
<h3 id="collect">چ زانیاریێک کۆ دەکەینەوە؟</h3>
|
||||
<ul>
|
||||
<li><em>زانیاری ئەژمێری بنەڕەتی</em>: ئەگەر تۆ لەسەر ئەم ڕاژەی تۆماربکەیت، لەوانەیە داوات لێبکرێت ناوی بەکارهێنەر، ناونیشانی ئیمەیڵ و نهێنوشە تێبنووسیت. هەروەها دەتوانیت زانیاری پرۆفایلی زیاتر تێبنووسی ت وەک ناوی پیشاندان و ژیاننامە، و بارکردنی وێنەی پرۆفایل و وێنەی سەرپەڕە. ناوی بەکارهێنەر، ناوی پیشاندان، ژیاننامە، وێنەی پرۆفایل و وێنەی سەرپەڕە هەمیشە بە ئاشکرا لیست کراوە.</li>
|
||||
<li><em> پۆستەکان، بەدواکەوتن و زانیاری گشتی </em>: لیستی ئەو کەسانەی کە پەیڕەوی دەکەیت بە ئاشکرا لیست کراوە، هەمان شت بۆ شوێنکەوتەکانت ڕاستە. کاتێک ئیمەیڵێکت پێشکەش کرد، بەروار و کات خەزن کراوە و هەروەها ئەو بەرنامەیەی کە نامەکەت لەوە پێشکەش کردووە. نامەکان لەوانەیە هاوپێچی میدیای تێدابێت، وەک وێنە و ڤیدیۆ. گشتی و لیستە نەکراوەکان بابەتەکان بە ئاشکرا بەردەستن. کاتێک بابەتێک پێشکەش دەکەیت لەسەر پرۆفایلەکەت، کە هەروەها زانیاری بەردەستی گشتیە. بابەتەکانت دەگەیەنینە شوێنکەوتەکانت، لە هەندێک حاڵەتدا مانای وایە دەگەیەنینە ڕاژەکاری جیاواز و کۆپیەکان لەوێ هەڵگیراون. کاتێک بابەتەکان دەسڕیتەوە، ئەمە بە هەمان شێوەیە دەگەیەنیتە شوێنکەوتوانی خۆت. کاری سەرلێبڕین یان بە دڵنییاکردنی پۆستی تر هەمیشە گشتیە.</li>
|
||||
<li><em> ڕاستەوخۆ و تەنها شوێنکەوتوانی بابەتەکان</em>: هەموو بابەتەکان خەزن کراون و لە ڕاژەکارەکە دا پرۆسەکراون. پۆست تەنها شوێنکەوتوانی خۆت دەگەیەنینە شوێنکەوتوانی خۆت و بەکارهێنەران کە تێیدا باس دەکرێت، و پۆستی ڕاستەوخۆش تەنها دەگەیەنینە ئەو بەکارهێنەرانەی کە ئاماژەیان پێکراوە لە هەندێک حاڵەتدا واتە دەگەیەنینە ڕاژەی جیاوازەکان و کۆپیەکان لەوێ هەڵگیراون ئێمە هەوڵی باوەڕێکی باش دەکەین بۆ سنووردارکردنی گەیشتن بەو پۆستانە تەنها بۆ کەسانی ڕێگەپێدراو، بەڵام لەوانەیە ڕاژەکارەکانی تر سەرکەوتوو نەبوون. بۆیە گرنگە پێداچوونەوە بە سێرڤەرەکان بکەیت کە شوێنکەوتوانی تۆ هی ئەوەن. لەوانەیە بژاردەیەک بگۆڕیت بۆ پەسەندکردن و ڕەتکردنەوەی شوێنکەوتوانی نوێ بە دەستی لە ڕێکبەندەکان. <em> تکایە لە بیرت بێت کە کارپێکەرەکانی سێرڤەرەکە و هەر خزمەتکاری وەرگرێک لەوانەیە ئەم جۆرە نامانە </em>، و وەرگرەکان لەوانەیە گرتەی شاشە یان کۆپی بکەن یان بە پێچەوانەوە دووبارە بەشداری پێبکەن. <em> هیچ زانیاریەکی مەترسیدار لەسەر ماستۆدۆن بڵاو</em></li>
|
||||
<li><em>ئای پی و مێتاداتای تر</em>: کاتێک دەچیتە ژوورەوە، ئێمە ئەو ئای پی ە تۆمار دەکەین کە تۆ لە ناوی ەوە داخڵ تدەکەیت، هەروەها ناوی بەرنامەی وێبگەڕەکەت. هەموو ئەو کۆکراوانەی لە کۆبوونەوەکاندا هەن بۆ پێداچوونەوە و بەتاڵکردنەوەت لە ڕێکبەندەکان. نوێترین ناونیشانی IP بەکارهێنراوە خەزن کراوە بۆ ١٢ مانگ. هەروەها لەوانەیە ئێمە مادە ڕاژەکارەکان بهێڵین کە ئای پی ئەدرێسی هەموو داواکارییەک بۆ ڕاژەکارەکانمان </li>
|
||||
</ul>
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 id="use">ئێمە زانیاری ئێوەمان بۆ چییە؟</h3>
|
||||
|
||||
<p> ئەو زانیاریانەی لە ئێوە کۆی دەکەین لەوانەیە بەم ڕێگایانە بەکار بهێنرێت:</p>
|
||||
|
||||
<ul>
|
||||
<li> بۆ دابینکردنی ئەرکە سەرەکیەکانی ماستۆدۆن. دەتوانیت تەنها کارلێک بکەیت لەگەڵ ناوەڕۆکی کەسانی تر و ناوەڕۆکی خۆت پۆست بکەیت کاتێک دەچیتە ژوورەوە. بۆ نموونە، لەوانەیە شوێن کەسانی تر بکەویت بۆ بینینی پۆستە تێکەڵەکانیان لە تایم لاینی ماڵەوەی تایبەتی خۆت.</li>
|
||||
<li> بۆ چاودێری کردنی کۆمەڵگا، بۆ نموونە بەراوردکردنی ناونیشانی IPەکەت لەگەڵ کەسانی ناسراو بۆ دیاریکردنی خۆدزینەوە یان پێشێلکاریتر.</li>
|
||||
<li> ئەو ئیمەیڵەی کە تۆ دەستەبەرت کردووە لەوانەیە بەکاربێت بۆ ناردنی زانیاری، ئاگاداری دەربارەی کەسانی تر کە کارلێک دەکەن لەگەڵ ناوەڕۆکەکەت یان ناردنی نامەکانت، و وەڵامدانەوەی پرسیارکردنەکان، و/یان داواکارییان یان پرسیارەکانی تر.</li>
|
||||
</ul>
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 id="بپارێزە"> چۆن زانیاریەکەت دەپارێزین؟</h3>
|
||||
|
||||
<p> ئێمە چەندین پێوانەی ئەمنی جۆراوجۆر جێبەجێ دەکەین بۆ پاراستنی سەلامەتی زانیاری ە تایبەتیەکانت کاتێک تۆ داخڵت کردووە یان پێشکەشکردن یان چوونە ژوورەوە بۆ زانیاری تایبەتی. لە نێوان شتەکانی تردا، دانیشتنی وێبگەڕەکەت، هەروەها ترافیکی نێوان کاربەرنامەکانت و API، بە SSL پارێزراوە، و نهێنوشەکەت بە بەکارهێنانی ئەلگاریتمی یەک-ڕێگەی بەهێز بە هاوسێکراوە. دەتوانیت سەلماندنی دوو-فاکتەر بەتوانا بکەیت بۆ زیاتر پاراستنی چوونە ژوورەوە بۆ ئەژمێرەکەت.</p>
|
||||
|
||||
< hr="spacer" />
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 id="داتا-هێشتنەوە"> بیمەنامەی هێشتنەوە داتامان چییە؟</h3>
|
||||
|
||||
<p> ئێمە بە باشی هەوڵ بۆ باوەڕەکان </p>
|
||||
|
||||
<ul>
|
||||
<li> سێرڤەری پاراستنی ناونووسەکان کە ناونیشانی ئای پی تێدایە بۆ هەموو داواکاریەکان بۆ ئەم سێرڤەرە، تا ئێستا وەک ئەو جۆرە لۆگانە پارێزراون، زیاتر لە 90 ڕۆژ.</li>
|
||||
<li> ئای پیەکە بپارێزە کە پەیوەندی بە بەکارهێنەرە تۆمارکراوەکان هەیە زیاتر لە 12 مانگ.</li>
|
||||
</ul>
|
||||
<p> دەتوانیت داواکاری و داگرتنی ئەرشیفی ناوەڕۆکەکەت بکەیت، لەوانە بابەتەکانت، هاوپێچەکانی میدیا، وێنەی پرۆفایل، و وێنەی سەرپەڕە.</p>
|
||||
|
||||
<p> تۆ دەتوانیت بە شێوەیەکی نائاسایی ئەژمێرەکەت بسڕیتەوە لە هەر کاتێکدا.</p>
|
||||
|
||||
< hr="spacer"/>
|
||||
|
||||
<h3 id="کۆکیز"> ئایا ئێمە کۆکیز بەکار بێنە؟</h3>
|
||||
|
||||
<p> بەڵێ کۆکیزەکان فایلی بچووکن کە سایتێک یان دابینکەری خزمەتگوزاریەکەی دەیگوێزێتەوە بۆ هارد درایڤی کۆمپیوتەرەکەت لە ڕێگەی وێبگەڕەکەت (ئەگەر ڕێگەت پێ بدەیت). ئەم کۆکیزانە وێبسایتە بەتوانا دەکەن بۆ ناسینەوەی وێبگەڕەکەت و، ئەگەر ئەژمێرێکی تۆمارکراوت هەیە، بیبەستە بە ئەژمێری تۆمارکراو.</p>
|
||||
|
||||
<p> کۆکیز بەکاربێنە بۆ تێگەیشتن و هەڵگرتنی پەسەندیەکانی تۆ بۆ سەردانەکانی داهاتوو.</p>
|
||||
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 ="ئاشکرا</h3> > ئایا هیچ زانیارییەک بۆ حزبەکانی دەرەوە ئاشکرا دەکەین؟
|
||||
|
||||
<p> ئێمە زانیاریە تایبەتەکانت نافرۆشین، بازرگانی دەکەین، یان ناگوازرێتەوە بۆ حزبەکانی دەرەوە. ئەمە لایەنی سێیەمی باوەڕپێکراو ی تێدا نییە کە یارمەتیمان دەدات لە کارپێکردنی سایتەکەمان، ئەنجامدانی کارەکانمان، یان خزمەتکردنی ئێوە، هەتا ئەو حزبانە ڕازی بن بە نهێنی هێشتنەوەی ئەم زانیاریانە. هەروەها لەوانەیە زانیاریەکەت بڵاوکەینەوه کاتێک پێمان وایە ئازادکردن گونجاوە بۆ پابەندبوون بە یاسا، سەپاندنی سیاسەتی ماڵپەڕەکەمان، یان پاراستنی مافەکانمان یان مافی تر، موڵک، یان سەلامەتی.</p>
|
||||
|
||||
<p> لەوانەیە ناوەڕۆکی گشتیت دابەزێنرابێت لەلایەن خزمەتگوزاریەکانی ترەوە لە تۆڕەکەدا. پۆستە گشتی و تەنها شوێنکەوتوانی تۆ دەگەیەنینە ئەو سێرڤەرانەی کە شوێنکەوتوانی تێیدا نواندووە، و پەیامی ڕاستەوخۆ دەگەیەنینە خزمەتکارەکانی وەرگرەکان، لە دووری ئەوەی کە شوێنکەوتوانی یان وەرگرەکان لە سێرڤەرێکی جیاواز لەم.</p>
|
||||
|
||||
<p> کاتێک تۆ مۆڵەت بە کاربەرنامەیەک بدەیت بۆ بەکارهێنانی ئەژمێرەکەت، بەگوێرەی مەودای مۆڵەتەکانت کە پەسەندت کردووە، لەوانەیە بچێتە ناو زانیاری پرۆفایلی گشتی، لیستی خوارەوەت، شوێنکەوتوانی تۆ، لیستەکانت، هەموو بابەتەکانت، و دڵراوەکانی تۆ. کاربەرنامەکان هەرگیز ناتوانن دەستگەیشتنیان هەبێت بە ناونیشانی ئیمەیڵ یان نهێنوشە.</p>
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 id="منداڵان"> بەکارهێنانی سایت لەلایەن منداڵانەوە</h3>
|
||||
|
||||
<p> ئەگەر ئەم سێرڤەرە لە یەکێتی ئەورووپا یان ئی ئی ئی ئەی بێت: ماڵپەڕ، بەرهەم و خزمەتگوزارییەکانی ئێمە هەموویان ئاراستەی ئەو کەسانە دەکرێت کە بە لایەنی کەمەوە 16 ساڵ ن. ئەگەر تەمەنت لە خوار 16 ساڵەوە بێت، لە سەر پێداویستی GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) ئەم سایتە بەکارمەهێنیت.</p>
|
||||
|
||||
<p> ئەگەر ئەم سێرڤەرە لە ئەمریکا بێت: ماڵپەڕ و بەرهەم و خزمەتگوزاریەکانمان هەمووی ئاراستەی ئەو کەسانە دەکرێت کە بە لایەنی کەمەوە 13 ساڵ ن. ئەگەر تۆ لە خوار تەمەنی 13 ساڵیەوەبیت، لە سەر داواکاریەکانی COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection act</a>) ئەم سایتە بەکارمەهێنیت.</p>
|
||||
|
||||
<p> یاسا دەتوانێت جیاواز بێت ئەگەر ئەم سێرڤەرە لە دەسەڵاتی دادوەری تر بێت.</p>
|
||||
|
||||
< hr="spacer" />
|
||||
|
||||
<h3 id="گۆڕانکاریەکان"> گۆڕانکاریەکان لە سیاسەتی تایبەتمەندیمان</h3>
|
||||
|
||||
<p> ئەگەر بڕیارمان دا سیاسەتی تایبەتمەندیمان بگۆڕین، ئەو گۆڕانکاریانە لەم پەڕەیە بڵاودەکەینەوە.</p>
|
||||
|
||||
<p> ئەم دۆکیومێنتە CC-BY-SA ە. دوایین جار نوێکرایەوە لە 7ی ئازاری 2018.</p>
|
||||
|
||||
<p> لە بنەڕەتدا لە < href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
||||
title: "%{instance} مەرجەکانی خزمەتگوزاری و سیاسەتی تایبەتیێتی"
|
||||
themes:
|
||||
contrast: ماستۆدۆن (کۆنتراستی بەرز)
|
||||
|
@ -1243,87 +1243,6 @@ co:
|
||||
tags:
|
||||
does_not_match_previous_name: ùn currisponde micca à l'anzianu nome
|
||||
terms:
|
||||
body_html: |
|
||||
<h2>Politique de confidentialité</h2>
|
||||
<h3 id="collect">Quelles informations collectons-nous ?</h3>
|
||||
|
||||
<ul>
|
||||
<li><em>Informations de base sur votre compte</em> : Si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.</li>
|
||||
<li><em>Posts, liste d’abonnements et autres informations publiques</em> : La liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimer un post, il est probable que vos abonné·e·s en soient informé·e·s. Partager un message ou le marquer comme favori est toujours une action publique.</li>
|
||||
<li><em>Posts directs et abonné·e·s uniquement</em> : Tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne fois pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. <em>Gardez s’il-vous-plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages</em> et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. <em>Ne partager aucune information sensible à l’aide de Mastodon.</em></li>
|
||||
<li><em>IP et autres métadonnées</em> : Quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="use">Que faisons-nous des informations que nous collectons ?</h3>
|
||||
|
||||
<p>Toutes les informations que nous collectons sur vous peuvent être utilisées d’une des manières suivantes :</p>
|
||||
|
||||
<ul>
|
||||
<li>Pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.</li>
|
||||
<li>Pour aider à la modération de la communauté, par exemple, comparer votre adresse IP à d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.</li>
|
||||
<li>L’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyez des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour tout autres requêtes ou questions.</li>
|
||||
</ul>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="protect">Comment protégeons-nous vos informations ?</h3>
|
||||
|
||||
<p>Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont sécurisés à l’aide de TLS tandis que votre mot de passe est haché en utilisant un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="data-retention">Quelle est notre politique de conservation des données ?</h3>
|
||||
|
||||
<p>Nous ferons un effort de bonne foi :</p>
|
||||
|
||||
<ul>
|
||||
<li>Pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.</li>
|
||||
<li>Pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.</li>
|
||||
</ul>
|
||||
|
||||
<p>Vous pouvez demander une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.</p>
|
||||
|
||||
<p>Vous pouvez, à n’importe quel moment, supprimer votre compte de manière définitive.</p>
|
||||
|
||||
<hr class="spacer"/>
|
||||
|
||||
<h3 id="cookies">Utilisons-nous des témoins de connexion ?</h3>
|
||||
|
||||
<p>Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transféres sur le disque dur de votre ordinateur via votre navigateur web (si vous l’avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et de, dans le cas où vous possédez un compte, de vous associer avec ce dernier.</p>
|
||||
|
||||
<p>Nous utilisons les témoins de connexion comme un moyen de comprendre et de nous souvenir de vos préférences pour vos prochaines visites.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="disclose">Divulguons-nous des informations à des tierces parties ?</h3>
|
||||
|
||||
<p>Nous ne vendons, n’échangeons ou ne transférons d’une quelque manière que soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tierces parties de confiance qui nous aident à opérer ce site, à conduire nos activités commerciales ou à vous servir, tant qu’elles acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que c’est nécessaire pour nous conformer à la loi, pour appliquer les politiques de notre site ainsi que pour défendre nos droits, notre propriété, notre sécurité et celles et ceux d’autres personnes.</p>
|
||||
|
||||
<p>Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement peuvent être délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.</p>
|
||||
|
||||
<p>Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tout vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="children">Utilisation de ce site par les enfants</h3>
|
||||
|
||||
<p>Si ce serveur est situé dans dans l’UE ou l’EEE : Notre site, produits et services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (<a href="https://fr.wikipedia.org/wiki/R%C3%A8glement_g%C3%A9n%C3%A9ral_sur_la_protection_des_donn%C3%A9es">Règlement Général sur la Protection des Données</a>), merci de ne pas utiliser ce site.</p>
|
||||
|
||||
<p>Si ce serveur est situé dans aux États-Unis d’Amérique : Notre site, produits et services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (<a href="https://fr.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>), merci de ne pas utiliser ce site.</p>
|
||||
|
||||
<p>Les exigences légales peuvent être différentes si ce serveur se trouve dans une autre juridiction.</p>
|
||||
|
||||
<hr class="spacer" />
|
||||
|
||||
<h3 id="changes">Modifications de notre politique de confidentialité</h3>
|
||||
|
||||
<p>Dans le cas où nous déciderions de changer notre politique de confidentialité, nous posterons les modifications sur cette page.</p>
|
||||
|
||||
<p>Ce document est publié sous lincence CC-BY-SA. Il a été mis à jours pour la dernière fois le 7 mars 2018.</p>
|
||||
|
||||
<p>Originellement adapté de la <a href="https://github.com/discourse/discourse">politique de confidentialité de Discourse</a>.</p>
|
||||
title: Termini d’usu è di cunfidenzialità per %{instance}
|
||||
themes:
|
||||
contrast: Mastodon (Cuntrastu altu)
|
||||
|