Compare commits

..

42 Commits

Author SHA1 Message Date
Eugen Rochko
e168e8afe5 Merge branch 'master' into for-upstream/optional-notification-muting 2017-11-15 03:36:01 +01:00
aschmitz
75c21adfbf Remove /api/v2/mutes 2017-11-14 20:26:22 -06:00
aschmitz
685fafcc27 Fix up migration things 2017-10-22 21:37:44 -05:00
aschmitz
0e210b5c63 Make AddHideNotificationsToMute Concurrent
It's not clear how much this will benefit instances in practice, as the
number of mutes tends to be pretty small, but this should prevent any
blocking migrations nonetheless.
2017-10-22 20:52:54 -05:00
aschmitz
6b70c2ca12 Code review suggestions from akihikodaki
Also fixed a syntax error in tests for AccountInteractions.
2017-10-22 20:52:54 -05:00
Surinna Curtis
8c6ecd5616 Code style changes in specs and removed an extra space 2017-10-22 20:52:54 -05:00
Surinna Curtis
22cf9bcff6 Make the Toggle in the mute modal look better 2017-10-22 20:52:54 -05:00
Surinna Curtis
21de45c7d2 Use Toggle in place of checkbox in the mute modal. 2017-10-22 20:52:54 -05:00
Surinna Curtis
88e52f3a2a Fix wrong variable name in api/v2/mutes 2017-10-22 20:52:54 -05:00
Surinna Curtis
d4bb04c45c Don't serialize "account" in MuteSerializer
Doing so is somewhat unnecessary since it's always the current user's account.
2017-10-22 20:52:54 -05:00
Surinna Curtis
33c56212b9 Rename /api/v1/mutes/details -> /api/v2/mutes 2017-10-22 20:52:54 -05:00
Surinna Curtis
bcd4b72223 Remove superfluous blank line 2017-10-22 20:52:54 -05:00
Surinna Curtis
f39bba9a90 Fix code style issues 2017-10-22 20:52:54 -05:00
Surinna Curtis
290c6b0f2e Apply white-space: nowrap to account relationships icons 2017-10-22 20:52:54 -05:00
Surinna Curtis
d5d1dcab77 Fixed a typo that was breaking the account mute API endpoint 2017-10-22 20:52:54 -05:00
Surinna Curtis
ef5ebdd544 minor code style fixes oops 2017-10-22 20:52:54 -05:00
Surinna Curtis
da85bfc252 Refactor handling of default params for muting to make code cleaner 2017-10-22 20:52:54 -05:00
Surinna Curtis
d17255c0e0 add an explanatory comment to AccountInteractions 2017-10-22 20:52:54 -05:00
Surinna Curtis
74ce229101 fix a missing import 2017-10-22 20:52:54 -05:00
Surinna Curtis
fb8613d09b In probably dead code, replace a dispatch of muteAccount that was skipping the modal with launching the mute modal. 2017-10-22 20:52:54 -05:00
Surinna Curtis
d73f437419 satisfy eslint 2017-10-22 20:52:54 -05:00
Surinna Curtis
343c358bb2 make the hide/unhide notifications buttons work 2017-10-22 20:52:54 -05:00
Surinna Curtis
8a6ad735f1 Allow modifying the hide_notifications of a mute with the /api/v1/accounts/:id/mute endpoint 2017-10-22 20:52:54 -05:00
Surinna Curtis
9fb8a6f231 Show whether muted users' notifications are muted in account lists 2017-10-22 20:52:54 -05:00
Surinna Curtis
f90ac53dc5 Expose whether a mute hides notifications in the api/v1/relationships endpoint 2017-10-22 20:52:54 -05:00
Surinna Curtis
c814d19672 Add more specs for the /api/v1/mutes/details endpoint 2017-10-22 20:52:54 -05:00
Surinna Curtis
27eb75878e Define a serializer for /api/v1/mutes/details 2017-10-22 20:52:54 -05:00
Surinna Curtis
a81d3a2842 Add a /api/v1/mutes/details route that just returns the array of mutes. 2017-10-22 20:52:54 -05:00
Surinna Curtis
1fc0382d29 Put the label for the hide notifications checkbox in a label element. 2017-10-22 20:52:54 -05:00
Surinna Curtis
90db8b63b0 add trailing newlines to files for Pork :) 2017-10-22 20:52:54 -05:00
Surinna Curtis
15a6cb5ca9 specs for MuteService notifications params 2017-10-22 20:52:54 -05:00
Surinna Curtis
d5dc4696a7 Satisfy eslint. 2017-10-22 20:52:54 -05:00
Surinna Curtis
eb6543b36b Convert profile header mute to use mute modal 2017-10-22 20:52:54 -05:00
Surinna Curtis
920c7cdaf3 Break out a separate mute modal with a hide-notifications checkbox. 2017-10-22 20:52:54 -05:00
Surinna Curtis
f3aac23099 Less gross passing of notifications flag 2017-10-22 20:52:53 -05:00
Surinna Curtis
aded1acfda API support for muting notifications (and specs) 2017-10-22 20:52:53 -05:00
Surinna Curtis
9855529a10 Add support for muting notifications in MuteService 2017-10-22 20:52:53 -05:00
Surinna Curtis
0ccfbe5747 specs testing that hide_notifications in mutes actually hides notifications 2017-10-22 20:52:53 -05:00
Surinna Curtis
921a1b7b2a Add specs for how mute! interacts with muting_notifications? 2017-10-22 20:52:53 -05:00
Surinna Curtis
aa7e541780 block notifications in notify_service from hard muted accounts 2017-10-22 20:52:53 -05:00
Surinna Curtis
dac67960e0 Add muting_notifications? and a notifications argument to mute! 2017-10-22 20:52:53 -05:00
Surinna Curtis
90a0176b0b Add a hide_notifications column to mutes 2017-10-22 20:52:53 -05:00
644 changed files with 1192 additions and 36848 deletions

View File

@@ -1,36 +1,21 @@
version: "2" engines:
checks:
argument-count:
enabled: false
complex-logic:
enabled: false
file-lines:
enabled: false
method-complexity:
enabled: false
method-count:
enabled: false
method-lines:
enabled: false
nested-control-flow:
enabled: false
return-statements:
enabled: false
similar-code:
enabled: false
identical-code:
enabled: false
plugins:
brakeman: brakeman:
enabled: true enabled: true
bundler-audit: bundler-audit:
enabled: true enabled: true
duplication:
enabled: false
eslint: eslint:
enabled: true enabled: true
rubocop: rubocop:
enabled: true enabled: true
scss-lint: scss-lint:
enabled: true enabled: true
exclude_patterns: ratings:
paths:
- "**.rb"
- "**.js"
- "**.scss"
exclude_paths:
- spec/ - spec/
- vendor/asset - vendor/asset

View File

@@ -35,17 +35,6 @@ PAPERCLIP_SECRET=$PAPERCLIP_SECRET
SECRET_KEY_BASE=$SECRET_KEY_BASE SECRET_KEY_BASE=$SECRET_KEY_BASE
OTP_SECRET=$OTP_SECRET OTP_SECRET=$OTP_SECRET
# VAPID keys (used for push notifications)
# You can generate the keys using the following command (first is the private key, second is the public one)
# You should only generate this once per instance. If you later decide to change it, all push subscription will
# be invalidated, requiring the users to access the website again to resubscribe.
#
# Generate with `rake mastodon:webpush:generate_vapid_key` task (`nanobox run bundle exec rake mastodon:webpush:generate_vapid_key`)
#
# For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html
VAPID_PRIVATE_KEY=$VAPID_PRIVATE_KEY
VAPID_PUBLIC_KEY=$VAPID_PUBLIC_KEY
# Registrations # Registrations
# Single user mode will disable registrations and redirect frontpage to the first profile # Single user mode will disable registrations and redirect frontpage to the first profile
# SINGLE_USER_MODE=true # SINGLE_USER_MODE=true
@@ -73,7 +62,7 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
#SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt #SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt
#SMTP_OPENSSL_VERIFY_MODE=peer #SMTP_OPENSSL_VERIFY_MODE=peer
#SMTP_ENABLE_STARTTLS_AUTO=true #SMTP_ENABLE_STARTTLS_AUTO=true
#SMTP_TLS=true
# Optional user upload path and URL (images, avatars). Default is :rails_root/public/system. If you set this variable, you are responsible for making your HTTP server (eg. nginx) serve these files. # Optional user upload path and URL (images, avatars). Default is :rails_root/public/system. If you set this variable, you are responsible for making your HTTP server (eg. nginx) serve these files.
# PAPERCLIP_ROOT_PATH=/var/lib/mastodon/public-system # PAPERCLIP_ROOT_PATH=/var/lib/mastodon/public-system
@@ -102,23 +91,6 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
# S3_ENDPOINT= # S3_ENDPOINT=
# S3_SIGNATURE_VERSION= # S3_SIGNATURE_VERSION=
# Swift (optional)
# SWIFT_ENABLED=true
# SWIFT_USERNAME=
# For Keystone V3, the value for SWIFT_TENANT should be the project name
# SWIFT_TENANT=
# SWIFT_PASSWORD=
# Keystone V2 and V3 URLs are supported. Use a V3 URL if possible to avoid
# issues with token rate-limiting during high load.
# SWIFT_AUTH_URL=
# SWIFT_CONTAINER=
# SWIFT_OBJECT_URL=
# SWIFT_REGION=
# Defaults to 'default'
# SWIFT_DOMAIN_NAME=
# Defaults to 60 seconds. Set to 0 to disable
# SWIFT_CACHE_TTL=
# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front # Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
# S3_CLOUDFRONT_HOST= # S3_CLOUDFRONT_HOST=

View File

@@ -134,6 +134,3 @@ STREAMING_CLUSTER_NUM=1
# If you use Docker, you may want to assign UID/GID manually. # If you use Docker, you may want to assign UID/GID manually.
# UID=1000 # UID=1000
# GID=1000 # GID=1000
# Maximum allowed character count
# MAX_TOOT_CHARS=500

View File

@@ -29,11 +29,6 @@ settings:
import/ignore: import/ignore:
- node_modules - node_modules
- \\.(css|scss|json)$ - \\.(css|scss|json)$
import/resolver:
node:
moduleDirectory:
- node_modules
- app/javascript
rules: rules:
brace-style: warn brace-style: warn

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "app/javascript/themes/mastodon-go"]
path = app/javascript/themes/mastodon-go
url = https://github.com/marrus-sh/mastodon-go

View File

@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at beatrix.bitrot@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at eugen@zeonfederated.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

View File

@@ -1,36 +1,3 @@
# Contributing to Mastodon Glitch Edition #
Thank you for your interest in contributing to the `glitch-soc` project!
Here are some guidelines, and ways you can help.
> (This document is a bit of a work-in-progress, so please bear with us.
> If you don't see what you're looking for here, please don't hesitate to reach out!)
## Planning ##
Right now a lot of the planning for this project takes place in our development Discord, or through GitHub Issues and Projects.
We're working on ways to improve the planning structure and better solicit feedback, and if you feel like you can help in this respect, feel free to give us a holler.
## Documentation ##
The documentation for this repository is available at [`glitch-soc/docs`](https://github.com/glitch-soc/docs) (online at [glitch-soc.github.io/docs/](https://glitch-soc.github.io/docs/)).
Right now, we've mostly focused on the features that make this fork different from upstream in some manner.
Adding screenshots, improving descriptions, and so forth are all ways to help contribute to the project even if you don't know any code.
## Frontend Development ##
Check out [the documentation here](https://glitch-soc.github.io/docs/contributing/frontend/) for more information.
## Backend Development ##
See the guidelines below.
- - -
You should also try to follow the guidelines set out in the original `CONTRIBUTING.md` from `tootsuite/mastodon`, reproduced below.
<blockquote>
CONTRIBUTING CONTRIBUTING
============ ============
@@ -82,5 +49,3 @@ It is expected that you have a working development environment set up (see back-
* If you are introducing new strings, they must be using localization methods * If you are introducing new strings, they must be using localization methods
If the JavaScript or CSS assets won't compile due to a syntax error, it's a good sign that the pull request isn't ready for submission yet. If the JavaScript or CSS assets won't compile due to a syntax error, it's a good sign that the pull request isn't ready for submission yet.
</blockquote>

View File

@@ -48,7 +48,7 @@ RUN apk -U upgrade \
&& rm yarn.tar.gz \ && rm yarn.tar.gz \
&& mv /tmp/src/yarn-v$YARN_VERSION /opt/yarn \ && mv /tmp/src/yarn-v$YARN_VERSION /opt/yarn \
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
&& wget -O libiconv.tar.gz "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz" \ && wget -O libiconv.tar.gz "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz" \
&& echo "$LIBICONV_DOWNLOAD_SHA256 *libiconv.tar.gz" | sha256sum -c - \ && echo "$LIBICONV_DOWNLOAD_SHA256 *libiconv.tar.gz" | sha256sum -c - \
&& tar -xzf libiconv.tar.gz -C /tmp/src \ && tar -xzf libiconv.tar.gz -C /tmp/src \
&& rm libiconv.tar.gz \ && rm libiconv.tar.gz \

View File

@@ -1,10 +1,85 @@
# Mastodon Glitch Edition # ![Mastodon](https://i.imgur.com/NhZc40l.png)
========
> Now with automated deploys! [![Build Status](https://img.shields.io/travis/tootsuite/mastodon.svg)][travis]
[![Code Climate](https://img.shields.io/codeclimate/maintainability/tootsuite/mastodon.svg)][code_climate]
[![Build Status](https://travis-ci.org/glitch-soc/mastodon.svg?branch=master)](https://travis-ci.org/glitch-soc/mastodon) [travis]: https://travis-ci.org/tootsuite/mastodon
[code_climate]: https://codeclimate.com/github/tootsuite/mastodon
So here's the deal: we all work on this code, and then it runs on dev.glitch.social and anyone who uses that does so absolutely at their own risk. can you dig it? Mastodon is a **free, open-source social network server** based on **open web protocols** like ActivityPub and OStatus. The social focus of the project is a viable decentralized alternative to commercial social media silos that returns the control of the content distribution channels to the people. The technical focus of the project is a good user interface, a clean REST API for 3rd party apps and robust anti-abuse tools.
- You can view documentation for this project at [glitch-soc.github.io/docs/](https://glitch-soc.github.io/docs/). Click on the screenshot below to watch a demo of the UI:
- And contributing guidelines are available [here](CONTRIBUTING.md) and [here](https://glitch-soc.github.io/docs/contributing/).
[![Screenshot](https://i.imgur.com/pG3Nnz3.jpg)][youtube_demo]
[youtube_demo]: https://www.youtube.com/watch?v=YO1jQ8_rAMU
**Ruby on Rails** is used for the back-end, while **React.js** and Redux are used for the dynamic front-end. A static front-end for public resources (profiles and statuses) is also provided.
If you would like, you can [support the development of this project on Patreon][patreon]. Alternatively, you can donate to this BTC address: `17j2g7vpgHhLuXhN4bueZFCvdxxieyRVWd`
[patreon]: https://www.patreon.com/user?u=619786
---
## Resources
- [Frequently Asked Questions](https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/FAQ.md)
- [Use this tool to find Twitter friends on Mastodon](https://bridge.joinmastodon.org)
- [API overview](https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md)
- [List of Mastodon instances](https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/List-of-Mastodon-instances.md)
- [List of apps](https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md)
- [List of sponsors](https://joinmastodon.org/sponsors)
## Features
**No vendor lock-in: Fully interoperable with any conforming platform**
It doesn't have to be Mastodon, whatever implements ActivityPub or OStatus is part of the social network!
**Real-time timeline updates**
See the updates of people you're following appear in real-time in the UI via WebSockets. There's a firehose view as well!
**Federated thread resolving**
If someone you follow replies to a user unknown to the server, the server fetches the full thread so you can view it without leaving the UI
**Media attachments like images and short videos**
Upload and view images and WebM/MP4 videos attached to the updates. Videos with no audio track are treated like GIFs; normal videos are looped - like vines!
**OAuth2 and a straightforward REST API**
Mastodon acts as an OAuth2 provider so 3rd party apps can use the API
**Fast response times**
Mastodon tries to be as fast and responsive as possible, so all long-running tasks are delegated to background processing
**Deployable via Docker**
You don't need to mess with dependencies and configuration if you want to try Mastodon, if you have Docker and Docker Compose the deployment is extremely easy
---
## Development
Please follow the [development guide](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md) from the documentation repository.
## Deployment
There are guides in the documentation repository for [deploying on various platforms](https://github.com/tootsuite/documentation#running-mastodon).
## Contributing
You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository. [Here are the guidelines for code contributions](CONTRIBUTING.md)
**IRC channel**: #mastodon on irc.freenode.net
---
## Extra credits
The elephant friend illustrations are created by [Dopatwo](https://mastodon.social/@dopatwo)

2
Vagrantfile vendored
View File

@@ -83,7 +83,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider :virtualbox do |vb| config.vm.provider :virtualbox do |vb|
vb.name = "mastodon" vb.name = "mastodon"
vb.customize ["modifyvm", :id, "--memory", "4096"] vb.customize ["modifyvm", :id, "--memory", "2048"]
# Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions. # Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions.
# https://github.com/mitchellh/vagrant/issues/1172 # https://github.com/mitchellh/vagrant/issues/1172

View File

@@ -21,7 +21,7 @@ module Admin
def destroy def destroy
authorize @account_moderation_note, :destroy? authorize @account_moderation_note, :destroy?
@account_moderation_note.destroy! @account_moderation_note.destroy
redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg') redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg')
end end

View File

@@ -32,21 +32,18 @@ module Admin
def memorialize def memorialize
authorize @account, :memorialize? authorize @account, :memorialize?
@account.memorialize! @account.memorialize!
log_action :memorialize, @account
redirect_to admin_account_path(@account.id) redirect_to admin_account_path(@account.id)
end end
def enable def enable
authorize @account.user, :enable? authorize @account.user, :enable?
@account.user.enable! @account.user.enable!
log_action :enable, @account.user
redirect_to admin_account_path(@account.id) redirect_to admin_account_path(@account.id)
end end
def disable def disable
authorize @account.user, :disable? authorize @account.user, :disable?
@account.user.disable! @account.user.disable!
log_action :disable, @account.user
redirect_to admin_account_path(@account.id) redirect_to admin_account_path(@account.id)
end end

View File

@@ -1,9 +0,0 @@
# frozen_string_literal: true
module Admin
class ActionLogsController < BaseController
def index
@action_logs = Admin::ActionLog.page(params[:page])
end
end
end

View File

@@ -3,7 +3,6 @@
module Admin module Admin
class BaseController < ApplicationController class BaseController < ApplicationController
include Authorization include Authorization
include AccountableConcern
before_action :require_staff! before_action :require_staff!

View File

@@ -7,7 +7,6 @@ module Admin
def create def create
authorize @user, :confirm? authorize @user, :confirm?
@user.confirm! @user.confirm!
log_action :confirm, @user
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end

View File

@@ -20,7 +20,6 @@ module Admin
@custom_emoji = CustomEmoji.new(resource_params) @custom_emoji = CustomEmoji.new(resource_params)
if @custom_emoji.save if @custom_emoji.save
log_action :create, @custom_emoji
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.created_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.created_msg')
else else
render :new render :new
@@ -31,7 +30,6 @@ module Admin
authorize @custom_emoji, :update? authorize @custom_emoji, :update?
if @custom_emoji.update(resource_params) if @custom_emoji.update(resource_params)
log_action :update, @custom_emoji
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.updated_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.updated_msg')
else else
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.update_failed_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.update_failed_msg')
@@ -40,19 +38,16 @@ module Admin
def destroy def destroy
authorize @custom_emoji, :destroy? authorize @custom_emoji, :destroy?
@custom_emoji.destroy! @custom_emoji.destroy
log_action :destroy, @custom_emoji
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.destroyed_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.destroyed_msg')
end end
def copy def copy
authorize @custom_emoji, :copy? authorize @custom_emoji, :copy?
emoji = CustomEmoji.find_or_initialize_by(domain: nil, shortcode: @custom_emoji.shortcode) emoji = CustomEmoji.find_or_create_by(domain: nil, shortcode: @custom_emoji.shortcode)
emoji.image = @custom_emoji.image
if emoji.save if emoji.update(image: @custom_emoji.image)
log_action :create, emoji
flash[:notice] = I18n.t('admin.custom_emojis.copied_msg') flash[:notice] = I18n.t('admin.custom_emojis.copied_msg')
else else
flash[:alert] = I18n.t('admin.custom_emojis.copy_failed_msg') flash[:alert] = I18n.t('admin.custom_emojis.copy_failed_msg')
@@ -64,14 +59,12 @@ module Admin
def enable def enable
authorize @custom_emoji, :enable? authorize @custom_emoji, :enable?
@custom_emoji.update!(disabled: false) @custom_emoji.update!(disabled: false)
log_action :enable, @custom_emoji
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.enabled_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.enabled_msg')
end end
def disable def disable
authorize @custom_emoji, :disable? authorize @custom_emoji, :disable?
@custom_emoji.update!(disabled: true) @custom_emoji.update!(disabled: true)
log_action :disable, @custom_emoji
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.disabled_msg') redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.disabled_msg')
end end

View File

@@ -21,7 +21,6 @@ module Admin
if @domain_block.save if @domain_block.save
DomainBlockWorker.perform_async(@domain_block.id) DomainBlockWorker.perform_async(@domain_block.id)
log_action :create, @domain_block
redirect_to admin_domain_blocks_path, notice: I18n.t('admin.domain_blocks.created_msg') redirect_to admin_domain_blocks_path, notice: I18n.t('admin.domain_blocks.created_msg')
else else
render :new render :new
@@ -35,7 +34,6 @@ module Admin
def destroy def destroy
authorize @domain_block, :destroy? authorize @domain_block, :destroy?
UnblockDomainService.new.call(@domain_block, retroactive_unblock?) UnblockDomainService.new.call(@domain_block, retroactive_unblock?)
log_action :destroy, @domain_block
redirect_to admin_domain_blocks_path, notice: I18n.t('admin.domain_blocks.destroyed_msg') redirect_to admin_domain_blocks_path, notice: I18n.t('admin.domain_blocks.destroyed_msg')
end end

View File

@@ -20,7 +20,6 @@ module Admin
@email_domain_block = EmailDomainBlock.new(resource_params) @email_domain_block = EmailDomainBlock.new(resource_params)
if @email_domain_block.save if @email_domain_block.save
log_action :create, @email_domain_block
redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.created_msg') redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.created_msg')
else else
render :new render :new
@@ -29,8 +28,7 @@ module Admin
def destroy def destroy
authorize @email_domain_block, :destroy? authorize @email_domain_block, :destroy?
@email_domain_block.destroy! @email_domain_block.destroy
log_action :destroy, @email_domain_block
redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.destroyed_msg') redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.destroyed_msg')
end end

View File

@@ -1,33 +0,0 @@
# frozen_string_literal: true
module Admin
class InvitesController < BaseController
def index
authorize :invite, :index?
@invites = Invite.includes(user: :account).page(params[:page])
@invite = Invite.new
end
def create
authorize :invite, :create?
@invite = Invite.new(resource_params)
@invite.user = current_user
if @invite.save
redirect_to admin_invites_path
else
@invites = Invite.page(params[:page])
render :index
end
end
def destroy
@invite = Invite.find(params[:id])
authorize @invite, :destroy?
@invite.expire!
redirect_to admin_invites_path
end
end
end

View File

@@ -8,7 +8,7 @@ module Admin
def create def create
authorize :status, :update? authorize :status, :update?
@form = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account)) @form = Form::StatusBatch.new(form_status_batch_params)
flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
redirect_to admin_report_path(@report) redirect_to admin_report_path(@report)
@@ -16,15 +16,13 @@ module Admin
def update def update
authorize @status, :update? authorize @status, :update?
@status.update!(status_params) @status.update(status_params)
log_action :update, @status
redirect_to admin_report_path(@report) redirect_to admin_report_path(@report)
end end
def destroy def destroy
authorize @status, :destroy? authorize @status, :destroy?
RemovalWorker.perform_async(@status.id) RemovalWorker.perform_async(@status.id)
log_action :destroy, @status
render json: @status render json: @status
end end

View File

@@ -25,17 +25,12 @@ module Admin
def process_report def process_report
case params[:outcome].to_s case params[:outcome].to_s
when 'resolve' when 'resolve'
@report.update!(action_taken_by_current_attributes) @report.update(action_taken_by_current_attributes)
log_action :resolve, @report
when 'suspend' when 'suspend'
Admin::SuspensionWorker.perform_async(@report.target_account.id) Admin::SuspensionWorker.perform_async(@report.target_account.id)
log_action :resolve, @report
log_action :suspend, @report.target_account
resolve_all_target_account_reports resolve_all_target_account_reports
when 'silence' when 'silence'
@report.target_account.update!(silenced: true) @report.target_account.update(silenced: true)
log_action :resolve, @report
log_action :silence, @report.target_account
resolve_all_target_account_reports resolve_all_target_account_reports
else else
raise ActiveRecord::RecordNotFound raise ActiveRecord::RecordNotFound

View File

@@ -7,7 +7,6 @@ module Admin
def create def create
authorize @user, :reset_password? authorize @user, :reset_password?
@user.send_reset_password_instructions @user.send_reset_password_instructions
log_action :reset_password, @user
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end

View File

@@ -7,14 +7,12 @@ module Admin
def promote def promote
authorize @user, :promote? authorize @user, :promote?
@user.promote! @user.promote!
log_action :promote, @user
redirect_to admin_account_path(@user.account_id) redirect_to admin_account_path(@user.account_id)
end end
def demote def demote
authorize @user, :demote? authorize @user, :demote?
@user.demote! @user.demote!
log_action :demote, @user
redirect_to admin_account_path(@user.account_id) redirect_to admin_account_path(@user.account_id)
end end

View File

@@ -13,17 +13,14 @@ module Admin
closed_registrations_message closed_registrations_message
open_deletion open_deletion
timeline_preview timeline_preview
show_staff_badge
bootstrap_timeline_accounts bootstrap_timeline_accounts
thumbnail thumbnail
min_invite_role
).freeze ).freeze
BOOLEAN_SETTINGS = %w( BOOLEAN_SETTINGS = %w(
open_registrations open_registrations
open_deletion open_deletion
timeline_preview timeline_preview
show_staff_badge
).freeze ).freeze
UPLOAD_SETTINGS = %w( UPLOAD_SETTINGS = %w(

View File

@@ -6,15 +6,13 @@ module Admin
def create def create
authorize @account, :silence? authorize @account, :silence?
@account.update!(silenced: true) @account.update(silenced: true)
log_action :silence, @account
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end
def destroy def destroy
authorize @account, :unsilence? authorize @account, :unsilence?
@account.update!(silenced: false) @account.update(silenced: false)
log_action :unsilence, @account
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end

View File

@@ -26,7 +26,7 @@ module Admin
def create def create
authorize :status, :update? authorize :status, :update?
@form = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account)) @form = Form::StatusBatch.new(form_status_batch_params)
flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
redirect_to admin_account_statuses_path(@account.id, current_params) redirect_to admin_account_statuses_path(@account.id, current_params)
@@ -34,15 +34,13 @@ module Admin
def update def update
authorize @status, :update? authorize @status, :update?
@status.update!(status_params) @status.update(status_params)
log_action :update, @status
redirect_to admin_account_statuses_path(@account.id, current_params) redirect_to admin_account_statuses_path(@account.id, current_params)
end end
def destroy def destroy
authorize @status, :destroy? authorize @status, :destroy?
RemovalWorker.perform_async(@status.id) RemovalWorker.perform_async(@status.id)
log_action :destroy, @status
render json: @status render json: @status
end end

View File

@@ -7,14 +7,12 @@ module Admin
def create def create
authorize @account, :suspend? authorize @account, :suspend?
Admin::SuspensionWorker.perform_async(@account.id) Admin::SuspensionWorker.perform_async(@account.id)
log_action :suspend, @account
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end
def destroy def destroy
authorize @account, :unsuspend? authorize @account, :unsuspend?
@account.unsuspend! @account.unsuspend!
log_action :unsuspend, @account
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end

View File

@@ -7,7 +7,6 @@ module Admin
def destroy def destroy
authorize @user, :disable_2fa? authorize @user, :disable_2fa?
@user.disable_two_factor! @user.disable_two_factor!
log_action :disable_2fa, @user
redirect_to admin_accounts_path redirect_to admin_accounts_path
end end

View File

@@ -13,11 +13,9 @@ class Api::V1::AccountsController < Api::BaseController
end end
def follow def follow
reblogs_arg = { reblogs: params[:reblogs] } FollowService.new.call(current_user.account, @account.acct)
FollowService.new.call(current_user.account, @account.acct, reblogs_arg) options = @account.locked? ? {} : { following_map: { @account.id => true }, requested_map: { @account.id => false } }
options = @account.locked? ? {} : { following_map: { @account.id => reblogs_arg }, requested_map: { @account.id => false } }
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options) render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options)
end end

View File

@@ -1,81 +0,0 @@
# frozen_string_literal: true
class Api::V1::Lists::AccountsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read }, only: [:show]
before_action -> { doorkeeper_authorize! :write }, except: [:show]
before_action :require_user!
before_action :set_list
after_action :insert_pagination_headers, only: :show
def show
@accounts = @list.accounts.paginate_by_max_id(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:max_id], params[:since_id])
render json: @accounts, each_serializer: REST::AccountSerializer
end
def create
ApplicationRecord.transaction do
list_accounts.each do |account|
@list.accounts << account
end
end
render_empty
end
def destroy
ListAccount.where(list: @list, account_id: account_ids).destroy_all
render_empty
end
private
def set_list
@list = List.where(account: current_account).find(params[:list_id])
end
def list_accounts
Account.find(account_ids)
end
def account_ids
Array(resource_params[:account_ids])
end
def resource_params
params.permit(account_ids: [])
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
if records_continue?
api_v1_list_accounts_url pagination_params(max_id: pagination_max_id)
end
end
def prev_path
unless @accounts.empty?
api_v1_list_accounts_url pagination_params(since_id: pagination_since_id)
end
end
def pagination_max_id
@accounts.last.id
end
def pagination_since_id
@accounts.first.id
end
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.permit(:limit).merge(core_params)
end
end

View File

@@ -1,79 +0,0 @@
# frozen_string_literal: true
class Api::V1::ListsController < Api::BaseController
LISTS_LIMIT = 50
before_action -> { doorkeeper_authorize! :read }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write }, except: [:index, :show]
before_action :require_user!
before_action :set_list, except: [:index, :create]
after_action :insert_pagination_headers, only: :index
def index
@lists = List.where(account: current_account).paginate_by_max_id(limit_param(LISTS_LIMIT), params[:max_id], params[:since_id])
render json: @lists, each_serializer: REST::ListSerializer
end
def show
render json: @list, serializer: REST::ListSerializer
end
def create
@list = List.create!(list_params.merge(account: current_account))
render json: @list, serializer: REST::ListSerializer
end
def update
@list.update!(list_params)
render json: @list, serializer: REST::ListSerializer
end
def destroy
@list.destroy!
render_empty
end
private
def set_list
@list = List.where(account: current_account).find(params[:id])
end
def list_params
params.permit(:title)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
if records_continue?
api_v1_lists_url pagination_params(max_id: pagination_max_id)
end
end
def prev_path
unless @lists.empty?
api_v1_lists_url pagination_params(since_id: pagination_since_id)
end
end
def pagination_max_id
@lists.last.id
end
def pagination_since_id
@lists.first.id
end
def records_continue?
@lists.size == limit_param(LISTS_LIMIT)
end
def pagination_params(core_params)
params.permit(:limit).merge(core_params)
end
end

View File

@@ -8,15 +8,10 @@ class Api::V1::MutesController < Api::BaseController
respond_to :json respond_to :json
def index def index
@data = @accounts = load_accounts @accounts = load_accounts
render json: @accounts, each_serializer: REST::AccountSerializer render json: @accounts, each_serializer: REST::AccountSerializer
end end
def details
@data = @mutes = load_mutes
render json: @mutes, each_serializer: REST::MuteSerializer
end
private private
def load_accounts def load_accounts
@@ -27,10 +22,6 @@ class Api::V1::MutesController < Api::BaseController
Account.includes(:muted_by).references(:muted_by) Account.includes(:muted_by).references(:muted_by)
end end
def load_mutes
paginated_mutes.includes(:account, :target_account).to_a
end
def paginated_mutes def paginated_mutes
Mute.where(account: current_account).paginate_by_max_id( Mute.where(account: current_account).paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT), limit_param(DEFAULT_ACCOUNTS_LIMIT),
@@ -45,34 +36,26 @@ class Api::V1::MutesController < Api::BaseController
def next_path def next_path
if records_continue? if records_continue?
url_for pagination_params(max_id: pagination_max_id) api_v1_mutes_url pagination_params(max_id: pagination_max_id)
end end
end end
def prev_path def prev_path
unless@data.empty? unless @accounts.empty?
url_for pagination_params(since_id: pagination_since_id) api_v1_mutes_url pagination_params(since_id: pagination_since_id)
end end
end end
def pagination_max_id def pagination_max_id
if params[:action] == "details"
@mutes.last.id
else
@accounts.last.muted_by_ids.last @accounts.last.muted_by_ids.last
end end
end
def pagination_since_id def pagination_since_id
if params[:action] == "details"
@mutes.first.id
else
@accounts.first.muted_by_ids.first @accounts.first.muted_by_ids.first
end end
end
def records_continue? def records_continue?
@data.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) @accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end end
def pagination_params(core_params) def pagination_params(core_params)

View File

@@ -24,20 +24,11 @@ class Api::V1::NotificationsController < Api::BaseController
render_empty render_empty
end end
def destroy
dismiss
end
def dismiss def dismiss
current_account.notifications.find_by!(id: params[:id]).destroy! current_account.notifications.find_by!(id: params[:id]).destroy!
render_empty render_empty
end end
def destroy_multiple
current_account.notifications.where(id: params[:ids]).destroy_all
render_empty
end
private private
def load_notifications def load_notifications

View File

@@ -3,7 +3,7 @@
class Api::V1::SearchController < Api::BaseController class Api::V1::SearchController < Api::BaseController
include Authorization include Authorization
RESULTS_LIMIT = 10 RESULTS_LIMIT = 5
before_action -> { doorkeeper_authorize! :read } before_action -> { doorkeeper_authorize! :read }
before_action :require_user! before_action :require_user!

View File

@@ -1,60 +0,0 @@
# frozen_string_literal: true
class Api::V1::Timelines::DirectController < Api::BaseController
before_action -> { doorkeeper_authorize! :read }, only: [:show]
before_action :require_user!, only: [:show]
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
respond_to :json
def show
@statuses = load_statuses
render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id)
end
private
def load_statuses
cached_direct_statuses
end
def cached_direct_statuses
cache_collection direct_statuses, Status
end
def direct_statuses
direct_timeline_statuses.paginate_by_max_id(
limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id],
params[:since_id]
)
end
def direct_timeline_statuses
Status.as_direct_timeline(current_account)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def pagination_params(core_params)
params.permit(:local, :limit).merge(core_params)
end
def next_path
api_v1_timelines_direct_url pagination_params(max_id: pagination_max_id)
end
def prev_path
api_v1_timelines_direct_url pagination_params(since_id: pagination_since_id)
end
def pagination_max_id
@statuses.last.id
end
def pagination_since_id
@statuses.first.id
end
end

View File

@@ -31,7 +31,7 @@ class Api::V1::Timelines::HomeController < Api::BaseController
end end
def account_home_feed def account_home_feed
HomeFeed.new(current_account) Feed.new(:home, current_account)
end end
def insert_pagination_headers def insert_pagination_headers

View File

@@ -1,66 +0,0 @@
# frozen_string_literal: true
class Api::V1::Timelines::ListController < Api::BaseController
before_action -> { doorkeeper_authorize! :read }
before_action :require_user!
before_action :set_list
before_action :set_statuses
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
def show
render json: @statuses,
each_serializer: REST::StatusSerializer,
relationships: StatusRelationshipsPresenter.new(@statuses, current_user.account_id)
end
private
def set_list
@list = List.where(account: current_account).find(params[:id])
end
def set_statuses
@statuses = cached_list_statuses
end
def cached_list_statuses
cache_collection list_statuses, Status
end
def list_statuses
list_feed.get(
limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id],
params[:since_id]
)
end
def list_feed
ListFeed.new(@list)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def pagination_params(core_params)
params.permit(:limit).merge(core_params)
end
def next_path
api_v1_timelines_list_url params[:id], pagination_params(max_id: pagination_max_id)
end
def prev_path
api_v1_timelines_list_url params[:id], pagination_params(since_id: pagination_since_id)
end
def pagination_max_id
@statuses.last.id
end
def pagination_since_id
@statuses.first.id
end
end

View File

@@ -13,7 +13,6 @@ class ApplicationController < ActionController::Base
helper_method :current_account helper_method :current_account
helper_method :current_session helper_method :current_session
helper_method :current_theme helper_method :current_theme
helper_method :theme_data
helper_method :single_user_mode? helper_method :single_user_mode?
rescue_from ActionController::RoutingError, with: :not_found rescue_from ActionController::RoutingError, with: :not_found
@@ -89,10 +88,6 @@ class ApplicationController < ActionController::Base
current_user.setting_theme current_user.setting_theme
end end
def theme_data
Themes.instance.get(current_theme)
end
def cache_collection(raw, klass) def cache_collection(raw, klass)
return raw unless klass.respond_to?(:with_includes) return raw unless klass.respond_to?(:with_includes)
@@ -109,7 +104,7 @@ class ApplicationController < ActionController::Base
unless uncached_ids.empty? unless uncached_ids.empty?
uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h
uncached.each_value do |item| uncached.values.each do |item|
Rails.cache.write(item.cache_key, item) Rails.cache.write(item.cache_key, item)
end end
end end

View File

@@ -16,16 +16,13 @@ class Auth::RegistrationsController < Devise::RegistrationsController
def build_resource(hash = nil) def build_resource(hash = nil)
super(hash) super(hash)
resource.locale = I18n.locale resource.locale = I18n.locale
resource.invite_code = params[:invite_code] if resource.invite_code.blank?
resource.build_account if resource.account.nil? resource.build_account if resource.account.nil?
end end
def configure_sign_up_params def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up) do |u| devise_parameter_sanitizer.permit(:sign_up) do |u|
u.permit({ account_attributes: [:username] }, :email, :password, :password_confirmation, :invite_code) u.permit({ account_attributes: [:username] }, :email, :password, :password_confirmation)
end end
end end
@@ -38,19 +35,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
end end
def check_enabled_registrations def check_enabled_registrations
redirect_to root_path if single_user_mode? || !allowed_registrations? redirect_to root_path if single_user_mode? || !Setting.open_registrations
end
def allowed_registrations?
Setting.open_registrations || (invite_code.present? && Invite.find_by(code: invite_code)&.valid_for_use?)
end
def invite_code
if params[:user]
params[:user][:invite_code]
else
params[:invite_code]
end
end end
private private

View File

@@ -62,7 +62,7 @@ class Auth::SessionsController < Devise::SessionsController
if user_params[:otp_attempt].present? && session[:otp_user_id] if user_params[:otp_attempt].present? && session[:otp_user_id]
authenticate_with_two_factor_via_otp(user) authenticate_with_two_factor_via_otp(user)
elsif user&.valid_password?(user_params[:password]) elsif user && user.valid_password?(user_params[:password])
prompt_for_two_factor(user) prompt_for_two_factor(user)
end end
end end

View File

@@ -1,9 +0,0 @@
# frozen_string_literal: true
module AccountableConcern
extend ActiveSupport::Concern
def log_action(action, target)
Admin::ActionLog.create(account: current_account, action: action, target: target)
end
end

View File

@@ -1,43 +0,0 @@
# frozen_string_literal: true
class InvitesController < ApplicationController
include Authorization
layout 'admin'
before_action :authenticate_user!
def index
authorize :invite, :create?
@invites = Invite.where(user: current_user)
@invite = Invite.new(expires_in: 1.day.to_i)
end
def create
authorize :invite, :create?
@invite = Invite.new(resource_params)
@invite.user = current_user
if @invite.save
redirect_to invites_path
else
@invites = Invite.where(user: current_user)
render :index
end
end
def destroy
@invite = Invite.where(user: current_user).find(params[:id])
authorize @invite, :destroy?
@invite.expire!
redirect_to invites_path
end
private
def resource_params
params.require(:invite).permit(:max_uses, :expires_in)
end
end

View File

@@ -1,64 +0,0 @@
# frozen_string_literal: true
class Settings::KeywordMutesController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :load_keyword_mute, only: [:edit, :update, :destroy]
def index
@keyword_mutes = paginated_keyword_mutes_for_account
end
def new
@keyword_mute = keyword_mutes_for_account.build
end
def create
@keyword_mute = keyword_mutes_for_account.create(keyword_mute_params)
if @keyword_mute.persisted?
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
else
render :new
end
end
def update
if @keyword_mute.update(keyword_mute_params)
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
else
render :edit
end
end
def destroy
@keyword_mute.destroy!
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
end
def destroy_all
keyword_mutes_for_account.delete_all
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
end
private
def keyword_mutes_for_account
Glitch::KeywordMute.where(account: current_account)
end
def load_keyword_mute
@keyword_mute = keyword_mutes_for_account.find(params[:id])
end
def keyword_mute_params
params.require(:keyword_mute).permit(:keyword, :whole_word)
end
def paginated_keyword_mutes_for_account
keyword_mutes_for_account.order(:keyword).page params[:page]
end
end

View File

@@ -48,7 +48,7 @@ class StreamEntriesController < ApplicationController
@type = @stream_entry.activity_type.downcase @type = @stream_entry.activity_type.downcase
raise ActiveRecord::RecordNotFound if @stream_entry.activity.nil? raise ActiveRecord::RecordNotFound if @stream_entry.activity.nil?
authorize @stream_entry.activity, :show? if @stream_entry.hidden? || @stream_entry.local_only? authorize @stream_entry.activity, :show? if @stream_entry.hidden?
rescue Mastodon::NotPermittedError rescue Mastodon::NotPermittedError
# Reraise in order to get a 404 # Reraise in order to get a 404
raise ActiveRecord::RecordNotFound raise ActiveRecord::RecordNotFound

View File

@@ -1,103 +0,0 @@
# frozen_string_literal: true
module Admin::ActionLogsHelper
def log_target(log)
if log.target
linkable_log_target(log.target)
else
log_target_from_history(log.target_type, log.recorded_changes)
end
end
def linkable_log_target(record)
case record.class.name
when 'Account'
link_to record.acct, admin_account_path(record.id)
when 'User'
link_to record.account.acct, admin_account_path(record.account_id)
when 'CustomEmoji'
record.shortcode
when 'Report'
link_to "##{record.id}", admin_report_path(record)
when 'DomainBlock', 'EmailDomainBlock'
link_to record.domain, "https://#{record.domain}"
when 'Status'
link_to record.account.acct, TagManager.instance.url_for(record)
end
end
def log_target_from_history(type, attributes)
case type
when 'CustomEmoji'
attributes['shortcode']
when 'DomainBlock', 'EmailDomainBlock'
link_to attributes['domain'], "https://#{attributes['domain']}"
when 'Status'
tmp_status = Status.new(attributes)
link_to tmp_status.account.acct, TagManager.instance.url_for(tmp_status)
end
end
def relevant_log_changes(log)
if log.target_type == 'CustomEmoji' && [:enable, :disable, :destroy].include?(log.action)
log.recorded_changes.slice('domain')
elsif log.target_type == 'CustomEmoji' && log.action == :update
log.recorded_changes.slice('domain', 'visible_in_picker')
elsif log.target_type == 'User' && [:promote, :demote].include?(log.action)
log.recorded_changes.slice('moderator', 'admin')
elsif log.target_type == 'DomainBlock'
log.recorded_changes.slice('severity', 'reject_media')
elsif log.target_type == 'Status' && log.action == :update
log.recorded_changes.slice('sensitive')
end
end
def log_extra_attributes(hash)
safe_join(hash.to_a.map { |key, value| safe_join([content_tag(:span, key, class: 'diff-key'), '=', log_change(value)]) }, ' ')
end
def log_change(val)
return content_tag(:span, val, class: 'diff-neutral') unless val.is_a?(Array)
safe_join([content_tag(:span, val.first, class: 'diff-old'), content_tag(:span, val.last, class: 'diff-new')], '→')
end
def icon_for_log(log)
case log.target_type
when 'Account', 'User'
'user'
when 'CustomEmoji'
'file'
when 'Report'
'flag'
when 'DomainBlock'
'lock'
when 'EmailDomainBlock'
'envelope'
when 'Status'
'pencil'
end
end
def class_for_log_icon(log)
case log.action
when :enable, :unsuspend, :unsilence, :confirm, :promote, :resolve
'positive'
when :create
opposite_verbs?(log) ? 'negative' : 'positive'
when :update, :reset_password, :disable_2fa, :memorialize
'neutral'
when :demote, :silence, :disable, :suspend
'negative'
when :destroy
opposite_verbs?(log) ? 'positive' : 'negative'
else
''
end
end
private
def opposite_verbs?(log)
%w(DomainBlock EmailDomainBlock).include?(log.target_type)
end
end

View File

@@ -18,7 +18,7 @@ module Admin::FilterHelper
def selected?(more_params) def selected?(more_params)
new_url = filtered_url_for(more_params) new_url = filtered_url_for(more_params)
filter_link_class(new_url) == 'selected' filter_link_class(new_url) == 'selected' ? true : false
end end
private private

View File

@@ -1,2 +0,0 @@
module Settings::KeywordMutesHelper
end

View File

@@ -1,44 +0,0 @@
{
"getting_started.open_source_notice": "Glitchsoc is free open source software forked from {Mastodon}. You can contribute or report issues on GitHub at {github}.",
"layout.auto": "Auto",
"layout.current_is": "Your current layout is:",
"layout.desktop": "Desktop",
"layout.mobile": "Mobile",
"navigation_bar.app_settings": "App settings",
"getting_started.onboarding": "Show me around",
"onboarding.page_one.federation": "{domain} is an 'instance' of Mastodon. Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
"onboarding.page_one.welcome": "Welcome to {domain}!",
"onboarding.page_six.github": "{domain} runs on Glitchsoc. Glitchsoc is a friendly {fork} of {Mastodon}, and is compatible with any Mastodon instance or app. Glitchsoc is entirely free and open-source. You can report bugs, request features, or contribute to the code on {github}.",
"settings.auto_collapse": "Automatic collapsing",
"settings.auto_collapse_all": "Everything",
"settings.auto_collapse_lengthy": "Lengthy toots",
"settings.auto_collapse_media": "Toots with media",
"settings.auto_collapse_notifications": "Notifications",
"settings.auto_collapse_reblogs": "Boosts",
"settings.auto_collapse_replies": "Replies",
"settings.close": "Close",
"settings.collapsed_statuses": "Collapsed toots",
"settings.enable_collapsed": "Enable collapsed toots",
"settings.general": "General",
"settings.image_backgrounds": "Image backgrounds",
"settings.image_backgrounds_media": "Preview collapsed toot media",
"settings.image_backgrounds_users": "Give collapsed toots an image background",
"settings.media": "Media",
"settings.media_letterbox": "Letterbox media",
"settings.media_fullwidth": "Full-width media previews",
"settings.preferences": "User preferences",
"settings.wide_view": "Wide view (Desktop mode only)",
"settings.navbar_under": "Navbar at the bottom (Mobile only)",
"status.collapse": "Collapse",
"status.uncollapse": "Uncollapse",
"notification.markForDeletion": "Mark for deletion",
"notifications.clear": "Clear all my notifications",
"notifications.marked_clear_confirmation": "Are you sure you want to permanently clear all selected notifications?",
"notifications.marked_clear": "Clear selected notifications",
"notification_purge.btn_all": "Select\nall",
"notification_purge.btn_none": "Select\nnone",
"notification_purge.btn_invert": "Invert\nselection",
"notification_purge.btn_apply": "Clear\nselected"
}

View File

@@ -1,44 +0,0 @@
{
"getting_started.open_source_notice": "Glitchsoc jest wolnym i otwartoźródłowym forkiem oprogramowania {Mastodon}. Możesz współtworzyć projekt lub zgłaszać błędy na GitHubie pod adresem {github}.",
"layout.auto": "Automatyczny",
"layout.current_is": "Twój obecny układ to:",
"layout.desktop": "Desktopowy",
"layout.mobile": "Mobilny",
"navigation_bar.app_settings": "Ustawienia aplikacji",
"getting_started.onboarding": "Rozejrzyj się",
"onboarding.page_one.federation": "{domain} jest 'instancją' Mastodona. Mastodon to sieć działających niezależnie serwerów tworzących jedną sieć społecznościową. Te serwery nazywane są instancjami.",
"onboarding.page_one.welcome": "Witamy na {domain}!",
"onboarding.page_six.github": "{domain} jest oparty na Glitchsoc. Glitchsoc jest {forkiem} {Mastodon}a kompatybilnym z każdym klientem i aplikacją Mastodona. Glitchsoc jest całkowicie wolnym i otwartoźródłowym oprogramowaniem. Możesz zgłaszać błędy i sugestie funkcji oraz współtworzyć projekt na {github}.",
"settings.auto_collapse": "Automatyczne zwijanie",
"settings.auto_collapse_all": "Wszystko",
"settings.auto_collapse_lengthy": "Długie wpisy",
"settings.auto_collapse_media": "Wpisy z zawartością multimedialną",
"settings.auto_collapse_notifications": "Powiadomienia",
"settings.auto_collapse_reblogs": "Podbicia",
"settings.auto_collapse_replies": "Odpowiedzi",
"settings.close": "Zamknij",
"settings.collapsed_statuses": "Zwijanie wpisów",
"settings.enable_collapsed": "Włącz zwijanie wpisów",
"settings.general": "Ogólne",
"settings.image_backgrounds": "Obrazy w tle",
"settings.image_backgrounds_media": "Wyświetlaj zawartość multimedialną zwiniętych wpisów",
"settings.image_backgrounds_users": "Nadaj tło zwiniętym wpisom",
"settings.media": "Zawartość multimedialna",
"settings.media_letterbox": "Letterbox media",
"settings.media_fullwidth": "Podgląd zawartości multimedialnej o pełnej szerokości",
"settings.preferences": "Preferencje użyytkownika",
"settings.wide_view": "Szeroki widok (tylko w trybie desktopowym)",
"settings.navbar_under": "Pasek nawigacji na dole (tylko w trybie mobilnym)",
"status.collapse": "Zwiń",
"status.uncollapse": "Rozwiń",
"notification.markForDeletion": "Oznacz do usunięcia",
"notifications.clear": "Wyczyść wszystkie powiadomienia",
"notifications.marked_clear_confirmation": "Czy na pewno chcesz bezpowrtonie usunąć wszystkie powiadomienia?",
"notifications.marked_clear": "Usuń zaznaczone powiadomienia",
"notification_purge.btn_all": "Zaznacz\nwszystkie",
"notification_purge.btn_none": "Odznacz\nwszystkie",
"notification_purge.btn_invert": "Odwróć\nzaznaczenie",
"notification_purge.btn_apply": "Usuń\nzaznaczone"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,28 +0,0 @@
import api from '../api';
export const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST';
export const LIST_FETCH_SUCCESS = 'LIST_FETCH_SUCCESS';
export const LIST_FETCH_FAIL = 'LIST_FETCH_FAIL';
export const fetchList = id => (dispatch, getState) => {
dispatch(fetchListRequest(id));
api(getState).get(`/api/v1/lists/${id}`)
.then(({ data }) => dispatch(fetchListSuccess(data)))
.catch(err => dispatch(fetchListFail(err)));
};
export const fetchListRequest = id => ({
type: LIST_FETCH_REQUEST,
id,
});
export const fetchListSuccess = list => ({
type: LIST_FETCH_SUCCESS,
list,
});
export const fetchListFail = error => ({
type: LIST_FETCH_FAIL,
error,
});

View File

@@ -1,4 +1,4 @@
import { connectStream } from '../stream'; import createStream from '../stream';
import { import {
updateTimeline, updateTimeline,
deleteFromTimelines, deleteFromTimelines,
@@ -12,19 +12,42 @@ import { getLocale } from '../locales';
const { messages } = getLocale(); const { messages } = getLocale();
export function connectTimelineStream (timelineId, path, pollingRefresh = null) { export function connectTimelineStream (timelineId, path, pollingRefresh = null) {
return (dispatch, getState) => {
return connectStream (path, pollingRefresh, (dispatch, getState) => { const streamingAPIBaseURL = getState().getIn(['meta', 'streaming_api_base_url']);
const accessToken = getState().getIn(['meta', 'access_token']);
const locale = getState().getIn(['meta', 'locale']); const locale = getState().getIn(['meta', 'locale']);
return { let polling = null;
onConnect() {
const setupPolling = () => {
polling = setInterval(() => {
pollingRefresh(dispatch);
}, 20000);
};
const clearPolling = () => {
if (polling) {
clearInterval(polling);
polling = null;
}
};
const subscription = createStream(streamingAPIBaseURL, accessToken, path, {
connected () {
if (pollingRefresh) {
clearPolling();
}
dispatch(connectTimeline(timelineId)); dispatch(connectTimeline(timelineId));
}, },
onDisconnect() { disconnected () {
if (pollingRefresh) {
setupPolling();
}
dispatch(disconnectTimeline(timelineId)); dispatch(disconnectTimeline(timelineId));
}, },
onReceive (data) { received (data) {
switch(data.event) { switch(data.event) {
case 'update': case 'update':
dispatch(updateTimeline(timelineId, JSON.parse(data.payload))); dispatch(updateTimeline(timelineId, JSON.parse(data.payload)));
@@ -37,8 +60,26 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null)
break; break;
} }
}, },
};
reconnected () {
if (pollingRefresh) {
clearPolling();
pollingRefresh(dispatch);
}
dispatch(connectTimeline(timelineId));
},
}); });
const disconnect = () => {
if (subscription) {
subscription.close();
}
clearPolling();
};
return disconnect;
};
} }
function refreshHomeTimelineAndNotification (dispatch) { function refreshHomeTimelineAndNotification (dispatch) {
@@ -51,4 +92,3 @@ export const connectCommunityStream = () => connectTimelineStream('community', '
export const connectMediaStream = () => connectTimelineStream('community', 'public:local'); export const connectMediaStream = () => connectTimelineStream('community', 'public:local');
export const connectPublicStream = () => connectTimelineStream('public', 'public'); export const connectPublicStream = () => connectTimelineStream('public', 'public');
export const connectHashtagStream = (tag) => connectTimelineStream(`hashtag:${tag}`, `hashtag&tag=${tag}`); export const connectHashtagStream = (tag) => connectTimelineStream(`hashtag:${tag}`, `hashtag&tag=${tag}`);
export const connectListStream = (id) => connectTimelineStream(`list:${id}`, `list&list=${id}`);

View File

@@ -118,7 +118,6 @@ export const refreshCommunityTimeline = () => refreshTimeline('community', '/
export const refreshAccountTimeline = accountId => refreshTimeline(`account:${accountId}`, `/api/v1/accounts/${accountId}/statuses`); export const refreshAccountTimeline = accountId => refreshTimeline(`account:${accountId}`, `/api/v1/accounts/${accountId}/statuses`);
export const refreshAccountMediaTimeline = accountId => refreshTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { only_media: true }); export const refreshAccountMediaTimeline = accountId => refreshTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { only_media: true });
export const refreshHashtagTimeline = hashtag => refreshTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`); export const refreshHashtagTimeline = hashtag => refreshTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`);
export const refreshListTimeline = id => refreshTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`);
export function refreshTimelineFail(timeline, error, skipLoading) { export function refreshTimelineFail(timeline, error, skipLoading) {
return { return {
@@ -159,7 +158,6 @@ export const expandCommunityTimeline = () => expandTimeline('community', '/ap
export const expandAccountTimeline = accountId => expandTimeline(`account:${accountId}`, `/api/v1/accounts/${accountId}/statuses`); export const expandAccountTimeline = accountId => expandTimeline(`account:${accountId}`, `/api/v1/accounts/${accountId}/statuses`);
export const expandAccountMediaTimeline = accountId => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { only_media: true }); export const expandAccountMediaTimeline = accountId => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { only_media: true });
export const expandHashtagTimeline = hashtag => expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`); export const expandHashtagTimeline = hashtag => expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`);
export const expandListTimeline = id => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`);
export function expandTimelineRequest(timeline) { export function expandTimelineRequest(timeline) {
return { return {

View File

@@ -110,7 +110,7 @@ export default class Dropdown extends React.PureComponent {
icon: PropTypes.string.isRequired, icon: PropTypes.string.isRequired,
items: PropTypes.array.isRequired, items: PropTypes.array.isRequired,
size: PropTypes.number.isRequired, size: PropTypes.number.isRequired,
title: PropTypes.string, ariaLabel: PropTypes.string,
disabled: PropTypes.bool, disabled: PropTypes.bool,
status: ImmutablePropTypes.map, status: ImmutablePropTypes.map,
isUserTouching: PropTypes.func, isUserTouching: PropTypes.func,
@@ -120,7 +120,7 @@ export default class Dropdown extends React.PureComponent {
}; };
static defaultProps = { static defaultProps = {
title: 'Menu', ariaLabel: 'Menu',
}; };
state = { state = {
@@ -186,14 +186,14 @@ export default class Dropdown extends React.PureComponent {
} }
render () { render () {
const { icon, items, size, title, disabled } = this.props; const { icon, items, size, ariaLabel, disabled } = this.props;
const { expanded } = this.state; const { expanded } = this.state;
return ( return (
<div onKeyDown={this.handleKeyDown}> <div onKeyDown={this.handleKeyDown}>
<IconButton <IconButton
icon={icon} icon={icon}
title={title} title={ariaLabel}
active={expanded} active={expanded}
disabled={disabled} disabled={disabled}
size={size} size={size}

View File

@@ -179,7 +179,7 @@ export default class StatusActionBar extends ImmutablePureComponent {
{shareButton} {shareButton}
<div className='status__action-bar-dropdown'> <div className='status__action-bar-dropdown'>
<DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} /> <DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel={intl.formatMessage(messages.more)} />
</div> </div>
</div> </div>
); );

View File

@@ -7,7 +7,6 @@ import Motion from '../../ui/util/optional_motion';
import spring from 'react-motion/lib/spring'; import spring from 'react-motion/lib/spring';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { autoPlayGif, me } from '../../../initial_state'; import { autoPlayGif, me } from '../../../initial_state';
import classNames from 'classnames';
const messages = defineMessages({ const messages = defineMessages({
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
@@ -103,10 +102,6 @@ export default class Header extends ImmutablePureComponent {
} }
} }
if (account.get('moved')) {
actionBtn = '';
}
if (account.get('locked')) { if (account.get('locked')) {
lockedIcon = <i className='fa fa-lock' />; lockedIcon = <i className='fa fa-lock' />;
} }
@@ -115,7 +110,7 @@ export default class Header extends ImmutablePureComponent {
const displayNameHtml = { __html: account.get('display_name_html') }; const displayNameHtml = { __html: account.get('display_name_html') };
return ( return (
<div className={classNames('account__header', { inactive: !!account.get('moved') })} style={{ backgroundImage: `url(${account.get('header')})` }}> <div className='account__header' style={{ backgroundImage: `url(${account.get('header')})` }}>
<div> <div>
<Avatar account={account} /> <Avatar account={account} />

View File

@@ -5,7 +5,6 @@ import InnerHeader from '../../account/components/header';
import ActionBar from '../../account/components/action_bar'; import ActionBar from '../../account/components/action_bar';
import MissingIndicator from '../../../components/missing_indicator'; import MissingIndicator from '../../../components/missing_indicator';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import MovedNote from './moved_note';
export default class Header extends ImmutablePureComponent { export default class Header extends ImmutablePureComponent {
@@ -69,8 +68,6 @@ export default class Header extends ImmutablePureComponent {
return ( return (
<div className='account-timeline__header'> <div className='account-timeline__header'>
{account.get('moved') && <MovedNote from={account} to={account.get('moved')} />}
<InnerHeader <InnerHeader
account={account} account={account}
onFollow={this.handleFollow} onFollow={this.handleFollow}

View File

@@ -1,48 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import AvatarOverlay from '../../../components/avatar_overlay';
import DisplayName from '../../../components/display_name';
export default class MovedNote extends ImmutablePureComponent {
static contextTypes = {
router: PropTypes.object,
};
static propTypes = {
from: ImmutablePropTypes.map.isRequired,
to: ImmutablePropTypes.map.isRequired,
};
handleAccountClick = e => {
if (e.button === 0) {
e.preventDefault();
this.context.router.history.push(`/accounts/${this.props.to.get('id')}`);
}
e.stopPropagation();
}
render () {
const { from, to } = this.props;
const displayNameHtml = { __html: from.get('display_name_html') };
return (
<div className='account__moved-note'>
<div className='account__moved-note__message'>
<div className='account__moved-note__icon-wrapper'><i className='fa fa-fw fa-suitcase account__moved-note__icon' /></div>
<FormattedMessage id='account.moved_to' defaultMessage='{name} has moved to:' values={{ name: <strong dangerouslySetInnerHTML={displayNameHtml} /> }} />
</div>
<a href={to.get('url')} onClick={this.handleAccountClick} className='detailed-status__display-name'>
<div className='detailed-status__display-avatar'><AvatarOverlay account={to} friend={from} /></div>
<DisplayName account={to} />
</a>
</div>
);
}
}

View File

@@ -11,7 +11,7 @@ export default class NavigationBar extends ImmutablePureComponent {
static propTypes = { static propTypes = {
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,
onClose: PropTypes.func, onClose: PropTypes.func.isRequired,
}; };
render () { render () {

View File

@@ -1,106 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import StatusListContainer from '../ui/containers/status_list_container';
import Column from '../../components/column';
import ColumnHeader from '../../components/column_header';
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
import { FormattedMessage } from 'react-intl';
import { connectListStream } from '../../actions/streaming';
import { refreshListTimeline, expandListTimeline } from '../../actions/timelines';
import { fetchList } from '../../actions/lists';
const mapStateToProps = (state, props) => ({
list: state.getIn(['lists', props.params.id]),
hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0,
});
@connect(mapStateToProps)
export default class ListTimeline extends React.PureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
columnId: PropTypes.string,
hasUnread: PropTypes.bool,
multiColumn: PropTypes.bool,
list: ImmutablePropTypes.map,
};
handlePin = () => {
const { columnId, dispatch } = this.props;
if (columnId) {
dispatch(removeColumn(columnId));
} else {
dispatch(addColumn('LIST', { id: this.props.params.id }));
}
}
handleMove = (dir) => {
const { columnId, dispatch } = this.props;
dispatch(moveColumn(columnId, dir));
}
handleHeaderClick = () => {
this.column.scrollTop();
}
componentDidMount () {
const { dispatch } = this.props;
const { id } = this.props.params;
dispatch(fetchList(id));
dispatch(refreshListTimeline(id));
this.disconnect = dispatch(connectListStream(id));
}
componentWillUnmount () {
if (this.disconnect) {
this.disconnect();
this.disconnect = null;
}
}
setRef = c => {
this.column = c;
}
handleLoadMore = () => {
const { id } = this.props.params;
this.props.dispatch(expandListTimeline(id));
}
render () {
const { hasUnread, columnId, multiColumn, list } = this.props;
const { id } = this.props.params;
const pinned = !!columnId;
const title = list ? list.get('title') : id;
return (
<Column ref={this.setRef}>
<ColumnHeader
icon='bars'
active={hasUnread}
title={title}
onPin={this.handlePin}
onMove={this.handleMove}
onClick={this.handleHeaderClick}
pinned={pinned}
multiColumn={multiColumn}
/>
<StatusListContainer
trackScroll={!pinned}
scrollKey={`list_timeline-${columnId}`}
timelineId={`list:${id}`}
loadMore={this.handleLoadMore}
emptyMessage={<FormattedMessage id='empty_column.list' defaultMessage='There is nothing in this list yet.' />}
/>
</Column>
);
}
}

View File

@@ -120,7 +120,7 @@ export default class ActionBar extends React.PureComponent {
{shareButton} {shareButton}
<div className='detailed-status__action-bar-dropdown'> <div className='detailed-status__action-bar-dropdown'>
<DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' /> <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' ariaLabel='More' />
</div> </div>
</div> </div>
); );

View File

@@ -1,6 +1,5 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Immutable from 'immutable';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import punycode from 'punycode'; import punycode from 'punycode';
import classnames from 'classnames'; import classnames from 'classnames';
@@ -25,7 +24,6 @@ export default class Card extends React.PureComponent {
static propTypes = { static propTypes = {
card: ImmutablePropTypes.map, card: ImmutablePropTypes.map,
maxDescription: PropTypes.number, maxDescription: PropTypes.number,
onOpenMedia: PropTypes.func.isRequired,
}; };
static defaultProps = { static defaultProps = {
@@ -36,27 +34,6 @@ export default class Card extends React.PureComponent {
width: 0, width: 0,
}; };
handlePhotoClick = () => {
const { card, onOpenMedia } = this.props;
onOpenMedia(
Immutable.fromJS([
{
type: 'image',
url: card.get('url'),
description: card.get('title'),
meta: {
original: {
width: card.get('width'),
height: card.get('height'),
},
},
},
]),
0
);
};
renderLink () { renderLink () {
const { card, maxDescription } = this.props; const { card, maxDescription } = this.props;
@@ -96,16 +73,9 @@ export default class Card extends React.PureComponent {
const { card } = this.props; const { card } = this.props;
return ( return (
<img <a href={card.get('url')} className='status-card-photo' target='_blank' rel='noopener'>
className='status-card-photo' <img src={card.get('url')} alt={card.get('title')} width={card.get('width')} height={card.get('height')} />
onClick={this.handlePhotoClick} </a>
role='button'
tabIndex='0'
src={card.get('url')}
alt={card.get('title')}
width={card.get('width')}
height={card.get('height')}
/>
); );
} }

View File

@@ -73,7 +73,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
); );
} }
} else if (status.get('spoiler_text').length === 0) { } else if (status.get('spoiler_text').length === 0) {
media = <CardContainer onOpenMedia={this.props.onOpenMedia} statusId={status.get('id')} />; media = <CardContainer statusId={status.get('id')} />;
} }
if (status.get('application')) { if (status.get('application')) {

View File

@@ -11,7 +11,7 @@ import BundleContainer from '../containers/bundle_container';
import ColumnLoading from './column_loading'; import ColumnLoading from './column_loading';
import DrawerLoading from './drawer_loading'; import DrawerLoading from './drawer_loading';
import BundleColumnError from './bundle_column_error'; import BundleColumnError from './bundle_column_error';
import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, FavouritedStatuses, ListTimeline } from '../../ui/util/async-components'; import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, FavouritedStatuses } from '../../ui/util/async-components';
import detectPassiveEvents from 'detect-passive-events'; import detectPassiveEvents from 'detect-passive-events';
import { scrollRight } from '../../../scroll'; import { scrollRight } from '../../../scroll';
@@ -24,7 +24,6 @@ const componentMap = {
'COMMUNITY': CommunityTimeline, 'COMMUNITY': CommunityTimeline,
'HASHTAG': HashtagTimeline, 'HASHTAG': HashtagTimeline,
'FAVOURITES': FavouritedStatuses, 'FAVOURITES': FavouritedStatuses,
'LIST': ListTimeline,
}; };
@component => injectIntl(component, { withRef: true }) @component => injectIntl(component, { withRef: true })

View File

@@ -7,7 +7,7 @@ export default class ImageLoader extends React.PureComponent {
static propTypes = { static propTypes = {
alt: PropTypes.string, alt: PropTypes.string,
src: PropTypes.string.isRequired, src: PropTypes.string.isRequired,
previewSrc: PropTypes.string, previewSrc: PropTypes.string.isRequired,
width: PropTypes.number, width: PropTypes.number,
height: PropTypes.number, height: PropTypes.number,
} }
@@ -47,7 +47,7 @@ export default class ImageLoader extends React.PureComponent {
this.removeEventListeners(); this.removeEventListeners();
this.setState({ loading: true, error: false }); this.setState({ loading: true, error: false });
Promise.all([ Promise.all([
props.previewSrc && this.loadPreviewCanvas(props), this.loadPreviewCanvas(props),
this.hasSize() && this.loadOriginalImage(props), this.hasSize() && this.loadOriginalImage(props),
].filter(Boolean)) ].filter(Boolean))
.then(() => { .then(() => {

View File

@@ -92,7 +92,7 @@ export default class MediaModal extends ImmutablePureComponent {
const height = image.getIn(['meta', 'original', 'height']) || null; const height = image.getIn(['meta', 'original', 'height']) || null;
if (image.get('type') === 'image') { if (image.get('type') === 'image') {
return <ImageLoader previewSrc={image.get('preview_url')} src={image.get('url')} width={width} height={height} alt={image.get('description')} key={image.get('url')} />; return <ImageLoader previewSrc={image.get('preview_url')} src={image.get('url')} width={width} height={height} alt={image.get('description')} key={image.get('preview_url')} />;
} else if (image.get('type') === 'gifv') { } else if (image.get('type') === 'gifv') {
return <ExtendedVideoPlayer src={image.get('url')} muted controls={false} width={width} height={height} key={image.get('preview_url')} alt={image.get('description')} />; return <ExtendedVideoPlayer src={image.get('url')} muted controls={false} width={width} height={height} key={image.get('preview_url')} alt={image.get('description')} />;
} }

View File

@@ -33,7 +33,6 @@ import {
FollowRequests, FollowRequests,
GenericNotFound, GenericNotFound,
FavouritedStatuses, FavouritedStatuses,
ListTimeline,
Blocks, Blocks,
Mutes, Mutes,
PinnedStatuses, PinnedStatuses,
@@ -373,7 +372,6 @@ export default class UI extends React.Component {
<WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} /> <WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} />
<WrappedRoute path='/timelines/public/local' component={CommunityTimeline} content={children} /> <WrappedRoute path='/timelines/public/local' component={CommunityTimeline} content={children} />
<WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} /> <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />
<WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />
<WrappedRoute path='/notifications' component={Notifications} content={children} /> <WrappedRoute path='/notifications' component={Notifications} content={children} />
<WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} /> <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />

View File

@@ -26,10 +26,6 @@ export function HashtagTimeline () {
return import(/* webpackChunkName: "features/hashtag_timeline" */'../../hashtag_timeline'); return import(/* webpackChunkName: "features/hashtag_timeline" */'../../hashtag_timeline');
} }
export function ListTimeline () {
return import(/* webpackChunkName: "features/list_timeline" */'../../list_timeline');
}
export function Status () { export function Status () {
return import(/* webpackChunkName: "features/status" */'../../status'); return import(/* webpackChunkName: "features/status" */'../../status');
} }

View File

@@ -9,9 +9,7 @@
"account.follows_you": "يتابعك", "account.follows_you": "يتابعك",
"account.media": "وسائط", "account.media": "وسائط",
"account.mention": "أُذكُر @{name}", "account.mention": "أُذكُر @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "أكتم @{name}", "account.mute": "أكتم @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "المشاركات", "account.posts": "المشاركات",
"account.report": "أبلغ عن @{name}", "account.report": "أبلغ عن @{name}",
"account.requested": "في انتظار الموافقة", "account.requested": "في انتظار الموافقة",
@@ -20,7 +18,6 @@
"account.unblock_domain": "فك حظر {domain}", "account.unblock_domain": "فك حظر {domain}",
"account.unfollow": "إلغاء المتابعة", "account.unfollow": "إلغاء المتابعة",
"account.unmute": "إلغاء الكتم عن @{name}", "account.unmute": "إلغاء الكتم عن @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "عرض الملف الشخصي كاملا", "account.view_full_profile": "عرض الملف الشخصي كاملا",
"boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة", "boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة",
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.", "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
"empty_column.home": "إنك لا تتبع بعد أي شخص إلى حد الآن. زر {public} أو استخدام حقل البحث لكي تبدأ على التعرف على مستخدمين آخرين.", "empty_column.home": "إنك لا تتبع بعد أي شخص إلى حد الآن. زر {public} أو استخدام حقل البحث لكي تبدأ على التعرف على مستخدمين آخرين.",
"empty_column.home.public_timeline": "الخيط العام", "empty_column.home.public_timeline": "الخيط العام",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
"empty_column.public": "لا يوجد شيء هنا ! قم بتحرير شيء ما بشكل عام، أو اتبع مستخدمين آخرين في الخوادم المثيلة الأخرى لملء خيط المحادثات العام.", "empty_column.public": "لا يوجد شيء هنا ! قم بتحرير شيء ما بشكل عام، أو اتبع مستخدمين آخرين في الخوادم المثيلة الأخرى لملء خيط المحادثات العام.",
"follow_request.authorize": "ترخيص", "follow_request.authorize": "ترخيص",
@@ -108,7 +104,6 @@
"loading_indicator.label": "تحميل ...", "loading_indicator.label": "تحميل ...",
"media_gallery.toggle_visible": "عرض / إخفاء", "media_gallery.toggle_visible": "عرض / إخفاء",
"missing_indicator.label": "تعذر العثور عليه", "missing_indicator.label": "تعذر العثور عليه",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "الحسابات المحجوبة", "navigation_bar.blocks": "الحسابات المحجوبة",
"navigation_bar.community_timeline": "الخيط العام المحلي", "navigation_bar.community_timeline": "الخيط العام المحلي",
"navigation_bar.edit_profile": "تعديل الملف الشخصي", "navigation_bar.edit_profile": "تعديل الملف الشخصي",
@@ -209,7 +204,6 @@
"tabs_bar.home": "الرئيسية", "tabs_bar.home": "الرئيسية",
"tabs_bar.local_timeline": "المحلي", "tabs_bar.local_timeline": "المحلي",
"tabs_bar.notifications": "الإخطارات", "tabs_bar.notifications": "الإخطارات",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "إسحب ثم أفلت للرفع", "upload_area.title": "إسحب ثم أفلت للرفع",
"upload_button.label": "إضافة وسائط", "upload_button.label": "إضافة وسائط",
"upload_form.description": "وصف للمعاقين بصريا", "upload_form.description": "وصف للمعاقين بصريا",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Твой последовател", "account.follows_you": "Твой последовател",
"account.media": "Media", "account.media": "Media",
"account.mention": "Споменаване", "account.mention": "Споменаване",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Публикации", "account.posts": "Публикации",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "В очакване на одобрение", "account.requested": "В очакване на одобрение",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Не следвай", "account.unfollow": "Не следвай",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Authorize",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Зареждане...", "loading_indicator.label": "Зареждане...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Not found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.edit_profile": "Редактирай профил", "navigation_bar.edit_profile": "Редактирай профил",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Начало", "tabs_bar.home": "Начало",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Известия", "tabs_bar.notifications": "Известия",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Добави медия", "upload_button.label": "Добави медия",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,18 +9,15 @@
"account.follows_you": "et segueix", "account.follows_you": "et segueix",
"account.media": "Media", "account.media": "Media",
"account.mention": "Esmentar @{name}", "account.mention": "Esmentar @{name}",
"account.moved_to": "{name} s'ha mogut a:",
"account.mute": "Silenciar @{name}", "account.mute": "Silenciar @{name}",
"account.mute_notifications": "Notificacions desactivades de @{name}",
"account.posts": "Publicacions", "account.posts": "Publicacions",
"account.report": "Informe @{name}", "account.report": "Informe @{name}",
"account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment", "account.requested": "Esperant aprovació",
"account.share": "Compartir el perfil de @{name}", "account.share": "Compartir el perfil de @{name}",
"account.unblock": "Desbloquejar @{name}", "account.unblock": "Desbloquejar @{name}",
"account.unblock_domain": "Mostra {domain}", "account.unblock_domain": "Mostra {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Treure silenci de @{name}", "account.unmute": "Treure silenci de @{name}",
"account.unmute_notifications": "Activar notificacions de @{name}",
"account.view_full_profile": "Veure el perfil complet", "account.view_full_profile": "Veure el perfil complet",
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop", "boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
@@ -54,7 +51,7 @@
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Marcar multimèdia com a sensible", "compose_form.sensitive": "Marcar multimèdia com a sensible",
"compose_form.spoiler": "Amagar text darrera l'advertència", "compose_form.spoiler": "Amagar text darrera l'advertència",
"compose_form.spoiler_placeholder": "Escriu l'advertència aquí", "compose_form.spoiler_placeholder": "Advertència de contingut",
"confirmation_modal.cancel": "Cancel·lar", "confirmation_modal.cancel": "Cancel·lar",
"confirmations.block.confirm": "Bloquejar", "confirmations.block.confirm": "Bloquejar",
"confirmations.block.message": "Estàs segur que vols bloquejar {name}?", "confirmations.block.message": "Estàs segur que vols bloquejar {name}?",
@@ -67,7 +64,7 @@
"confirmations.unfollow.confirm": "Deixar de seguir", "confirmations.unfollow.confirm": "Deixar de seguir",
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?", "confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
"embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.", "embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
"embed.preview": "Aquí tenim quin aspecte tindrá:", "embed.preview": "A continuació s'explica com:",
"emoji_button.activity": "Activitat", "emoji_button.activity": "Activitat",
"emoji_button.custom": "Personalitzat", "emoji_button.custom": "Personalitzat",
"emoji_button.flags": "Flags", "emoji_button.flags": "Flags",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Encara no hi ha res amb aquesta etiqueta.", "empty_column.hashtag": "Encara no hi ha res amb aquesta etiqueta.",
"empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.", "empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.",
"empty_column.home.public_timeline": "la línia de temps pública", "empty_column.home.public_timeline": "la línia de temps pública",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
"empty_column.public": "No hi ha res aquí! Escriu alguna cosa públicament o segueix manualment usuaris d'altres instàncies per omplir-ho", "empty_column.public": "No hi ha res aquí! Escriu alguna cosa públicament o segueix manualment usuaris d'altres instàncies per omplir-ho",
"follow_request.authorize": "Autoritzar", "follow_request.authorize": "Autoritzar",
@@ -99,7 +95,7 @@
"home.column_settings.advanced": "Avançat", "home.column_settings.advanced": "Avançat",
"home.column_settings.basic": "Bàsic", "home.column_settings.basic": "Bàsic",
"home.column_settings.filter_regex": "Filtrar per expressió regular", "home.column_settings.filter_regex": "Filtrar per expressió regular",
"home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_reblogs": "Mostrar 'boosts'",
"home.column_settings.show_replies": "Mostrar respostes", "home.column_settings.show_replies": "Mostrar respostes",
"home.settings": "Ajustos de columna", "home.settings": "Ajustos de columna",
"lightbox.close": "Tancar", "lightbox.close": "Tancar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Carregant...", "loading_indicator.label": "Carregant...",
"media_gallery.toggle_visible": "Alternar visibilitat", "media_gallery.toggle_visible": "Alternar visibilitat",
"missing_indicator.label": "No trobat", "missing_indicator.label": "No trobat",
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
"navigation_bar.blocks": "Usuaris bloquejats", "navigation_bar.blocks": "Usuaris bloquejats",
"navigation_bar.community_timeline": "Línia de temps Local", "navigation_bar.community_timeline": "Línia de temps Local",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
@@ -132,7 +127,7 @@
"notifications.column_settings.mention": "Mencions:", "notifications.column_settings.mention": "Mencions:",
"notifications.column_settings.push": "Push notificacions", "notifications.column_settings.push": "Push notificacions",
"notifications.column_settings.push_meta": "Aquest dispositiu", "notifications.column_settings.push_meta": "Aquest dispositiu",
"notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Mostrar en la columna", "notifications.column_settings.show": "Mostrar en la columna",
"notifications.column_settings.sound": "Reproduïr so", "notifications.column_settings.sound": "Reproduïr so",
"onboarding.done": "Fet", "onboarding.done": "Fet",
@@ -164,11 +159,11 @@
"privacy.public.short": "Públic", "privacy.public.short": "Públic",
"privacy.unlisted.long": "No publicar en línies de temps públiques", "privacy.unlisted.long": "No publicar en línies de temps públiques",
"privacy.unlisted.short": "No llistat", "privacy.unlisted.short": "No llistat",
"relative_time.days": "fa {number} dies", "relative_time.days": "fa {number} jorns",
"relative_time.hours": "fa {number} hores", "relative_time.hours": "fa {number} hores",
"relative_time.just_now": "ara", "relative_time.just_now": "ara",
"relative_time.minutes": "fa {number} minuts", "relative_time.minutes": "fa {number} minutes",
"relative_time.seconds": "fa {number} segons", "relative_time.seconds": "fa {number} segondes",
"reply_indicator.cancel": "Cancel·lar", "reply_indicator.cancel": "Cancel·lar",
"report.placeholder": "Comentaris addicionals", "report.placeholder": "Comentaris addicionals",
"report.submit": "Enviar", "report.submit": "Enviar",
@@ -192,7 +187,7 @@
"status.mute_conversation": "Silenciar conversació", "status.mute_conversation": "Silenciar conversació",
"status.open": "Ampliar aquest estat", "status.open": "Ampliar aquest estat",
"status.pin": "Fixat en el perfil", "status.pin": "Fixat en el perfil",
"status.reblog": "Impuls", "status.reblog": "Boost",
"status.reblogged_by": "{name} ha retootejat", "status.reblogged_by": "{name} ha retootejat",
"status.reply": "Respondre", "status.reply": "Respondre",
"status.replyAll": "Respondre al tema", "status.replyAll": "Respondre al tema",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Inici", "tabs_bar.home": "Inici",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notificacions", "tabs_bar.notifications": "Notificacions",
"ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
"upload_area.title": "Arrossega i deixa anar per carregar", "upload_area.title": "Arrossega i deixa anar per carregar",
"upload_button.label": "Afegir multimèdia", "upload_button.label": "Afegir multimèdia",
"upload_form.description": "Descriure els problemes visuals", "upload_form.description": "Descriure els problemes visuals",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Folgt dir", "account.follows_you": "Folgt dir",
"account.media": "Medien", "account.media": "Medien",
"account.mention": "@{name} erwähnen", "account.mention": "@{name} erwähnen",
"account.moved_to": "{name} has moved to:",
"account.mute": "@{name} stummschalten", "account.mute": "@{name} stummschalten",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Beiträge", "account.posts": "Beiträge",
"account.report": "@{name} melden", "account.report": "@{name} melden",
"account.requested": "Warte auf Erlaubnis. Klicke zum Abbrechen", "account.requested": "Warte auf Erlaubnis. Klicke zum Abbrechen",
@@ -20,7 +18,6 @@
"account.unblock_domain": "{domain} wieder anzeigen", "account.unblock_domain": "{domain} wieder anzeigen",
"account.unfollow": "Entfolgen", "account.unfollow": "Entfolgen",
"account.unmute": "@{name} nicht mehr stummschalten", "account.unmute": "@{name} nicht mehr stummschalten",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Vollständiges Profil anzeigen", "account.view_full_profile": "Vollständiges Profil anzeigen",
"boost_modal.combo": "Du kannst {combo} drücken, um dies beim nächsten Mal zu überspringen", "boost_modal.combo": "Du kannst {combo} drücken, um dies beim nächsten Mal zu überspringen",
"bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.", "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.", "empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
"empty_column.home.public_timeline": "die öffentliche Zeitleiste", "empty_column.home.public_timeline": "die öffentliche Zeitleiste",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
"empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Instanzen, um die Zeitleiste aufzufüllen", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Instanzen, um die Zeitleiste aufzufüllen",
"follow_request.authorize": "Erlauben", "follow_request.authorize": "Erlauben",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Wird geladen …", "loading_indicator.label": "Wird geladen …",
"media_gallery.toggle_visible": "Sichtbarkeit umschalten", "media_gallery.toggle_visible": "Sichtbarkeit umschalten",
"missing_indicator.label": "Nicht gefunden", "missing_indicator.label": "Nicht gefunden",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blockierte Profile", "navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.community_timeline": "Lokale Zeitleiste", "navigation_bar.community_timeline": "Lokale Zeitleiste",
"navigation_bar.edit_profile": "Profil bearbeiten", "navigation_bar.edit_profile": "Profil bearbeiten",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Startseite", "tabs_bar.home": "Startseite",
"tabs_bar.local_timeline": "Lokal", "tabs_bar.local_timeline": "Lokal",
"tabs_bar.notifications": "Mitteilungen", "tabs_bar.notifications": "Mitteilungen",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Zum Hochladen hereinziehen", "upload_area.title": "Zum Hochladen hereinziehen",
"upload_button.label": "Mediendatei hinzufügen", "upload_button.label": "Mediendatei hinzufügen",
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben", "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",

View File

@@ -29,14 +29,6 @@
{ {
"defaultMessage": "Unmute @{name}", "defaultMessage": "Unmute @{name}",
"id": "account.unmute" "id": "account.unmute"
},
{
"defaultMessage": "Mute notifications from @{name}",
"id": "account.mute_notifications"
},
{
"defaultMessage": "Unmute notifications from @{name}",
"id": "account.unmute_notifications"
} }
], ],
"path": "app/javascript/mastodon/components/account.json" "path": "app/javascript/mastodon/components/account.json"
@@ -291,9 +283,17 @@
"defaultMessage": "Block", "defaultMessage": "Block",
"id": "confirmations.block.confirm" "id": "confirmations.block.confirm"
}, },
{
"defaultMessage": "Mute",
"id": "confirmations.mute.confirm"
},
{ {
"defaultMessage": "Are you sure you want to block {name}?", "defaultMessage": "Are you sure you want to block {name}?",
"id": "confirmations.block.message" "id": "confirmations.block.message"
},
{
"defaultMessage": "Are you sure you want to mute {name}?",
"id": "confirmations.mute.message"
} }
], ],
"path": "app/javascript/mastodon/containers/status_container.json" "path": "app/javascript/mastodon/containers/status_container.json"
@@ -307,15 +307,6 @@
], ],
"path": "app/javascript/mastodon/features/account_gallery/index.json" "path": "app/javascript/mastodon/features/account_gallery/index.json"
}, },
{
"descriptors": [
{
"defaultMessage": "{name} has moved to:",
"id": "account.moved_to"
}
],
"path": "app/javascript/mastodon/features/account_timeline/components/moved_note.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@@ -326,6 +317,10 @@
"defaultMessage": "Block", "defaultMessage": "Block",
"id": "confirmations.block.confirm" "id": "confirmations.block.confirm"
}, },
{
"defaultMessage": "Mute",
"id": "confirmations.mute.confirm"
},
{ {
"defaultMessage": "Hide entire domain", "defaultMessage": "Hide entire domain",
"id": "confirmations.domain_block.confirm" "id": "confirmations.domain_block.confirm"
@@ -338,6 +333,10 @@
"defaultMessage": "Are you sure you want to block {name}?", "defaultMessage": "Are you sure you want to block {name}?",
"id": "confirmations.block.message" "id": "confirmations.block.message"
}, },
{
"defaultMessage": "Are you sure you want to mute {name}?",
"id": "confirmations.mute.message"
},
{ {
"defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
"id": "confirmations.domain_block.message" "id": "confirmations.domain_block.message"
@@ -923,15 +922,6 @@
], ],
"path": "app/javascript/mastodon/features/home_timeline/index.json" "path": "app/javascript/mastodon/features/home_timeline/index.json"
}, },
{
"descriptors": [
{
"defaultMessage": "There is nothing in this list yet.",
"id": "empty_column.list"
}
],
"path": "app/javascript/mastodon/features/list_timeline/index.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@@ -1217,27 +1207,6 @@
], ],
"path": "app/javascript/mastodon/features/ui/components/media_modal.json" "path": "app/javascript/mastodon/features/ui/components/media_modal.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Are you sure you want to mute {name}?",
"id": "confirmations.mute.message"
},
{
"defaultMessage": "Hide notifications from this user?",
"id": "mute_modal.hide_notifications"
},
{
"defaultMessage": "Cancel",
"id": "confirmation_modal.cancel"
},
{
"defaultMessage": "Mute",
"id": "confirmations.mute.confirm"
}
],
"path": "app/javascript/mastodon/features/ui/components/mute_modal.json"
},
{ {
"descriptors": [ "descriptors": [
{ {
@@ -1390,15 +1359,6 @@
], ],
"path": "app/javascript/mastodon/features/ui/components/upload_area.json" "path": "app/javascript/mastodon/features/ui/components/upload_area.json"
}, },
{
"descriptors": [
{
"defaultMessage": "Your draft will be lost if you leave Mastodon.",
"id": "ui.beforeunload"
}
],
"path": "app/javascript/mastodon/features/ui/index.json"
},
{ {
"descriptors": [ "descriptors": [
{ {

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Follows you", "account.follows_you": "Follows you",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mention @{name}", "account.mention": "Mention @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Awaiting approval. Click to cancel follow request", "account.requested": "Awaiting approval. Click to cancel follow request",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Unfollow", "account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Authorize",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Loading...", "loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Not found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.edit_profile": "Edit profile", "navigation_bar.edit_profile": "Edit profile",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Home", "tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Notifications",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media", "upload_button.label": "Add media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Sekvas vin", "account.follows_you": "Sekvas vin",
"account.media": "Sonbildaĵoj", "account.media": "Sonbildaĵoj",
"account.mention": "Mencii @{name}", "account.mention": "Mencii @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Silentigi @{name}", "account.mute": "Silentigi @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Mesaĝoj", "account.posts": "Mesaĝoj",
"account.report": "Signali @{name}", "account.report": "Signali @{name}",
"account.requested": "Atendas aprobon", "account.requested": "Atendas aprobon",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Malkaŝi {domain}", "account.unblock_domain": "Malkaŝi {domain}",
"account.unfollow": "Ne plus sekvi", "account.unfollow": "Ne plus sekvi",
"account.unmute": "Malsilentigi @{name}", "account.unmute": "Malsilentigi @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Vidi plenan profilon", "account.view_full_profile": "Vidi plenan profilon",
"boost_modal.combo": "La proksiman fojon, premu {combo} por pasigi", "boost_modal.combo": "La proksiman fojon, premu {combo} por pasigi",
"bundle_column_error.body": "Io malfunkciis ŝargante tiun ĉi komponanton.", "bundle_column_error.body": "Io malfunkciis ŝargante tiun ĉi komponanton.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Ĝise, neniu enhavo estas asociita kun tiu kradvorto.", "empty_column.hashtag": "Ĝise, neniu enhavo estas asociita kun tiu kradvorto.",
"empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.", "empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.",
"empty_column.home.public_timeline": "la publika tempolinio", "empty_column.home.public_timeline": "la publika tempolinio",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Vi dume ne havas sciigojn. Interagi kun aliajn uzantojn por komenci la konversacion.", "empty_column.notifications": "Vi dume ne havas sciigojn. Interagi kun aliajn uzantojn por komenci la konversacion.",
"empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj instancoj por plenigi la publikan tempolinion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj instancoj por plenigi la publikan tempolinion.",
"follow_request.authorize": "Akcepti", "follow_request.authorize": "Akcepti",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Ŝarganta…", "loading_indicator.label": "Ŝarganta…",
"media_gallery.toggle_visible": "Baskuli videblecon", "media_gallery.toggle_visible": "Baskuli videblecon",
"missing_indicator.label": "Ne trovita", "missing_indicator.label": "Ne trovita",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.blocks": "Blokitaj uzantoj",
"navigation_bar.community_timeline": "Loka tempolinio", "navigation_bar.community_timeline": "Loka tempolinio",
"navigation_bar.edit_profile": "Redakti la profilon", "navigation_bar.edit_profile": "Redakti la profilon",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Hejmo", "tabs_bar.home": "Hejmo",
"tabs_bar.local_timeline": "Loka tempolinio", "tabs_bar.local_timeline": "Loka tempolinio",
"tabs_bar.notifications": "Sciigoj", "tabs_bar.notifications": "Sciigoj",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Algliti por alŝuti", "upload_area.title": "Algliti por alŝuti",
"upload_button.label": "Aldoni sonbildaĵon", "upload_button.label": "Aldoni sonbildaĵon",
"upload_form.description": "Priskribi por la misvidantaj", "upload_form.description": "Priskribi por la misvidantaj",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Te sigue", "account.follows_you": "Te sigue",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Silenciar a @{name}", "account.mute": "Silenciar a @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Publicaciones", "account.posts": "Publicaciones",
"account.report": "Reportar a @{name}", "account.report": "Reportar a @{name}",
"account.requested": "Esperando aprobación", "account.requested": "Esperando aprobación",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Mostrar a {domain}", "account.unblock_domain": "Mostrar a {domain}",
"account.unfollow": "Dejar de seguir", "account.unfollow": "Dejar de seguir",
"account.unmute": "Dejar de silenciar a @{name}", "account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Ver perfil completo", "account.view_full_profile": "Ver perfil completo",
"boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez", "boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.body": "Algo salió mal al cargar este componente.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "No hay nada en este hashtag aún.", "empty_column.hashtag": "No hay nada en este hashtag aún.",
"empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.",
"empty_column.home.public_timeline": "la línea de tiempo pública", "empty_column.home.public_timeline": "la línea de tiempo pública",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo.",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Cargando…", "loading_indicator.label": "Cargando…",
"media_gallery.toggle_visible": "Cambiar visibilidad", "media_gallery.toggle_visible": "Cambiar visibilidad",
"missing_indicator.label": "No encontrado", "missing_indicator.label": "No encontrado",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.community_timeline": "Historia local", "navigation_bar.community_timeline": "Historia local",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Inicio", "tabs_bar.home": "Inicio",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notificaciones", "tabs_bar.notifications": "Notificaciones",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Arrastra y suelta para subir", "upload_area.title": "Arrastra y suelta para subir",
"upload_button.label": "Subir multimedia", "upload_button.label": "Subir multimedia",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "پیگیر شماست", "account.follows_you": "پیگیر شماست",
"account.media": "رسانه", "account.media": "رسانه",
"account.mention": "نام‌بردن از @{name}", "account.mention": "نام‌بردن از @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "بی‌صدا کردن @{name}", "account.mute": "بی‌صدا کردن @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "نوشته‌ها", "account.posts": "نوشته‌ها",
"account.report": "گزارش @{name}", "account.report": "گزارش @{name}",
"account.requested": "در انتظار پذیرش", "account.requested": "در انتظار پذیرش",
@@ -20,7 +18,6 @@
"account.unblock_domain": "رفع پنهان‌سازی از {domain}", "account.unblock_domain": "رفع پنهان‌سازی از {domain}",
"account.unfollow": "پایان پیگیری", "account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}", "account.unmute": "باصدا کردن @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "نمایش نمایهٔ کامل", "account.view_full_profile": "نمایش نمایهٔ کامل",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
"bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.", "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "هنوز هیچ چیزی با این هشتگ نیست.", "empty_column.hashtag": "هنوز هیچ چیزی با این هشتگ نیست.",
"empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.", "empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.",
"empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا", "empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشته‌های دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشته‌های دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
"empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران دیگر را پی بگیرید تا این‌جا پر شود", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران دیگر را پی بگیرید تا این‌جا پر شود",
"follow_request.authorize": "اجازه دهید", "follow_request.authorize": "اجازه دهید",
@@ -108,7 +104,6 @@
"loading_indicator.label": "بارگیری...", "loading_indicator.label": "بارگیری...",
"media_gallery.toggle_visible": "تغییر پیدایی", "media_gallery.toggle_visible": "تغییر پیدایی",
"missing_indicator.label": "پیدا نشد", "missing_indicator.label": "پیدا نشد",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "کاربران مسدودشده", "navigation_bar.blocks": "کاربران مسدودشده",
"navigation_bar.community_timeline": "نوشته‌های محلی", "navigation_bar.community_timeline": "نوشته‌های محلی",
"navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.edit_profile": "ویرایش نمایه",
@@ -209,7 +204,6 @@
"tabs_bar.home": "خانه", "tabs_bar.home": "خانه",
"tabs_bar.local_timeline": "محلی", "tabs_bar.local_timeline": "محلی",
"tabs_bar.notifications": "اعلان‌ها", "tabs_bar.notifications": "اعلان‌ها",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "برای بارگذاری به این‌جا بکشید", "upload_area.title": "برای بارگذاری به این‌جا بکشید",
"upload_button.label": "افزودن تصویر", "upload_button.label": "افزودن تصویر",
"upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان", "upload_form.description": "نوشتهٔ توضیحی برای کم‌بینایان و نابینایان",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Seuraa sinua", "account.follows_you": "Seuraa sinua",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mainitse @{name}", "account.mention": "Mainitse @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Postit", "account.posts": "Postit",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Odottaa hyväksyntää", "account.requested": "Odottaa hyväksyntää",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Lopeta seuraaminen", "account.unfollow": "Lopeta seuraaminen",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Authorize",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Ladataan...", "loading_indicator.label": "Ladataan...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Not found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Paikallinen aikajana", "navigation_bar.community_timeline": "Paikallinen aikajana",
"navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.edit_profile": "Muokkaa profiilia",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Koti", "tabs_bar.home": "Koti",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Ilmoitukset", "tabs_bar.notifications": "Ilmoitukset",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Lisää mediaa", "upload_button.label": "Lisää mediaa",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Vous suit", "account.follows_you": "Vous suit",
"account.media": "Média", "account.media": "Média",
"account.mention": "Mentionner", "account.mention": "Mentionner",
"account.moved_to": "{name} has moved to:",
"account.mute": "Masquer", "account.mute": "Masquer",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Statuts", "account.posts": "Statuts",
"account.report": "Signaler", "account.report": "Signaler",
"account.requested": "Invitation envoyée", "account.requested": "Invitation envoyée",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Ne plus masquer {domain}", "account.unblock_domain": "Ne plus masquer {domain}",
"account.unfollow": "Ne plus suivre", "account.unfollow": "Ne plus suivre",
"account.unmute": "Ne plus masquer", "account.unmute": "Ne plus masquer",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Afficher le profil complet", "account.view_full_profile": "Afficher le profil complet",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
"bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.", "bundle_column_error.body": "Une erreur sest produite lors du chargement de ce composant.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Il ny a encore aucun contenu associé à ce hashtag", "empty_column.hashtag": "Il ny a encore aucun contenu associé à ce hashtag",
"empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à dautres utilisateur⋅ice⋅s.", "empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à dautres utilisateur⋅ice⋅s.",
"empty_column.home.public_timeline": "le fil public", "empty_column.home.public_timeline": "le fil public",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Vous navez pas encore de notification. Interagissez avec dautres utilisateur⋅ice⋅s pour débuter la conversation.", "empty_column.notifications": "Vous navez pas encore de notification. Interagissez avec dautres utilisateur⋅ice⋅s pour débuter la conversation.",
"empty_column.public": "Il ny a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s dautres instances pour remplir le fil public.", "empty_column.public": "Il ny a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s dautres instances pour remplir le fil public.",
"follow_request.authorize": "Accepter", "follow_request.authorize": "Accepter",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Chargement…", "loading_indicator.label": "Chargement…",
"media_gallery.toggle_visible": "Modifier la visibilité", "media_gallery.toggle_visible": "Modifier la visibilité",
"missing_indicator.label": "Non trouvé", "missing_indicator.label": "Non trouvé",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Comptes bloqués", "navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.community_timeline": "Fil public local", "navigation_bar.community_timeline": "Fil public local",
"navigation_bar.edit_profile": "Modifier le profil", "navigation_bar.edit_profile": "Modifier le profil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Accueil", "tabs_bar.home": "Accueil",
"tabs_bar.local_timeline": "Fil public local", "tabs_bar.local_timeline": "Fil public local",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Notifications",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Glissez et déposez pour envoyer", "upload_area.title": "Glissez et déposez pour envoyer",
"upload_button.label": "Joindre un média", "upload_button.label": "Joindre un média",
"upload_form.description": "Décrire pour les malvoyants", "upload_form.description": "Décrire pour les malvoyants",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "במעקב אחריך", "account.follows_you": "במעקב אחריך",
"account.media": "מדיה", "account.media": "מדיה",
"account.mention": "אזכור של @{name}", "account.mention": "אזכור של @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "להשתיק את @{name}", "account.mute": "להשתיק את @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "הודעות", "account.posts": "הודעות",
"account.report": "לדווח על @{name}", "account.report": "לדווח על @{name}",
"account.requested": "בהמתנה לאישור", "account.requested": "בהמתנה לאישור",
@@ -20,7 +18,6 @@
"account.unblock_domain": "הסר חסימה מקהילת {domain}", "account.unblock_domain": "הסר חסימה מקהילת {domain}",
"account.unfollow": "הפסקת מעקב", "account.unfollow": "הפסקת מעקב",
"account.unmute": "הפסקת השתקת @{name}", "account.unmute": "הפסקת השתקת @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.", "empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.",
"empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים.", "empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים.",
"empty_column.home.public_timeline": "ציר זמן בין-קהילתי", "empty_column.home.public_timeline": "ציר זמן בין-קהילתי",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב!", "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב!",
"empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות.", "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות.",
"follow_request.authorize": "קבלה", "follow_request.authorize": "קבלה",
@@ -108,7 +104,6 @@
"loading_indicator.label": "טוען...", "loading_indicator.label": "טוען...",
"media_gallery.toggle_visible": "נראה\\בלתי נראה", "media_gallery.toggle_visible": "נראה\\בלתי נראה",
"missing_indicator.label": "לא נמצא", "missing_indicator.label": "לא נמצא",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "חסימות", "navigation_bar.blocks": "חסימות",
"navigation_bar.community_timeline": "ציר זמן מקומי", "navigation_bar.community_timeline": "ציר זמן מקומי",
"navigation_bar.edit_profile": "עריכת פרופיל", "navigation_bar.edit_profile": "עריכת פרופיל",
@@ -209,7 +204,6 @@
"tabs_bar.home": "בבית", "tabs_bar.home": "בבית",
"tabs_bar.local_timeline": "ציר זמן מקומי", "tabs_bar.local_timeline": "ציר זמן מקומי",
"tabs_bar.notifications": "התראות", "tabs_bar.notifications": "התראות",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "ניתן להעלות על ידי Drag & drop", "upload_area.title": "ניתן להעלות על ידי Drag & drop",
"upload_button.label": "הוספת מדיה", "upload_button.label": "הוספת מדיה",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "te slijedi", "account.follows_you": "te slijedi",
"account.media": "Media", "account.media": "Media",
"account.mention": "Spomeni @{name}", "account.mention": "Spomeni @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Utišaj @{name}", "account.mute": "Utišaj @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Postovi", "account.posts": "Postovi",
"account.report": "Prijavi @{name}", "account.report": "Prijavi @{name}",
"account.requested": "Čeka pristanak", "account.requested": "Čeka pristanak",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Poništi sakrivanje {domain}", "account.unblock_domain": "Poništi sakrivanje {domain}",
"account.unfollow": "Prestani slijediti", "account.unfollow": "Prestani slijediti",
"account.unmute": "Poništi utišavanje @{name}", "account.unmute": "Poništi utišavanje @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.", "empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.",
"empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.", "empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.",
"empty_column.home.public_timeline": "javni timeline", "empty_column.home.public_timeline": "javni timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.", "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.",
"empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio", "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio",
"follow_request.authorize": "Autoriziraj", "follow_request.authorize": "Autoriziraj",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Učitavam...", "loading_indicator.label": "Učitavam...",
"media_gallery.toggle_visible": "Preklopi vidljivost", "media_gallery.toggle_visible": "Preklopi vidljivost",
"missing_indicator.label": "Nije nađen", "missing_indicator.label": "Nije nađen",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blokirani korisnici", "navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalni timeline", "navigation_bar.community_timeline": "Lokalni timeline",
"navigation_bar.edit_profile": "Uredi profil", "navigation_bar.edit_profile": "Uredi profil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Dom", "tabs_bar.home": "Dom",
"tabs_bar.local_timeline": "Lokalno", "tabs_bar.local_timeline": "Lokalno",
"tabs_bar.notifications": "Notifikacije", "tabs_bar.notifications": "Notifikacije",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Povuci i spusti kako bi uploadao", "upload_area.title": "Povuci i spusti kako bi uploadao",
"upload_button.label": "Dodaj media", "upload_button.label": "Dodaj media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Követnek téged", "account.follows_you": "Követnek téged",
"account.media": "Media", "account.media": "Media",
"account.mention": "Említés", "account.mention": "Említés",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Awaiting approval", "account.requested": "Awaiting approval",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Követés abbahagyása", "account.unfollow": "Követés abbahagyása",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Authorize",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Betöltés...", "loading_indicator.label": "Betöltés...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Not found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.edit_profile": "Profil szerkesztése", "navigation_bar.edit_profile": "Profil szerkesztése",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Kezdőlap", "tabs_bar.home": "Kezdőlap",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Notifications",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Média hozzáadása", "upload_button.label": "Média hozzáadása",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Mengikuti anda", "account.follows_you": "Mengikuti anda",
"account.media": "Media", "account.media": "Media",
"account.mention": "Balasan @{name}", "account.mention": "Balasan @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Bisukan @{name}", "account.mute": "Bisukan @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Postingan", "account.posts": "Postingan",
"account.report": "Laporkan @{name}", "account.report": "Laporkan @{name}",
"account.requested": "Menunggu persetujuan", "account.requested": "Menunggu persetujuan",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Berhenti mengikuti", "account.unfollow": "Berhenti mengikuti",
"account.unmute": "Berhenti membisukan @{name}", "account.unmute": "Berhenti membisukan @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.", "empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.",
"empty_column.home": "Anda sedang tidak mengikuti siapapun. Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.", "empty_column.home": "Anda sedang tidak mengikuti siapapun. Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.",
"empty_column.home.public_timeline": "linimasa publik", "empty_column.home.public_timeline": "linimasa publik",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.", "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.",
"empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisinya secara manual", "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisinya secara manual",
"follow_request.authorize": "Izinkan", "follow_request.authorize": "Izinkan",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Tunggu sebentar...", "loading_indicator.label": "Tunggu sebentar...",
"media_gallery.toggle_visible": "Tampil/Sembunyikan", "media_gallery.toggle_visible": "Tampil/Sembunyikan",
"missing_indicator.label": "Tidak ditemukan", "missing_indicator.label": "Tidak ditemukan",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Pengguna diblokir", "navigation_bar.blocks": "Pengguna diblokir",
"navigation_bar.community_timeline": "Linimasa lokal", "navigation_bar.community_timeline": "Linimasa lokal",
"navigation_bar.edit_profile": "Ubah profil", "navigation_bar.edit_profile": "Ubah profil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Beranda", "tabs_bar.home": "Beranda",
"tabs_bar.local_timeline": "Lokal", "tabs_bar.local_timeline": "Lokal",
"tabs_bar.notifications": "Notifikasi", "tabs_bar.notifications": "Notifikasi",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Seret & lepaskan untuk mengunggah", "upload_area.title": "Seret & lepaskan untuk mengunggah",
"upload_button.label": "Tambahkan media", "upload_button.label": "Tambahkan media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Sequas tu", "account.follows_you": "Sequas tu",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Celar @{name}", "account.mute": "Celar @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Mesaji", "account.posts": "Mesaji",
"account.report": "Denuncar @{name}", "account.report": "Denuncar @{name}",
"account.requested": "Vartante aprobo", "account.requested": "Vartante aprobo",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Ne plus sequar", "account.unfollow": "Ne plus sequar",
"account.unmute": "Ne plus celar @{name}", "account.unmute": "Ne plus celar @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Esas ankore nulo en ta gretovorto.", "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": "Tu sequas ankore nulu. Vizitez {public} od uzez la serchilo por komencar e renkontrar altra uzeri.",
"empty_column.home.public_timeline": "la publika tempolineo", "empty_column.home.public_timeline": "la publika tempolineo",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.",
"empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.",
"follow_request.authorize": "Yurizar", "follow_request.authorize": "Yurizar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Kargante...", "loading_indicator.label": "Kargante...",
"media_gallery.toggle_visible": "Chanjar videbleso", "media_gallery.toggle_visible": "Chanjar videbleso",
"missing_indicator.label": "Ne trovita", "missing_indicator.label": "Ne trovita",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blokusita uzeri", "navigation_bar.blocks": "Blokusita uzeri",
"navigation_bar.community_timeline": "Lokala tempolineo", "navigation_bar.community_timeline": "Lokala tempolineo",
"navigation_bar.edit_profile": "Modifikar profilo", "navigation_bar.edit_profile": "Modifikar profilo",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Hemo", "tabs_bar.home": "Hemo",
"tabs_bar.local_timeline": "Lokala", "tabs_bar.local_timeline": "Lokala",
"tabs_bar.notifications": "Savigi", "tabs_bar.notifications": "Savigi",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Tranar faligar por kargar", "upload_area.title": "Tranar faligar por kargar",
"upload_button.label": "Adjuntar kontenajo", "upload_button.label": "Adjuntar kontenajo",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Ti segue", "account.follows_you": "Ti segue",
"account.media": "Media", "account.media": "Media",
"account.mention": "Menziona @{name}", "account.mention": "Menziona @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Silenzia @{name}", "account.mute": "Silenzia @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Segnala @{name}", "account.report": "Segnala @{name}",
"account.requested": "In attesa di approvazione", "account.requested": "In attesa di approvazione",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Non seguire", "account.unfollow": "Non seguire",
"account.unmute": "Non silenziare @{name}", "account.unmute": "Non silenziare @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.", "empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.",
"empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.", "empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.",
"empty_column.home.public_timeline": "la timeline pubblica", "empty_column.home.public_timeline": "la timeline pubblica",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
"empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio.", "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio.",
"follow_request.authorize": "Autorizza", "follow_request.authorize": "Autorizza",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Carico...", "loading_indicator.label": "Carico...",
"media_gallery.toggle_visible": "Imposta visibilità", "media_gallery.toggle_visible": "Imposta visibilità",
"missing_indicator.label": "Non trovato", "missing_indicator.label": "Non trovato",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Utenti bloccati", "navigation_bar.blocks": "Utenti bloccati",
"navigation_bar.community_timeline": "Timeline locale", "navigation_bar.community_timeline": "Timeline locale",
"navigation_bar.edit_profile": "Modifica profilo", "navigation_bar.edit_profile": "Modifica profilo",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Home", "tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Locale", "tabs_bar.local_timeline": "Locale",
"tabs_bar.notifications": "Notifiche", "tabs_bar.notifications": "Notifiche",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Trascina per caricare", "upload_area.title": "Trascina per caricare",
"upload_button.label": "Aggiungi file multimediale", "upload_button.label": "Aggiungi file multimediale",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "フォローされています", "account.follows_you": "フォローされています",
"account.media": "メディア", "account.media": "メディア",
"account.mention": "返信", "account.mention": "返信",
"account.moved_to": "{name}さんは引っ越しました:",
"account.mute": "ミュート", "account.mute": "ミュート",
"account.mute_notifications": "@{name}からの通知を受け取る",
"account.posts": "投稿", "account.posts": "投稿",
"account.report": "通報", "account.report": "通報",
"account.requested": "承認待ち", "account.requested": "承認待ち",
@@ -20,7 +18,6 @@
"account.unblock_domain": "{domain}を表示", "account.unblock_domain": "{domain}を表示",
"account.unfollow": "フォロー解除", "account.unfollow": "フォロー解除",
"account.unmute": "ミュート解除", "account.unmute": "ミュート解除",
"account.unmute_notifications": "@{name}からの通知を受け取らない",
"account.view_full_profile": "全ての情報を見る", "account.view_full_profile": "全ての情報を見る",
"boost_modal.combo": "次からは{combo}を押せば、これをスキップできます。", "boost_modal.combo": "次からは{combo}を押せば、これをスキップできます。",
"bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "このハッシュタグはまだ使われていません。", "empty_column.hashtag": "このハッシュタグはまだ使われていません。",
"empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。", "empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。",
"empty_column.home.public_timeline": "連合タイムライン", "empty_column.home.public_timeline": "連合タイムライン",
"empty_column.list": "このリストにはまだなにもありません。",
"empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。", "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。",
"empty_column.public": "ここにはまだ何もありません!公開で何かを投稿したり、他のインスタンスのユーザーをフォローしたりしていっぱいにしましょう!", "empty_column.public": "ここにはまだ何もありません!公開で何かを投稿したり、他のインスタンスのユーザーをフォローしたりしていっぱいにしましょう!",
"follow_request.authorize": "許可", "follow_request.authorize": "許可",
@@ -108,7 +104,6 @@
"loading_indicator.label": "読み込み中...", "loading_indicator.label": "読み込み中...",
"media_gallery.toggle_visible": "表示切り替え", "media_gallery.toggle_visible": "表示切り替え",
"missing_indicator.label": "見つかりません", "missing_indicator.label": "見つかりません",
"mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?",
"navigation_bar.blocks": "ブロックしたユーザー", "navigation_bar.blocks": "ブロックしたユーザー",
"navigation_bar.community_timeline": "ローカルタイムライン", "navigation_bar.community_timeline": "ローカルタイムライン",
"navigation_bar.edit_profile": "プロフィールを編集", "navigation_bar.edit_profile": "プロフィールを編集",
@@ -209,7 +204,6 @@
"tabs_bar.home": "ホーム", "tabs_bar.home": "ホーム",
"tabs_bar.local_timeline": "ローカル", "tabs_bar.local_timeline": "ローカル",
"tabs_bar.notifications": "通知", "tabs_bar.notifications": "通知",
"ui.beforeunload": "Mastodonから離れるとあなたのドラフトは失われます。",
"upload_area.title": "ドラッグ&ドロップでアップロード", "upload_area.title": "ドラッグ&ドロップでアップロード",
"upload_button.label": "メディアを追加", "upload_button.label": "メディアを追加",
"upload_form.description": "視覚障害者のための説明", "upload_form.description": "視覚障害者のための説明",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "날 팔로우합니다", "account.follows_you": "날 팔로우합니다",
"account.media": "미디어", "account.media": "미디어",
"account.mention": "답장", "account.mention": "답장",
"account.moved_to": "{name} has moved to:",
"account.mute": "뮤트", "account.mute": "뮤트",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "포스트", "account.posts": "포스트",
"account.report": "신고", "account.report": "신고",
"account.requested": "승인 대기 중", "account.requested": "승인 대기 중",
@@ -20,7 +18,6 @@
"account.unblock_domain": "{domain} 숨김 해제", "account.unblock_domain": "{domain} 숨김 해제",
"account.unfollow": "팔로우 해제", "account.unfollow": "팔로우 해제",
"account.unmute": "뮤트 해제", "account.unmute": "뮤트 해제",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "전체 프로필 보기", "account.view_full_profile": "전체 프로필 보기",
"boost_modal.combo": "다음부터 {combo}를 누르면 이 과정을 건너뛸 수 있습니다.", "boost_modal.combo": "다음부터 {combo}를 누르면 이 과정을 건너뛸 수 있습니다.",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.", "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
"empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.", "empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.",
"empty_column.home.public_timeline": "연합 타임라인", "empty_column.home.public_timeline": "연합 타임라인",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요!", "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요!",
"empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 인스턴스 유저를 팔로우 해서 가득 채워보세요!", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 인스턴스 유저를 팔로우 해서 가득 채워보세요!",
"follow_request.authorize": "허가", "follow_request.authorize": "허가",
@@ -108,7 +104,6 @@
"loading_indicator.label": "불러오는 중...", "loading_indicator.label": "불러오는 중...",
"media_gallery.toggle_visible": "표시 전환", "media_gallery.toggle_visible": "표시 전환",
"missing_indicator.label": "찾을 수 없습니다", "missing_indicator.label": "찾을 수 없습니다",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "차단한 사용자", "navigation_bar.blocks": "차단한 사용자",
"navigation_bar.community_timeline": "로컬 타임라인", "navigation_bar.community_timeline": "로컬 타임라인",
"navigation_bar.edit_profile": "프로필 편집", "navigation_bar.edit_profile": "프로필 편집",
@@ -209,7 +204,6 @@
"tabs_bar.home": "홈", "tabs_bar.home": "홈",
"tabs_bar.local_timeline": "로컬", "tabs_bar.local_timeline": "로컬",
"tabs_bar.notifications": "알림", "tabs_bar.notifications": "알림",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "드래그 & 드롭으로 업로드", "upload_area.title": "드래그 & 드롭으로 업로드",
"upload_button.label": "미디어 추가", "upload_button.label": "미디어 추가",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Volgt jou", "account.follows_you": "Volgt jou",
"account.media": "Media", "account.media": "Media",
"account.mention": "Vermeld @{name}", "account.mention": "Vermeld @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Negeer @{name}", "account.mute": "Negeer @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Toots", "account.posts": "Toots",
"account.report": "Rapporteer @{name}", "account.report": "Rapporteer @{name}",
"account.requested": "Wacht op goedkeuring. Klik om volgverzoek te annuleren.", "account.requested": "Wacht op goedkeuring. Klik om volgverzoek te annuleren.",
@@ -20,7 +18,6 @@
"account.unblock_domain": "{domain} niet meer negeren", "account.unblock_domain": "{domain} niet meer negeren",
"account.unfollow": "Ontvolgen", "account.unfollow": "Ontvolgen",
"account.unmute": "@{name} niet meer negeren", "account.unmute": "@{name} niet meer negeren",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Volledig profiel tonen", "account.view_full_profile": "Volledig profiel tonen",
"boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
"bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
"empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.", "empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.",
"empty_column.home.public_timeline": "de globale tijdlijn", "empty_column.home.public_timeline": "de globale tijdlijn",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Je hebt nog geen meldingen. Heb interactie met andere mensen om het gesprek aan te gaan.", "empty_column.notifications": "Je hebt nog geen meldingen. Heb interactie met andere mensen om het gesprek aan te gaan.",
"empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere Mastodon-servers om het te vullen.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere Mastodon-servers om het te vullen.",
"follow_request.authorize": "Goedkeuren", "follow_request.authorize": "Goedkeuren",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Laden…", "loading_indicator.label": "Laden…",
"media_gallery.toggle_visible": "Media wel/niet tonen", "media_gallery.toggle_visible": "Media wel/niet tonen",
"missing_indicator.label": "Niet gevonden", "missing_indicator.label": "Niet gevonden",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.blocks": "Geblokkeerde gebruikers",
"navigation_bar.community_timeline": "Lokale tijdlijn", "navigation_bar.community_timeline": "Lokale tijdlijn",
"navigation_bar.edit_profile": "Profiel bewerken", "navigation_bar.edit_profile": "Profiel bewerken",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Start", "tabs_bar.home": "Start",
"tabs_bar.local_timeline": "Lokaal", "tabs_bar.local_timeline": "Lokaal",
"tabs_bar.notifications": "Meldingen", "tabs_bar.notifications": "Meldingen",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Hierin slepen om te uploaden", "upload_area.title": "Hierin slepen om te uploaden",
"upload_button.label": "Media toevoegen", "upload_button.label": "Media toevoegen",
"upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Følger deg", "account.follows_you": "Følger deg",
"account.media": "Media", "account.media": "Media",
"account.mention": "Nevn @{name}", "account.mention": "Nevn @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Demp @{name}", "account.mute": "Demp @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Innlegg", "account.posts": "Innlegg",
"account.report": "Rapportér @{name}", "account.report": "Rapportér @{name}",
"account.requested": "Venter på godkjennelse", "account.requested": "Venter på godkjennelse",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Vis {domain}", "account.unblock_domain": "Vis {domain}",
"account.unfollow": "Avfølg", "account.unfollow": "Avfølg",
"account.unmute": "Avdemp @{name}", "account.unmute": "Avdemp @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.", "empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.",
"empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.", "empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.",
"empty_column.home.public_timeline": "en offentlig tidslinje", "empty_column.home.public_timeline": "en offentlig tidslinje",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.", "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.",
"empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp", "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp",
"follow_request.authorize": "Autorisér", "follow_request.authorize": "Autorisér",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Laster...", "loading_indicator.label": "Laster...",
"media_gallery.toggle_visible": "Veksle synlighet", "media_gallery.toggle_visible": "Veksle synlighet",
"missing_indicator.label": "Ikke funnet", "missing_indicator.label": "Ikke funnet",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blokkerte brukere", "navigation_bar.blocks": "Blokkerte brukere",
"navigation_bar.community_timeline": "Lokal tidslinje", "navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.edit_profile": "Rediger profil", "navigation_bar.edit_profile": "Rediger profil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Hjem", "tabs_bar.home": "Hjem",
"tabs_bar.local_timeline": "Lokal", "tabs_bar.local_timeline": "Lokal",
"tabs_bar.notifications": "Varslinger", "tabs_bar.notifications": "Varslinger",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Dra og slipp for å laste opp", "upload_area.title": "Dra og slipp for å laste opp",
"upload_button.label": "Legg til media", "upload_button.label": "Legg til media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Vos sèc", "account.follows_you": "Vos sèc",
"account.media": "Mèdias", "account.media": "Mèdias",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Rescondre @{name}", "account.mute": "Rescondre @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Estatuts", "account.posts": "Estatuts",
"account.report": "Senhalar @{name}", "account.report": "Senhalar @{name}",
"account.requested": "Invitacion mandada. Clicatz per anullar.", "account.requested": "Invitacion mandada. Clicatz per anullar.",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Desblocar {domain}", "account.unblock_domain": "Desblocar {domain}",
"account.unfollow": "Quitar de sègre", "account.unfollow": "Quitar de sègre",
"account.unmute": "Quitar de rescondre @{name}", "account.unmute": "Quitar de rescondre @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Veire lo perfil complet", "account.view_full_profile": "Veire lo perfil complet",
"boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven",
"bundle_column_error.body": "Quicòm a fach meuca pendent lo cargament daqueste compausant.", "bundle_column_error.body": "Quicòm a fach meuca pendent lo cargament daqueste compausant.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "I a pas encara de contengut ligat a aqueste hashtag", "empty_column.hashtag": "I a pas encara de contengut ligat a aqueste hashtag",
"empty_column.home": "Vòstre flux dacuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a dautras personas.", "empty_column.home": "Vòstre flux dacuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a dautras personas.",
"empty_column.home.public_timeline": "lo flux public", "empty_column.home.public_timeline": "lo flux public",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualquun per començar una conversacion.", "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualquun per començar una conversacion.",
"empty_column.public": "I a pas res aquí! Escrivètz quicòm de public, o seguètz de personas dautras instàncias per garnir lo flux public.", "empty_column.public": "I a pas res aquí! Escrivètz quicòm de public, o seguètz de personas dautras instàncias per garnir lo flux public.",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Cargament…", "loading_indicator.label": "Cargament…",
"media_gallery.toggle_visible": "Modificar la visibilitat", "media_gallery.toggle_visible": "Modificar la visibilitat",
"missing_indicator.label": "Pas trobat", "missing_indicator.label": "Pas trobat",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Personas blocadas", "navigation_bar.blocks": "Personas blocadas",
"navigation_bar.community_timeline": "Flux public local", "navigation_bar.community_timeline": "Flux public local",
"navigation_bar.edit_profile": "Modificar lo perfil", "navigation_bar.edit_profile": "Modificar lo perfil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Acuèlh", "tabs_bar.home": "Acuèlh",
"tabs_bar.local_timeline": "Flux public local", "tabs_bar.local_timeline": "Flux public local",
"tabs_bar.notifications": "Notificacions", "tabs_bar.notifications": "Notificacions",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Lisatz e depausatz per mandar", "upload_area.title": "Lisatz e depausatz per mandar",
"upload_button.label": "Ajustar un mèdia", "upload_button.label": "Ajustar un mèdia",
"upload_form.description": "Descripcion pels mal vesents", "upload_form.description": "Descripcion pels mal vesents",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Śledzi Cię", "account.follows_you": "Śledzi Cię",
"account.media": "Media", "account.media": "Media",
"account.mention": "Wspomnij o @{name}", "account.mention": "Wspomnij o @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Wycisz @{name}", "account.mute": "Wycisz @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Wpisy", "account.posts": "Wpisy",
"account.report": "Zgłoś @{name}", "account.report": "Zgłoś @{name}",
"account.requested": "Oczekująca prośba, kliknij aby anulować", "account.requested": "Oczekująca prośba, kliknij aby anulować",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Odblokuj domenę {domain}", "account.unblock_domain": "Odblokuj domenę {domain}",
"account.unfollow": "Przestań śledzić", "account.unfollow": "Przestań śledzić",
"account.unmute": "Cofnij wyciszenie @{name}", "account.unmute": "Cofnij wyciszenie @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Wyświetl pełny profil", "account.view_full_profile": "Wyświetl pełny profil",
"boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
"bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy!", "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy!",
"empty_column.home": "Nie śledzisz nikogo. Odwiedź publiczną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.", "empty_column.home": "Nie śledzisz nikogo. Odwiedź publiczną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
"empty_column.home.public_timeline": "publiczna oś czasu", "empty_column.home.public_timeline": "publiczna oś czasu",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.",
"empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych instancji, aby to wyświetlić.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych instancji, aby to wyświetlić.",
"follow_request.authorize": "Autoryzuj", "follow_request.authorize": "Autoryzuj",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Ładowanie…", "loading_indicator.label": "Ładowanie…",
"media_gallery.toggle_visible": "Przełącz widoczność", "media_gallery.toggle_visible": "Przełącz widoczność",
"missing_indicator.label": "Nie znaleziono", "missing_indicator.label": "Nie znaleziono",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Zablokowani użytkownicy", "navigation_bar.blocks": "Zablokowani użytkownicy",
"navigation_bar.community_timeline": "Lokalna oś czasu", "navigation_bar.community_timeline": "Lokalna oś czasu",
"navigation_bar.edit_profile": "Edytuj profil", "navigation_bar.edit_profile": "Edytuj profil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Strona główna", "tabs_bar.home": "Strona główna",
"tabs_bar.local_timeline": "Lokalne", "tabs_bar.local_timeline": "Lokalne",
"tabs_bar.notifications": "Powiadomienia", "tabs_bar.notifications": "Powiadomienia",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Przeciągnij i upuść aby wysłać", "upload_area.title": "Przeciągnij i upuść aby wysłać",
"upload_button.label": "Dodaj zawartość multimedialną", "upload_button.label": "Dodaj zawartość multimedialną",
"upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Segue você", "account.follows_you": "Segue você",
"account.media": "Mídia", "account.media": "Mídia",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Silenciar @{name}", "account.mute": "Silenciar @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Denunciar @{name}", "account.report": "Denunciar @{name}",
"account.requested": "Aguardando aprovação. Clique para cancelar a solicitação.", "account.requested": "Aguardando aprovação. Clique para cancelar a solicitação.",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Desbloquear {domain}", "account.unblock_domain": "Desbloquear {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}", "account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Ver perfil completo", "account.view_full_profile": "Ver perfil completo",
"boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez", "boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez",
"bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Ainda não há qualquer conteúdo com essa hashtag", "empty_column.hashtag": "Ainda não há qualquer conteúdo com essa hashtag",
"empty_column.home": "Você ainda não segue usuário algo. Visite a timeline {public} ou use o buscador para procurar e conhecer outros usuários.", "empty_column.home": "Você ainda não segue usuário algo. Visite a timeline {public} ou use o buscador para procurar e conhecer outros usuários.",
"empty_column.home.public_timeline": "global", "empty_column.home.public_timeline": "global",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Você ainda não possui notificações. Interaja com outros usuários para começar a conversar!", "empty_column.notifications": "Você ainda não possui notificações. Interaja com outros usuários para começar a conversar!",
"empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias.", "empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias.",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Carregando...", "loading_indicator.label": "Carregando...",
"media_gallery.toggle_visible": "Esconder/Mostrar", "media_gallery.toggle_visible": "Esconder/Mostrar",
"missing_indicator.label": "Não encontrado", "missing_indicator.label": "Não encontrado",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Usuários bloqueados", "navigation_bar.blocks": "Usuários bloqueados",
"navigation_bar.community_timeline": "Local", "navigation_bar.community_timeline": "Local",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Página inicial", "tabs_bar.home": "Página inicial",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notificações", "tabs_bar.notifications": "Notificações",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Arraste e solte para enviar", "upload_area.title": "Arraste e solte para enviar",
"upload_button.label": "Adicionar mídia", "upload_button.label": "Adicionar mídia",
"upload_form.description": "Descreva a imagem para deficientes visuais", "upload_form.description": "Descreva a imagem para deficientes visuais",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "É teu seguidor", "account.follows_you": "É teu seguidor",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Silenciar @{name}", "account.mute": "Silenciar @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Denunciar @{name}", "account.report": "Denunciar @{name}",
"account.requested": "A aguardar aprovação", "account.requested": "A aguardar aprovação",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}", "account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Ainda não existe qualquer conteúdo com essa hashtag", "empty_column.hashtag": "Ainda não existe qualquer conteúdo com essa hashtag",
"empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.", "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
"empty_column.home.public_timeline": "global", "empty_column.home.public_timeline": "global",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
"empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos.",
"follow_request.authorize": "Autorizar", "follow_request.authorize": "Autorizar",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Carregando...", "loading_indicator.label": "Carregando...",
"media_gallery.toggle_visible": "Esconder/Mostrar", "media_gallery.toggle_visible": "Esconder/Mostrar",
"missing_indicator.label": "Não encontrado", "missing_indicator.label": "Não encontrado",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.blocks": "Utilizadores bloqueados",
"navigation_bar.community_timeline": "Local", "navigation_bar.community_timeline": "Local",
"navigation_bar.edit_profile": "Editar perfil", "navigation_bar.edit_profile": "Editar perfil",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Home", "tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notificações", "tabs_bar.notifications": "Notificações",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Arraste e solte para enviar", "upload_area.title": "Arraste e solte para enviar",
"upload_button.label": "Adicionar media", "upload_button.label": "Adicionar media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Подписан(а) на Вас", "account.follows_you": "Подписан(а) на Вас",
"account.media": "Медиаконтент", "account.media": "Медиаконтент",
"account.mention": "Упомянуть", "account.mention": "Упомянуть",
"account.moved_to": "{name} has moved to:",
"account.mute": "Заглушить", "account.mute": "Заглушить",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Посты", "account.posts": "Посты",
"account.report": "Пожаловаться", "account.report": "Пожаловаться",
"account.requested": "Ожидает подтверждения", "account.requested": "Ожидает подтверждения",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Разблокировать {domain}", "account.unblock_domain": "Разблокировать {domain}",
"account.unfollow": "Отписаться", "account.unfollow": "Отписаться",
"account.unmute": "Снять глушение", "account.unmute": "Снять глушение",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Показать полный профиль", "account.view_full_profile": "Показать полный профиль",
"boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз", "boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз",
"bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Статусов с таким хэштегом еще не существует.", "empty_column.hashtag": "Статусов с таким хэштегом еще не существует.",
"empty_column.home": "Пока Вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.", "empty_column.home": "Пока Вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.",
"empty_column.home.public_timeline": "публичные ленты", "empty_column.home.public_timeline": "публичные ленты",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "У Вас еще нет уведомлений. Заведите знакомство с другими пользователями, чтобы начать разговор.", "empty_column.notifications": "У Вас еще нет уведомлений. Заведите знакомство с другими пользователями, чтобы начать разговор.",
"empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.", "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
"follow_request.authorize": "Авторизовать", "follow_request.authorize": "Авторизовать",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Загрузка...", "loading_indicator.label": "Загрузка...",
"media_gallery.toggle_visible": "Показать/скрыть", "media_gallery.toggle_visible": "Показать/скрыть",
"missing_indicator.label": "Не найдено", "missing_indicator.label": "Не найдено",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Список блокировки", "navigation_bar.blocks": "Список блокировки",
"navigation_bar.community_timeline": "Локальная лента", "navigation_bar.community_timeline": "Локальная лента",
"navigation_bar.edit_profile": "Изменить профиль", "navigation_bar.edit_profile": "Изменить профиль",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Главная", "tabs_bar.home": "Главная",
"tabs_bar.local_timeline": "Локальная", "tabs_bar.local_timeline": "Локальная",
"tabs_bar.notifications": "Уведомления", "tabs_bar.notifications": "Уведомления",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Перетащите сюда, чтобы загрузить", "upload_area.title": "Перетащите сюда, чтобы загрузить",
"upload_button.label": "Добавить медиаконтент", "upload_button.label": "Добавить медиаконтент",
"upload_form.description": "Описать для людей с нарушениями зрения", "upload_form.description": "Описать для людей с нарушениями зрения",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Följer dig", "account.follows_you": "Följer dig",
"account.media": "Media", "account.media": "Media",
"account.mention": "Nämna @{name}", "account.mention": "Nämna @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Tysta @{name}", "account.mute": "Tysta @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Inlägg", "account.posts": "Inlägg",
"account.report": "Rapportera @{name}", "account.report": "Rapportera @{name}",
"account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan", "account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Ta fram {domain}", "account.unblock_domain": "Ta fram {domain}",
"account.unfollow": "Sluta följa", "account.unfollow": "Sluta följa",
"account.unmute": "Ta bort tystad @{name}", "account.unmute": "Ta bort tystad @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Visa hela profilen", "account.view_full_profile": "Visa hela profilen",
"boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång", "boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång",
"bundle_column_error.body": "Något gick fel när du laddade denna komponent.", "bundle_column_error.body": "Något gick fel när du laddade denna komponent.",
@@ -85,8 +82,8 @@
"empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!",
"empty_column.hashtag": "Det finns inget i denna hashtag ännu.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
"empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.", "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.",
"empty_column.home.inactivity": "Ditt hemmafeed är tomt. Om du har varit inaktiv ett tag kommer det att regenereras för dig snart.",
"empty_column.home.public_timeline": "den publika tidslinjen", "empty_column.home.public_timeline": "den publika tidslinjen",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.", "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.",
"empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det", "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det",
"follow_request.authorize": "Godkänn", "follow_request.authorize": "Godkänn",
@@ -108,7 +105,6 @@
"loading_indicator.label": "Laddar...", "loading_indicator.label": "Laddar...",
"media_gallery.toggle_visible": "Växla synlighet", "media_gallery.toggle_visible": "Växla synlighet",
"missing_indicator.label": "Hittades inte", "missing_indicator.label": "Hittades inte",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blockerade användare", "navigation_bar.blocks": "Blockerade användare",
"navigation_bar.community_timeline": "Lokal tidslinje", "navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.edit_profile": "Redigera profil", "navigation_bar.edit_profile": "Redigera profil",
@@ -118,6 +114,7 @@
"navigation_bar.logout": "Logga ut", "navigation_bar.logout": "Logga ut",
"navigation_bar.mutes": "Tystade användare", "navigation_bar.mutes": "Tystade användare",
"navigation_bar.pins": "Nålade inlägg (toots)", "navigation_bar.pins": "Nålade inlägg (toots)",
"navigation_bar.preferences": "Inställningar", "navigation_bar.preferences": "Inställningar",
"navigation_bar.public_timeline": "Förenad tidslinje", "navigation_bar.public_timeline": "Förenad tidslinje",
"notification.favourite": "{name} favoriserade din status", "notification.favourite": "{name} favoriserade din status",
@@ -164,11 +161,6 @@
"privacy.public.short": "Publik", "privacy.public.short": "Publik",
"privacy.unlisted.long": "Skicka inte till publik tidslinje", "privacy.unlisted.long": "Skicka inte till publik tidslinje",
"privacy.unlisted.short": "Olistad", "privacy.unlisted.short": "Olistad",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.just_now": "now",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Ångra", "reply_indicator.cancel": "Ångra",
"report.placeholder": "Ytterligare kommentarer", "report.placeholder": "Ytterligare kommentarer",
"report.submit": "Skicka", "report.submit": "Skicka",
@@ -188,7 +180,6 @@
"status.load_more": "Ladda fler", "status.load_more": "Ladda fler",
"status.media_hidden": "Media dold", "status.media_hidden": "Media dold",
"status.mention": "Omnämn @{name}", "status.mention": "Omnämn @{name}",
"status.more": "More",
"status.mute_conversation": "Tysta konversation", "status.mute_conversation": "Tysta konversation",
"status.open": "Utvidga denna status", "status.open": "Utvidga denna status",
"status.pin": "Fäst i profil", "status.pin": "Fäst i profil",
@@ -209,7 +200,6 @@
"tabs_bar.home": "Hem", "tabs_bar.home": "Hem",
"tabs_bar.local_timeline": "Lokal", "tabs_bar.local_timeline": "Lokal",
"tabs_bar.notifications": "Meddelanden", "tabs_bar.notifications": "Meddelanden",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Dra & släpp för att ladda upp", "upload_area.title": "Dra & släpp för att ladda upp",
"upload_button.label": "Lägg till media", "upload_button.label": "Lägg till media",
"upload_form.description": "Beskriv för synskadade", "upload_form.description": "Beskriv för synskadade",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Follows you", "account.follows_you": "Follows you",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mention @{name}", "account.mention": "Mention @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}", "account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Posts", "account.posts": "Posts",
"account.report": "Report @{name}", "account.report": "Report @{name}",
"account.requested": "Awaiting approval", "account.requested": "Awaiting approval",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Unfollow", "account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.", "empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize", "follow_request.authorize": "Authorize",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Loading...", "loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "Toggle visibility",
"missing_indicator.label": "Not found", "missing_indicator.label": "Not found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blocked users", "navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "Local timeline",
"navigation_bar.edit_profile": "Edit profile", "navigation_bar.edit_profile": "Edit profile",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Home", "tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Local", "tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Notifications",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media", "upload_button.label": "Add media",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Seni takip ediyor", "account.follows_you": "Seni takip ediyor",
"account.media": "Media", "account.media": "Media",
"account.mention": "Bahset @{name}", "account.mention": "Bahset @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Sustur @{name}", "account.mute": "Sustur @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Gönderiler", "account.posts": "Gönderiler",
"account.report": "Rapor et @{name}", "account.report": "Rapor et @{name}",
"account.requested": "Onay bekleniyor", "account.requested": "Onay bekleniyor",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Takipten vazgeç", "account.unfollow": "Takipten vazgeç",
"account.unmute": "Sesi aç @{name}", "account.unmute": "Sesi aç @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz", "boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Henüz bu hashtage sahip hiçbir gönderi yok.", "empty_column.hashtag": "Henüz bu hashtage sahip hiçbir gönderi yok.",
"empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.",
"empty_column.home.public_timeline": "herkese açık zaman tüneli", "empty_column.home.public_timeline": "herkese açık zaman tüneli",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.",
"empty_column.public": "Burada hiçbir gönderi yok! Herkese açık bir şeyler yazın, veya diğer sunucudaki insanları takip ederek bu alanın dolmasını sağlayın", "empty_column.public": "Burada hiçbir gönderi yok! Herkese açık bir şeyler yazın, veya diğer sunucudaki insanları takip ederek bu alanın dolmasını sağlayın",
"follow_request.authorize": "Yetkilendir", "follow_request.authorize": "Yetkilendir",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Yükleniyor...", "loading_indicator.label": "Yükleniyor...",
"media_gallery.toggle_visible": "Görünürlüğü değiştir", "media_gallery.toggle_visible": "Görünürlüğü değiştir",
"missing_indicator.label": "Bulunamadı", "missing_indicator.label": "Bulunamadı",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.blocks": "Engellenen kullanıcılar",
"navigation_bar.community_timeline": "Yerel zaman tüneli", "navigation_bar.community_timeline": "Yerel zaman tüneli",
"navigation_bar.edit_profile": "Profili düzenle", "navigation_bar.edit_profile": "Profili düzenle",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Ana sayfa", "tabs_bar.home": "Ana sayfa",
"tabs_bar.local_timeline": "Yerel", "tabs_bar.local_timeline": "Yerel",
"tabs_bar.notifications": "Bildirimler", "tabs_bar.notifications": "Bildirimler",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Upload için sürükle bırak yapınız", "upload_area.title": "Upload için sürükle bırak yapınız",
"upload_button.label": "Görsel ekle", "upload_button.label": "Görsel ekle",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -9,9 +9,7 @@
"account.follows_you": "Підписаний(-а) на Вас", "account.follows_you": "Підписаний(-а) на Вас",
"account.media": "Медія", "account.media": "Медія",
"account.mention": "Згадати", "account.mention": "Згадати",
"account.moved_to": "{name} has moved to:",
"account.mute": "Заглушити", "account.mute": "Заглушити",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Пости", "account.posts": "Пости",
"account.report": "Поскаржитися", "account.report": "Поскаржитися",
"account.requested": "Очікує підтвердження", "account.requested": "Очікує підтвердження",
@@ -20,7 +18,6 @@
"account.unblock_domain": "Розблокувати {domain}", "account.unblock_domain": "Розблокувати {domain}",
"account.unfollow": "Відписатися", "account.unfollow": "Відписатися",
"account.unmute": "Зняти глушення", "account.unmute": "Зняти глушення",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "View full profile",
"boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "Дописів з цим хештегом поки не існує.", "empty_column.hashtag": "Дописів з цим хештегом поки не існує.",
"empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.", "empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.",
"empty_column.home.public_timeline": "публічні стрічки", "empty_column.home.public_timeline": "публічні стрічки",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
"empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку.",
"follow_request.authorize": "Авторизувати", "follow_request.authorize": "Авторизувати",
@@ -108,7 +104,6 @@
"loading_indicator.label": "Завантаження...", "loading_indicator.label": "Завантаження...",
"media_gallery.toggle_visible": "Показати/приховати", "media_gallery.toggle_visible": "Показати/приховати",
"missing_indicator.label": "Не знайдено", "missing_indicator.label": "Не знайдено",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Заблоковані користувачі", "navigation_bar.blocks": "Заблоковані користувачі",
"navigation_bar.community_timeline": "Локальна стрічка", "navigation_bar.community_timeline": "Локальна стрічка",
"navigation_bar.edit_profile": "Редагувати профіль", "navigation_bar.edit_profile": "Редагувати профіль",
@@ -209,7 +204,6 @@
"tabs_bar.home": "Головна", "tabs_bar.home": "Головна",
"tabs_bar.local_timeline": "Локальна", "tabs_bar.local_timeline": "Локальна",
"tabs_bar.notifications": "Сповіщення", "tabs_bar.notifications": "Сповіщення",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Перетягніть сюди, щоб завантажити", "upload_area.title": "Перетягніть сюди, щоб завантажити",
"upload_button.label": "Додати медіаконтент", "upload_button.label": "Додати медіаконтент",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "Describe for the visually impaired",

View File

@@ -1,2 +0,0 @@
[
]

View File

@@ -1,6 +1,6 @@
{ {
"account.block": "屏蔽 @{name}", "account.block": "屏蔽 @{name}",
"account.block_domain": "隐藏来自 {domain} 的内容", "account.block_domain": "隐藏一切来自 {domain} 的嘟文",
"account.disclaimer_full": "此处显示的信息可能不是全部内容。", "account.disclaimer_full": "此处显示的信息可能不是全部内容。",
"account.edit_profile": "修改个人资料", "account.edit_profile": "修改个人资料",
"account.follow": "关注", "account.follow": "关注",
@@ -9,18 +9,15 @@
"account.follows_you": "关注了你", "account.follows_you": "关注了你",
"account.media": "媒体", "account.media": "媒体",
"account.mention": "提及 @{name}", "account.mention": "提及 @{name}",
"account.moved_to": "{name} 已经迁移到:", "account.mute": "静音 @{name}",
"account.mute": "隐藏 @{name}",
"account.mute_notifications": "隐藏来自 @{name} 的通知",
"account.posts": "嘟文", "account.posts": "嘟文",
"account.report": "举报 @{name}", "account.report": "举报 @{name}",
"account.requested": "正在等待对方同意。点击以取消发送关注请求", "account.requested": "正在等待对方同意。点击以取消发送关注请求",
"account.share": "分享 @{name} 的个人资料", "account.share": "分享 @{name} 的个人资料",
"account.unblock": "不再屏蔽 @{name}", "account.unblock": "不再屏蔽 @{name}",
"account.unblock_domain": "不再隐藏来自 {domain} 的内容", "account.unblock_domain": "不再隐藏 {domain}",
"account.unfollow": "取消关注", "account.unfollow": "取消关注",
"account.unmute": "不再隐藏 @{name}", "account.unmute": "不再静音 @{name}",
"account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
"account.view_full_profile": "查看完整资料", "account.view_full_profile": "查看完整资料",
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
"bundle_column_error.body": "载入组件出错。", "bundle_column_error.body": "载入组件出错。",
@@ -34,7 +31,7 @@
"column.favourites": "收藏过的嘟文", "column.favourites": "收藏过的嘟文",
"column.follow_requests": "关注请求", "column.follow_requests": "关注请求",
"column.home": "主页", "column.home": "主页",
"column.mutes": "被隐藏的用户", "column.mutes": "被静音的用户",
"column.notifications": "通知", "column.notifications": "通知",
"column.pins": "置顶嘟文", "column.pins": "置顶嘟文",
"column.public": "跨站公共时间轴", "column.public": "跨站公共时间轴",
@@ -60,10 +57,10 @@
"confirmations.block.message": "想好了,真的要屏蔽 {name}", "confirmations.block.message": "想好了,真的要屏蔽 {name}",
"confirmations.delete.confirm": "删除", "confirmations.delete.confirm": "删除",
"confirmations.delete.message": "想好了,真的要删除这条嘟文?", "confirmations.delete.message": "想好了,真的要删除这条嘟文?",
"confirmations.domain_block.confirm": "隐藏整个网站的内容", "confirmations.domain_block.confirm": "隐藏整个网站",
"confirmations.domain_block.message": "你真的真的确定要隐藏所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就应该能满足你的需要了。", "confirmations.domain_block.message": "你真的真的确定要隐藏整个 {domain}?多数情况下,屏蔽或静音几个特定的用户就应该能满足你的需要了。",
"confirmations.mute.confirm": "隐藏", "confirmations.mute.confirm": "静音",
"confirmations.mute.message": "想好了,真的要隐藏 {name}", "confirmations.mute.message": "想好了,真的要静音 {name}",
"confirmations.unfollow.confirm": "取消关注", "confirmations.unfollow.confirm": "取消关注",
"confirmations.unfollow.message": "确定要取消关注 {name} 吗?", "confirmations.unfollow.message": "确定要取消关注 {name} 吗?",
"embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。", "embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
@@ -86,7 +83,6 @@
"empty_column.hashtag": "这个话题标签下暂时没有内容。", "empty_column.hashtag": "这个话题标签下暂时没有内容。",
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。", "empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
"empty_column.home.public_timeline": "公共时间轴", "empty_column.home.public_timeline": "公共时间轴",
"empty_column.list": "这个列表中暂时没有内容。",
"empty_column.notifications": "你还没有收到过通知信息,快向其他用户搭讪吧。", "empty_column.notifications": "你还没有收到过通知信息,快向其他用户搭讪吧。",
"empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户,这里就会有嘟文出现了哦!", "empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户,这里就会有嘟文出现了哦!",
"follow_request.authorize": "同意", "follow_request.authorize": "同意",
@@ -108,7 +104,6 @@
"loading_indicator.label": "加载中……", "loading_indicator.label": "加载中……",
"media_gallery.toggle_visible": "切换显示/隐藏", "media_gallery.toggle_visible": "切换显示/隐藏",
"missing_indicator.label": "找不到内容", "missing_indicator.label": "找不到内容",
"mute_modal.hide_notifications": "隐藏来自这个用户的通知",
"navigation_bar.blocks": "被屏蔽的用户", "navigation_bar.blocks": "被屏蔽的用户",
"navigation_bar.community_timeline": "本站时间轴", "navigation_bar.community_timeline": "本站时间轴",
"navigation_bar.edit_profile": "修改个人资料", "navigation_bar.edit_profile": "修改个人资料",
@@ -116,7 +111,7 @@
"navigation_bar.follow_requests": "关注请求", "navigation_bar.follow_requests": "关注请求",
"navigation_bar.info": "关于本站", "navigation_bar.info": "关于本站",
"navigation_bar.logout": "注销", "navigation_bar.logout": "注销",
"navigation_bar.mutes": "被隐藏的用户", "navigation_bar.mutes": "被静音的用户",
"navigation_bar.pins": "置顶嘟文", "navigation_bar.pins": "置顶嘟文",
"navigation_bar.preferences": "首选项", "navigation_bar.preferences": "首选项",
"navigation_bar.public_timeline": "跨站公共时间轴", "navigation_bar.public_timeline": "跨站公共时间轴",
@@ -189,7 +184,7 @@
"status.media_hidden": "隐藏媒体内容", "status.media_hidden": "隐藏媒体内容",
"status.mention": "提及 @{name}", "status.mention": "提及 @{name}",
"status.more": "更多", "status.more": "更多",
"status.mute_conversation": "隐藏此对话", "status.mute_conversation": "静音此对话",
"status.open": "展开嘟文", "status.open": "展开嘟文",
"status.pin": "在个人资料页面置顶", "status.pin": "在个人资料页面置顶",
"status.reblog": "转嘟", "status.reblog": "转嘟",
@@ -202,7 +197,7 @@
"status.share": "分享", "status.share": "分享",
"status.show_less": "隐藏内容", "status.show_less": "隐藏内容",
"status.show_more": "显示内容", "status.show_more": "显示内容",
"status.unmute_conversation": "不再隐藏此对话", "status.unmute_conversation": "不再静音此对话",
"status.unpin": "在个人资料页面取消置顶", "status.unpin": "在个人资料页面取消置顶",
"tabs_bar.compose": "撰写", "tabs_bar.compose": "撰写",
"tabs_bar.federated_timeline": "跨站", "tabs_bar.federated_timeline": "跨站",

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