diff --git a/.env.docker b/.env.docker index 0e373aedc..cdc5ad9c6 100644 --- a/.env.docker +++ b/.env.docker @@ -1270,7 +1270,7 @@ DOCKER_WORKER_HEALTHCHECK_INTERVAL="${DOCKER_ALL_DEFAULT_HEALTHCHECK_INTERVAL:?e # # @see https://hub.docker.com/r/nginxproxy/nginx-proxy # @dottie/validate required -DOCKER_PROXY_VERSION="1.4" +DOCKER_PROXY_VERSION="1.6" # How often Docker health check should run for [proxy] service # @dottie/validate required diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa1f0fda..290d53902 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,39 @@ # Release Notes ## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.12.3...dev) + +### Features +- WebGL photo filters ([#5374](https://github.com/pixelfed/pixelfed/pull/5374)) + +### OAuth +- Fix oauth oob (urn:ietf:wg:oauth:2.0:oob) support. ([8afbdb03](https://github.com/pixelfed/pixelfed/commit/8afbdb03)) + +### Updates +- Update AP helpers, reject statuses with invalid dates ([960f3849](https://github.com/pixelfed/pixelfed/commit/960f3849)) +- Update DirectMessage API, fix broken threading ([044d410c](https://github.com/pixelfed/pixelfed/commit/044d410c)) +- Update Status caption render logic ([fb8dbb95](https://github.com/pixelfed/pixelfed/commit/fb8dbb95)) +- Update ApiV1Controller, fix bookmark bug. Closes #5216 ([9f7cc52c](https://github.com/pixelfed/pixelfed/commit/9f7cc52c)) +- Update Status caption logic, stop storing duplicate html caption in db and defer to cached StatusService rendering ([9eeb7b67](https://github.com/pixelfed/pixelfed/commit/9eeb7b67)) +- Update AutolinkService, optimize lookups ([eac2c196](https://github.com/pixelfed/pixelfed/commit/eac2c196)) +- Update DirectMessageController, remove 72h limit for admins ([639df410](https://github.com/pixelfed/pixelfed/commit/639df410)) +- Update StatusService, fix newlines ([56c07b7a](https://github.com/pixelfed/pixelfed/commit/56c07b7a)) +- Update confirm email template, add plaintext link. Fixes #5375 ([45986707](https://github.com/pixelfed/pixelfed/commit/45986707)) +- Update UserVerifyEmail command ([77da9ad8](https://github.com/pixelfed/pixelfed/commit/77da9ad8)) +- Update StatusStatelessTransformer, refactor the caption field to be compliant with the MastoAPI. Fixes #5364 ([79039ba5](https://github.com/pixelfed/pixelfed/commit/79039ba5)) +- Update mailgun config, add endpoint and scheme ([271d5114](https://github.com/pixelfed/pixelfed/commit/271d5114)) +- Update search and status logic to fix postgres bugs ([8c39ef4](https://github.com/pixelfed/pixelfed/commit/8c39ef4)) +- Update db, fix sqlite migrations ([#5379](https://github.com/pixelfed/pixelfed/pull/5379)) +- Update CatchUnoptimizedMedia command, make 1hr limit opt-in ([99b15b73](https://github.com/pixelfed/pixelfed/commit/99b15b73)) +- Update IG, fix Instagram import. Closes #5411 ([fd434aec](https://github.com/pixelfed/pixelfed/commit/fd434aec)) +- Update StatusTagsPipeline, fix hashtag bug and formatting ([d516b799](https://github.com/pixelfed/pixelfed/commit/d516b799)) +- Update CollectionController, fix showCollection signature ([4e1dd599](https://github.com/pixelfed/pixelfed/commit/4e1dd599)) +- Update ApiV1Dot1Controller, fix in-app registration ([56f17b99](https://github.com/pixelfed/pixelfed/commit/56f17b99)) +- Update VerifyCsrfToken middleware, add oauth token. Fixes #5426 ([79ebbc2d](https://github.com/pixelfed/pixelfed/commit/79ebbc2d)) +- Update AdminSettingsController, increase max photo size limit from 50MB to 1GB ([aa448354](https://github.com/pixelfed/pixelfed/commit/aa448354)) +- Update BearerTokenResponse, return scopes in /oauth/token endpoint. Fixes #5286 ([d8f5c302](https://github.com/pixelfed/pixelfed/commit/d8f5c302)) +- Update hashtag component, fix missing video thumbnails ([witten](https://github.com/witten)) ([#5427](https://github.com/pixelfed/pixelfed/pull/5427)) +- Update AP Status Transformer, fix inReplyTo. Fixes #5409 ([83cc932f](https://github.com/pixelfed/pixelfed/commit/83cc932f)) +- Update Data Export, refactor following/follower and statuses exports to allow accounts of any size with api entity instead of ap ([0d25917c](https://github.com/pixelfed/pixelfed/commit/0d25917c)) - ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.12.4 (2024-11-08)](https://github.com/pixelfed/pixelfed/compare/v0.12.4...dev) diff --git a/README.md b/README.md index e2a90535e..08568fc6d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Build Status Latest Stable Version License +

## Introduction diff --git a/app/Auth/BearerTokenResponse.php b/app/Auth/BearerTokenResponse.php index 0e1aa8a19..25c2c4bd5 100644 --- a/app/Auth/BearerTokenResponse.php +++ b/app/Auth/BearerTokenResponse.php @@ -11,13 +11,13 @@ class BearerTokenResponse extends \League\OAuth2\Server\ResponseTypes\BearerToke * AuthorizationServer::getResponseType() to pull in your version of * this class rather than the default. * - * @param AccessTokenEntityInterface $accessToken * * @return array */ protected function getExtraParams(AccessTokenEntityInterface $accessToken) { return [ + 'scope' => implode(' ', array_map(fn ($scope) => $scope->getIdentifier(), $accessToken->getScopes())), 'created_at' => time(), ]; } diff --git a/app/Console/Commands/CatchUnoptimizedMedia.php b/app/Console/Commands/CatchUnoptimizedMedia.php index a62bd8651..a5bb22f98 100644 --- a/app/Console/Commands/CatchUnoptimizedMedia.php +++ b/app/Console/Commands/CatchUnoptimizedMedia.php @@ -40,10 +40,11 @@ class CatchUnoptimizedMedia extends Command */ public function handle() { + $hasLimit = (bool) config('media.image_optimize.catch_unoptimized_media_hour_limit'); Media::whereNull('processed_at') - ->where('created_at', '>', now()->subHours(1)) - ->where('skip_optimize', '!=', true) - ->whereNull('remote_url') + ->when($hasLimit, function($q, $hasLimit) { + $q->where('created_at', '>', now()->subHours(1)); + })->whereNull('remote_url') ->whereNotNull('status_id') ->whereNotNull('media_path') ->whereIn('mime', [ @@ -52,6 +53,7 @@ class CatchUnoptimizedMedia extends Command ]) ->chunk(50, function($medias) { foreach ($medias as $media) { + if ($media->skip_optimize) continue; ImageOptimize::dispatch($media); } }); diff --git a/app/Console/Commands/ReclaimUsername.php b/app/Console/Commands/ReclaimUsername.php new file mode 100644 index 000000000..c3bda3120 --- /dev/null +++ b/app/Console/Commands/ReclaimUsername.php @@ -0,0 +1,85 @@ + strlen($search) > 0 ? $this->getUsernameOptions($search) : [], + required: true + ); + + $user = User::whereUsername($username)->withTrashed()->first(); + $profile = Profile::whereUsername($username)->withTrashed()->first(); + + if (!$user && !$profile) { + $this->error("No user or profile found with username: {$username}"); + return Command::FAILURE; + } + + if ($user->delete_after === null || $user->status !== 'deleted') { + $this->error("Cannot reclaim an active account: {$username}"); + return Command::FAILURE; + } + + $confirm = confirm( + label: "Are you sure you want to force delete user and profile with username: {$username}?", + default: false + ); + + if (!$confirm) { + $this->info('Operation cancelled.'); + return Command::SUCCESS; + } + + if ($user) { + $user->forceDelete(); + $this->info("User {$username} has been force deleted."); + } + + if ($profile) { + $profile->forceDelete(); + $this->info("Profile {$username} has been force deleted."); + } + + $this->info('Username reclaimed successfully!'); + return Command::SUCCESS; + } + + private function getUsernameOptions(string $search = ''): array + { + return User::where('username', 'like', "{$search}%") + ->withTrashed() + ->whereNotNull('delete_after') + ->take(10) + ->pluck('username') + ->toArray(); + } +} diff --git a/app/Console/Commands/TransformImports.php b/app/Console/Commands/TransformImports.php index a5a4dbb7a..6b6efa6e3 100644 --- a/app/Console/Commands/TransformImports.php +++ b/app/Console/Commands/TransformImports.php @@ -2,17 +2,16 @@ namespace App\Console\Commands; -use Illuminate\Console\Command; -use App\Models\ImportPost; -use App\Services\ImportService; use App\Media; +use App\Models\ImportPost; use App\Profile; -use App\Status; -use Storage; use App\Services\AccountService; +use App\Services\ImportService; use App\Services\MediaPathService; +use App\Status; +use Illuminate\Console\Command; use Illuminate\Support\Str; -use App\Util\Lexer\Autolink; +use Storage; class TransformImports extends Command { @@ -35,23 +34,24 @@ class TransformImports extends Command */ public function handle() { - if(!config('import.instagram.enabled')) { + if (! config('import.instagram.enabled')) { return; } $ips = ImportPost::whereNull('status_id')->where('skip_missing_media', '!=', true)->take(500)->get(); - if(!$ips->count()) { + if (! $ips->count()) { return; } - foreach($ips as $ip) { + foreach ($ips as $ip) { $id = $ip->user_id; $pid = $ip->profile_id; $profile = Profile::find($pid); - if(!$profile) { + if (! $profile) { $ip->skip_missing_media = true; $ip->save(); + continue; } @@ -63,39 +63,43 @@ class TransformImports extends Command ->where('creation_day', $ip->creation_day) ->exists(); - if($exists == true) { + if ($exists == true) { $ip->skip_missing_media = true; $ip->save(); + continue; } $idk = ImportService::getId($ip->user_id, $ip->creation_year, $ip->creation_month, $ip->creation_day); - if(!$idk) { + if (! $idk) { $ip->skip_missing_media = true; $ip->save(); + continue; } - if(Storage::exists('imports/' . $id . '/' . $ip->filename) === false) { + if (Storage::exists('imports/'.$id.'/'.$ip->filename) === false) { ImportService::clearAttempts($profile->id); ImportService::getPostCount($profile->id, true); $ip->skip_missing_media = true; $ip->save(); + continue; } $missingMedia = false; - foreach($ip->media as $ipm) { + foreach ($ip->media as $ipm) { $fileName = last(explode('/', $ipm['uri'])); - $og = 'imports/' . $id . '/' . $fileName; - if(!Storage::exists($og)) { + $og = 'imports/'.$id.'/'.$fileName; + if (! Storage::exists($og)) { $missingMedia = true; } } - if($missingMedia === true) { + if ($missingMedia === true) { $ip->skip_missing_media = true; $ip->save(); + continue; } @@ -103,7 +107,6 @@ class TransformImports extends Command $status = new Status; $status->profile_id = $pid; $status->caption = $caption; - $status->rendered = strlen(trim($caption)) ? Autolink::create()->autolink($ip->caption) : null; $status->type = $ip->post_type; $status->scope = 'unlisted'; @@ -112,20 +115,21 @@ class TransformImports extends Command $status->created_at = now()->parse($ip->creation_date); $status->save(); - foreach($ip->media as $ipm) { + foreach ($ip->media as $ipm) { $fileName = last(explode('/', $ipm['uri'])); $ext = last(explode('.', $fileName)); $basePath = MediaPathService::get($profile); - $og = 'imports/' . $id . '/' . $fileName; - if(!Storage::exists($og)) { + $og = 'imports/'.$id.'/'.$fileName; + if (! Storage::exists($og)) { $ip->skip_missing_media = true; $ip->save(); + continue; } $size = Storage::size($og); $mime = Storage::mimeType($og); - $newFile = Str::random(40) . '.' . $ext; - $np = $basePath . '/' . $newFile; + $newFile = Str::random(40).'.'.$ext; + $np = $basePath.'/'.$newFile; Storage::move($og, $np); $media = new Media; $media->profile_id = $pid; diff --git a/app/Console/Commands/UserVerifyEmail.php b/app/Console/Commands/UserVerifyEmail.php index 3b3cac5ef..b0461ca79 100644 --- a/app/Console/Commands/UserVerifyEmail.php +++ b/app/Console/Commands/UserVerifyEmail.php @@ -5,8 +5,9 @@ namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Str; use App\User; +use Illuminate\Contracts\Console\PromptsForMissingInput; -class UserVerifyEmail extends Command +class UserVerifyEmail extends Command implements PromptsForMissingInput { /** * The name and signature of the console command. @@ -39,13 +40,19 @@ class UserVerifyEmail extends Command */ public function handle() { - $user = User::whereUsername($this->argument('username'))->first(); + $username = $this->argument('username'); + $user = User::whereUsername($username)->first(); if(!$user) { $this->error('Username not found'); return; } + if($user->email_verified_at) { + $this->error('Email already verified ' . $user->email_verified_at->diffForHumans()); + return; + } + $user->email_verified_at = now(); $user->save(); $this->info('Successfully verified email address for ' . $user->username); diff --git a/app/Http/Controllers/Admin/AdminSettingsController.php b/app/Http/Controllers/Admin/AdminSettingsController.php index 17ffd98fc..09b1da569 100644 --- a/app/Http/Controllers/Admin/AdminSettingsController.php +++ b/app/Http/Controllers/Admin/AdminSettingsController.php @@ -600,7 +600,7 @@ trait AdminSettingsController $this->validate($request, [ 'image_quality' => 'required|integer|min:1|max:100', 'max_album_length' => 'required|integer|min:1|max:20', - 'max_photo_size' => 'required|integer|min:100|max:50000', + 'max_photo_size' => 'required|integer|min:100|max:1000000', 'media_types' => 'required', 'optimize_image' => 'required', 'optimize_video' => 'required', diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 56617d57f..156c44a6b 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -137,7 +137,10 @@ class ApiV1Controller extends Controller 'redirect_uris' => 'required', ]); - $uris = implode(',', explode('\n', $request->redirect_uris)); + $uris = collect(explode("\n", $request->redirect_uris)) + ->map('urldecode') + ->filter() + ->join(','); $client = Passport::client()->forceFill([ 'user_id' => null, @@ -1426,6 +1429,8 @@ class ApiV1Controller extends Controller $status['favourited'] = true; $status['favourites_count'] = $status['favourites_count'] + 1; + $status['bookmarked'] = BookmarkService::get($user->profile_id, $status['id']); + $status['reblogged'] = ReblogService::get($user->profile_id, $status['id']); return $this->json($status); } @@ -1484,6 +1489,8 @@ class ApiV1Controller extends Controller $status['favourited'] = false; $status['favourites_count'] = isset($ogStatus) ? $ogStatus->likes_count : $status['favourites_count'] - 1; + $status['bookmarked'] = BookmarkService::get($user->profile_id, $status['id']); + $status['reblogged'] = ReblogService::get($user->profile_id, $status['id']); return $this->json($status); } @@ -1878,7 +1885,7 @@ class ApiV1Controller extends Controller $media->original_sha256 = $hash; $media->size = $photo->getSize(); $media->mime = $mime; - $media->caption = $request->input('description') ?? ""; + $media->caption = $request->input('description') ?? ''; $media->filter_class = $filterClass; $media->filter_name = $filterName; if ($license) { @@ -2106,7 +2113,7 @@ class ApiV1Controller extends Controller $media->original_sha256 = $hash; $media->size = $photo->getSize(); $media->mime = $mime; - $media->caption = $request->input('description') ?? ""; + $media->caption = $request->input('description') ?? ''; $media->filter_class = $filterClass; $media->filter_name = $filterName; if ($license) { @@ -3490,8 +3497,8 @@ class ApiV1Controller extends Controller return []; } - $content = strip_tags($request->input('status')); - $rendered = Autolink::create()->autolink($content); + $defaultCaption = ""; + $content = $request->filled('status') ? strip_tags($request->input('status')) : $defaultCaption; $cw = $user->profile->cw == true ? true : $request->boolean('sensitive', false); $spoilerText = $cw && $request->filled('spoiler_text') ? $request->input('spoiler_text') : null; @@ -3505,7 +3512,7 @@ class ApiV1Controller extends Controller $status = new Status; $status->caption = $content; - $status->rendered = $rendered; + $status->rendered = $defaultCaption; $status->scope = $visibility; $status->visibility = $visibility; $status->profile_id = $user->profile_id; @@ -3530,7 +3537,7 @@ class ApiV1Controller extends Controller if (! $in_reply_to_id) { $status = new Status; $status->caption = $content; - $status->rendered = $rendered; + $status->rendered = $defaultCaption; $status->profile_id = $user->profile_id; $status->is_nsfw = $cw; $status->cw_summary = $spoilerText; @@ -3683,7 +3690,10 @@ class ApiV1Controller extends Controller } } + $defaultCaption = config_cache('database.default') === 'mysql' ? null : ''; $share = Status::firstOrCreate([ + 'caption' => $defaultCaption, + 'rendered' => $defaultCaption, 'profile_id' => $user->profile_id, 'reblog_of_id' => $status->id, 'type' => 'share', @@ -3698,6 +3708,8 @@ class ApiV1Controller extends Controller ReblogService::add($user->profile_id, $status->id); $res = StatusService::getMastodon($status->id); $res['reblogged'] = true; + $res['favourited'] = LikeService::liked($user->profile_id, $status->id); + $res['bookmarked'] = BookmarkService::get($user->profile_id, $status->id); return $this->json($res); } @@ -3744,6 +3756,8 @@ class ApiV1Controller extends Controller $res = StatusService::getMastodon($status->id); $res['reblogged'] = false; + $res['favourited'] = LikeService::liked($user->profile_id, $status->id); + $res['bookmarked'] = BookmarkService::get($user->profile_id, $status->id); return $this->json($res); } @@ -3951,6 +3965,7 @@ class ApiV1Controller extends Controller abort_unless($request->user()->tokenCan('write'), 403); $status = Status::findOrFail($id); + $user = $request->user(); $pid = $request->user()->profile_id; $account = AccountService::get($status->profile_id); abort_if(isset($account['moved'], $account['moved']['id']), 422, 'Cannot bookmark a post from an account that has migrated'); @@ -3994,6 +4009,7 @@ class ApiV1Controller extends Controller $status = Status::findOrFail($id); $pid = $request->user()->profile_id; + $user = $request->user(); abort_if($user->has_roles && ! UserRoleService::can('can-bookmark', $user->id), 403, 'Invalid permissions for this action'); abort_if($status->in_reply_to_id || $status->reblog_of_id, 404); diff --git a/app/Http/Controllers/Api/ApiV1Dot1Controller.php b/app/Http/Controllers/Api/ApiV1Dot1Controller.php index 38550e5fe..456f22da7 100644 --- a/app/Http/Controllers/Api/ApiV1Dot1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Dot1Controller.php @@ -37,7 +37,6 @@ use App\Status; use App\StatusArchived; use App\User; use App\UserSetting; -use App\Util\Lexer\Autolink; use App\Util\Lexer\RestrictedNames; use Cache; use DB; @@ -49,6 +48,7 @@ use Jenssegers\Agent\Agent; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; use Mail; +use Purify; class ApiV1Dot1Controller extends Controller { @@ -629,9 +629,6 @@ class ApiV1Dot1Controller extends Controller abort_if(BouncerService::checkIp($request->ip()), 404); } - $rl = RateLimiter::attempt('pf:apiv1.1:iarc:'.$request->ip(), config('pixelfed.app_registration_confirm_rate_limit_attempts', 20), function () {}, config('pixelfed.app_registration_confirm_rate_limit_decay', 1800)); - abort_if(! $rl, 429, 'Too many requests'); - $request->validate([ 'user_token' => 'required', 'random_token' => 'required', @@ -658,7 +655,7 @@ class ApiV1Dot1Controller extends Controller $user->last_active_at = now(); $user->save(); - $token = $user->createToken('Pixelfed', ['read', 'write', 'follow', 'admin:read', 'admin:write', 'push']); + $token = $user->createToken('Pixelfed', ['read', 'write', 'follow', 'push']); return response()->json([ 'access_token' => $token->accessToken, @@ -1292,15 +1289,14 @@ class ApiV1Dot1Controller extends Controller if ($user->last_active_at == null) { return []; } - - $content = strip_tags($request->input('status')); - $rendered = Autolink::create()->autolink($content); + $defaultCaption = ''; + $content = $request->filled('status') ? strip_tags(Purify::clean($request->input('status'))) : $defaultCaption; $cw = $user->profile->cw == true ? true : $request->boolean('sensitive', false); $spoilerText = $cw && $request->filled('spoiler_text') ? $request->input('spoiler_text') : null; $status = new Status; $status->caption = $content; - $status->rendered = $rendered; + $status->rendered = $defaultCaption; $status->profile_id = $user->profile_id; $status->is_nsfw = $cw; $status->cw_summary = $spoilerText; diff --git a/app/Http/Controllers/CollectionController.php b/app/Http/Controllers/CollectionController.php index 447490433..bc9518baa 100644 --- a/app/Http/Controllers/CollectionController.php +++ b/app/Http/Controllers/CollectionController.php @@ -29,7 +29,7 @@ class CollectionController extends Controller return view('collection.create', compact('collection')); } - public function show(Request $request, int $id) + public function show(Request $request, $id) { $user = $request->user(); $collection = CollectionService::getCollection($id); diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 1dd985723..3521a61d5 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -8,12 +8,12 @@ use App\Services\StatusService; use App\Status; use App\Transformer\Api\StatusTransformer; use App\UserFilter; -use App\Util\Lexer\Autolink; use Auth; use DB; use Illuminate\Http\Request; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; +use Purify; class CommentController extends Controller { @@ -56,12 +56,11 @@ class CommentController extends Controller $reply = DB::transaction(function () use ($comment, $status, $profile, $nsfw) { $scope = $profile->is_private == true ? 'private' : 'public'; - $autolink = Autolink::create()->autolink($comment); - $reply = new Status(); + $reply = new Status; $reply->profile_id = $profile->id; $reply->is_nsfw = $nsfw; - $reply->caption = e($comment); - $reply->rendered = $autolink; + $reply->caption = Purify::clean($comment); + $reply->rendered = ""; $reply->in_reply_to_id = $status->id; $reply->in_reply_to_profile_id = $status->profile_id; $reply->scope = $scope; @@ -76,9 +75,9 @@ class CommentController extends Controller CommentPipeline::dispatch($status, $reply); if ($request->ajax()) { - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $entity = new Fractal\Resource\Item($reply, new StatusTransformer()); + $fractal = new Fractal\Manager; + $fractal->setSerializer(new ArraySerializer); + $entity = new Fractal\Resource\Item($reply, new StatusTransformer); $entity = $fractal->createData($entity)->toArray(); $response = [ 'code' => 200, diff --git a/app/Http/Controllers/ComposeController.php b/app/Http/Controllers/ComposeController.php index 480b9c8e4..4e65339c3 100644 --- a/app/Http/Controllers/ComposeController.php +++ b/app/Http/Controllers/ComposeController.php @@ -25,12 +25,12 @@ use App\Services\UserStorageService; use App\Status; use App\Transformer\Api\MediaTransformer; use App\UserFilter; -use App\Util\Lexer\Autolink; use App\Util\Media\Filter; use App\Util\Media\License; use Auth; use Cache; use DB; +use Purify; use Illuminate\Http\Request; use Illuminate\Support\Str; use League\Fractal; @@ -43,8 +43,8 @@ class ComposeController extends Controller public function __construct() { $this->middleware('auth'); - $this->fractal = new Fractal\Manager(); - $this->fractal->setSerializer(new ArraySerializer()); + $this->fractal = new Fractal\Manager; + $this->fractal->setSerializer(new ArraySerializer); } public function show(Request $request) @@ -112,14 +112,14 @@ class ComposeController extends Controller abort_if(MediaBlocklistService::exists($hash) == true, 451); - $media = new Media(); + $media = new Media; $media->status_id = null; $media->profile_id = $profile->id; $media->user_id = $user->id; $media->media_path = $path; $media->original_sha256 = $hash; $media->size = $photo->getSize(); - $media->caption = ""; + $media->caption = ''; $media->mime = $mime; $media->filter_class = $filterClass; $media->filter_name = $filterName; @@ -151,7 +151,7 @@ class ComposeController extends Controller $user->save(); Cache::forget($limitKey); - $resource = new Fractal\Resource\Item($media, new MediaTransformer()); + $resource = new Fractal\Resource\Item($media, new MediaTransformer); $res = $this->fractal->createData($resource)->toArray(); $res['preview_url'] = $preview_url; $res['url'] = $url; @@ -570,8 +570,9 @@ class ComposeController extends Controller $status->cw_summary = $request->input('spoiler_text'); } - $status->caption = strip_tags($request->caption); - $status->rendered = Autolink::create()->autolink($status->caption); + $defaultCaption = ""; + $status->caption = strip_tags($request->input('caption')) ?? $defaultCaption; + $status->rendered = $defaultCaption; $status->scope = 'draft'; $status->visibility = 'draft'; $status->profile_id = $profile->id; @@ -675,6 +676,7 @@ class ComposeController extends Controller $place = $request->input('place'); $cw = $request->input('cw'); $tagged = $request->input('tagged'); + $defaultCaption = config_cache('database.default') === 'mysql' ? null : ""; if ($place && is_array($place)) { $status->place_id = $place['id']; @@ -684,7 +686,8 @@ class ComposeController extends Controller $status->comments_disabled = (bool) $request->input('comments_disabled'); } - $status->caption = strip_tags($request->caption); + $status->caption = $request->filled('caption') ? strip_tags($request->caption) : $defaultCaption; + $status->rendered = $defaultCaption; $status->profile_id = $profile->id; $entities = []; $visibility = $profile->unlisted == true && $visibility == 'public' ? 'unlisted' : $visibility; @@ -693,7 +696,6 @@ class ComposeController extends Controller $status->visibility = $visibility; $status->scope = $visibility; $status->type = 'text'; - $status->rendered = Autolink::create()->autolink($status->caption); $status->entities = json_encode(array_merge([ 'timg' => [ 'version' => 0, @@ -806,7 +808,6 @@ class ComposeController extends Controller $status = new Status; $status->profile_id = $request->user()->profile_id; $status->caption = $request->input('caption'); - $status->rendered = Autolink::create()->autolink($status->caption); $status->visibility = 'draft'; $status->scope = 'draft'; $status->type = 'poll'; diff --git a/app/Http/Controllers/DirectMessageController.php b/app/Http/Controllers/DirectMessageController.php index 1a30032cd..b2e0df3a2 100644 --- a/app/Http/Controllers/DirectMessageController.php +++ b/app/Http/Controllers/DirectMessageController.php @@ -22,6 +22,7 @@ use App\Services\WebfingerService; use App\Status; use App\UserFilter; use App\Util\ActivityPub\Helpers; +use App\Util\Lexer\Autolink; use Illuminate\Http\Request; use Illuminate\Support\Str; @@ -306,7 +307,9 @@ class DirectMessageController extends Controller $user = $request->user(); abort_if($user->has_roles && ! UserRoleService::can('can-direct-message', $user->id), 403, 'Invalid permissions for this action'); - abort_if($user->created_at->gt(now()->subHours(72)), 400, 'You need to wait a bit before you can DM another account'); + if (! $user->is_admin) { + abort_if($user->created_at->gt(now()->subHours(72)), 400, 'You need to wait a bit before you can DM another account'); + } $profile = $user->profile; $recipient = Profile::where('id', '!=', $profile->id)->findOrFail($request->input('to_id')); @@ -326,7 +329,6 @@ class DirectMessageController extends Controller $status = new Status; $status->profile_id = $profile->id; $status->caption = $msg; - $status->rendered = $msg; $status->visibility = 'direct'; $status->scope = 'direct'; $status->in_reply_to_profile_id = $recipient->id; @@ -372,7 +374,7 @@ class DirectMessageController extends Controller ->exists(); if ($recipient->domain == null && $hidden == false && ! $nf) { - $notification = new Notification(); + $notification = new Notification; $notification->profile_id = $recipient->id; $notification->actor_id = $profile->id; $notification->action = 'dm'; @@ -405,6 +407,8 @@ class DirectMessageController extends Controller { $this->validate($request, [ 'pid' => 'required', + 'max_id' => 'sometimes|integer', + 'min_id' => 'sometimes|integer', ]); $user = $request->user(); abort_if($user->has_roles && ! UserRoleService::can('can-direct-message', $user->id), 403, 'Invalid permissions for this action'); @@ -419,29 +423,33 @@ class DirectMessageController extends Controller if ($min_id) { $res = DirectMessage::select('*') ->where('id', '>', $min_id) - ->where(function ($q) use ($pid, $uid) { - return $q->where([['from_id', $pid], ['to_id', $uid], - ])->orWhere([['from_id', $uid], ['to_id', $pid]]); + ->where(function ($query) use ($pid, $uid) { + $query->where('from_id', $pid)->where('to_id', $uid); + })->orWhere(function ($query) use ($pid, $uid) { + $query->where('from_id', $uid)->where('to_id', $pid); }) - ->latest() + ->orderBy('id', 'asc') ->take(8) - ->get(); + ->get() + ->reverse(); } elseif ($max_id) { $res = DirectMessage::select('*') ->where('id', '<', $max_id) - ->where(function ($q) use ($pid, $uid) { - return $q->where([['from_id', $pid], ['to_id', $uid], - ])->orWhere([['from_id', $uid], ['to_id', $pid]]); + ->where(function ($query) use ($pid, $uid) { + $query->where('from_id', $pid)->where('to_id', $uid); + })->orWhere(function ($query) use ($pid, $uid) { + $query->where('from_id', $uid)->where('to_id', $pid); }) - ->latest() + ->orderBy('id', 'desc') ->take(8) ->get(); } else { - $res = DirectMessage::where(function ($q) use ($pid, $uid) { - return $q->where([['from_id', $pid], ['to_id', $uid], - ])->orWhere([['from_id', $uid], ['to_id', $pid]]); + $res = DirectMessage::where(function ($query) use ($pid, $uid) { + $query->where('from_id', $pid)->where('to_id', $uid); + })->orWhere(function ($query) use ($pid, $uid) { + $query->where('from_id', $uid)->where('to_id', $pid); }) - ->latest() + ->orderBy('id', 'desc') ->take(8) ->get(); } @@ -630,13 +638,12 @@ class DirectMessageController extends Controller $status = new Status; $status->profile_id = $profile->id; $status->caption = null; - $status->rendered = null; $status->visibility = 'direct'; $status->scope = 'direct'; $status->in_reply_to_profile_id = $recipient->id; $status->save(); - $media = new Media(); + $media = new Media; $media->status_id = $status->id; $media->profile_id = $profile->id; $media->user_id = $user->id; @@ -824,6 +831,11 @@ class DirectMessageController extends Controller { $profile = $dm->author; $url = $dm->recipient->sharedInbox ?? $dm->recipient->inbox_url; + $status = $dm->status; + + if (! $status) { + return; + } $tags = [ [ @@ -833,6 +845,8 @@ class DirectMessageController extends Controller ], ]; + $content = $status->caption ? Autolink::create()->autolink($status->caption) : null; + $body = [ '@context' => [ 'https://w3id.org/security/v1', @@ -848,7 +862,7 @@ class DirectMessageController extends Controller 'id' => $dm->status->url(), 'type' => 'Note', 'summary' => null, - 'content' => $dm->status->rendered ?? $dm->status->caption, + 'content' => $content, 'inReplyTo' => null, 'published' => $dm->status->created_at->toAtomString(), 'url' => $dm->status->url(), diff --git a/app/Http/Controllers/GroupFederationController.php b/app/Http/Controllers/GroupFederationController.php index 7f45f74a4..0e5879b01 100644 --- a/app/Http/Controllers/GroupFederationController.php +++ b/app/Http/Controllers/GroupFederationController.php @@ -2,102 +2,106 @@ namespace App\Http\Controllers; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Cache; use App\Models\Group; use App\Models\GroupPost; -use App\Status; use App\Models\InstanceActor; use App\Services\MediaService; +use App\Status; +use App\Util\Lexer\Autolink; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; class GroupFederationController extends Controller { - public function getGroupObject(Request $request, $id) - { - $group = Group::whereLocal(true)->whereActivitypub(true)->findOrFail($id); - $res = $this->showGroupObject($group); - return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); - } + public function getGroupObject(Request $request, $id) + { + $group = Group::whereLocal(true)->whereActivitypub(true)->findOrFail($id); + $res = $this->showGroupObject($group); - public function showGroupObject($group) - { - return Cache::remember('ap:groups:object:' . $group->id, 3600, function() use($group) { - return [ - '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => $group->url(), - 'inbox' => $group->permalink('/inbox'), - 'name' => $group->name, - 'outbox' => $group->permalink('/outbox'), - 'summary' => $group->description, - 'type' => 'Group', - 'attributedTo' => [ - 'type' => 'Person', - 'id' => $group->admin->permalink() - ], - // 'endpoints' => [ - // 'sharedInbox' => config('app.url') . '/f/inbox' - // ], - 'preferredUsername' => 'gid_' . $group->id, - 'publicKey' => [ - 'id' => $group->permalink('#main-key'), - 'owner' => $group->permalink(), - 'publicKeyPem' => InstanceActor::first()->public_key, - ], - 'url' => $group->permalink() - ]; + return response()->json($res, 200, [], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } - if($group->metadata && isset($group->metadata['avatar'])) { - $res['icon'] = [ - 'type' => 'Image', - 'url' => $group->metadata['avatar']['url'] - ]; - } + public function showGroupObject($group) + { + return Cache::remember('ap:groups:object:'.$group->id, 3600, function () use ($group) { + return [ + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => $group->url(), + 'inbox' => $group->permalink('/inbox'), + 'name' => $group->name, + 'outbox' => $group->permalink('/outbox'), + 'summary' => $group->description, + 'type' => 'Group', + 'attributedTo' => [ + 'type' => 'Person', + 'id' => $group->admin->permalink(), + ], + // 'endpoints' => [ + // 'sharedInbox' => config('app.url') . '/f/inbox' + // ], + 'preferredUsername' => 'gid_'.$group->id, + 'publicKey' => [ + 'id' => $group->permalink('#main-key'), + 'owner' => $group->permalink(), + 'publicKeyPem' => InstanceActor::first()->public_key, + ], + 'url' => $group->permalink(), + ]; - if($group->metadata && isset($group->metadata['header'])) { - $res['image'] = [ - 'type' => 'Image', - 'url' => $group->metadata['header']['url'] - ]; - } - ksort($res); - return $res; - }); - } + if ($group->metadata && isset($group->metadata['avatar'])) { + $res['icon'] = [ + 'type' => 'Image', + 'url' => $group->metadata['avatar']['url'], + ]; + } - public function getStatusObject(Request $request, $gid, $sid) - { - $group = Group::whereLocal(true)->whereActivitypub(true)->findOrFail($gid); - $gp = GroupPost::whereGroupId($gid)->findOrFail($sid); - $status = Status::findOrFail($gp->status_id); - // permission check + if ($group->metadata && isset($group->metadata['header'])) { + $res['image'] = [ + 'type' => 'Image', + 'url' => $group->metadata['header']['url'], + ]; + } + ksort($res); - $res = [ - '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => $gp->url(), + return $res; + }); + } - 'type' => 'Note', + public function getStatusObject(Request $request, $gid, $sid) + { + $group = Group::whereLocal(true)->whereActivitypub(true)->findOrFail($gid); + $gp = GroupPost::whereGroupId($gid)->findOrFail($sid); + $status = Status::findOrFail($gp->status_id); + // permission check + $content = $status->caption ? Autolink::create()->autolink($status->caption) : null; + $res = [ + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => $gp->url(), - 'summary' => null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => null, + 'type' => 'Note', - 'published' => $status->created_at->toAtomString(), - 'url' => $gp->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => [ - 'https://www.w3.org/ns/activitystreams#Public', - $group->permalink('/followers'), - ], - 'cc' => [], - 'sensitive' => (bool) $status->is_nsfw, - 'attachment' => MediaService::activitypub($status->id), - 'target' => [ - 'type' => 'Collection', - 'id' => $group->permalink('/wall'), - 'attributedTo' => $group->permalink() - ] - ]; - // ksort($res); - return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); - } + 'summary' => null, + 'content' => $content, + 'inReplyTo' => null, + + 'published' => $status->created_at->toAtomString(), + 'url' => $gp->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => [ + 'https://www.w3.org/ns/activitystreams#Public', + $group->permalink('/followers'), + ], + 'cc' => [], + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => MediaService::activitypub($status->id), + 'target' => [ + 'type' => 'Collection', + 'id' => $group->permalink('/wall'), + 'attributedTo' => $group->permalink(), + ], + ]; + + // ksort($res); + return response()->json($res, 200, [], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } } diff --git a/app/Http/Controllers/InternalApiController.php b/app/Http/Controllers/InternalApiController.php index 299c9ceb6..e2795d6fc 100644 --- a/app/Http/Controllers/InternalApiController.php +++ b/app/Http/Controllers/InternalApiController.php @@ -2,442 +2,424 @@ namespace App\Http\Controllers; -use Illuminate\Http\Request; -use App\{ - AccountInterstitial, - Bookmark, - DirectMessage, - DiscoverCategory, - Hashtag, - Follower, - Like, - Media, - MediaTag, - Notification, - Profile, - StatusHashtag, - Status, - User, - UserFilter, -}; -use Auth,Cache; -use Illuminate\Support\Facades\Redis; -use Carbon\Carbon; -use League\Fractal; -use App\Transformer\Api\{ - AccountTransformer, - StatusTransformer, - // StatusMediaContainerTransformer, -}; -use App\Util\Media\Filter; -use App\Jobs\StatusPipeline\NewStatusPipeline; +use App\AccountInterstitial; +use App\Bookmark; +use App\DirectMessage; +use App\DiscoverCategory; +use App\Follower; use App\Jobs\ModPipeline\HandleSpammerPipeline; -use League\Fractal\Serializer\ArraySerializer; -use League\Fractal\Pagination\IlluminatePaginatorAdapter; -use Illuminate\Validation\Rule; -use Illuminate\Support\Str; -use App\Services\MediaTagService; +use App\Profile; +use App\Services\BookmarkService; +use App\Services\DiscoverService; use App\Services\ModLogService; use App\Services\PublicTimelineService; -use App\Services\SnowflakeService; use App\Services\StatusService; use App\Services\UserFilterService; -use App\Services\DiscoverService; -use App\Services\BookmarkService; +use App\Status; // StatusMediaContainerTransformer, +use App\Transformer\Api\StatusTransformer; +use App\User; +use Auth; +use Cache; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Redis; +use Illuminate\Validation\Rule; +use League\Fractal; +use League\Fractal\Serializer\ArraySerializer; class InternalApiController extends Controller { - protected $fractal; + protected $fractal; - public function __construct() - { - $this->middleware('auth'); - $this->fractal = new Fractal\Manager(); - $this->fractal->setSerializer(new ArraySerializer()); - } + public function __construct() + { + $this->middleware('auth'); + $this->fractal = new Fractal\Manager; + $this->fractal->setSerializer(new ArraySerializer); + } - // deprecated v2 compose api - public function compose(Request $request) - { - return redirect('/'); - } + // deprecated v2 compose api + public function compose(Request $request) + { + return redirect('/'); + } - // deprecated - public function discover(Request $request) - { - return; - } + // deprecated + public function discover(Request $request) {} - public function discoverPosts(Request $request) - { - $pid = $request->user()->profile_id; - $filters = UserFilterService::filters($pid); - $forYou = DiscoverService::getForYou(); - $posts = $forYou->take(50)->map(function($post) { - return StatusService::get($post); - }) - ->filter(function($post) use($filters) { - return $post && - isset($post['account']) && - isset($post['account']['id']) && - !in_array($post['account']['id'], $filters); - }) - ->take(12) - ->values(); - return response()->json(compact('posts')); - } + public function discoverPosts(Request $request) + { + $pid = $request->user()->profile_id; + $filters = UserFilterService::filters($pid); + $forYou = DiscoverService::getForYou(); + $posts = $forYou->take(50)->map(function ($post) { + return StatusService::get($post); + }) + ->filter(function ($post) use ($filters) { + return $post && + isset($post['account']) && + isset($post['account']['id']) && + ! in_array($post['account']['id'], $filters); + }) + ->take(12) + ->values(); - public function directMessage(Request $request, $profileId, $threadId) - { - $profile = Auth::user()->profile; + return response()->json(compact('posts')); + } - if($profileId != $profile->id) { - abort(403); - } + public function directMessage(Request $request, $profileId, $threadId) + { + $profile = Auth::user()->profile; - $msg = DirectMessage::whereToId($profile->id) - ->orWhere('from_id',$profile->id) - ->findOrFail($threadId); + if ($profileId != $profile->id) { + abort(403); + } - $thread = DirectMessage::with('status')->whereIn('to_id', [$profile->id, $msg->from_id]) - ->whereIn('from_id', [$profile->id,$msg->from_id]) - ->orderBy('created_at', 'asc') - ->paginate(30); + $msg = DirectMessage::whereToId($profile->id) + ->orWhere('from_id', $profile->id) + ->findOrFail($threadId); - return response()->json(compact('msg', 'profile', 'thread'), 200, [], JSON_PRETTY_PRINT); - } + $thread = DirectMessage::with('status')->whereIn('to_id', [$profile->id, $msg->from_id]) + ->whereIn('from_id', [$profile->id, $msg->from_id]) + ->orderBy('created_at', 'asc') + ->paginate(30); - public function statusReplies(Request $request, int $id) - { - $this->validate($request, [ - 'limit' => 'nullable|int|min:1|max:6' - ]); - $parent = Status::whereScope('public')->findOrFail($id); - $limit = $request->input('limit') ?? 3; - $children = Status::whereInReplyToId($parent->id) - ->orderBy('created_at', 'desc') - ->take($limit) - ->get(); - $resource = new Fractal\Resource\Collection($children, new StatusTransformer()); - $res = $this->fractal->createData($resource)->toArray(); + return response()->json(compact('msg', 'profile', 'thread'), 200, [], JSON_PRETTY_PRINT); + } - return response()->json($res); - } + public function statusReplies(Request $request, int $id) + { + $this->validate($request, [ + 'limit' => 'nullable|int|min:1|max:6', + ]); + $parent = Status::whereScope('public')->findOrFail($id); + $limit = $request->input('limit') ?? 3; + $children = Status::whereInReplyToId($parent->id) + ->orderBy('created_at', 'desc') + ->take($limit) + ->get(); + $resource = new Fractal\Resource\Collection($children, new StatusTransformer); + $res = $this->fractal->createData($resource)->toArray(); - public function stories(Request $request) - { + return response()->json($res); + } - } + public function stories(Request $request) {} - public function discoverCategories(Request $request) - { - $categories = DiscoverCategory::whereActive(true)->orderBy('order')->take(10)->get(); - $res = $categories->map(function($item) { - return [ - 'name' => $item->name, - 'url' => $item->url(), - 'thumb' => $item->thumb() - ]; - }); - return response()->json($res); - } + public function discoverCategories(Request $request) + { + $categories = DiscoverCategory::whereActive(true)->orderBy('order')->take(10)->get(); + $res = $categories->map(function ($item) { + return [ + 'name' => $item->name, + 'url' => $item->url(), + 'thumb' => $item->thumb(), + ]; + }); - public function modAction(Request $request) - { - abort_unless(Auth::user()->is_admin, 400); - $this->validate($request, [ - 'action' => [ - 'required', - 'string', - Rule::in([ - 'addcw', - 'remcw', - 'unlist', - 'spammer' - ]) - ], - 'item_id' => 'required|integer|min:1', - 'item_type' => [ - 'required', - 'string', - Rule::in(['profile', 'status']) - ] - ]); + return response()->json($res); + } - $action = $request->input('action'); - $item_id = $request->input('item_id'); - $item_type = $request->input('item_type'); + public function modAction(Request $request) + { + abort_unless(Auth::user()->is_admin, 400); + $this->validate($request, [ + 'action' => [ + 'required', + 'string', + Rule::in([ + 'addcw', + 'remcw', + 'unlist', + 'spammer', + ]), + ], + 'item_id' => 'required|integer|min:1', + 'item_type' => [ + 'required', + 'string', + Rule::in(['profile', 'status']), + ], + ]); - $status = Status::findOrFail($item_id); - $author = User::whereProfileId($status->profile_id)->first(); - abort_if($author && $author->is_admin, 422, 'Cannot moderate administrator accounts'); + $action = $request->input('action'); + $item_id = $request->input('item_id'); + $item_type = $request->input('item_type'); - switch($action) { - case 'addcw': - $status->is_nsfw = true; - $status->save(); - ModLogService::boot() - ->user(Auth::user()) - ->objectUid($status->profile->user_id) - ->objectId($status->id) - ->objectType('App\Status::class') - ->action('admin.status.moderate') - ->metadata([ - 'action' => 'cw', - 'message' => 'Success!' - ]) - ->accessLevel('admin') - ->save(); + $status = Status::findOrFail($item_id); + $author = User::whereProfileId($status->profile_id)->first(); + abort_if($author && $author->is_admin, 422, 'Cannot moderate administrator accounts'); - if($status->uri == null) { - $media = $status->media; - $ai = new AccountInterstitial; - $ai->user_id = $status->profile->user_id; - $ai->type = 'post.cw'; - $ai->view = 'account.moderation.post.cw'; - $ai->item_type = 'App\Status'; - $ai->item_id = $status->id; - $ai->has_media = (bool) $media->count(); - $ai->blurhash = $media->count() ? $media->first()->blurhash : null; - $ai->meta = json_encode([ - 'caption' => $status->caption, - 'created_at' => $status->created_at, - 'type' => $status->type, - 'url' => $status->url(), - 'is_nsfw' => $status->is_nsfw, - 'scope' => $status->scope, - 'reblog' => $status->reblog_of_id, - 'likes_count' => $status->likes_count, - 'reblogs_count' => $status->reblogs_count, - ]); - $ai->save(); + switch ($action) { + case 'addcw': + $status->is_nsfw = true; + $status->save(); + ModLogService::boot() + ->user(Auth::user()) + ->objectUid($status->profile->user_id) + ->objectId($status->id) + ->objectType('App\Status::class') + ->action('admin.status.moderate') + ->metadata([ + 'action' => 'cw', + 'message' => 'Success!', + ]) + ->accessLevel('admin') + ->save(); - $u = $status->profile->user; - $u->has_interstitial = true; - $u->save(); - } - break; + if ($status->uri == null) { + $media = $status->media; + $ai = new AccountInterstitial; + $ai->user_id = $status->profile->user_id; + $ai->type = 'post.cw'; + $ai->view = 'account.moderation.post.cw'; + $ai->item_type = 'App\Status'; + $ai->item_id = $status->id; + $ai->has_media = (bool) $media->count(); + $ai->blurhash = $media->count() ? $media->first()->blurhash : null; + $ai->meta = json_encode([ + 'caption' => $status->caption, + 'created_at' => $status->created_at, + 'type' => $status->type, + 'url' => $status->url(), + 'is_nsfw' => $status->is_nsfw, + 'scope' => $status->scope, + 'reblog' => $status->reblog_of_id, + 'likes_count' => $status->likes_count, + 'reblogs_count' => $status->reblogs_count, + ]); + $ai->save(); - case 'remcw': - $status->is_nsfw = false; - $status->save(); - ModLogService::boot() - ->user(Auth::user()) - ->objectUid($status->profile->user_id) - ->objectId($status->id) - ->objectType('App\Status::class') - ->action('admin.status.moderate') - ->metadata([ - 'action' => 'remove_cw', - 'message' => 'Success!' - ]) - ->accessLevel('admin') - ->save(); - if($status->uri == null) { - $ai = AccountInterstitial::whereUserId($status->profile->user_id) - ->whereType('post.cw') - ->whereItemId($status->id) - ->whereItemType('App\Status') - ->first(); - $ai->delete(); - } - break; + $u = $status->profile->user; + $u->has_interstitial = true; + $u->save(); + } + break; - case 'unlist': - $status->scope = $status->visibility = 'unlisted'; - $status->save(); - PublicTimelineService::del($status->id); - ModLogService::boot() - ->user(Auth::user()) - ->objectUid($status->profile->user_id) - ->objectId($status->id) - ->objectType('App\Status::class') - ->action('admin.status.moderate') - ->metadata([ - 'action' => 'unlist', - 'message' => 'Success!' - ]) - ->accessLevel('admin') - ->save(); + case 'remcw': + $status->is_nsfw = false; + $status->save(); + ModLogService::boot() + ->user(Auth::user()) + ->objectUid($status->profile->user_id) + ->objectId($status->id) + ->objectType('App\Status::class') + ->action('admin.status.moderate') + ->metadata([ + 'action' => 'remove_cw', + 'message' => 'Success!', + ]) + ->accessLevel('admin') + ->save(); + if ($status->uri == null) { + $ai = AccountInterstitial::whereUserId($status->profile->user_id) + ->whereType('post.cw') + ->whereItemId($status->id) + ->whereItemType('App\Status') + ->first(); + $ai->delete(); + } + break; - if($status->uri == null) { - $media = $status->media; - $ai = new AccountInterstitial; - $ai->user_id = $status->profile->user_id; - $ai->type = 'post.unlist'; - $ai->view = 'account.moderation.post.unlist'; - $ai->item_type = 'App\Status'; - $ai->item_id = $status->id; - $ai->has_media = (bool) $media->count(); - $ai->blurhash = $media->count() ? $media->first()->blurhash : null; - $ai->meta = json_encode([ - 'caption' => $status->caption, - 'created_at' => $status->created_at, - 'type' => $status->type, - 'url' => $status->url(), - 'is_nsfw' => $status->is_nsfw, - 'scope' => $status->scope, - 'reblog' => $status->reblog_of_id, - 'likes_count' => $status->likes_count, - 'reblogs_count' => $status->reblogs_count, - ]); - $ai->save(); + case 'unlist': + $status->scope = $status->visibility = 'unlisted'; + $status->save(); + PublicTimelineService::del($status->id); + ModLogService::boot() + ->user(Auth::user()) + ->objectUid($status->profile->user_id) + ->objectId($status->id) + ->objectType('App\Status::class') + ->action('admin.status.moderate') + ->metadata([ + 'action' => 'unlist', + 'message' => 'Success!', + ]) + ->accessLevel('admin') + ->save(); - $u = $status->profile->user; - $u->has_interstitial = true; - $u->save(); - } - break; + if ($status->uri == null) { + $media = $status->media; + $ai = new AccountInterstitial; + $ai->user_id = $status->profile->user_id; + $ai->type = 'post.unlist'; + $ai->view = 'account.moderation.post.unlist'; + $ai->item_type = 'App\Status'; + $ai->item_id = $status->id; + $ai->has_media = (bool) $media->count(); + $ai->blurhash = $media->count() ? $media->first()->blurhash : null; + $ai->meta = json_encode([ + 'caption' => $status->caption, + 'created_at' => $status->created_at, + 'type' => $status->type, + 'url' => $status->url(), + 'is_nsfw' => $status->is_nsfw, + 'scope' => $status->scope, + 'reblog' => $status->reblog_of_id, + 'likes_count' => $status->likes_count, + 'reblogs_count' => $status->reblogs_count, + ]); + $ai->save(); - case 'spammer': - HandleSpammerPipeline::dispatch($status->profile); - ModLogService::boot() - ->user(Auth::user()) - ->objectUid($status->profile->user_id) - ->objectId($status->id) - ->objectType('App\User::class') - ->action('admin.status.moderate') - ->metadata([ - 'action' => 'spammer', - 'message' => 'Success!' - ]) - ->accessLevel('admin') - ->save(); - break; - } + $u = $status->profile->user; + $u->has_interstitial = true; + $u->save(); + } + break; - StatusService::del($status->id, true); - return ['msg' => 200]; - } + case 'spammer': + HandleSpammerPipeline::dispatch($status->profile); + ModLogService::boot() + ->user(Auth::user()) + ->objectUid($status->profile->user_id) + ->objectId($status->id) + ->objectType('App\User::class') + ->action('admin.status.moderate') + ->metadata([ + 'action' => 'spammer', + 'message' => 'Success!', + ]) + ->accessLevel('admin') + ->save(); + break; + } - public function composePost(Request $request) - { - abort(400, 'Endpoint deprecated'); - } + StatusService::del($status->id, true); - public function bookmarks(Request $request) - { - $pid = $request->user()->profile_id; - $res = Bookmark::whereProfileId($pid) - ->orderByDesc('created_at') - ->simplePaginate(10) - ->map(function($bookmark) use($pid) { - $status = StatusService::get($bookmark->status_id, false); - if(!$status) { - return false; - } - $status['bookmarked_at'] = str_replace('+00:00', 'Z', $bookmark->created_at->format(DATE_RFC3339_EXTENDED)); + return ['msg' => 200]; + } - if($status) { - BookmarkService::add($pid, $status['id']); - } - return $status; - }) - ->filter(function($bookmark) { - return $bookmark && isset($bookmark['id']); - }) - ->values(); + public function composePost(Request $request) + { + abort(400, 'Endpoint deprecated'); + } - return response()->json($res); - } + public function bookmarks(Request $request) + { + $pid = $request->user()->profile_id; + $res = Bookmark::whereProfileId($pid) + ->orderByDesc('created_at') + ->simplePaginate(10) + ->map(function ($bookmark) use ($pid) { + $status = StatusService::get($bookmark->status_id, false); + if (! $status) { + return false; + } + $status['bookmarked_at'] = str_replace('+00:00', 'Z', $bookmark->created_at->format(DATE_RFC3339_EXTENDED)); - public function accountStatuses(Request $request, $id) - { - $this->validate($request, [ - 'only_media' => 'nullable', - 'pinned' => 'nullable', - 'exclude_replies' => 'nullable', - 'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, - 'since_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, - 'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, - 'limit' => 'nullable|integer|min:1|max:24' - ]); + if ($status) { + BookmarkService::add($pid, $status['id']); + } - $profile = Profile::whereNull('status')->findOrFail($id); + return $status; + }) + ->filter(function ($bookmark) { + return $bookmark && isset($bookmark['id']); + }) + ->values(); - $limit = $request->limit ?? 9; - $max_id = $request->max_id; - $min_id = $request->min_id; - $scope = $request->only_media == true ? - ['photo', 'photo:album', 'video', 'video:album'] : - ['photo', 'photo:album', 'video', 'video:album', 'share', 'reply']; + return response()->json($res); + } - if($profile->is_private) { - if(!Auth::check()) { - return response()->json([]); - } - $pid = Auth::user()->profile->id; - $following = Cache::remember('profile:following:'.$pid, now()->addMinutes(1440), function() use($pid) { - $following = Follower::whereProfileId($pid)->pluck('following_id'); - return $following->push($pid)->toArray(); - }); - $visibility = true == in_array($profile->id, $following) ? ['public', 'unlisted', 'private'] : []; - } else { - if(Auth::check()) { - $pid = Auth::user()->profile->id; - $following = Cache::remember('profile:following:'.$pid, now()->addMinutes(1440), function() use($pid) { - $following = Follower::whereProfileId($pid)->pluck('following_id'); - return $following->push($pid)->toArray(); - }); - $visibility = true == in_array($profile->id, $following) ? ['public', 'unlisted', 'private'] : ['public', 'unlisted']; - } else { - $visibility = ['public', 'unlisted']; - } - } + public function accountStatuses(Request $request, $id) + { + $this->validate($request, [ + 'only_media' => 'nullable', + 'pinned' => 'nullable', + 'exclude_replies' => 'nullable', + 'max_id' => 'nullable|integer|min:0|max:'.PHP_INT_MAX, + 'since_id' => 'nullable|integer|min:0|max:'.PHP_INT_MAX, + 'min_id' => 'nullable|integer|min:0|max:'.PHP_INT_MAX, + 'limit' => 'nullable|integer|min:1|max:24', + ]); - $dir = $min_id ? '>' : '<'; - $id = $min_id ?? $max_id; - $timeline = Status::select( - 'id', - 'uri', - 'caption', - 'rendered', - 'profile_id', - 'type', - 'in_reply_to_id', - 'reblog_of_id', - 'is_nsfw', - 'likes_count', - 'reblogs_count', - 'scope', - 'local', - 'created_at', - 'updated_at' - )->whereProfileId($profile->id) - ->whereIn('type', $scope) - ->where('id', $dir, $id) - ->whereIn('visibility', $visibility) - ->latest() - ->limit($limit) - ->get(); + $profile = Profile::whereNull('status')->findOrFail($id); - $resource = new Fractal\Resource\Collection($timeline, new StatusTransformer()); - $res = $this->fractal->createData($resource)->toArray(); + $limit = $request->limit ?? 9; + $max_id = $request->max_id; + $min_id = $request->min_id; + $scope = $request->only_media == true ? + ['photo', 'photo:album', 'video', 'video:album'] : + ['photo', 'photo:album', 'video', 'video:album', 'share', 'reply']; - return response()->json($res); - } + if ($profile->is_private) { + if (! Auth::check()) { + return response()->json([]); + } + $pid = Auth::user()->profile->id; + $following = Cache::remember('profile:following:'.$pid, now()->addMinutes(1440), function () use ($pid) { + $following = Follower::whereProfileId($pid)->pluck('following_id'); - public function remoteProfile(Request $request, $id) - { - return redirect('/i/web/profile/' . $id); - } + return $following->push($pid)->toArray(); + }); + $visibility = in_array($profile->id, $following) == true ? ['public', 'unlisted', 'private'] : []; + } else { + if (Auth::check()) { + $pid = Auth::user()->profile->id; + $following = Cache::remember('profile:following:'.$pid, now()->addMinutes(1440), function () use ($pid) { + $following = Follower::whereProfileId($pid)->pluck('following_id'); - public function remoteStatus(Request $request, $profileId, $statusId) - { - return redirect('/i/web/post/' . $statusId); - } + return $following->push($pid)->toArray(); + }); + $visibility = in_array($profile->id, $following) == true ? ['public', 'unlisted', 'private'] : ['public', 'unlisted']; + } else { + $visibility = ['public', 'unlisted']; + } + } - public function requestEmailVerification(Request $request) - { - $pid = $request->user()->profile_id; - $exists = Redis::sismember('email:manual', $pid); - return view('account.email.request_verification', compact('exists')); - } + $dir = $min_id ? '>' : '<'; + $id = $min_id ?? $max_id; + $timeline = Status::select( + 'id', + 'uri', + 'caption', + 'profile_id', + 'type', + 'in_reply_to_id', + 'reblog_of_id', + 'is_nsfw', + 'likes_count', + 'reblogs_count', + 'scope', + 'local', + 'created_at', + 'updated_at' + )->whereProfileId($profile->id) + ->whereIn('type', $scope) + ->where('id', $dir, $id) + ->whereIn('visibility', $visibility) + ->latest() + ->limit($limit) + ->get(); - public function requestEmailVerificationStore(Request $request) - { - $pid = $request->user()->profile_id; - Redis::sadd('email:manual', $pid); - return redirect('/i/verify-email')->with(['status' => 'Successfully sent manual verification request!']); - } + $resource = new Fractal\Resource\Collection($timeline, new StatusTransformer); + $res = $this->fractal->createData($resource)->toArray(); + + return response()->json($res); + } + + public function remoteProfile(Request $request, $id) + { + return redirect('/i/web/profile/'.$id); + } + + public function remoteStatus(Request $request, $profileId, $statusId) + { + return redirect('/i/web/post/'.$statusId); + } + + public function requestEmailVerification(Request $request) + { + $pid = $request->user()->profile_id; + $exists = Redis::sismember('email:manual', $pid); + + return view('account.email.request_verification', compact('exists')); + } + + public function requestEmailVerificationStore(Request $request) + { + $pid = $request->user()->profile_id; + Redis::sadd('email:manual', $pid); + + return redirect('/i/verify-email')->with(['status' => 'Successfully sent manual verification request!']); + } } diff --git a/app/Http/Controllers/MicroController.php b/app/Http/Controllers/MicroController.php index 420083f0f..62e0ae969 100644 --- a/app/Http/Controllers/MicroController.php +++ b/app/Http/Controllers/MicroController.php @@ -2,66 +2,65 @@ namespace App\Http\Controllers; +use App\Status; +use Auth; +use DB; use Illuminate\Http\Request; -use App\{ - Profile, - Status, -}; -use Auth, DB, Purify; use Illuminate\Validation\Rule; class MicroController extends Controller { - public function __construct() - { - $this->middleware('auth'); - } + public function __construct() + { + $this->middleware('auth'); + } - public function composeText(Request $request) - { - $this->validate($request, [ - 'type' => [ - 'required', - 'string', - Rule::in(['text']) - ], - 'title' => 'nullable|string|max:140', - 'content' => 'required|string|max:500', - 'visibility' => [ - 'required', - 'string', - Rule::in([ - 'public', - 'unlisted', - 'private', - 'draft' - ]) - ] - ]); - $profile = Auth::user()->profile; - $title = $request->input('title'); - $content = $request->input('content'); - $visibility = $request->input('visibility'); + public function composeText(Request $request) + { + $this->validate($request, [ + 'type' => [ + 'required', + 'string', + Rule::in(['text']), + ], + 'title' => 'nullable|string|max:140', + 'content' => 'required|string|max:500', + 'visibility' => [ + 'required', + 'string', + Rule::in([ + 'public', + 'unlisted', + 'private', + 'draft', + ]), + ], + ]); + $profile = Auth::user()->profile; + $title = $request->input('title'); + $content = $request->input('content'); + $visibility = $request->input('visibility'); - $status = DB::transaction(function() use($profile, $content, $visibility, $title) { - $status = new Status; - $status->type = 'text'; - $status->profile_id = $profile->id; - $status->caption = strip_tags($content); - $status->rendered = Purify::clean($content); - $status->is_nsfw = false; + $status = DB::transaction(function () use ($profile, $content, $visibility, $title) { + $status = new Status; + $status->type = 'text'; + $status->profile_id = $profile->id; + $status->caption = strip_tags($content); + $status->is_nsfw = false; - // TODO: remove deprecated visibility in favor of scope - $status->visibility = $visibility; - $status->scope = $visibility; - $status->entities = json_encode(['title'=>$title]); - $status->save(); - return $status; - }); + // TODO: remove deprecated visibility in favor of scope + $status->visibility = $visibility; + $status->scope = $visibility; + $status->entities = json_encode(['title' => $title]); + $status->save(); - $fractal = new \League\Fractal\Manager(); - $fractal->setSerializer(new \League\Fractal\Serializer\ArraySerializer()); - $s = new \League\Fractal\Resource\Item($status, new \App\Transformer\Api\StatusTransformer()); - return $fractal->createData($s)->toArray(); - } + return $status; + }); + + $fractal = new \League\Fractal\Manager; + $fractal->setSerializer(new \League\Fractal\Serializer\ArraySerializer); + $s = new \League\Fractal\Resource\Item($status, new \App\Transformer\Api\StatusTransformer); + + return $fractal->createData($s)->toArray(); + } } diff --git a/app/Http/Controllers/OAuth/OobAuthorizationController.php b/app/Http/Controllers/OAuth/OobAuthorizationController.php new file mode 100644 index 000000000..f69368b79 --- /dev/null +++ b/app/Http/Controllers/OAuth/OobAuthorizationController.php @@ -0,0 +1,99 @@ +assertValidAuthToken($request); + + $authRequest = $this->getAuthRequestFromSession($request); + $authRequest->setAuthorizationApproved(true); + + return $this->withErrorHandling(function () use ($authRequest) { + $response = $this->server->completeAuthorizationRequest($authRequest, new Psr7Response); + + if ($this->isOutOfBandRequest($authRequest)) { + $code = $this->extractAuthorizationCode($response); + return response()->json([ + 'code' => $code, + 'state' => $authRequest->getState() + ]); + } + + return $this->convertResponse($response); + }); + } + + /** + * Check if the request is an out-of-band OAuth request. + * + * @param \League\OAuth2\Server\RequestTypes\AuthorizationRequest $authRequest + * @return bool + */ + protected function isOutOfBandRequest($authRequest) + { + return $authRequest->getRedirectUri() === 'urn:ietf:wg:oauth:2.0:oob'; + } + + /** + * Extract the authorization code from the PSR-7 response. + * + * @param \Psr\Http\Message\ResponseInterface $response + * @return string + * @throws \League\OAuth2\Server\Exception\OAuthServerException + */ + protected function extractAuthorizationCode($response) + { + $location = $response->getHeader('Location')[0] ?? ''; + + if (empty($location)) { + throw OAuthServerException::serverError('Missing authorization code in response'); + } + + parse_str(parse_url($location, PHP_URL_QUERY), $params); + + if (!isset($params['code'])) { + throw OAuthServerException::serverError('Invalid authorization code format'); + } + + return $params['code']; + } + + /** + * Handle OAuth errors for both redirect and OOB flows. + * + * @param \Closure $callback + * @return \Illuminate\Http\Response + */ + protected function withErrorHandling($callback) + { + try { + return $callback(); + } catch (OAuthServerException $e) { + if ($this->isOutOfBandRequest($this->getAuthRequestFromSession(request()))) { + return response()->json([ + 'error' => $e->getErrorType(), + 'message' => $e->getMessage(), + 'hint' => $e->getHint() + ], $e->getHttpStatusCode()); + } + + return $this->convertResponse( + $e->generateHttpResponse(new Psr7Response) + ); + } + } +} diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index b0e2efc40..1c9781935 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -31,8 +31,8 @@ class PublicApiController extends Controller public function __construct() { - $this->fractal = new Fractal\Manager(); - $this->fractal->setSerializer(new ArraySerializer()); + $this->fractal = new Fractal\Manager; + $this->fractal->setSerializer(new ArraySerializer); } protected function getUserData($user) @@ -74,7 +74,7 @@ class PublicApiController extends Controller abort_if(! in_array($cached['visibility'], ['public', 'unlisted']), 403); $res = ['status' => $cached]; } else { - $item = new Fractal\Resource\Item($status, new StatusStatelessTransformer()); + $item = new Fractal\Resource\Item($status, new StatusStatelessTransformer); $res = [ 'status' => $this->fractal->createData($item)->toArray(), ]; @@ -141,7 +141,7 @@ class PublicApiController extends Controller $replies = $status->comments() ->whereNull('reblog_of_id') ->whereIn('scope', $scope) - ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') + ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->where('id', '>=', $request->min_id) ->orderBy('id', 'desc') ->paginate($limit); @@ -150,7 +150,7 @@ class PublicApiController extends Controller $replies = $status->comments() ->whereNull('reblog_of_id') ->whereIn('scope', $scope) - ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') + ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->where('id', '<=', $request->max_id) ->orderBy('id', 'desc') ->paginate($limit); @@ -159,12 +159,12 @@ class PublicApiController extends Controller $replies = Status::whereInReplyToId($status->id) ->whereNull('reblog_of_id') ->whereIn('scope', $scope) - ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') + ->select('id', 'caption', 'local', 'visibility', 'scope', 'is_nsfw', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->orderBy('id', 'desc') ->paginate($limit); } - $resource = new Fractal\Resource\Collection($replies, new StatusStatelessTransformer(), 'data'); + $resource = new Fractal\Resource\Collection($replies, new StatusStatelessTransformer, 'data'); $resource->setPaginator(new IlluminatePaginatorAdapter($replies)); $res = $this->fractal->createData($resource)->toArray(); @@ -271,7 +271,6 @@ class PublicApiController extends Controller 'id', 'uri', 'caption', - 'rendered', 'profile_id', 'type', 'in_reply_to_id', @@ -405,7 +404,6 @@ class PublicApiController extends Controller 'id', 'uri', 'caption', - 'rendered', 'profile_id', 'type', 'in_reply_to_id', @@ -456,7 +454,6 @@ class PublicApiController extends Controller 'id', 'uri', 'caption', - 'rendered', 'profile_id', 'type', 'in_reply_to_id', diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 9388d3abd..8e4296e5b 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -8,6 +8,7 @@ use App\Profile; use App\Services\WebfingerService; use App\Status; use App\Util\ActivityPub\Helpers; +use App\Util\Lexer\Autolink; use Auth; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; @@ -320,17 +321,21 @@ class SearchController extends Controller if (Status::whereUri($tag)->whereLocal(false)->exists()) { $item = Status::whereUri($tag)->first(); + if (! $item) { + return; + } $media = $item->firstMedia(); $url = null; if ($media) { $url = $media->remote_url; } + $content = $item->caption ? Autolink::create()->autolink($item->caption) : null; $this->tokens['posts'] = [[ 'count' => 0, 'url' => "/i/web/post/_/$item->profile_id/$item->id", 'type' => 'status', 'username' => $item->profile->username, - 'caption' => $item->rendered ?? $item->caption, + 'caption' => $content, 'thumb' => $url, 'timestamp' => $item->created_at->diffForHumans(), ]]; @@ -340,17 +345,21 @@ class SearchController extends Controller if (isset($remote['type']) && $remote['type'] == 'Note') { $item = Helpers::statusFetch($tag); + if (! $item) { + return; + } $media = $item->firstMedia(); $url = null; if ($media) { $url = $media->remote_url; } + $content = $item->caption ? Autolink::create()->autolink($item->caption) : null; $this->tokens['posts'] = [[ 'count' => 0, 'url' => "/i/web/post/_/$item->profile_id/$item->id", 'type' => 'status', 'username' => $item->profile->username, - 'caption' => $item->rendered ?? $item->caption, + 'caption' => $content, 'thumb' => $url, 'timestamp' => $item->created_at->diffForHumans(), ]]; diff --git a/app/Http/Controllers/Settings/ExportSettings.php b/app/Http/Controllers/Settings/ExportSettings.php index 91f8c9760..bbbc2e7f2 100644 --- a/app/Http/Controllers/Settings/ExportSettings.php +++ b/app/Http/Controllers/Settings/ExportSettings.php @@ -2,29 +2,27 @@ namespace App\Http\Controllers\Settings; -use App\AccountLog; -use App\Following; -use App\Report; use App\Status; -use App\UserFilter; -use Auth, Cookie, DB, Cache, Purify; -use Carbon\Carbon; -use Illuminate\Http\Request; -use App\Transformer\ActivityPub\{ - ProfileTransformer, - StatusTransformer -}; +use App\Transformer\ActivityPub\ProfileTransformer; use App\Transformer\Api\StatusTransformer as StatusApiTransformer; +use App\UserFilter; +use Auth; +use Cache; +use Illuminate\Http\Request; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; -use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use Storage; trait ExportSettings { - public function __construct() - { - $this->middleware('auth'); - } + private const CHUNK_SIZE = 1000; + + private const STORAGE_BASE = 'user_exports'; + + public function __construct() + { + $this->middleware('auth'); + } public function dataExport() { @@ -33,47 +31,146 @@ trait ExportSettings public function exportAccount() { - $data = Cache::remember('account:export:profile:actor:'.Auth::user()->profile->id, now()->addMinutes(60), function() { - $profile = Auth::user()->profile; - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $resource = new Fractal\Resource\Item($profile, new ProfileTransformer()); - return $fractal->createData($resource)->toArray(); - }); + $profile = Auth::user()->profile; + $fractal = new Fractal\Manager; + $fractal->setSerializer(new ArraySerializer); + $resource = new Fractal\Resource\Item($profile, new ProfileTransformer); - return response()->streamDownload(function () use ($data) { - echo json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); - }, 'account.json', [ - 'Content-Type' => 'application/json' - ]); + $data = $fractal->createData($resource)->toArray(); + + return response()->streamDownload(function () use ($data) { + echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + }, 'account.json', [ + 'Content-Type' => 'application/json', + ]); } public function exportFollowing() { - $data = Cache::remember('account:export:profile:following:'.Auth::user()->profile->id, now()->addMinutes(60), function() { - return Auth::user()->profile->following()->get()->map(function($i) { - return $i->url(); - }); - }); - return response()->streamDownload(function () use($data) { - echo $data; - }, 'following.json', [ - 'Content-Type' => 'application/json' - ]); + $profile = Auth::user()->profile; + $userId = Auth::id(); + + $userExportPath = 'user_exports/'.$userId; + $filename = 'pixelfed-following.json'; + $tempPath = $userExportPath.'/'.$filename; + + if (! Storage::exists($userExportPath)) { + Storage::makeDirectory($userExportPath); + } + + try { + Storage::put($tempPath, '['); + + $profile->following() + ->chunk(1000, function ($following) use ($tempPath) { + $urls = $following->map(function ($follow) { + return $follow->url(); + }); + + $json = json_encode($urls, + JSON_PRETTY_PRINT | + JSON_UNESCAPED_SLASHES | + JSON_UNESCAPED_UNICODE + ); + + $json = trim($json, '[]'); + if (Storage::size($tempPath) > 1) { + $json = ','.$json; + } + + Storage::append($tempPath, $json); + }); + + Storage::append($tempPath, ']'); + + return response()->stream( + function () use ($tempPath) { + $handle = fopen(Storage::path($tempPath), 'rb'); + while (! feof($handle)) { + echo fread($handle, 8192); + flush(); + } + fclose($handle); + + Storage::delete($tempPath); + }, + 200, + [ + 'Content-Type' => 'application/json', + 'Content-Disposition' => 'attachment; filename="pixelfed-following.json"', + ] + ); + + } catch (\Exception $e) { + if (Storage::exists($tempPath)) { + Storage::delete($tempPath); + } + throw $e; + } } public function exportFollowers() { - $data = Cache::remember('account:export:profile:followers:'.Auth::user()->profile->id, now()->addMinutes(60), function() { - return Auth::user()->profile->followers()->get()->map(function($i) { - return $i->url(); - }); - }); - return response()->streamDownload(function () use($data) { - echo $data; - }, 'followers.json', [ - 'Content-Type' => 'application/json' - ]); + $profile = Auth::user()->profile; + $userId = Auth::id(); + + $userExportPath = 'user_exports/'.$userId; + $filename = 'pixelfed-followers.json'; + $tempPath = $userExportPath.'/'.$filename; + + if (! Storage::exists($userExportPath)) { + Storage::makeDirectory($userExportPath); + } + + try { + Storage::put($tempPath, '['); + + $profile->followers() + ->chunk(1000, function ($followers) use ($tempPath) { + $urls = $followers->map(function ($follower) { + return $follower->url(); + }); + + $json = json_encode($urls, + JSON_PRETTY_PRINT | + JSON_UNESCAPED_SLASHES | + JSON_UNESCAPED_UNICODE + ); + + $json = trim($json, '[]'); + if (Storage::size($tempPath) > 1) { + $json = ','.$json; + } + + Storage::append($tempPath, $json); + }); + + Storage::append($tempPath, ']'); + + return response()->stream( + function () use ($tempPath) { + $handle = fopen(Storage::path($tempPath), 'rb'); + while (! feof($handle)) { + echo fread($handle, 8192); + flush(); + } + fclose($handle); + + Storage::delete($tempPath); + }, + 200, + [ + 'Content-Type' => 'application/json', + 'Content-Disposition' => 'attachment; filename="pixelfed-followers.json"', + ] + ); + + } catch (\Exception $e) { + if (Storage::exists($tempPath)) { + Storage::delete($tempPath); + } + throw $e; + } } public function exportMuteBlockList() @@ -82,63 +179,83 @@ trait ExportSettings $exists = UserFilter::select('id') ->whereUserId($profile->id) ->exists(); - if(!$exists) { + if (! $exists) { return redirect()->back(); } - $data = Cache::remember('account:export:profile:muteblocklist:'.Auth::user()->profile->id, now()->addMinutes(60), function() use($profile) { + $data = Cache::remember('account:export:profile:muteblocklist:'.Auth::user()->profile->id, now()->addMinutes(60), function () use ($profile) { return json_encode([ 'muted' => $profile->mutedProfileUrls(), - 'blocked' => $profile->blockedProfileUrls() + 'blocked' => $profile->blockedProfileUrls(), ], JSON_PRETTY_PRINT); }); - return response()->streamDownload(function () use($data) { + + return response()->streamDownload(function () use ($data) { echo $data; }, 'muted-and-blocked-accounts.json', [ - 'Content-Type' => 'application/json' - ]); + 'Content-Type' => 'application/json', + ]); } public function exportStatuses(Request $request) { - $this->validate($request, [ - 'type' => 'required|string|in:ap,api' - ]); - $limit = 500; + $profile = Auth::user()->profile; + $userId = Auth::id(); + $userExportPath = self::STORAGE_BASE.'/'.$userId; + $filename = 'pixelfed-statuses.json'; + $tempPath = $userExportPath.'/'.$filename; - $profile = Auth::user()->profile; - $type = 'ap'; + if (! Storage::exists($userExportPath)) { + Storage::makeDirectory($userExportPath); + } - $count = Status::select('id')->whereProfileId($profile->id)->count(); - if($count > $limit) { - // fire background job - return redirect('/settings/data-export')->with(['status' => 'You have more than '.$limit.' statuses, we do not support full account export yet.']); - } + Storage::put($tempPath, '['); + $fractal = new Fractal\Manager; + $fractal->setSerializer(new ArraySerializer); - $filename = 'outbox.json'; - if($type == 'ap') { - $data = Cache::remember('account:export:profile:statuses:ap:'.Auth::user()->profile->id, now()->addHours(1), function() { - $profile = Auth::user()->profile->statuses; - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $resource = new Fractal\Resource\Collection($profile, new StatusTransformer()); - return $fractal->createData($resource)->toArray(); - }); - } else { - $filename = 'api-statuses.json'; - $data = Cache::remember('account:export:profile:statuses:api:'.Auth::user()->profile->id, now()->addHours(1), function() { - $profile = Auth::user()->profile->statuses; - $fractal = new Fractal\Manager(); - $fractal->setSerializer(new ArraySerializer()); - $resource = new Fractal\Resource\Collection($profile, new StatusApiTransformer()); - return $fractal->createData($resource)->toArray(); - }); - } + try { + Status::whereProfileId($profile->id) + ->chunk(self::CHUNK_SIZE, function ($statuses) use ($fractal, $tempPath) { + $resource = new Fractal\Resource\Collection($statuses, new StatusApiTransformer); + $data = $fractal->createData($resource)->toArray(); - return response()->streamDownload(function () use ($data, $filename) { - echo json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); - }, $filename, [ - 'Content-Type' => 'application/json' - ]); + $json = json_encode($data, + JSON_PRETTY_PRINT | + JSON_UNESCAPED_SLASHES | + JSON_UNESCAPED_UNICODE + ); + + $json = trim($json, '[]'); + if (Storage::size($tempPath) > 1) { + $json = ','.$json; + } + + Storage::append($tempPath, $json); + }); + + Storage::append($tempPath, ']'); + + return response()->stream( + function () use ($tempPath) { + $handle = fopen(Storage::path($tempPath), 'rb'); + while (! feof($handle)) { + echo fread($handle, 8192); + flush(); + } + fclose($handle); + Storage::delete($tempPath); + }, + 200, + [ + 'Content-Type' => 'application/json', + 'Content-Disposition' => 'attachment; filename="pixelfed-statuses.json"', + ] + ); + + } catch (\Exception $e) { + if (Storage::exists($tempPath)) { + Storage::delete($tempPath); + } + throw $e; + } } - -} \ No newline at end of file +} diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 14a5e5b7d..b523f8add 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -309,7 +309,7 @@ class StatusController extends Controller abort_if(! $statusAccount || isset($statusAccount['moved'], $statusAccount['moved']['id']), 422, 'Account moved'); $count = $status->reblogs_count; - + $defaultCaption = config_cache('database.default') === 'mysql' ? null : ""; $exists = Status::whereProfileId(Auth::user()->profile->id) ->whereReblogOfId($status->id) ->exists(); @@ -324,6 +324,8 @@ class StatusController extends Controller } } else { $share = new Status; + $share->caption = $defaultCaption; + $share->rendered = $defaultCaption; $share->profile_id = $profile->id; $share->reblog_of_id = $status->id; $share->in_reply_to_profile_id = $status->profile_id; diff --git a/app/Http/Controllers/Stories/StoryApiV1Controller.php b/app/Http/Controllers/Stories/StoryApiV1Controller.php index 5d0a15160..48599fc3a 100644 --- a/app/Http/Controllers/Stories/StoryApiV1Controller.php +++ b/app/Http/Controllers/Stories/StoryApiV1Controller.php @@ -281,7 +281,7 @@ class StoryApiV1Controller extends Controller $photo = $request->file('file'); $path = $this->storeMedia($photo, $user); - $story = new Story(); + $story = new Story; $story->duration = $request->input('duration', 3); $story->profile_id = $user->profile_id; $story->type = Str::endsWith($photo->getMimeType(), 'mp4') ? 'video' : 'photo'; @@ -418,7 +418,6 @@ class StoryApiV1Controller extends Controller $status->type = 'story:reply'; $status->profile_id = $pid; $status->caption = $text; - $status->rendered = $text; $status->scope = 'direct'; $status->visibility = 'direct'; $status->in_reply_to_profile_id = $story->profile_id; diff --git a/app/Http/Controllers/StoryComposeController.php b/app/Http/Controllers/StoryComposeController.php index c8b0599a6..e02e2d219 100644 --- a/app/Http/Controllers/StoryComposeController.php +++ b/app/Http/Controllers/StoryComposeController.php @@ -54,7 +54,7 @@ class StoryComposeController extends Controller $photo = $request->file('file'); $path = $this->storePhoto($photo, $user); - $story = new Story(); + $story = new Story; $story->duration = 3; $story->profile_id = $user->profile_id; $story->type = Str::endsWith($photo->getMimeType(), 'mp4') ? 'video' : 'photo'; @@ -403,7 +403,6 @@ class StoryComposeController extends Controller $status->profile_id = $pid; $status->type = 'story:reaction'; $status->caption = $text; - $status->rendered = $text; $status->scope = 'direct'; $status->visibility = 'direct'; $status->in_reply_to_profile_id = $story->profile_id; @@ -477,7 +476,6 @@ class StoryComposeController extends Controller $status->type = 'story:reply'; $status->profile_id = $pid; $status->caption = $text; - $status->rendered = $text; $status->scope = 'direct'; $status->visibility = 'direct'; $status->in_reply_to_profile_id = $story->profile_id; diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index f44fd7ac4..145c629a3 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -12,6 +12,7 @@ class VerifyCsrfToken extends Middleware * @var array */ protected $except = [ - '/api/v1/*' + '/api/v1/*', + 'oauth/token' ]; } diff --git a/app/Http/Resources/StatusStateless.php b/app/Http/Resources/StatusStateless.php index df451cc53..0a7bbe8d4 100644 --- a/app/Http/Resources/StatusStateless.php +++ b/app/Http/Resources/StatusStateless.php @@ -2,18 +2,17 @@ namespace App\Http\Resources; -use Illuminate\Http\Resources\Json\JsonResource; -use Cache; +use App\Models\CustomEmoji; use App\Services\AccountService; use App\Services\HashidService; use App\Services\LikeService; use App\Services\MediaService; use App\Services\MediaTagService; -use App\Services\StatusHashtagService; -use App\Services\StatusLabelService; -use App\Services\StatusMentionService; use App\Services\PollService; -use App\Models\CustomEmoji; +use App\Services\StatusHashtagService; +use App\Services\StatusMentionService; +use App\Util\Lexer\Autolink; +use Illuminate\Http\Resources\Json\JsonResource; class StatusStateless extends JsonResource { @@ -28,49 +27,50 @@ class StatusStateless extends JsonResource $status = $this; $taggedPeople = MediaTagService::get($status->id); $poll = $status->type === 'poll' ? PollService::get($status->id) : null; + $autoLink = $status->caption ? Autolink::create()->autolink($status->caption) : null; return [ - '_v' => 1, - 'id' => (string) $status->id, + '_v' => 1, + 'id' => (string) $status->id, //'gid' => $status->group_id ? (string) $status->group_id : null, - 'shortcode' => HashidService::encode($status->id), - 'uri' => $status->url(), - 'url' => $status->url(), - 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, - 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, - 'reblog' => null, - 'content' => $status->rendered ?? $status->caption, - 'content_text' => $status->caption, - 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), - 'emojis' => CustomEmoji::scan($status->caption), - 'reblogs_count' => $status->reblogs_count ?? 0, - 'favourites_count' => $status->likes_count ?? 0, - 'reblogged' => null, - 'favourited' => null, - 'muted' => null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary ?? '', - 'visibility' => $status->scope ?? $status->visibility, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'language' => null, - 'mentions' => StatusMentionService::get($status->id), - 'pf_type' => $status->type ?? $status->setType(), - 'reply_count' => (int) $status->reply_count, - 'comments_disabled' => (bool) $status->comments_disabled, - 'thread' => false, - 'replies' => [], - 'parent' => [], - 'place' => $status->place, - 'local' => (bool) $status->local, - 'taggedPeople' => $taggedPeople, - 'liked_by' => LikeService::likedBy($status), - 'media_attachments' => MediaService::get($status->id), - 'account' => AccountService::get($status->profile_id, true), - 'tags' => StatusHashtagService::statusTags($status->id), - 'poll' => $poll + 'shortcode' => HashidService::encode($status->id), + 'uri' => $status->url(), + 'url' => $status->url(), + 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, + 'reblog' => null, + 'content' => $autoLink, + 'content_text' => $status->caption, + 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), + 'emojis' => CustomEmoji::scan($status->caption), + 'reblogs_count' => $status->reblogs_count ?? 0, + 'favourites_count' => $status->likes_count ?? 0, + 'reblogged' => null, + 'favourited' => null, + 'muted' => null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary ?? '', + 'visibility' => $status->scope ?? $status->visibility, + 'application' => [ + 'name' => 'web', + 'website' => null, + ], + 'language' => null, + 'mentions' => StatusMentionService::get($status->id), + 'pf_type' => $status->type ?? $status->setType(), + 'reply_count' => (int) $status->reply_count, + 'comments_disabled' => (bool) $status->comments_disabled, + 'thread' => false, + 'replies' => [], + 'parent' => [], + 'place' => $status->place, + 'local' => (bool) $status->local, + 'taggedPeople' => $taggedPeople, + 'liked_by' => LikeService::likedBy($status), + 'media_attachments' => MediaService::get($status->id), + 'account' => AccountService::get($status->profile_id, true), + 'tags' => StatusHashtagService::statusTags($status->id), + 'poll' => $poll, ]; } } diff --git a/app/Jobs/GroupPipeline/NewStatusPipeline.php b/app/Jobs/GroupPipeline/NewStatusPipeline.php index 4d8eeca5c..d791d81a4 100644 --- a/app/Jobs/GroupPipeline/NewStatusPipeline.php +++ b/app/Jobs/GroupPipeline/NewStatusPipeline.php @@ -2,129 +2,122 @@ namespace App\Jobs\GroupPipeline; -use App\Notification; use App\Hashtag; use App\Mention; -use App\Profile; -use App\Status; -use App\StatusHashtag; -use App\Models\GroupPostHashtag; use App\Models\GroupPost; -use Cache; +use App\Models\GroupPostHashtag; +use App\Profile; +use App\Services\StatusService; +use App\Status; +use App\Util\Lexer\Autolink; +use App\Util\Lexer\Extractor; use DB; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Redis; -use App\Services\MediaStorageService; -use App\Services\NotificationService; -use App\Services\StatusService; -use App\Util\Lexer\Autolink; -use App\Util\Lexer\Extractor; class NewStatusPipeline implements ShouldQueue { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - protected $status; - protected $gp; - protected $tags; - protected $mentions; + protected $status; - public function __construct(Status $status, GroupPost $gp) - { - $this->status = $status; - $this->gp = $gp; - } + protected $gp; - public function handle() - { - $status = $this->status; + protected $tags; - $autolink = Autolink::create() - ->setAutolinkActiveUsersOnly(true) - ->setBaseHashPath("/groups/{$status->group_id}/topics/") - ->setBaseUserPath("/groups/{$status->group_id}/username/") - ->autolink($status->caption); + protected $mentions; + + public function __construct(Status $status, GroupPost $gp) + { + $this->status = $status; + $this->gp = $gp; + } + + public function handle() + { + $status = $this->status; + + $autolink = Autolink::create() + ->setAutolinkActiveUsersOnly(true) + ->setBaseHashPath("/groups/{$status->group_id}/topics/") + ->setBaseUserPath("/groups/{$status->group_id}/username/") + ->autolink($status->caption); $entities = Extractor::create()->extract($status->caption); + $status->entities = null; + $status->save(); - $autolink = str_replace('/discover/tags/', '/groups/' . $status->group_id . '/topics/', $autolink); + $this->tags = array_unique($entities['hashtags']); + $this->mentions = array_unique($entities['mentions']); - $status->rendered = nl2br($autolink); - $status->entities = null; - $status->save(); + if (count($this->tags)) { + $this->storeHashtags(); + } - $this->tags = array_unique($entities['hashtags']); - $this->mentions = array_unique($entities['mentions']); + if (count($this->mentions)) { + $this->storeMentions($this->mentions); + } + } - if(count($this->tags)) { - $this->storeHashtags(); - } + protected function storeHashtags() + { + $tags = $this->tags; + $status = $this->status; + $gp = $this->gp; - if(count($this->mentions)) { - $this->storeMentions($this->mentions); - } - } + foreach ($tags as $tag) { + if (mb_strlen($tag) > 124) { + continue; + } - protected function storeHashtags() - { - $tags = $this->tags; - $status = $this->status; - $gp = $this->gp; + DB::transaction(function () use ($status, $tag, $gp) { + $slug = str_slug($tag, '-', false); + $hashtag = Hashtag::firstOrCreate( + ['name' => $tag, 'slug' => $slug] + ); + GroupPostHashtag::firstOrCreate( + [ + 'group_id' => $status->group_id, + 'group_post_id' => $gp->id, + 'status_id' => $status->id, + 'hashtag_id' => $hashtag->id, + 'profile_id' => $status->profile_id, + ] + ); - foreach ($tags as $tag) { - if(mb_strlen($tag) > 124) { - continue; - } + }); + } - DB::transaction(function () use ($status, $tag, $gp) { - $slug = str_slug($tag, '-', false); - $hashtag = Hashtag::firstOrCreate( - ['name' => $tag, 'slug' => $slug] - ); - GroupPostHashtag::firstOrCreate( - [ - 'group_id' => $status->group_id, - 'group_post_id' => $gp->id, - 'status_id' => $status->id, - 'hashtag_id' => $hashtag->id, - 'profile_id' => $status->profile_id, - ] - ); + if (count($this->mentions)) { + $this->storeMentions(); + } + StatusService::del($status->id); + } - }); - } + protected function storeMentions() + { + $mentions = $this->mentions; + $status = $this->status; - if(count($this->mentions)) { - $this->storeMentions(); - } - StatusService::del($status->id); - } + foreach ($mentions as $mention) { + $mentioned = Profile::whereUsername($mention)->first(); - protected function storeMentions() - { - $mentions = $this->mentions; - $status = $this->status; + if (empty($mentioned) || ! isset($mentioned->id)) { + continue; + } - foreach ($mentions as $mention) { - $mentioned = Profile::whereUsername($mention)->first(); + DB::transaction(function () use ($status, $mentioned) { + $m = new Mention; + $m->status_id = $status->id; + $m->profile_id = $mentioned->id; + $m->save(); - if (empty($mentioned) || !isset($mentioned->id)) { - continue; - } - - DB::transaction(function () use ($status, $mentioned) { - $m = new Mention(); - $m->status_id = $status->id; - $m->profile_id = $mentioned->id; - $m->save(); - - MentionPipeline::dispatch($status, $m); - }); - } - StatusService::del($status->id); - } + MentionPipeline::dispatch($status, $m); + }); + } + StatusService::del($status->id); + } } diff --git a/app/Jobs/StatusPipeline/StatusEntityLexer.php b/app/Jobs/StatusPipeline/StatusEntityLexer.php index 4d19c7d8a..8fe767417 100644 --- a/app/Jobs/StatusPipeline/StatusEntityLexer.php +++ b/app/Jobs/StatusPipeline/StatusEntityLexer.php @@ -91,11 +91,6 @@ class StatusEntityLexer implements ShouldQueue public function storeEntities() { $this->storeHashtags(); - DB::transaction(function () { - $status = $this->status; - $status->rendered = nl2br($this->autolink); - $status->save(); - }); } public function storeHashtags() @@ -146,7 +141,7 @@ class StatusEntityLexer implements ShouldQueue } DB::transaction(function () use ($status, $mentioned) { - $m = new Mention(); + $m = new Mention; $m->status_id = $status->id; $m->profile_id = $mentioned->id; $m->save(); diff --git a/app/Jobs/StatusPipeline/StatusRemoteUpdatePipeline.php b/app/Jobs/StatusPipeline/StatusRemoteUpdatePipeline.php index 7ef7a3366..b216c0531 100644 --- a/app/Jobs/StatusPipeline/StatusRemoteUpdatePipeline.php +++ b/app/Jobs/StatusPipeline/StatusRemoteUpdatePipeline.php @@ -120,8 +120,7 @@ class StatusRemoteUpdatePipeline implements ShouldQueue protected function updateImmediateAttributes($status, $activity) { if (isset($activity['content'])) { - $status->caption = strip_tags($activity['content']); - $status->rendered = Purify::clean($activity['content']); + $status->caption = strip_tags(Purify::clean($activity['content'])); } if (isset($activity['sensitive'])) { diff --git a/app/Jobs/StatusPipeline/StatusTagsPipeline.php b/app/Jobs/StatusPipeline/StatusTagsPipeline.php index 003196e0d..895c3593d 100644 --- a/app/Jobs/StatusPipeline/StatusTagsPipeline.php +++ b/app/Jobs/StatusPipeline/StatusTagsPipeline.php @@ -2,27 +2,28 @@ namespace App\Jobs\StatusPipeline; +use App\Hashtag; +use App\Jobs\MentionPipeline\MentionPipeline; +use App\Mention; +use App\Services\AccountService; +use App\Services\CustomEmojiService; +use App\Services\StatusService; +use App\Services\TrendingHashtagService; +use App\StatusHashtag; +use App\Util\ActivityPub\Helpers; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use App\Services\AccountService; -use App\Services\CustomEmojiService; -use App\Services\StatusService; -use App\Jobs\MentionPipeline\MentionPipeline; -use App\Mention; -use App\Hashtag; -use App\StatusHashtag; -use App\Services\TrendingHashtagService; -use App\Util\ActivityPub\Helpers; +use Illuminate\Support\Facades\DB; class StatusTagsPipeline implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $activity; + protected $status; /** @@ -46,92 +47,126 @@ class StatusTagsPipeline implements ShouldQueue $res = $this->activity; $status = $this->status; - if(isset($res['tag']['type'], $res['tag']['name'])) { + if (isset($res['tag']['type'], $res['tag']['name'])) { $res['tag'] = [$res['tag']]; } $tags = collect($res['tag']); // Emoji - $tags->filter(function($tag) { + $tags->filter(function ($tag) { return $tag && isset($tag['id'], $tag['icon'], $tag['name'], $tag['type']) && $tag['type'] == 'Emoji'; }) - ->map(function($tag) { - CustomEmojiService::import($tag['id'], $this->status->id); - }); + ->map(function ($tag) { + CustomEmojiService::import($tag['id'], $this->status->id); + }); // Hashtags - $tags->filter(function($tag) { + $tags->filter(function ($tag) { return $tag && $tag['type'] == 'Hashtag' && isset($tag['href'], $tag['name']); }) - ->map(function($tag) use($status) { - $name = substr($tag['name'], 0, 1) == '#' ? - substr($tag['name'], 1) : $tag['name']; + ->map(function ($tag) use ($status) { + $name = substr($tag['name'], 0, 1) == '#' ? + substr($tag['name'], 1) : $tag['name']; - $banned = TrendingHashtagService::getBannedHashtagNames(); + $banned = TrendingHashtagService::getBannedHashtagNames(); - if(count($banned)) { - if(in_array(strtolower($name), array_map('strtolower', $banned))) { - return; + if (count($banned)) { + if (in_array(strtolower($name), array_map('strtolower', $banned))) { + return; + } } - } - if(config('database.default') === 'pgsql') { - $hashtag = Hashtag::where('name', 'ilike', $name) - ->orWhere('slug', 'ilike', str_slug($name, '-', false)) - ->first(); + if (config('database.default') === 'pgsql') { + $hashtag = DB::transaction(function () use ($name) { + $baseSlug = str_slug($name, '-', false); + $slug = $baseSlug; + $counter = 1; - if(!$hashtag) { - $hashtag = Hashtag::updateOrCreate([ - 'slug' => str_slug($name, '-', false), - 'name' => $name - ]); + $existing = Hashtag::where('name', $name) + ->lockForUpdate() + ->first(); + + if ($existing) { + if ($existing->slug !== $slug) { + while (Hashtag::where('slug', $slug) + ->where('name', '!=', $name) + ->exists()) { + $slug = $baseSlug.'-'.$counter++; + } + $existing->slug = $slug; + $existing->save(); + } + + return $existing; + } + + while (Hashtag::where('slug', $slug)->exists()) { + $slug = $baseSlug.'-'.$counter++; + } + + return Hashtag::create([ + 'name' => $name, + 'slug' => $slug, + ]); + }); + } else { + $hashtag = DB::transaction(function () use ($name) { + $baseSlug = str_slug($name, '-', false); + $slug = $baseSlug; + $counter = 1; + + while (Hashtag::where('slug', $slug) + ->where('name', '!=', $name) + ->exists()) { + $slug = $baseSlug.'-'.$counter++; + } + + return Hashtag::updateOrCreate( + ['name' => $name], + ['slug' => $slug] + ); + }); } - } else { - $hashtag = Hashtag::updateOrCreate([ - 'slug' => str_slug($name, '-', false), - 'name' => $name + + StatusHashtag::firstOrCreate([ + 'status_id' => $status->id, + 'hashtag_id' => $hashtag->id, + 'profile_id' => $status->profile_id, + 'status_visibility' => $status->scope, ]); - } - - StatusHashtag::firstOrCreate([ - 'status_id' => $status->id, - 'hashtag_id' => $hashtag->id, - 'profile_id' => $status->profile_id, - 'status_visibility' => $status->scope - ]); - }); + }); // Mentions - $tags->filter(function($tag) { + $tags->filter(function ($tag) { return $tag && $tag['type'] == 'Mention' && isset($tag['href']) && substr($tag['href'], 0, 8) === 'https://'; }) - ->map(function($tag) use($status) { - if(Helpers::validateLocalUrl($tag['href'])) { - $parts = explode('/', $tag['href']); - if(!$parts) { - return; + ->map(function ($tag) use ($status) { + if (Helpers::validateLocalUrl($tag['href'])) { + $parts = explode('/', $tag['href']); + if (! $parts) { + return; + } + $pid = AccountService::usernameToId(end($parts)); + if (! $pid) { + return; + } + } else { + $acct = Helpers::profileFetch($tag['href']); + if (! $acct) { + return; + } + $pid = $acct->id; } - $pid = AccountService::usernameToId(end($parts)); - if(!$pid) { - return; - } - } else { - $acct = Helpers::profileFetch($tag['href']); - if(!$acct) { - return; - } - $pid = $acct->id; - } - $mention = new Mention; - $mention->status_id = $status->id; - $mention->profile_id = $pid; - $mention->save(); - MentionPipeline::dispatch($status, $mention); - }); + $mention = new Mention; + $mention->status_id = $status->id; + $mention->profile_id = $pid; + $mention->save(); + MentionPipeline::dispatch($status, $mention); + }); StatusService::refresh($status->id); } diff --git a/app/Media.php b/app/Media.php index 30a1b33bd..9ecc7b17e 100644 --- a/app/Media.php +++ b/app/Media.php @@ -22,6 +22,7 @@ class Media extends Model protected $casts = [ 'srcset' => 'array', 'deleted_at' => 'datetime', + 'skip_optimize' => 'boolean' ]; public function status() diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index b080b3b2f..a8abc99c7 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,81 +2,99 @@ namespace App\Providers; -use App\Observers\{ - AvatarObserver, - FollowerObserver, - HashtagFollowObserver, - LikeObserver, - NotificationObserver, - ModLogObserver, - ProfileObserver, - StatusHashtagObserver, - StatusObserver, - UserObserver, - UserFilterObserver, -}; -use App\{ - Avatar, - Follower, - HashtagFollow, - Like, - Notification, - ModLog, - Profile, - StatusHashtag, - Status, - User, - UserFilter -}; -use Auth, Horizon, URL; -use Illuminate\Support\Facades\Blade; -use Illuminate\Support\Facades\Schema; -use Illuminate\Support\ServiceProvider; -use Illuminate\Pagination\Paginator; -use Illuminate\Support\Facades\Validator; +use App\Avatar; +use App\Follower; +use App\HashtagFollow; +use App\Like; +use App\ModLog; +use App\Notification; +use App\Observers\AvatarObserver; +use App\Observers\FollowerObserver; +use App\Observers\HashtagFollowObserver; +use App\Observers\LikeObserver; +use App\Observers\ModLogObserver; +use App\Observers\NotificationObserver; +use App\Observers\ProfileObserver; +use App\Observers\StatusHashtagObserver; +use App\Observers\StatusObserver; +use App\Observers\UserFilterObserver; +use App\Observers\UserObserver; +use App\Profile; +use App\Services\AccountService; +use App\Status; +use App\StatusHashtag; +use App\User; +use App\UserFilter; +use Auth; +use Horizon; use Illuminate\Database\Eloquent\Model; +use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\ServiceProvider; +use Laravel\Pulse\Facades\Pulse; +use URL; class AppServiceProvider extends ServiceProvider { - /** - * Bootstrap any application services. - * - * @return void - */ - public function boot() - { - if(config('instance.force_https_urls', true)) { - URL::forceScheme('https'); - } + /** + * Bootstrap any application services. + * + * @return void + */ + public function boot() + { + if (config('instance.force_https_urls', true)) { + URL::forceScheme('https'); + } - Schema::defaultStringLength(191); - Paginator::useBootstrap(); - Avatar::observe(AvatarObserver::class); - Follower::observe(FollowerObserver::class); - HashtagFollow::observe(HashtagFollowObserver::class); - Like::observe(LikeObserver::class); - Notification::observe(NotificationObserver::class); - ModLog::observe(ModLogObserver::class); - Profile::observe(ProfileObserver::class); - StatusHashtag::observe(StatusHashtagObserver::class); - User::observe(UserObserver::class); + Schema::defaultStringLength(191); + Paginator::useBootstrap(); + Avatar::observe(AvatarObserver::class); + Follower::observe(FollowerObserver::class); + HashtagFollow::observe(HashtagFollowObserver::class); + Like::observe(LikeObserver::class); + Notification::observe(NotificationObserver::class); + ModLog::observe(ModLogObserver::class); + Profile::observe(ProfileObserver::class); + StatusHashtag::observe(StatusHashtagObserver::class); + User::observe(UserObserver::class); Status::observe(StatusObserver::class); - UserFilter::observe(UserFilterObserver::class); - Horizon::auth(function ($request) { - return Auth::check() && $request->user()->is_admin; - }); - Validator::includeUnvalidatedArrayKeys(); + UserFilter::observe(UserFilterObserver::class); + Horizon::auth(function ($request) { + return Auth::check() && $request->user()->is_admin; + }); + Validator::includeUnvalidatedArrayKeys(); - // Model::preventLazyLoading(true); - } + Gate::define('viewPulse', function (User $user) { + return $user->is_admin === 1; + }); - /** - * Register any application services. - * - * @return void - */ - public function register() - { - // - } + Pulse::user(function ($user) { + $acct = AccountService::get($user->profile_id, true); + + return $acct ? [ + 'name' => $acct['username'], + 'extra' => $user->email, + 'avatar' => $acct['avatar'], + ] : [ + 'name' => $user->username, + 'extra' => 'DELETED', + 'avatar' => '/storage/avatars/default.jpg', + ]; + }); + + // Model::preventLazyLoading(true); + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index dfd4518c3..8bedbfd53 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -25,6 +25,7 @@ class AuthServiceProvider extends ServiceProvider public function boot() { if(config('pixelfed.oauth_enabled') == true) { + Passport::ignoreRoutes(); Passport::tokensExpireIn(now()->addDays(config('instance.oauth.token_expiration', 356))); Passport::refreshTokensExpireIn(now()->addDays(config('instance.oauth.refresh_expiration', 400))); Passport::enableImplicitGrant(); diff --git a/app/Services/AutolinkService.php b/app/Services/AutolinkService.php index f0f3278ff..c494ab151 100644 --- a/app/Services/AutolinkService.php +++ b/app/Services/AutolinkService.php @@ -2,53 +2,25 @@ namespace App\Services; -use Cache; use App\Profile; -use Illuminate\Support\Str; -use Illuminate\Support\Facades\Http; -use App\Util\Webfinger\WebfingerUrl; +use Cache; +use Purify; class AutolinkService { - const CACHE_KEY = 'pf:services:autolink:'; + const CACHE_KEY = 'pf:services:autolink:mue:'; - public static function mentionedUsernameExists($username) - { - $key = 'pf:services:autolink:userexists:' . hash('sha256', $username); + public static function mentionedUsernameExists($username) + { + if (str_starts_with($username, '@')) { + if (substr_count($username, '@') === 1) { + $username = substr($username, 1); + } + } + $name = Purify::clean(strtolower($username)); - return Cache::remember($key, 3600, function() use($username) { - $remote = Str::of($username)->contains('@'); - $profile = Profile::whereUsername($username)->first(); - if($profile) { - if($profile->domain != null) { - $instance = InstanceService::getByDomain($profile->domain); - if($instance && $instance->banned == true) { - return false; - } - } - return true; - } else { - if($remote) { - $parts = explode('@', $username); - $domain = last($parts); - $instance = InstanceService::getByDomain($domain); - - if($instance) { - if($instance->banned == true) { - return false; - } else { - $wf = WebfingerUrl::generateWebfingerUrl($username); - $res = Http::head($wf); - return $res->ok(); - } - } else { - $wf = WebfingerUrl::generateWebfingerUrl($username); - $res = Http::head($wf); - return $res->ok(); - } - } - } - return false; - }); - } + return Cache::remember(self::CACHE_KEY.base64_encode($name), 7200, function () use ($name) { + return Profile::where('username', $name)->exists(); + }); + } } diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 4f85dabbe..b0191ba7b 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -14,7 +14,7 @@ class ImportService if($userId > 999999) { return; } - if($year < 9 || $year > 23) { + if($year < 9 || $year > (int) now()->addYear()->format('y')) { return; } if($month < 1 || $month > 12) { diff --git a/app/Services/Status/UpdateStatusService.php b/app/Services/Status/UpdateStatusService.php index d0a69c451..7ef4d440c 100644 --- a/app/Services/Status/UpdateStatusService.php +++ b/app/Services/Status/UpdateStatusService.php @@ -3,135 +3,133 @@ namespace App\Services\Status; use App\Media; -use App\ModLog; -use App\Status; use App\Models\StatusEdit; -use Purify; -use App\Util\Lexer\Autolink; +use App\ModLog; use App\Services\MediaService; use App\Services\MediaStorageService; use App\Services\StatusService; +use App\Status; +use Purify; class UpdateStatusService { - public static function call(Status $status, $attributes) - { - self::createPreviousEdit($status); - self::updateMediaAttachements($status, $attributes); - self::handleImmediateAttributes($status, $attributes); - self::createEdit($status, $attributes); + public static function call(Status $status, $attributes) + { + self::createPreviousEdit($status); + self::updateMediaAttachements($status, $attributes); + self::handleImmediateAttributes($status, $attributes); + self::createEdit($status, $attributes); - return StatusService::get($status->id); - } + return StatusService::get($status->id); + } - public static function updateMediaAttachements(Status $status, $attributes) - { - $count = $status->media()->count(); - if($count === 0 || $count === 1) { - return; - } + public static function updateMediaAttachements(Status $status, $attributes) + { + $count = $status->media()->count(); + if ($count === 0 || $count === 1) { + return; + } - $oids = $status->media()->orderBy('order')->pluck('id')->map(function($m) { return (string) $m; }); - $nids = collect($attributes['media_ids']); + $oids = $status->media()->orderBy('order')->pluck('id')->map(function ($m) { + return (string) $m; + }); + $nids = collect($attributes['media_ids']); - if($oids->toArray() === $nids->toArray()) { - return; - } + if ($oids->toArray() === $nids->toArray()) { + return; + } - foreach($oids->diff($nids)->values()->toArray() as $mid) { - $media = Media::find($mid); - if(!$media) { - continue; - } - $media->status_id = null; - $media->save(); - MediaStorageService::delete($media, true); - } + foreach ($oids->diff($nids)->values()->toArray() as $mid) { + $media = Media::find($mid); + if (! $media) { + continue; + } + $media->status_id = null; + $media->save(); + MediaStorageService::delete($media, true); + } - $nids->each(function($nid, $idx) { - $media = Media::find($nid); - if(!$media) { - return; - } - $media->order = $idx; - $media->save(); - }); - MediaService::del($status->id); - } + $nids->each(function ($nid, $idx) { + $media = Media::find($nid); + if (! $media) { + return; + } + $media->order = $idx; + $media->save(); + }); + MediaService::del($status->id); + } - public static function handleImmediateAttributes(Status $status, $attributes) - { - if(isset($attributes['status'])) { - $cleaned = Purify::clean($attributes['status']); - $status->caption = $cleaned; - $status->rendered = nl2br(Autolink::create()->autolink($cleaned)); - } else { - $status->caption = null; - $status->rendered = null; - } - if(isset($attributes['sensitive'])) { - if($status->is_nsfw != (bool) $attributes['sensitive'] && - (bool) $attributes['sensitive'] == false) - { - $exists = ModLog::whereObjectType('App\Status::class') - ->whereObjectId($status->id) - ->whereAction('admin.status.moderate') - ->exists(); - if(!$exists) { - $status->is_nsfw = (bool) $attributes['sensitive']; - } - } else { - $status->is_nsfw = (bool) $attributes['sensitive']; - } - } - if(isset($attributes['spoiler_text'])) { - $status->cw_summary = Purify::clean($attributes['spoiler_text']); - } else { - $status->cw_summary = null; - } - if(isset($attributes['location'])) { - if (isset($attributes['location']['id'])) { - $status->place_id = $attributes['location']['id']; - } else { - $status->place_id = null; - } - } - if($status->cw_summary && !$status->is_nsfw) { - $status->cw_summary = null; - } - $status->edited_at = now(); - $status->save(); - StatusService::del($status->id); - } + public static function handleImmediateAttributes(Status $status, $attributes) + { + if (isset($attributes['status'])) { + $cleaned = Purify::clean($attributes['status']); + $status->caption = $cleaned; + } else { + $status->caption = null; + } + if (isset($attributes['sensitive'])) { + if ($status->is_nsfw != (bool) $attributes['sensitive'] && + (bool) $attributes['sensitive'] == false) { + $exists = ModLog::whereObjectType('App\Status::class') + ->whereObjectId($status->id) + ->whereAction('admin.status.moderate') + ->exists(); + if (! $exists) { + $status->is_nsfw = (bool) $attributes['sensitive']; + } + } else { + $status->is_nsfw = (bool) $attributes['sensitive']; + } + } + if (isset($attributes['spoiler_text'])) { + $status->cw_summary = Purify::clean($attributes['spoiler_text']); + } else { + $status->cw_summary = null; + } + if (isset($attributes['location'])) { + if (isset($attributes['location']['id'])) { + $status->place_id = $attributes['location']['id']; + } else { + $status->place_id = null; + } + } + if ($status->cw_summary && ! $status->is_nsfw) { + $status->cw_summary = null; + } + $status->edited_at = now(); + $status->save(); + StatusService::del($status->id); + } - public static function createPreviousEdit(Status $status) - { - if(!$status->edits()->count()) { - StatusEdit::create([ - 'status_id' => $status->id, - 'profile_id' => $status->profile_id, - 'caption' => $status->caption, - 'spoiler_text' => $status->cw_summary, - 'is_nsfw' => $status->is_nsfw, - 'ordered_media_attachment_ids' => $status->media()->orderBy('order')->pluck('id')->toArray(), - 'created_at' => $status->created_at - ]); - } - } + public static function createPreviousEdit(Status $status) + { + if (! $status->edits()->count()) { + StatusEdit::create([ + 'status_id' => $status->id, + 'profile_id' => $status->profile_id, + 'caption' => $status->caption, + 'spoiler_text' => $status->cw_summary, + 'is_nsfw' => $status->is_nsfw, + 'ordered_media_attachment_ids' => $status->media()->orderBy('order')->pluck('id')->toArray(), + 'created_at' => $status->created_at, + ]); + } + } - public static function createEdit(Status $status, $attributes) - { - $cleaned = isset($attributes['status']) ? Purify::clean($attributes['status']) : null; - $spoiler_text = isset($attributes['spoiler_text']) ? Purify::clean($attributes['spoiler_text']) : null; - $sensitive = isset($attributes['sensitive']) ? $attributes['sensitive'] : null; - $mids = $status->media()->count() ? $status->media()->orderBy('order')->pluck('id')->toArray() : null; - StatusEdit::create([ - 'status_id' => $status->id, - 'profile_id' => $status->profile_id, - 'caption' => $cleaned, - 'spoiler_text' => $spoiler_text, - 'is_nsfw' => $sensitive, - 'ordered_media_attachment_ids' => $mids - ]); - } + public static function createEdit(Status $status, $attributes) + { + $cleaned = isset($attributes['status']) ? Purify::clean($attributes['status']) : null; + $spoiler_text = isset($attributes['spoiler_text']) ? Purify::clean($attributes['spoiler_text']) : null; + $sensitive = isset($attributes['sensitive']) ? $attributes['sensitive'] : null; + $mids = $status->media()->count() ? $status->media()->orderBy('order')->pluck('id')->toArray() : null; + StatusEdit::create([ + 'status_id' => $status->id, + 'profile_id' => $status->profile_id, + 'caption' => $cleaned, + 'spoiler_text' => $spoiler_text, + 'is_nsfw' => $sensitive, + 'ordered_media_attachment_ids' => $mids, + ]); + } } diff --git a/app/Services/StatusService.php b/app/Services/StatusService.php index 621574f09..de2f4d112 100644 --- a/app/Services/StatusService.php +++ b/app/Services/StatusService.php @@ -10,7 +10,7 @@ use League\Fractal\Serializer\ArraySerializer; class StatusService { - const CACHE_KEY = 'pf:services:status:'; + const CACHE_KEY = 'pf:services:status:v1.1:'; public static function key($id, $publicOnly = true) { diff --git a/app/Status.php b/app/Status.php index d665464ae..8b69c199c 100644 --- a/app/Status.php +++ b/app/Status.php @@ -308,46 +308,6 @@ class Status extends Model return $this->comments()->orderBy('created_at', 'desc')->take(3); } - public function toActivityPubObject() - { - if($this->local == false) { - return; - } - $profile = $this->profile; - $to = $this->scopeToAudience('to'); - $cc = $this->scopeToAudience('cc'); - return [ - '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => $this->permalink(), - 'type' => 'Create', - 'actor' => $profile->permalink(), - 'published' => str_replace('+00:00', 'Z', $this->created_at->format(DATE_RFC3339_EXTENDED)), - 'to' => $to, - 'cc' => $cc, - 'object' => [ - 'id' => $this->url(), - 'type' => 'Note', - 'summary' => null, - 'inReplyTo' => null, - 'published' => str_replace('+00:00', 'Z', $this->created_at->format(DATE_RFC3339_EXTENDED)), - 'url' => $this->url(), - 'attributedTo' => $this->profile->url(), - 'to' => $to, - 'cc' => $cc, - 'sensitive' => (bool) $this->is_nsfw, - 'content' => $this->rendered, - 'attachment' => $this->media->map(function($media) { - return [ - 'type' => 'Document', - 'mediaType' => $media->mime, - 'url' => $media->url(), - 'name' => null - ]; - })->toArray() - ] - ]; - } - public function scopeToAudience($audience) { if(!in_array($audience, ['to', 'cc']) || $this->local == false) { diff --git a/app/Transformer/ActivityPub/StatusTransformer.php b/app/Transformer/ActivityPub/StatusTransformer.php index f5d5ea531..86beb321c 100644 --- a/app/Transformer/ActivityPub/StatusTransformer.php +++ b/app/Transformer/ActivityPub/StatusTransformer.php @@ -2,59 +2,62 @@ namespace App\Transformer\ActivityPub; -use App\Status; -use League\Fractal; use App\Services\MediaService; +use App\Services\StatusService; +use App\Status; +use App\Util\Lexer\Autolink; +use League\Fractal; class StatusTransformer extends Fractal\TransformerAbstract { public function transform(Status $status) { + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ''; + + $inReplyTo = null; + + if ($status->in_reply_to_id) { + $reply = StatusService::get($status->in_reply_to_id, true); + if ($reply && isset($reply['url'])) { + $inReplyTo = $reply['url']; + } + } + return [ - '@context' => [ - 'https://www.w3.org/ns/activitystreams', - 'https://w3id.org/security/v1', - [ - 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers', - 'featured' => [ - 'https://pixelfed.org/ns#featured' => ['@type' => '@id'], - ], + '@context' => [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', + [ + 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers', + 'featured' => [ + 'https://pixelfed.org/ns#featured' => ['@type' => '@id'], + ], + ], ], - ], - 'id' => $status->url(), - - // TODO: handle other types - 'type' => 'Note', - - // XXX: CW Title - 'summary' => null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => null, - - // TODO: fix date format - 'published' => $status->created_at->toAtomString(), - 'url' => $status->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => [ - // TODO: handle proper scope - 'https://www.w3.org/ns/activitystreams#Public', - ], - 'cc' => [ - // TODO: add cc's - $status->profile->permalink('/followers'), - ], - 'sensitive' => (bool) $status->is_nsfw, - 'atomUri' => $status->url(), - 'inReplyToAtomUri' => null, - 'attachment' => MediaService::activitypub($status->id), - 'tag' => [], - 'location' => $status->place_id ? [ - 'type' => 'Place', - 'name' => $status->place->name, - 'longitude' => $status->place->long, - 'latitude' => $status->place->lat, - 'country' => $status->place->country + 'id' => $status->url(), + 'type' => 'Note', + 'summary' => null, + 'content' => $content, + 'inReplyTo' => $inReplyTo, + 'published' => $status->created_at->toAtomString(), + 'url' => $status->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => [ + 'https://www.w3.org/ns/activitystreams#Public', + ], + 'cc' => [ + $status->profile->permalink('/followers'), + ], + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => MediaService::activitypub($status->id), + 'tag' => [], + 'location' => $status->place_id ? [ + 'type' => 'Place', + 'name' => $status->place->name, + 'longitude' => $status->place->long, + 'latitude' => $status->place->lat, + 'country' => $status->place->country, ] : null, - ]; + ]; } } diff --git a/app/Transformer/ActivityPub/Verb/CreateNote.php b/app/Transformer/ActivityPub/Verb/CreateNote.php index 55fdfa8f4..cf2f0fb51 100644 --- a/app/Transformer/ActivityPub/Verb/CreateNote.php +++ b/app/Transformer/ActivityPub/Verb/CreateNote.php @@ -2,140 +2,144 @@ namespace App\Transformer\ActivityPub\Verb; -use App\Status; -use League\Fractal; use App\Models\CustomEmoji; +use App\Status; +use App\Util\Lexer\Autolink; use Illuminate\Support\Str; +use League\Fractal; class CreateNote extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - $mentions = $status->mentions->map(function ($mention) { - $webfinger = $mention->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - return [ - 'type' => 'Mention', - 'href' => $mention->permalink(), - 'name' => $name - ]; - })->toArray(); + public function transform(Status $status) + { + $mentions = $status->mentions->map(function ($mention) { + $webfinger = $mention->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; - if($status->in_reply_to_id != null) { - $parent = $status->parent()->profile; - if($parent) { - $webfinger = $parent->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - $reply = [ - 'type' => 'Mention', - 'href' => $parent->permalink(), - 'name' => $name - ]; - $mentions = array_merge($reply, $mentions); - } - } + return [ + 'type' => 'Mention', + 'href' => $mention->permalink(), + 'name' => $name, + ]; + })->toArray(); - $hashtags = $status->hashtags->map(function ($hashtag) { - return [ - 'type' => 'Hashtag', - 'href' => $hashtag->url(), - 'name' => "#{$hashtag->name}", - ]; - })->toArray(); + if ($status->in_reply_to_id != null) { + $parent = $status->parent()->profile; + if ($parent) { + $webfinger = $parent->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; + $reply = [ + 'type' => 'Mention', + 'href' => $parent->permalink(), + 'name' => $name, + ]; + $mentions = array_merge($reply, $mentions); + } + } - $emojis = CustomEmoji::scan($status->caption, true) ?? []; - $emoji = array_merge($emojis, $mentions); - $tags = array_merge($emoji, $hashtags); + $hashtags = $status->hashtags->map(function ($hashtag) { + return [ + 'type' => 'Hashtag', + 'href' => $hashtag->url(), + 'name' => "#{$hashtag->name}", + ]; + })->toArray(); - return [ - '@context' => [ - 'https://w3id.org/security/v1', - 'https://www.w3.org/ns/activitystreams', - [ - 'Hashtag' => 'as:Hashtag', - 'sensitive' => 'as:sensitive', - 'schema' => 'http://schema.org/', - 'pixelfed' => 'http://pixelfed.org/ns#', - 'commentsEnabled' => [ - '@id' => 'pixelfed:commentsEnabled', - '@type' => 'schema:Boolean' - ], - 'capabilities' => [ - '@id' => 'pixelfed:capabilities', - '@container' => '@set' - ], - 'announce' => [ - '@id' => 'pixelfed:canAnnounce', - '@type' => '@id' - ], - 'like' => [ - '@id' => 'pixelfed:canLike', - '@type' => '@id' - ], - 'reply' => [ - '@id' => 'pixelfed:canReply', - '@type' => '@id' - ], - 'toot' => 'http://joinmastodon.org/ns#', - 'Emoji' => 'toot:Emoji', - 'blurhash' => 'toot:blurhash', - ] - ], - 'id' => $status->permalink(), - 'type' => 'Create', - 'actor' => $status->profile->permalink(), - 'published' => $status->created_at->toAtomString(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'object' => [ - 'id' => $status->url(), - 'type' => 'Note', - 'summary' => $status->is_nsfw ? $status->cw_summary : null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, - 'published' => $status->created_at->toAtomString(), - 'url' => $status->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'sensitive' => (bool) $status->is_nsfw, - 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { - $res = [ - 'type' => $media->activityVerb(), - 'mediaType' => $media->mime, - 'url' => $media->url(), - 'name' => $media->caption, - ]; - if($media->blurhash) { - $res['blurhash'] = $media->blurhash; - } - if($media->width) { - $res['width'] = $media->width; - } - if($media->height) { - $res['height'] = $media->height; - } - return $res; - })->toArray(), - 'tag' => $tags, - 'commentsEnabled' => (bool) !$status->comments_disabled, - 'capabilities' => [ - 'announce' => 'https://www.w3.org/ns/activitystreams#Public', - 'like' => 'https://www.w3.org/ns/activitystreams#Public', - 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public' - ], - 'location' => $status->place_id ? [ - 'type' => 'Place', - 'name' => $status->place->name, - 'longitude' => $status->place->long, - 'latitude' => $status->place->lat, - 'country' => $status->place->country - ] : null, - ] - ]; - } + $emojis = CustomEmoji::scan($status->caption, true) ?? []; + $emoji = array_merge($emojis, $mentions); + $tags = array_merge($emoji, $hashtags); + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ""; + + return [ + '@context' => [ + 'https://w3id.org/security/v1', + 'https://www.w3.org/ns/activitystreams', + [ + 'Hashtag' => 'as:Hashtag', + 'sensitive' => 'as:sensitive', + 'schema' => 'http://schema.org/', + 'pixelfed' => 'http://pixelfed.org/ns#', + 'commentsEnabled' => [ + '@id' => 'pixelfed:commentsEnabled', + '@type' => 'schema:Boolean', + ], + 'capabilities' => [ + '@id' => 'pixelfed:capabilities', + '@container' => '@set', + ], + 'announce' => [ + '@id' => 'pixelfed:canAnnounce', + '@type' => '@id', + ], + 'like' => [ + '@id' => 'pixelfed:canLike', + '@type' => '@id', + ], + 'reply' => [ + '@id' => 'pixelfed:canReply', + '@type' => '@id', + ], + 'toot' => 'http://joinmastodon.org/ns#', + 'Emoji' => 'toot:Emoji', + 'blurhash' => 'toot:blurhash', + ], + ], + 'id' => $status->permalink(), + 'type' => 'Create', + 'actor' => $status->profile->permalink(), + 'published' => $status->created_at->toAtomString(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'object' => [ + 'id' => $status->url(), + 'type' => 'Note', + 'summary' => $status->is_nsfw ? $status->cw_summary : null, + 'content' => $content, + 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, + 'published' => $status->created_at->toAtomString(), + 'url' => $status->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { + $res = [ + 'type' => $media->activityVerb(), + 'mediaType' => $media->mime, + 'url' => $media->url(), + 'name' => $media->caption, + ]; + if ($media->blurhash) { + $res['blurhash'] = $media->blurhash; + } + if ($media->width) { + $res['width'] = $media->width; + } + if ($media->height) { + $res['height'] = $media->height; + } + + return $res; + })->toArray(), + 'tag' => $tags, + 'commentsEnabled' => (bool) ! $status->comments_disabled, + 'capabilities' => [ + 'announce' => 'https://www.w3.org/ns/activitystreams#Public', + 'like' => 'https://www.w3.org/ns/activitystreams#Public', + 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public', + ], + 'location' => $status->place_id ? [ + 'type' => 'Place', + 'name' => $status->place->name, + 'longitude' => $status->place->long, + 'latitude' => $status->place->lat, + 'country' => $status->place->country, + ] : null, + ], + ]; + } } diff --git a/app/Transformer/ActivityPub/Verb/Note.php b/app/Transformer/ActivityPub/Verb/Note.php index 1350641d4..bc34761cd 100644 --- a/app/Transformer/ActivityPub/Verb/Note.php +++ b/app/Transformer/ActivityPub/Verb/Note.php @@ -2,133 +2,137 @@ namespace App\Transformer\ActivityPub\Verb; -use App\Status; -use League\Fractal; use App\Models\CustomEmoji; +use App\Status; +use App\Util\Lexer\Autolink; use Illuminate\Support\Str; +use League\Fractal; class Note extends Fractal\TransformerAbstract { - public function transform(Status $status) - { + public function transform(Status $status) + { - $mentions = $status->mentions->map(function ($mention) { - $webfinger = $mention->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - return [ - 'type' => 'Mention', - 'href' => $mention->permalink(), - 'name' => $name - ]; - })->toArray(); + $mentions = $status->mentions->map(function ($mention) { + $webfinger = $mention->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; - if($status->in_reply_to_id != null) { - $parent = $status->parent()->profile; - if($parent) { - $webfinger = $parent->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - $reply = [ - 'type' => 'Mention', - 'href' => $parent->permalink(), - 'name' => $name - ]; - array_push($mentions, $reply); - } - } - - $hashtags = $status->hashtags->map(function ($hashtag) { - return [ - 'type' => 'Hashtag', - 'href' => $hashtag->url(), - 'name' => "#{$hashtag->name}", - ]; - })->toArray(); + return [ + 'type' => 'Mention', + 'href' => $mention->permalink(), + 'name' => $name, + ]; + })->toArray(); - $emojis = CustomEmoji::scan($status->caption, true) ?? []; - $emoji = array_merge($emojis, $mentions); - $tags = array_merge($emoji, $hashtags); + if ($status->in_reply_to_id != null) { + $parent = $status->parent()->profile; + if ($parent) { + $webfinger = $parent->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; + $reply = [ + 'type' => 'Mention', + 'href' => $parent->permalink(), + 'name' => $name, + ]; + array_push($mentions, $reply); + } + } - return [ - '@context' => [ - 'https://w3id.org/security/v1', - 'https://www.w3.org/ns/activitystreams', - [ - 'Hashtag' => 'as:Hashtag', - 'sensitive' => 'as:sensitive', - 'schema' => 'http://schema.org/', - 'pixelfed' => 'http://pixelfed.org/ns#', - 'commentsEnabled' => [ - '@id' => 'pixelfed:commentsEnabled', - '@type' => 'schema:Boolean' - ], - 'capabilities' => [ - '@id' => 'pixelfed:capabilities', - '@container' => '@set' - ], - 'announce' => [ - '@id' => 'pixelfed:canAnnounce', - '@type' => '@id' - ], - 'like' => [ - '@id' => 'pixelfed:canLike', - '@type' => '@id' - ], - 'reply' => [ - '@id' => 'pixelfed:canReply', - '@type' => '@id' - ], - 'toot' => 'http://joinmastodon.org/ns#', - 'Emoji' => 'toot:Emoji', - 'blurhash' => 'toot:blurhash', - ] - ], - 'id' => $status->url(), - 'type' => 'Note', - 'summary' => $status->is_nsfw ? $status->cw_summary : null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, - 'published' => $status->created_at->toAtomString(), - 'url' => $status->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'sensitive' => (bool) $status->is_nsfw, - 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { - $res = [ - 'type' => $media->activityVerb(), - 'mediaType' => $media->mime, - 'url' => $media->url(), - 'name' => $media->caption, - ]; - if($media->blurhash) { - $res['blurhash'] = $media->blurhash; - } - if($media->width) { - $res['width'] = $media->width; - } - if($media->height) { - $res['height'] = $media->height; - } - return $res; - })->toArray(), - 'tag' => $tags, - 'commentsEnabled' => (bool) !$status->comments_disabled, - 'capabilities' => [ - 'announce' => 'https://www.w3.org/ns/activitystreams#Public', - 'like' => 'https://www.w3.org/ns/activitystreams#Public', - 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public' - ], - 'location' => $status->place_id ? [ - 'type' => 'Place', - 'name' => $status->place->name, - 'longitude' => $status->place->long, - 'latitude' => $status->place->lat, - 'country' => $status->place->country - ] : null, - ]; - } + $hashtags = $status->hashtags->map(function ($hashtag) { + return [ + 'type' => 'Hashtag', + 'href' => $hashtag->url(), + 'name' => "#{$hashtag->name}", + ]; + })->toArray(); + + $emojis = CustomEmoji::scan($status->caption, true) ?? []; + $emoji = array_merge($emojis, $mentions); + $tags = array_merge($emoji, $hashtags); + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ""; + + return [ + '@context' => [ + 'https://w3id.org/security/v1', + 'https://www.w3.org/ns/activitystreams', + [ + 'Hashtag' => 'as:Hashtag', + 'sensitive' => 'as:sensitive', + 'schema' => 'http://schema.org/', + 'pixelfed' => 'http://pixelfed.org/ns#', + 'commentsEnabled' => [ + '@id' => 'pixelfed:commentsEnabled', + '@type' => 'schema:Boolean', + ], + 'capabilities' => [ + '@id' => 'pixelfed:capabilities', + '@container' => '@set', + ], + 'announce' => [ + '@id' => 'pixelfed:canAnnounce', + '@type' => '@id', + ], + 'like' => [ + '@id' => 'pixelfed:canLike', + '@type' => '@id', + ], + 'reply' => [ + '@id' => 'pixelfed:canReply', + '@type' => '@id', + ], + 'toot' => 'http://joinmastodon.org/ns#', + 'Emoji' => 'toot:Emoji', + 'blurhash' => 'toot:blurhash', + ], + ], + 'id' => $status->url(), + 'type' => 'Note', + 'summary' => $status->is_nsfw ? $status->cw_summary : null, + 'content' => $content, + 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, + 'published' => $status->created_at->toAtomString(), + 'url' => $status->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { + $res = [ + 'type' => $media->activityVerb(), + 'mediaType' => $media->mime, + 'url' => $media->url(), + 'name' => $media->caption, + ]; + if ($media->blurhash) { + $res['blurhash'] = $media->blurhash; + } + if ($media->width) { + $res['width'] = $media->width; + } + if ($media->height) { + $res['height'] = $media->height; + } + + return $res; + })->toArray(), + 'tag' => $tags, + 'commentsEnabled' => (bool) ! $status->comments_disabled, + 'capabilities' => [ + 'announce' => 'https://www.w3.org/ns/activitystreams#Public', + 'like' => 'https://www.w3.org/ns/activitystreams#Public', + 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public', + ], + 'location' => $status->place_id ? [ + 'type' => 'Place', + 'name' => $status->place->name, + 'longitude' => $status->place->long, + 'latitude' => $status->place->lat, + 'country' => $status->place->country, + ] : null, + ]; + } } diff --git a/app/Transformer/ActivityPub/Verb/Question.php b/app/Transformer/ActivityPub/Verb/Question.php index fb9313fb1..3d53ebcb5 100644 --- a/app/Transformer/ActivityPub/Verb/Question.php +++ b/app/Transformer/ActivityPub/Verb/Question.php @@ -3,104 +3,107 @@ namespace App\Transformer\ActivityPub\Verb; use App\Status; -use League\Fractal; +use App\Util\Lexer\Autolink; use Illuminate\Support\Str; +use League\Fractal; class Question extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - $mentions = $status->mentions->map(function ($mention) { - $webfinger = $mention->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - return [ - 'type' => 'Mention', - 'href' => $mention->permalink(), - 'name' => $name - ]; - })->toArray(); + public function transform(Status $status) + { + $mentions = $status->mentions->map(function ($mention) { + $webfinger = $mention->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; - $hashtags = $status->hashtags->map(function ($hashtag) { - return [ - 'type' => 'Hashtag', - 'href' => $hashtag->url(), - 'name' => "#{$hashtag->name}", - ]; - })->toArray(); - $tags = array_merge($mentions, $hashtags); + return [ + 'type' => 'Mention', + 'href' => $mention->permalink(), + 'name' => $name, + ]; + })->toArray(); - return [ - '@context' => [ - 'https://w3id.org/security/v1', - 'https://www.w3.org/ns/activitystreams', - [ - 'Hashtag' => 'as:Hashtag', - 'sensitive' => 'as:sensitive', - 'schema' => 'http://schema.org/', - 'pixelfed' => 'http://pixelfed.org/ns#', - 'commentsEnabled' => [ - '@id' => 'pixelfed:commentsEnabled', - '@type' => 'schema:Boolean' - ], - 'capabilities' => [ - '@id' => 'pixelfed:capabilities', - '@container' => '@set' - ], - 'announce' => [ - '@id' => 'pixelfed:canAnnounce', - '@type' => '@id' - ], - 'like' => [ - '@id' => 'pixelfed:canLike', - '@type' => '@id' - ], - 'reply' => [ - '@id' => 'pixelfed:canReply', - '@type' => '@id' - ], - 'toot' => 'http://joinmastodon.org/ns#', - 'Emoji' => 'toot:Emoji' - ] - ], - 'id' => $status->url(), - 'type' => 'Question', - 'summary' => null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, - 'published' => $status->created_at->toAtomString(), - 'url' => $status->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'sensitive' => (bool) $status->is_nsfw, - 'attachment' => [], - 'tag' => $tags, - 'commentsEnabled' => (bool) !$status->comments_disabled, - 'capabilities' => [ - 'announce' => 'https://www.w3.org/ns/activitystreams#Public', - 'like' => 'https://www.w3.org/ns/activitystreams#Public', - 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public' - ], - 'location' => $status->place_id ? [ - 'type' => 'Place', - 'name' => $status->place->name, - 'longitude' => $status->place->long, - 'latitude' => $status->place->lat, - 'country' => $status->place->country - ] : null, - 'endTime' => $status->poll->expires_at->toAtomString(), - 'oneOf' => collect($status->poll->poll_options)->map(function($option, $index) use($status) { - return [ - 'type' => 'Note', - 'name' => $option, - 'replies' => [ - 'type' => 'Collection', - 'totalItems' => $status->poll->cached_tallies[$index] - ] - ]; - }) - ]; - } + $hashtags = $status->hashtags->map(function ($hashtag) { + return [ + 'type' => 'Hashtag', + 'href' => $hashtag->url(), + 'name' => "#{$hashtag->name}", + ]; + })->toArray(); + $tags = array_merge($mentions, $hashtags); + $content = $status->caption ? Autolink::create()->autolink($status->caption) : null; + + return [ + '@context' => [ + 'https://w3id.org/security/v1', + 'https://www.w3.org/ns/activitystreams', + [ + 'Hashtag' => 'as:Hashtag', + 'sensitive' => 'as:sensitive', + 'schema' => 'http://schema.org/', + 'pixelfed' => 'http://pixelfed.org/ns#', + 'commentsEnabled' => [ + '@id' => 'pixelfed:commentsEnabled', + '@type' => 'schema:Boolean', + ], + 'capabilities' => [ + '@id' => 'pixelfed:capabilities', + '@container' => '@set', + ], + 'announce' => [ + '@id' => 'pixelfed:canAnnounce', + '@type' => '@id', + ], + 'like' => [ + '@id' => 'pixelfed:canLike', + '@type' => '@id', + ], + 'reply' => [ + '@id' => 'pixelfed:canReply', + '@type' => '@id', + ], + 'toot' => 'http://joinmastodon.org/ns#', + 'Emoji' => 'toot:Emoji', + ], + ], + 'id' => $status->url(), + 'type' => 'Question', + 'summary' => null, + 'content' => $content, + 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, + 'published' => $status->created_at->toAtomString(), + 'url' => $status->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => [], + 'tag' => $tags, + 'commentsEnabled' => (bool) ! $status->comments_disabled, + 'capabilities' => [ + 'announce' => 'https://www.w3.org/ns/activitystreams#Public', + 'like' => 'https://www.w3.org/ns/activitystreams#Public', + 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public', + ], + 'location' => $status->place_id ? [ + 'type' => 'Place', + 'name' => $status->place->name, + 'longitude' => $status->place->long, + 'latitude' => $status->place->lat, + 'country' => $status->place->country, + ] : null, + 'endTime' => $status->poll->expires_at->toAtomString(), + 'oneOf' => collect($status->poll->poll_options)->map(function ($option, $index) use ($status) { + return [ + 'type' => 'Note', + 'name' => $option, + 'replies' => [ + 'type' => 'Collection', + 'totalItems' => $status->poll->cached_tallies[$index], + ], + ]; + }), + ]; + } } diff --git a/app/Transformer/ActivityPub/Verb/UpdateNote.php b/app/Transformer/ActivityPub/Verb/UpdateNote.php index bdbb20c45..4199f7230 100644 --- a/app/Transformer/ActivityPub/Verb/UpdateNote.php +++ b/app/Transformer/ActivityPub/Verb/UpdateNote.php @@ -2,132 +2,135 @@ namespace App\Transformer\ActivityPub\Verb; -use App\Status; -use League\Fractal; use App\Models\CustomEmoji; +use App\Status; +use App\Util\Lexer\Autolink; use Illuminate\Support\Str; +use League\Fractal; class UpdateNote extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - $mentions = $status->mentions->map(function ($mention) { - $webfinger = $mention->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - return [ - 'type' => 'Mention', - 'href' => $mention->permalink(), - 'name' => $name - ]; - })->toArray(); + public function transform(Status $status) + { + $mentions = $status->mentions->map(function ($mention) { + $webfinger = $mention->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; - if($status->in_reply_to_id != null) { - $parent = $status->parent()->profile; - if($parent) { - $webfinger = $parent->emailUrl(); - $name = Str::startsWith($webfinger, '@') ? - $webfinger : - '@' . $webfinger; - $reply = [ - 'type' => 'Mention', - 'href' => $parent->permalink(), - 'name' => $name - ]; - $mentions = array_merge($reply, $mentions); - } - } + return [ + 'type' => 'Mention', + 'href' => $mention->permalink(), + 'name' => $name, + ]; + })->toArray(); - $hashtags = $status->hashtags->map(function ($hashtag) { - return [ - 'type' => 'Hashtag', - 'href' => $hashtag->url(), - 'name' => "#{$hashtag->name}", - ]; - })->toArray(); + if ($status->in_reply_to_id != null) { + $parent = $status->parent()->profile; + if ($parent) { + $webfinger = $parent->emailUrl(); + $name = Str::startsWith($webfinger, '@') ? + $webfinger : + '@'.$webfinger; + $reply = [ + 'type' => 'Mention', + 'href' => $parent->permalink(), + 'name' => $name, + ]; + $mentions = array_merge($reply, $mentions); + } + } - $emojis = CustomEmoji::scan($status->caption, true) ?? []; - $emoji = array_merge($emojis, $mentions); - $tags = array_merge($emoji, $hashtags); + $hashtags = $status->hashtags->map(function ($hashtag) { + return [ + 'type' => 'Hashtag', + 'href' => $hashtag->url(), + 'name' => "#{$hashtag->name}", + ]; + })->toArray(); - $latestEdit = $status->edits()->latest()->first(); + $emojis = CustomEmoji::scan($status->caption, true) ?? []; + $emoji = array_merge($emojis, $mentions); + $tags = array_merge($emoji, $hashtags); - return [ - '@context' => [ - 'https://w3id.org/security/v1', - 'https://www.w3.org/ns/activitystreams', - [ - 'Hashtag' => 'as:Hashtag', - 'sensitive' => 'as:sensitive', - 'schema' => 'http://schema.org/', - 'pixelfed' => 'http://pixelfed.org/ns#', - 'commentsEnabled' => [ - '@id' => 'pixelfed:commentsEnabled', - '@type' => 'schema:Boolean' - ], - 'capabilities' => [ - '@id' => 'pixelfed:capabilities', - '@container' => '@set' - ], - 'announce' => [ - '@id' => 'pixelfed:canAnnounce', - '@type' => '@id' - ], - 'like' => [ - '@id' => 'pixelfed:canLike', - '@type' => '@id' - ], - 'reply' => [ - '@id' => 'pixelfed:canReply', - '@type' => '@id' - ], - 'toot' => 'http://joinmastodon.org/ns#', - 'Emoji' => 'toot:Emoji' - ] - ], - 'id' => $status->permalink('#updates/' . $latestEdit->id), - 'type' => 'Update', - 'actor' => $status->profile->permalink(), - 'published' => $latestEdit->created_at->toAtomString(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'object' => [ - 'id' => $status->url(), - 'type' => 'Note', - 'summary' => $status->is_nsfw ? $status->cw_summary : null, - 'content' => $status->rendered ?? $status->caption, - 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, - 'published' => $status->created_at->toAtomString(), - 'url' => $status->url(), - 'attributedTo' => $status->profile->permalink(), - 'to' => $status->scopeToAudience('to'), - 'cc' => $status->scopeToAudience('cc'), - 'sensitive' => (bool) $status->is_nsfw, - 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { - return [ - 'type' => $media->activityVerb(), - 'mediaType' => $media->mime, - 'url' => $media->url(), - 'name' => $media->caption, - ]; - })->toArray(), - 'tag' => $tags, - 'commentsEnabled' => (bool) !$status->comments_disabled, - 'updated' => $latestEdit->created_at->toAtomString(), - 'capabilities' => [ - 'announce' => 'https://www.w3.org/ns/activitystreams#Public', - 'like' => 'https://www.w3.org/ns/activitystreams#Public', - 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public' - ], - 'location' => $status->place_id ? [ - 'type' => 'Place', - 'name' => $status->place->name, - 'longitude' => $status->place->long, - 'latitude' => $status->place->lat, - 'country' => $status->place->country - ] : null, - ] - ]; - } + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ""; + $latestEdit = $status->edits()->latest()->first(); + + return [ + '@context' => [ + 'https://w3id.org/security/v1', + 'https://www.w3.org/ns/activitystreams', + [ + 'Hashtag' => 'as:Hashtag', + 'sensitive' => 'as:sensitive', + 'schema' => 'http://schema.org/', + 'pixelfed' => 'http://pixelfed.org/ns#', + 'commentsEnabled' => [ + '@id' => 'pixelfed:commentsEnabled', + '@type' => 'schema:Boolean', + ], + 'capabilities' => [ + '@id' => 'pixelfed:capabilities', + '@container' => '@set', + ], + 'announce' => [ + '@id' => 'pixelfed:canAnnounce', + '@type' => '@id', + ], + 'like' => [ + '@id' => 'pixelfed:canLike', + '@type' => '@id', + ], + 'reply' => [ + '@id' => 'pixelfed:canReply', + '@type' => '@id', + ], + 'toot' => 'http://joinmastodon.org/ns#', + 'Emoji' => 'toot:Emoji', + ], + ], + 'id' => $status->permalink('#updates/'.$latestEdit->id), + 'type' => 'Update', + 'actor' => $status->profile->permalink(), + 'published' => $latestEdit->created_at->toAtomString(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'object' => [ + 'id' => $status->url(), + 'type' => 'Note', + 'summary' => $status->is_nsfw ? $status->cw_summary : null, + 'content' => $content, + 'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null, + 'published' => $status->created_at->toAtomString(), + 'url' => $status->url(), + 'attributedTo' => $status->profile->permalink(), + 'to' => $status->scopeToAudience('to'), + 'cc' => $status->scopeToAudience('cc'), + 'sensitive' => (bool) $status->is_nsfw, + 'attachment' => $status->media()->orderBy('order')->get()->map(function ($media) { + return [ + 'type' => $media->activityVerb(), + 'mediaType' => $media->mime, + 'url' => $media->url(), + 'name' => $media->caption, + ]; + })->toArray(), + 'tag' => $tags, + 'commentsEnabled' => (bool) ! $status->comments_disabled, + 'updated' => $latestEdit->created_at->toAtomString(), + 'capabilities' => [ + 'announce' => 'https://www.w3.org/ns/activitystreams#Public', + 'like' => 'https://www.w3.org/ns/activitystreams#Public', + 'reply' => $status->comments_disabled == true ? '[]' : 'https://www.w3.org/ns/activitystreams#Public', + ], + 'location' => $status->place_id ? [ + 'type' => 'Place', + 'name' => $status->place->name, + 'longitude' => $status->place->long, + 'latitude' => $status->place->lat, + 'country' => $status->place->country, + ] : null, + ], + ]; + } } diff --git a/app/Transformer/Api/Mastodon/v1/StatusTransformer.php b/app/Transformer/Api/Mastodon/v1/StatusTransformer.php index bfbc3d58b..16ff4cc30 100644 --- a/app/Transformer/Api/Mastodon/v1/StatusTransformer.php +++ b/app/Transformer/Api/Mastodon/v1/StatusTransformer.php @@ -2,48 +2,50 @@ namespace App\Transformer\Api\Mastodon\v1; -use App\Status; -use League\Fractal; -use Cache; use App\Services\MediaService; use App\Services\ProfileService; use App\Services\StatusHashtagService; +use App\Status; +use App\Util\Lexer\Autolink; +use League\Fractal; class StatusTransformer extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - return [ - 'id' => (string) $status->id, - 'created_at' => $status->created_at->toJSON(), - 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, - 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary ?? '', - 'visibility' => $status->visibility ?? $status->scope, - 'language' => 'en', - 'uri' => $status->permalink(''), - 'url' => $status->url(), - 'replies_count' => $status->reply_count ?? 0, - 'reblogs_count' => $status->reblogs_count ?? 0, - 'favourites_count' => $status->likes_count ?? 0, - 'reblogged' => $status->shared(), - 'favourited' => $status->liked(), - 'muted' => false, - 'bookmarked' => false, - 'content' => $status->rendered ?? $status->caption ?? '', - 'reblog' => null, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'mentions' => [], - 'emojis' => [], - 'card' => null, - 'poll' => null, - 'media_attachments' => MediaService::get($status->id), - 'account' => ProfileService::get($status->profile_id, true), - 'tags' => StatusHashtagService::statusTags($status->id), - ]; - } + public function transform(Status $status) + { + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ""; + + return [ + 'id' => (string) $status->id, + 'created_at' => $status->created_at->toJSON(), + 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary ?? '', + 'visibility' => $status->visibility ?? $status->scope, + 'language' => 'en', + 'uri' => $status->permalink(''), + 'url' => $status->url(), + 'replies_count' => $status->reply_count ?? 0, + 'reblogs_count' => $status->reblogs_count ?? 0, + 'favourites_count' => $status->likes_count ?? 0, + 'reblogged' => $status->shared(), + 'favourited' => $status->liked(), + 'muted' => false, + 'bookmarked' => false, + 'content' => $content, + 'reblog' => null, + 'application' => [ + 'name' => 'web', + 'website' => null, + ], + 'mentions' => [], + 'emojis' => [], + 'card' => null, + 'poll' => null, + 'media_attachments' => MediaService::get($status->id), + 'account' => ProfileService::get($status->profile_id, true), + 'tags' => StatusHashtagService::statusTags($status->id), + ]; + } } diff --git a/app/Transformer/Api/StatusStatelessTransformer.php b/app/Transformer/Api/StatusStatelessTransformer.php index 3c2c02d60..9f52ab50a 100644 --- a/app/Transformer/Api/StatusStatelessTransformer.php +++ b/app/Transformer/Api/StatusStatelessTransformer.php @@ -2,76 +2,73 @@ namespace App\Transformer\Api; -use App\Status; -use League\Fractal; -use Cache; +use App\Models\CustomEmoji; use App\Services\AccountService; use App\Services\HashidService; use App\Services\LikeService; use App\Services\MediaService; use App\Services\MediaTagService; -use App\Services\StatusService; +use App\Services\PollService; use App\Services\StatusHashtagService; use App\Services\StatusLabelService; use App\Services\StatusMentionService; -use App\Services\PollService; -use App\Models\CustomEmoji; +use App\Services\StatusService; +use App\Status; use App\Util\Lexer\Autolink; +use League\Fractal; class StatusStatelessTransformer extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - $taggedPeople = MediaTagService::get($status->id); - $poll = $status->type === 'poll' ? PollService::get($status->id) : null; - $rendered = config('exp.autolink') ? - ( $status->caption ? Autolink::create()->autolink($status->caption) : '' ) : - ( $status->rendered ?? $status->caption ); + public function transform(Status $status) + { + $taggedPeople = MediaTagService::get($status->id); + $poll = $status->type === 'poll' ? PollService::get($status->id) : null; + $rendered = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ""; - return [ - '_v' => 1, - 'id' => (string) $status->id, - //'gid' => $status->group_id ? (string) $status->group_id : null, - 'shortcode' => HashidService::encode($status->id), - 'uri' => $status->url(), - 'url' => $status->url(), - 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, - 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, - 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id, false) : null, - 'content' => $rendered, - 'content_text' => $status->caption, - 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), - 'emojis' => CustomEmoji::scan($status->caption), - 'reblogs_count' => $status->reblogs_count ?? 0, - 'favourites_count' => $status->likes_count ?? 0, - 'reblogged' => null, - 'favourited' => null, - 'muted' => null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary ?? '', - 'visibility' => $status->scope ?? $status->visibility, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'language' => null, - 'mentions' => StatusMentionService::get($status->id), - 'pf_type' => $status->type ?? $status->setType(), - 'reply_count' => (int) $status->reply_count, - 'comments_disabled' => (bool) $status->comments_disabled, - 'thread' => false, - 'replies' => [], - 'parent' => [], - 'place' => $status->place, - 'local' => (bool) $status->local, - 'taggedPeople' => $taggedPeople, - 'label' => StatusLabelService::get($status), - 'liked_by' => LikeService::likedBy($status), - 'media_attachments' => MediaService::get($status->id), - 'account' => AccountService::get($status->profile_id, true), - 'tags' => StatusHashtagService::statusTags($status->id), - 'poll' => $poll, - 'edited_at' => $status->edited_at ? str_replace('+00:00', 'Z', $status->edited_at->format(DATE_RFC3339_EXTENDED)) : null, - ]; - } + return [ + '_v' => 1, + 'id' => (string) $status->id, + //'gid' => $status->group_id ? (string) $status->group_id : null, + 'shortcode' => HashidService::encode($status->id), + 'uri' => $status->url(), + 'url' => $status->url(), + 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, + 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id, false) : null, + 'content' => $rendered, + 'content_text' => $status->caption, + 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), + 'emojis' => CustomEmoji::scan($status->caption), + 'reblogs_count' => $status->reblogs_count ?? 0, + 'favourites_count' => $status->likes_count ?? 0, + 'reblogged' => null, + 'favourited' => null, + 'muted' => null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary ?? '', + 'visibility' => $status->scope ?? $status->visibility, + 'application' => [ + 'name' => 'web', + 'website' => null, + ], + 'language' => null, + 'mentions' => StatusMentionService::get($status->id), + 'pf_type' => $status->type ?? $status->setType(), + 'reply_count' => (int) $status->reply_count, + 'comments_disabled' => (bool) $status->comments_disabled, + 'thread' => false, + 'replies' => [], + 'parent' => [], + 'place' => $status->place, + 'local' => (bool) $status->local, + 'taggedPeople' => $taggedPeople, + 'label' => StatusLabelService::get($status), + 'liked_by' => LikeService::likedBy($status), + 'media_attachments' => MediaService::get($status->id), + 'account' => AccountService::get($status->profile_id, true), + 'tags' => StatusHashtagService::statusTags($status->id), + 'poll' => $poll, + 'edited_at' => $status->edited_at ? str_replace('+00:00', 'Z', $status->edited_at->format(DATE_RFC3339_EXTENDED)) : null, + ]; + } } diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index 22a840ce0..4a6dc5d7d 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -2,80 +2,75 @@ namespace App\Transformer\Api; -use App\Like; -use App\Status; -use League\Fractal; -use Cache; +use App\Models\CustomEmoji; +use App\Services\BookmarkService; use App\Services\HashidService; use App\Services\LikeService; use App\Services\MediaService; use App\Services\MediaTagService; -use App\Services\StatusService; +use App\Services\PollService; +use App\Services\ProfileService; use App\Services\StatusHashtagService; use App\Services\StatusLabelService; use App\Services\StatusMentionService; -use App\Services\ProfileService; -use Illuminate\Support\Str; -use App\Services\PollService; -use App\Models\CustomEmoji; -use App\Services\BookmarkService; +use App\Services\StatusService; +use App\Status; use App\Util\Lexer\Autolink; +use League\Fractal; class StatusTransformer extends Fractal\TransformerAbstract { - public function transform(Status $status) - { - $pid = request()->user()->profile_id; - $taggedPeople = MediaTagService::get($status->id); - $poll = $status->type === 'poll' ? PollService::get($status->id, $pid) : null; - $rendered = config('exp.autolink') ? - ( $status->caption ? Autolink::create()->autolink($status->caption) : '' ) : - ( $status->rendered ?? $status->caption ); + public function transform(Status $status) + { + $pid = request()->user()->profile_id; + $taggedPeople = MediaTagService::get($status->id); + $poll = $status->type === 'poll' ? PollService::get($status->id, $pid) : null; + $content = $status->caption ? nl2br(Autolink::create()->autolink($status->caption)) : ''; - return [ - '_v' => 1, - 'id' => (string) $status->id, - 'shortcode' => HashidService::encode($status->id), - 'uri' => $status->url(), - 'url' => $status->url(), - 'in_reply_to_id' => (string) $status->in_reply_to_id, - 'in_reply_to_account_id' => (string) $status->in_reply_to_profile_id, - 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id) : null, - 'content' => $rendered, - 'content_text' => $status->caption, - 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), - 'emojis' => CustomEmoji::scan($status->caption), - 'reblogs_count' => 0, - 'favourites_count' => $status->likes_count ?? 0, - 'reblogged' => $status->shared(), - 'favourited' => $status->liked(), - 'muted' => null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary ?? '', - 'visibility' => $status->scope ?? $status->visibility, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'language' => null, - 'mentions' => StatusMentionService::get($status->id), - 'pf_type' => $status->type ?? $status->setType(), - 'reply_count' => (int) $status->reply_count, - 'comments_disabled' => (bool) $status->comments_disabled, - 'thread' => false, - 'replies' => [], - 'parent' => [], - 'place' => $status->place, - 'local' => (bool) $status->local, - 'taggedPeople' => $taggedPeople, - 'label' => StatusLabelService::get($status), - 'liked_by' => LikeService::likedBy($status), - 'media_attachments' => MediaService::get($status->id), - 'account' => ProfileService::get($status->profile_id, true), - 'tags' => StatusHashtagService::statusTags($status->id), - 'poll' => $poll, - 'bookmarked' => BookmarkService::get($pid, $status->id), - 'edited_at' => $status->edited_at ? str_replace('+00:00', 'Z', $status->edited_at->format(DATE_RFC3339_EXTENDED)) : null, - ]; - } + return [ + '_v' => 1, + 'id' => (string) $status->id, + 'shortcode' => HashidService::encode($status->id), + 'uri' => $status->url(), + 'url' => $status->url(), + 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, + 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id) : null, + 'content' => $content, + 'content_text' => $status->caption, + 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), + 'emojis' => CustomEmoji::scan($status->caption), + 'reblogs_count' => 0, + 'favourites_count' => $status->likes_count ?? 0, + 'reblogged' => $status->shared(), + 'favourited' => $status->liked(), + 'muted' => null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary ?? '', + 'visibility' => $status->scope ?? $status->visibility, + 'application' => [ + 'name' => 'web', + 'website' => null, + ], + 'language' => null, + 'mentions' => StatusMentionService::get($status->id), + 'pf_type' => $status->type ?? $status->setType(), + 'reply_count' => (int) $status->reply_count, + 'comments_disabled' => (bool) $status->comments_disabled, + 'thread' => false, + 'replies' => [], + 'parent' => [], + 'place' => $status->place, + 'local' => (bool) $status->local, + 'taggedPeople' => $taggedPeople, + 'label' => StatusLabelService::get($status), + 'liked_by' => LikeService::likedBy($status), + 'media_attachments' => MediaService::get($status->id), + 'account' => ProfileService::get($status->profile_id, true), + 'tags' => StatusHashtagService::statusTags($status->id), + 'poll' => $poll, + 'bookmarked' => BookmarkService::get($pid, $status->id), + 'edited_at' => $status->edited_at ? str_replace('+00:00', 'Z', $status->edited_at->format(DATE_RFC3339_EXTENDED)) : null, + ]; + } } diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 782404836..570d216ab 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -24,7 +24,6 @@ use App\Status; use App\Util\Media\License; use Cache; use Carbon\Carbon; -use Illuminate\Support\Str; use Illuminate\Validation\Rule; use League\Uri\Exceptions\UriException; use League\Uri\Uri; @@ -33,16 +32,32 @@ use Validator; class Helpers { - public static function validateObject($data) + private const PUBLIC_TIMELINE = 'https://www.w3.org/ns/activitystreams#Public'; + + private const CACHE_TTL = 14440; + + private const URL_CACHE_PREFIX = 'helpers:url:'; + + private const FETCH_CACHE_TTL = 15; + + private const LOCALHOST_DOMAINS = [ + 'localhost', + '127.0.0.1', + '::1', + 'broadcasthost', + 'ip6-localhost', + 'ip6-loopback', + ]; + + /** + * Validate an ActivityPub object + */ + public static function validateObject(array $data): bool { $verbs = ['Create', 'Announce', 'Like', 'Follow', 'Delete', 'Accept', 'Reject', 'Undo', 'Tombstone']; - $valid = Validator::make($data, [ - 'type' => [ - 'required', - 'string', - Rule::in($verbs), - ], + return Validator::make($data, [ + 'type' => ['required', 'string', Rule::in($verbs)], 'id' => 'required|string', 'actor' => 'required|string|url', 'object' => 'required', @@ -50,105 +65,88 @@ class Helpers 'object.attributedTo' => 'required_if:type,Create|url', 'published' => 'required_if:type,Create|date', ])->passes(); - - return $valid; } - public static function verifyAttachments($data) + /** + * Validate media attachments + */ + public static function verifyAttachments(array $data): bool { if (! isset($data['object']) || empty($data['object'])) { $data = ['object' => $data]; } $activity = $data['object']; - $mimeTypes = explode(',', config_cache('pixelfed.media_types')); - $mediaTypes = in_array('video/mp4', $mimeTypes) ? ['Document', 'Image', 'Video'] : ['Document', 'Image']; - - // Peertube - // $mediaTypes = in_array('video/mp4', $mimeTypes) ? ['Document', 'Image', 'Video', 'Link'] : ['Document', 'Image']; + $mediaTypes = in_array('video/mp4', $mimeTypes) ? + ['Document', 'Image', 'Video'] : + ['Document', 'Image']; if (! isset($activity['attachment']) || empty($activity['attachment'])) { return false; } - // peertube - // $attachment = is_array($activity['url']) ? - // collect($activity['url']) - // ->filter(function($media) { - // return $media['type'] == 'Link' && $media['mediaType'] == 'video/mp4'; - // }) - // ->take(1) - // ->values() - // ->toArray()[0] : $activity['attachment']; - - $attachment = $activity['attachment']; - - $valid = Validator::make($attachment, [ - '*.type' => [ - 'required', - 'string', - Rule::in($mediaTypes), - ], + return Validator::make($activity['attachment'], [ + '*.type' => ['required', 'string', Rule::in($mediaTypes)], '*.url' => 'required|url', - '*.mediaType' => [ - 'required', - 'string', - Rule::in($mimeTypes), - ], + '*.mediaType' => ['required', 'string', Rule::in($mimeTypes)], '*.name' => 'sometimes|nullable|string', '*.blurhash' => 'sometimes|nullable|string|min:6|max:164', '*.width' => 'sometimes|nullable|integer|min:1|max:5000', '*.height' => 'sometimes|nullable|integer|min:1|max:5000', ])->passes(); - - return $valid; } - public static function normalizeAudience($data, $localOnly = true) + /** + * Normalize ActivityPub audience + */ + public static function normalizeAudience(array $data, bool $localOnly = true): ?array { if (! isset($data['to'])) { - return; + return null; } - $audience = []; - $audience['to'] = []; - $audience['cc'] = []; - $scope = 'private'; + $audience = [ + 'to' => [], + 'cc' => [], + 'scope' => 'private', + ]; if (is_array($data['to']) && ! empty($data['to'])) { foreach ($data['to'] as $to) { - if ($to == 'https://www.w3.org/ns/activitystreams#Public') { - $scope = 'public'; + if ($to == self::PUBLIC_TIMELINE) { + $audience['scope'] = 'public'; continue; } $url = $localOnly ? self::validateLocalUrl($to) : self::validateUrl($to); - if ($url != false) { - array_push($audience['to'], $url); + if ($url) { + $audience['to'][] = $url; } } } if (is_array($data['cc']) && ! empty($data['cc'])) { foreach ($data['cc'] as $cc) { - if ($cc == 'https://www.w3.org/ns/activitystreams#Public') { - $scope = 'unlisted'; + if ($cc == self::PUBLIC_TIMELINE) { + $audience['scope'] = 'unlisted'; continue; } $url = $localOnly ? self::validateLocalUrl($cc) : self::validateUrl($cc); - if ($url != false) { - array_push($audience['cc'], $url); + if ($url) { + $audience['cc'][] = $url; } } } - $audience['scope'] = $scope; return $audience; } - public static function userInAudience($profile, $data) + /** + * Check if user is in audience + */ + public static function userInAudience(Profile $profile, array $data): bool { $audience = self::normalizeAudience($data); $url = $profile->permalink(); @@ -156,96 +154,167 @@ class Helpers return in_array($url, $audience['to']) || in_array($url, $audience['cc']); } - public static function validateUrl($url = null, $disableDNSCheck = false, $forceBanCheck = false) + /** + * Validate URL with various security and format checks + */ + public static function validateUrl(?string $url, bool $disableDNSCheck = false, bool $forceBanCheck = false): string|bool { - if (is_array($url) && ! empty($url)) { - $url = $url[0]; - } - if (! $url || strlen($url) === 0) { + if (! $normalizedUrl = self::normalizeUrl($url)) { return false; } + try { - $uri = Uri::new($url); + $uri = Uri::new($normalizedUrl); - if (! $uri) { - return false; - } - - if ($uri->getScheme() !== 'https') { + if (! self::isValidUri($uri)) { return false; } $host = $uri->getHost(); - - if (! $host || $host === '') { + if (! self::isValidHost($host)) { return false; } - if (! filter_var($host, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) { + if (! self::passesSecurityChecks($host, $disableDNSCheck, $forceBanCheck)) { return false; } - if (! str_contains($host, '.')) { - return false; - } - - $localhosts = [ - 'localhost', - '127.0.0.1', - '::1', - 'broadcasthost', - 'ip6-localhost', - 'ip6-loopback', - ]; - - if (in_array($host, $localhosts)) { - return false; - } - - if ($disableDNSCheck !== true && app()->environment() === 'production' && (bool) config('security.url.verify_dns')) { - $hash = hash('sha256', $host); - $key = "helpers:url:valid-dns:sha256-{$hash}"; - $domainValidDns = Cache::remember($key, 14440, function () use ($host) { - return DomainService::hasValidDns($host); - }); - if (! $domainValidDns) { - return false; - } - } - - if ($forceBanCheck || $disableDNSCheck !== true && app()->environment() === 'production') { - $bannedInstances = InstanceService::getBannedDomains(); - if (in_array($host, $bannedInstances)) { - return false; - } - } - return $uri->toString(); + } catch (UriException $e) { return false; } } - public static function validateLocalUrl($url) + /** + * Normalize URL input + */ + public static function normalizeUrl(?string $url): ?string + { + if (is_array($url) && ! empty($url)) { + $url = $url[0]; + } + + return (! $url || strlen($url) === 0) ? null : $url; + } + + /** + * Validate basic URI requirements + */ + public static function isValidUri(Uri $uri): bool + { + return $uri && $uri->getScheme() === 'https'; + } + + /** + * Validate host requirements + */ + public static function isValidHost(?string $host): bool + { + if (! $host || $host === '') { + return false; + } + + if (! filter_var($host, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) { + return false; + } + + if (! str_contains($host, '.')) { + return false; + } + + if (in_array($host, self::LOCALHOST_DOMAINS)) { + return false; + } + + return true; + } + + /** + * Check DNS and banned status if required + */ + public static function passesSecurityChecks(string $host, bool $disableDNSCheck, bool $forceBanCheck): bool + { + if ($disableDNSCheck !== true && self::shouldCheckDNS()) { + if (! self::hasValidDNS($host)) { + return false; + } + } + + if ($forceBanCheck || self::shouldCheckBans()) { + if (self::isHostBanned($host)) { + return false; + } + } + + return true; + } + + /** + * Check if DNS validation is required + */ + public static function shouldCheckDNS(): bool + { + return app()->environment() === 'production' && + (bool) config('security.url.verify_dns'); + } + + /** + * Validate domain DNS records + */ + public static function hasValidDNS(string $host): bool + { + $hash = hash('sha256', $host); + $key = self::URL_CACHE_PREFIX."valid-dns:sha256-{$hash}"; + + return Cache::remember($key, self::CACHE_TTL, function () use ($host) { + return DomainService::hasValidDns($host); + }); + } + + /** + * Check if domain bans should be validated + */ + public static function shouldCheckBans(): bool + { + return app()->environment() === 'production'; + } + + /** + * Check if host is in banned domains list + */ + public static function isHostBanned(string $host): bool + { + $bannedInstances = InstanceService::getBannedDomains(); + + return in_array($host, $bannedInstances); + } + + /** + * Validate local URL + */ + public static function validateLocalUrl(string $url): string|bool { $url = self::validateUrl($url); - if ($url == true) { + if ($url) { $domain = config('pixelfed.domain.app'); - $uri = Uri::new($url); $host = $uri->getHost(); + if (! $host || empty($host)) { return false; } - $url = strtolower($domain) === strtolower($host) ? $url : false; - return $url; + return strtolower($domain) === strtolower($host) ? $url : false; } return false; } - public static function zttpUserAgent() + /** + * Get user agent string + */ + public static function zttpUserAgent(): array { $version = config('pixelfed.version'); $url = config('app.url'); @@ -298,254 +367,248 @@ class Helpers return null; } - public static function statusFirstOrFetch($url, $replyTo = false) + public static function validateTimestamp($timestamp) { - $url = self::validateUrl($url); - if ($url == false) { - return; + try { + $date = Carbon::parse($timestamp); + $now = Carbon::now(); + $tenYearsAgo = $now->copy()->subYears(20); + $isMoreThanTenYearsOld = $date->lt($tenYearsAgo); + $tomorrow = $now->copy()->addDay(); + $isMoreThanOneDayFuture = $date->gt($tomorrow); + + return ! ($isMoreThanTenYearsOld || $isMoreThanOneDayFuture); + } catch (\Exception $e) { + return false; + } + } + + /** + * Fetch or create a status from URL + */ + public static function statusFirstOrFetch(string $url, bool $replyTo = false): ?Status + { + if (! $validUrl = self::validateUrl($url)) { + return null; } - $host = parse_url($url, PHP_URL_HOST); - $local = config('pixelfed.domain.app') == $host ? true : false; + if ($status = self::findExistingStatus($url)) { + return $status; + } - if ($local) { + return self::createStatusFromUrl($url, $replyTo); + } + + /** + * Find existing status by URL + */ + public static function findExistingStatus(string $url): ?Status + { + $host = parse_url($url, PHP_URL_HOST); + + if (self::isLocalDomain($host)) { $id = (int) last(explode('/', $url)); - return Status::whereNotIn('scope', ['draft', 'archived'])->findOrFail($id); + return Status::whereNotIn('scope', ['draft', 'archived']) + ->findOrFail($id); } - $cached = Status::whereNotIn('scope', ['draft', 'archived']) - ->whereUri($url) - ->orWhere('object_url', $url) + return Status::whereNotIn('scope', ['draft', 'archived']) + ->where(function ($query) use ($url) { + $query->whereUri($url) + ->orWhere('object_url', $url); + }) ->first(); + } - if ($cached) { - return $cached; - } - + /** + * Create a new status from ActivityPub data + */ + public static function createStatusFromUrl(string $url, bool $replyTo): ?Status + { $res = self::fetchFromUrl($url); - if (! $res || empty($res) || isset($res['error']) || ! isset($res['@context']) || ! isset($res['published'])) { - return; + if (! $res || ! self::isValidStatusData($res)) { + return null; } - if (config('autospam.live_filters.enabled')) { - $filters = config('autospam.live_filters.filters'); - if (! empty($filters) && isset($res['content']) && ! empty($res['content']) && strlen($filters) > 3) { - $filters = array_map('trim', explode(',', $filters)); - $content = $res['content']; - foreach ($filters as $filter) { - $filter = trim(strtolower($filter)); - if (! $filter || ! strlen($filter)) { - continue; - } - if (str_contains(strtolower($content), $filter)) { - return; - } - } - } + if (! self::validateTimestamp($res['published'])) { + return null; } - if (isset($res['object'])) { - $activity = $res; - } else { - $activity = ['object' => $res]; + if (! self::passesContentFilters($res)) { + return null; } - $scope = 'private'; + $activity = isset($res['object']) ? $res : ['object' => $res]; - $cw = isset($res['sensitive']) ? (bool) $res['sensitive'] : false; - - if (isset($res['to']) == true) { - if (is_array($res['to']) && in_array('https://www.w3.org/ns/activitystreams#Public', $res['to'])) { - $scope = 'public'; - } - if (is_string($res['to']) && $res['to'] == 'https://www.w3.org/ns/activitystreams#Public') { - $scope = 'public'; - } + if (! $profile = self::getStatusProfile($activity)) { + return null; } - if (isset($res['cc']) == true) { - if (is_array($res['cc']) && in_array('https://www.w3.org/ns/activitystreams#Public', $res['cc'])) { - $scope = 'unlisted'; - } - if (is_string($res['cc']) && $res['cc'] == 'https://www.w3.org/ns/activitystreams#Public') { - $scope = 'unlisted'; - } + if (! self::validateStatusUrls($url, $activity)) { + return null; } - if (config('costar.enabled') == true) { - $blockedKeywords = config('costar.keyword.block'); - if ($blockedKeywords !== null) { - $keywords = config('costar.keyword.block'); - foreach ($keywords as $kw) { - if (Str::contains($res['content'], $kw) == true) { - return; - } - } - } - - $unlisted = config('costar.domain.unlisted'); - if (in_array(parse_url($url, PHP_URL_HOST), $unlisted) == true) { - $unlisted = true; - $scope = 'unlisted'; - } else { - $unlisted = false; - } - - $cwDomains = config('costar.domain.cw'); - if (in_array(parse_url($url, PHP_URL_HOST), $cwDomains) == true) { - $cw = true; - } - } - - $id = isset($res['id']) ? self::pluckval($res['id']) : self::pluckval($url); - $idDomain = parse_url($id, PHP_URL_HOST); - $urlDomain = parse_url($url, PHP_URL_HOST); - - if ($idDomain && $urlDomain && strtolower($idDomain) !== strtolower($urlDomain)) { - return; - } - - if (! self::validateUrl($id)) { - return; - } - - if (! isset($activity['object']['attributedTo'])) { - return; - } - - $attributedTo = is_string($activity['object']['attributedTo']) ? - $activity['object']['attributedTo'] : - (is_array($activity['object']['attributedTo']) ? - collect($activity['object']['attributedTo']) - ->filter(function ($o) { - return $o && isset($o['type']) && $o['type'] == 'Person'; - }) - ->pluck('id') - ->first() : null - ); - - if ($attributedTo) { - $actorDomain = parse_url($attributedTo, PHP_URL_HOST); - if (! self::validateUrl($attributedTo) || - $idDomain !== $actorDomain || - $actorDomain !== $urlDomain - ) { - return; - } - } - - if ($idDomain !== $urlDomain) { - return; - } - - $profile = self::profileFirstOrNew($attributedTo); - - if (! $profile) { - return; - } - - if (isset($activity['object']['inReplyTo']) && ! empty($activity['object']['inReplyTo']) || $replyTo == true) { - $reply_to = self::statusFirstOrFetch(self::pluckval($activity['object']['inReplyTo']), false); - if ($reply_to) { - $blocks = UserFilterService::blocks($reply_to->profile_id); - if (in_array($profile->id, $blocks)) { - return; - } - } - $reply_to = optional($reply_to)->id; - } else { - $reply_to = null; - } - $ts = self::pluckval($res['published']); - - if ($scope == 'public' && in_array($urlDomain, InstanceService::getUnlistedDomains())) { - $scope = 'unlisted'; - } - - if (in_array($urlDomain, InstanceService::getNsfwDomains())) { - $cw = true; - } + $reply_to = self::getReplyToId($activity, $profile, $replyTo); + $scope = self::getScope($activity, $url); + $cw = self::getSensitive($activity, $url); if ($res['type'] === 'Question') { - $status = self::storePoll( + return self::storePoll( $profile, $res, $url, - $ts, + $res['published'], $reply_to, $cw, $scope, - $id + $activity['id'] ?? $url ); - - return $status; - } else { - $status = self::storeStatus($url, $profile, $res); } - return $status; + return self::storeStatus($url, $profile, $res); } - public static function storeStatus($url, $profile, $activity) + /** + * Validate status data + */ + public static function isValidStatusData(?array $res): bool { - $originalUrl = $url; - $id = isset($activity['id']) ? self::pluckval($activity['id']) : self::pluckval($activity['url']); - $url = isset($activity['url']) && is_string($activity['url']) ? self::pluckval($activity['url']) : self::pluckval($id); - $idDomain = parse_url($id, PHP_URL_HOST); - $urlDomain = parse_url($url, PHP_URL_HOST); - $originalUrlDomain = parse_url($originalUrl, PHP_URL_HOST); - if (! self::validateUrl($id) || ! self::validateUrl($url)) { - return; + return $res && + ! empty($res) && + ! isset($res['error']) && + isset($res['@context']) && + isset($res['published']); + } + + /** + * Check if content passes filters + */ + public static function passesContentFilters(array $res): bool + { + if (! config('autospam.live_filters.enabled')) { + return true; } - if (strtolower($originalUrlDomain) !== strtolower($idDomain) || - strtolower($originalUrlDomain) !== strtolower($urlDomain)) { - return; + $filters = config('autospam.live_filters.filters'); + if (empty($filters) || ! isset($res['content']) || strlen($filters) <= 3) { + return true; } - $reply_to = self::getReplyTo($activity); + $filters = array_map('trim', explode(',', $filters)); + $content = strtolower($res['content']); - $ts = self::pluckval($activity['published']); - $scope = self::getScope($activity, $url); - $cw = self::getSensitive($activity, $url); - $pid = is_object($profile) ? $profile->id : (is_array($profile) ? $profile['id'] : null); - $isUnlisted = is_object($profile) ? $profile->unlisted : (is_array($profile) ? $profile['unlisted'] : false); - $commentsDisabled = isset($activity['commentsEnabled']) ? ! boolval($activity['commentsEnabled']) : false; - - if (! $pid) { - return; - } - - if ($scope == 'public') { - if ($isUnlisted == true) { - $scope = 'unlisted'; + foreach ($filters as $filter) { + $filter = trim(strtolower($filter)); + if ($filter && str_contains($content, $filter)) { + return false; } } - $status = Status::updateOrCreate( - [ - 'uri' => $url, - ], [ - 'profile_id' => $pid, - 'url' => $url, - 'object_url' => $id, - 'caption' => isset($activity['content']) ? Purify::clean(strip_tags($activity['content'])) : null, - 'rendered' => isset($activity['content']) ? Purify::clean($activity['content']) : null, - 'created_at' => Carbon::parse($ts)->tz('UTC'), - 'in_reply_to_id' => $reply_to, - 'local' => false, - 'is_nsfw' => $cw, - 'scope' => $scope, - 'visibility' => $scope, - 'cw_summary' => ($cw == true && isset($activity['summary']) ? - Purify::clean(strip_tags($activity['summary'])) : null), - 'comments_disabled' => $commentsDisabled, - ] - ); + return true; + } - if ($reply_to == null) { + /** + * Get profile for status + */ + public static function getStatusProfile(array $activity): ?Profile + { + if (! isset($activity['object']['attributedTo'])) { + return null; + } + + $attributedTo = self::extractAttributedTo($activity['object']['attributedTo']); + + return $attributedTo ? self::profileFirstOrNew($attributedTo) : null; + } + + /** + * Extract attributed to value + */ + public static function extractAttributedTo(string|array $attributedTo): ?string + { + if (is_string($attributedTo)) { + return $attributedTo; + } + + if (is_array($attributedTo)) { + return collect($attributedTo) + ->filter(fn ($o) => $o && isset($o['type']) && $o['type'] == 'Person') + ->pluck('id') + ->first(); + } + + return null; + } + + /** + * Validate status URLs match + */ + public static function validateStatusUrls(string $url, array $activity): bool + { + $id = isset($activity['id']) ? + self::pluckval($activity['id']) : + self::pluckval($url); + + $idDomain = parse_url($id, PHP_URL_HOST); + $urlDomain = parse_url($url, PHP_URL_HOST); + + return $idDomain && + $urlDomain && + strtolower($idDomain) === strtolower($urlDomain); + } + + /** + * Get reply-to status ID + */ + public static function getReplyToId(array $activity, Profile $profile, bool $replyTo): ?int + { + $inReplyTo = $activity['object']['inReplyTo'] ?? null; + + if (! $inReplyTo && ! $replyTo) { + return null; + } + + $reply = self::statusFirstOrFetch(self::pluckval($inReplyTo), false); + + if (! $reply) { + return null; + } + + $blocks = UserFilterService::blocks($reply->profile_id); + + return in_array($profile->id, $blocks) ? null : $reply->id; + } + + /** + * Store a new regular status + */ + public static function storeStatus(string $url, Profile $profile, array $activity): Status + { + $originalUrl = $url; + $id = self::getStatusId($activity, $url); + $url = self::getStatusUrl($activity, $id); + + if ((! isset($activity['type']) || + in_array($activity['type'], ['Create', 'Note'])) && + ! self::validateStatusDomains($originalUrl, $id, $url)) { + throw new \Exception('Invalid status domains'); + } + + $reply_to = self::getReplyTo($activity); + $ts = self::pluckval($activity['published']); + $scope = self::getScope($activity, $url); + $commentsDisabled = $activity['commentsEnabled'] ?? false; + $cw = self::getSensitive($activity, $url); + + if ($profile->unlisted) { + $scope = 'unlisted'; + } + + $status = self::createOrUpdateStatus($url, $profile, $id, $activity, $ts, $reply_to, $cw, $scope, $commentsDisabled); + + if ($reply_to === null) { self::importNoteAttachment($activity, $status); } else { if (isset($activity['attachment']) && ! empty($activity['attachment'])) { @@ -558,34 +621,136 @@ class Helpers StatusTagsPipeline::dispatch($activity, $status); } + self::handleStatusPostProcessing($status, $profile->id, $url); + + return $status; + } + + /** + * Get status ID from activity + */ + public static function getStatusId(array $activity, string $url): string + { + return isset($activity['id']) ? + self::pluckval($activity['id']) : + self::pluckval($url); + } + + /** + * Get status URL from activity + */ + public static function getStatusUrl(array $activity, string $id): string + { + return isset($activity['url']) && is_string($activity['url']) ? + self::pluckval($activity['url']) : + self::pluckval($id); + } + + /** + * Validate status domain consistency + */ + public static function validateStatusDomains(string $originalUrl, string $id, string $url): bool + { + if (! self::validateUrl($id) || ! self::validateUrl($url)) { + return false; + } + + $originalDomain = parse_url($originalUrl, PHP_URL_HOST); + $idDomain = parse_url($id, PHP_URL_HOST); + $urlDomain = parse_url($url, PHP_URL_HOST); + + return strtolower($originalDomain) === strtolower($idDomain) && + strtolower($originalDomain) === strtolower($urlDomain); + } + + /** + * Create or update status record + */ + public static function createOrUpdateStatus( + string $url, + Profile $profile, + string $id, + array $activity, + string $ts, + ?int $reply_to, + bool $cw, + string $scope, + bool $commentsDisabled + ): Status { + $caption = isset($activity['content']) ? + Purify::clean($activity['content']) : + ''; + + return Status::updateOrCreate( + ['uri' => $url], + [ + 'profile_id' => $profile->id, + 'url' => $url, + 'object_url' => $id, + 'caption' => strip_tags($caption), + 'rendered' => $caption, + 'created_at' => Carbon::parse($ts)->tz('UTC'), + 'in_reply_to_id' => $reply_to, + 'local' => false, + 'is_nsfw' => $cw, + 'scope' => $scope, + 'visibility' => $scope, + 'cw_summary' => ($cw && isset($activity['summary'])) ? + Purify::clean(strip_tags($activity['summary'])) : + null, + 'comments_disabled' => $commentsDisabled, + ] + ); + } + + /** + * Handle post-creation status processing + */ + public static function handleStatusPostProcessing(Status $status, int $profileId, string $url): void + { if (config('instance.timeline.network.cached') && - $status->in_reply_to_id === null && - $status->reblog_of_id === null && - in_array($status->type, ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) && - $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) && - (config('instance.hide_nsfw_on_public_feeds') == true ? $status->is_nsfw == false : true) + self::isEligibleForNetwork($status) ) { - $filteredDomains = collect(InstanceService::getBannedDomains()) - ->merge(InstanceService::getUnlistedDomains()) - ->unique() - ->values() - ->toArray(); + $urlDomain = parse_url($url, PHP_URL_HOST); + $filteredDomains = self::getFilteredDomains(); + if (! in_array($urlDomain, $filteredDomains)) { - if (! $isUnlisted) { - NetworkTimelineService::add($status->id); - } + NetworkTimelineService::add($status->id); } } - AccountStatService::incrementPostCount($pid); + AccountStatService::incrementPostCount($profileId); if ($status->in_reply_to_id === null && in_array($status->type, ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) ) { - FeedInsertRemotePipeline::dispatch($status->id, $pid)->onQueue('feed'); + FeedInsertRemotePipeline::dispatch($status->id, $profileId) + ->onQueue('feed'); } + } - return $status; + /** + * Check if status is eligible for network timeline + */ + public static function isEligibleForNetwork(Status $status): bool + { + return $status->in_reply_to_id === null && + $status->reblog_of_id === null && + in_array($status->type, ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) && + $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) && + (config('instance.hide_nsfw_on_public_feeds') ? ! $status->is_nsfw : true); + } + + /** + * Get filtered domains list + */ + public static function getFilteredDomains(): array + { + return collect(InstanceService::getBannedDomains()) + ->merge(InstanceService::getUnlistedDomains()) + ->unique() + ->values() + ->toArray(); } public static function getSensitive($activity, $url) @@ -655,7 +820,7 @@ class Helpers return $scope; } - private static function storePoll($profile, $res, $url, $ts, $reply_to, $cw, $scope, $id) + public static function storePoll($profile, $res, $url, $ts, $reply_to, $cw, $scope, $id) { if (! isset($res['endTime']) || ! isset($res['oneOf']) || ! is_array($res['oneOf']) || count($res['oneOf']) > 4) { return; @@ -669,13 +834,14 @@ class Helpers return $option['replies']['totalItems'] ?? 0; })->toArray(); + $defaultCaption = ''; $status = new Status; $status->profile_id = $profile->id; $status->url = isset($res['url']) ? $res['url'] : $url; $status->uri = isset($res['url']) ? $res['url'] : $url; $status->object_url = $id; - $status->caption = strip_tags($res['content']); - $status->rendered = Purify::clean($res['content']); + $status->caption = strip_tags(Purify::clean($res['content'])) ?? $defaultCaption; + $status->rendered = Purify::clean($res['content'] ?? $defaultCaption); $status->created_at = Carbon::parse($ts)->tz('UTC'); $status->in_reply_to_id = null; $status->local = false; @@ -709,185 +875,430 @@ class Helpers return self::statusFirstOrFetch($url); } - public static function importNoteAttachment($data, Status $status) + /** + * Process and store note attachments + */ + public static function importNoteAttachment(array $data, Status $status): void { - if (self::verifyAttachments($data) == false) { - // \Log::info('importNoteAttachment::failedVerification.', [$data['id']]); + if (! self::verifyAttachments($data)) { $status->viewType(); return; } - $attachments = isset($data['object']) ? $data['object']['attachment'] : $data['attachment']; - // peertube - // if(!$attachments) { - // $obj = isset($data['object']) ? $data['object'] : $data; - // $attachments = is_array($obj['url']) ? $obj['url'] : null; - // } - $user = $status->profile; - $storagePath = MediaPathService::get($user, 2); - $allowed = explode(',', config_cache('pixelfed.media_types')); + + $attachments = self::getAttachments($data); + $profile = $status->profile; + $storagePath = MediaPathService::get($profile, 2); + $allowedTypes = explode(',', config_cache('pixelfed.media_types')); foreach ($attachments as $key => $media) { - $type = $media['mediaType']; - $url = $media['url']; - $valid = self::validateUrl($url); - if (in_array($type, $allowed) == false || $valid == false) { + if (! self::isValidAttachment($media, $allowedTypes)) { continue; } - $blurhash = isset($media['blurhash']) ? $media['blurhash'] : null; - $license = isset($media['license']) ? License::nameToId($media['license']) : null; - $caption = isset($media['name']) ? Purify::clean($media['name']) : null; - $width = isset($media['width']) ? $media['width'] : false; - $height = isset($media['height']) ? $media['height'] : false; - $media = new Media; - $media->blurhash = $blurhash; - $media->remote_media = true; - $media->status_id = $status->id; - $media->profile_id = $status->profile_id; - $media->user_id = null; - $media->media_path = $url; - $media->remote_url = $url; - $media->caption = $caption; - $media->order = $key + 1; - if ($width) { - $media->width = $width; - } - if ($height) { - $media->height = $height; - } - if ($license) { - $media->license = $license; - } - $media->mime = $type; - $media->version = 3; - $media->save(); - - if ((bool) config_cache('pixelfed.cloud_storage') == true) { - MediaStoragePipeline::dispatch($media); - } + $mediaModel = self::createMediaAttachment($media, $status, $key); + self::handleMediaStorage($mediaModel); } $status->viewType(); - } - public static function profileFirstOrNew($url) + /** + * Get attachments from ActivityPub data + */ + public static function getAttachments(array $data): array { - $url = self::validateUrl($url); - if ($url == false) { - return; + return isset($data['object']) ? + $data['object']['attachment'] : + $data['attachment']; + } + + /** + * Validate individual attachment + */ + public static function isValidAttachment(array $media, array $allowedTypes): bool + { + $type = $media['mediaType']; + $url = $media['url']; + + return in_array($type, $allowedTypes) && + self::validateUrl($url); + } + + /** + * Create media attachment record + */ + public static function createMediaAttachment(array $media, Status $status, int $key): Media + { + $mediaModel = new Media; + + self::setBasicMediaAttributes($mediaModel, $media, $status, $key); + self::setOptionalMediaAttributes($mediaModel, $media); + + $mediaModel->save(); + + return $mediaModel; + } + + /** + * Set basic media attributes + */ + public static function setBasicMediaAttributes(Media $media, array $data, Status $status, int $key): void + { + $media->remote_media = true; + $media->status_id = $status->id; + $media->profile_id = $status->profile_id; + $media->user_id = null; + $media->media_path = $data['url']; + $media->remote_url = $data['url']; + $media->mime = $data['mediaType']; + $media->version = 3; + $media->order = $key + 1; + } + + /** + * Set optional media attributes + */ + public static function setOptionalMediaAttributes(Media $media, array $data): void + { + $media->blurhash = $data['blurhash'] ?? null; + $media->caption = isset($data['name']) ? + Purify::clean($data['name']) : + null; + + if (isset($data['width'])) { + $media->width = $data['width']; } - $host = parse_url($url, PHP_URL_HOST); - $local = config('pixelfed.domain.app') == $host ? true : false; - - if ($local == true) { - $id = last(explode('/', $url)); - - return Profile::whereNull('status') - ->whereNull('domain') - ->whereUsername($id) - ->firstOrFail(); + if (isset($data['height'])) { + $media->height = $data['height']; } - if ($profile = Profile::whereRemoteUrl($url)->first()) { - if ($profile->last_fetched_at && $profile->last_fetched_at->lt(now()->subHours(24))) { - return self::profileUpdateOrCreate($url); + if (isset($data['license'])) { + $media->license = License::nameToId($data['license']); + } + } + + /** + * Handle media storage processing + */ + public static function handleMediaStorage(Media $media): void + { + if ((bool) config_cache('pixelfed.cloud_storage')) { + MediaStoragePipeline::dispatch($media); + } + } + + /** + * Validate attachment collection + */ + public static function validateAttachmentCollection(array $attachments, array $mediaTypes, array $mimeTypes): bool + { + return Validator::make($attachments, [ + '*.type' => [ + 'required', + 'string', + Rule::in($mediaTypes), + ], + '*.url' => 'required|url', + '*.mediaType' => [ + 'required', + 'string', + Rule::in($mimeTypes), + ], + '*.name' => 'sometimes|nullable|string', + '*.blurhash' => 'sometimes|nullable|string|min:6|max:164', + '*.width' => 'sometimes|nullable|integer|min:1|max:5000', + '*.height' => 'sometimes|nullable|integer|min:1|max:5000', + ])->passes(); + } + + /** + * Get supported media types + */ + public static function getSupportedMediaTypes(): array + { + $mimeTypes = explode(',', config_cache('pixelfed.media_types')); + + return in_array('video/mp4', $mimeTypes) ? + ['Document', 'Image', 'Video'] : + ['Document', 'Image']; + } + + /** + * Process specific media type attachment + */ + public static function processMediaTypeAttachment(array $media, Status $status, int $order): ?Media + { + if (! self::isValidMediaType($media)) { + return null; + } + + $mediaModel = new Media; + self::setMediaAttributes($mediaModel, $media, $status, $order); + $mediaModel->save(); + + return $mediaModel; + } + + /** + * Validate media type + */ + public static function isValidMediaType(array $media): bool + { + $requiredFields = ['mediaType', 'url']; + + foreach ($requiredFields as $field) { + if (! isset($media[$field]) || empty($media[$field])) { + return false; } + } + return true; + } + + /** + * Set media attributes + */ + public static function setMediaAttributes(Media $media, array $data, Status $status, int $order): void + { + $media->remote_media = true; + $media->status_id = $status->id; + $media->profile_id = $status->profile_id; + $media->user_id = null; + $media->media_path = $data['url']; + $media->remote_url = $data['url']; + $media->mime = $data['mediaType']; + $media->version = 3; + $media->order = $order; + + // Optional attributes + if (isset($data['blurhash'])) { + $media->blurhash = $data['blurhash']; + } + + if (isset($data['name'])) { + $media->caption = Purify::clean($data['name']); + } + + if (isset($data['width'])) { + $media->width = $data['width']; + } + + if (isset($data['height'])) { + $media->height = $data['height']; + } + + if (isset($data['license'])) { + $media->license = License::nameToId($data['license']); + } + } + + /** + * Fetch or create a profile from a URL + */ + public static function profileFirstOrNew(string $url): ?Profile + { + if (! $validatedUrl = self::validateUrl($url)) { + return null; + } + + $host = parse_url($validatedUrl, PHP_URL_HOST); + + if (self::isLocalDomain($host)) { + return self::getLocalProfile($validatedUrl); + } + + return self::getOrFetchRemoteProfile($validatedUrl); + } + + /** + * Check if domain is local + */ + public static function isLocalDomain(string $host): bool + { + return config('pixelfed.domain.app') == $host; + } + + /** + * Get local profile from URL + */ + public static function getLocalProfile(string $url): ?Profile + { + $username = last(explode('/', $url)); + + return Profile::whereNull('status') + ->whereNull('domain') + ->whereUsername($username) + ->firstOrFail(); + } + + /** + * Get existing or fetch new remote profile + */ + public static function getOrFetchRemoteProfile(string $url): ?Profile + { + $profile = Profile::whereRemoteUrl($url)->first(); + + if ($profile && ! self::needsFetch($profile)) { return $profile; } return self::profileUpdateOrCreate($url); } - public static function profileUpdateOrCreate($url, $movedToCheck = false) + /** + * Check if profile needs to be fetched + */ + public static function needsFetch(?Profile $profile): bool + { + return ! $profile?->last_fetched_at || + $profile->last_fetched_at->lt(now()->subHours(24)); + } + + /** + * Update or create a profile from ActivityPub data + */ + public static function profileUpdateOrCreate(string $url, bool $movedToCheck = false): ?Profile { - $movedToPid = null; $res = self::fetchProfileFromUrl($url); - if (! $res || isset($res['id']) == false) { - return; - } - if (! self::validateUrl($res['inbox'])) { - return; - } - if (! self::validateUrl($res['id'])) { - return; + + if (! $res || ! self::isValidProfileData($res, $url)) { + return null; } - if (ModeratedProfile::whereProfileUrl($res['id'])->whereIsBanned(true)->exists()) { - return; - } - - $urlDomain = parse_url($url, PHP_URL_HOST); $domain = parse_url($res['id'], PHP_URL_HOST); - if (strtolower($urlDomain) !== strtolower($domain)) { - return; + $username = self::extractUsername($res); + + if (! $username || self::isProfileBanned($res['id'])) { + return null; } - if (! isset($res['preferredUsername']) && ! isset($res['nickname'])) { - return; - } - // skip invalid usernames - if (! ctype_alnum($res['preferredUsername'])) { - $tmpUsername = str_replace(['_', '.', '-'], '', $res['preferredUsername']); - if (! ctype_alnum($tmpUsername)) { - return; - } - } - $username = (string) Purify::clean($res['preferredUsername'] ?? $res['nickname']); - if (empty($username)) { - return; - } - $remoteUsername = $username; + $webfinger = "@{$username}@{$domain}"; - - $instance = Instance::updateOrCreate([ - 'domain' => $domain, - ]); - if ($instance->wasRecentlyCreated == true) { - \App\Jobs\InstancePipeline\FetchNodeinfoPipeline::dispatch($instance)->onQueue('low'); - } - - if (! $movedToCheck && isset($res['movedTo']) && Helpers::validateUrl($res['movedTo'])) { - $movedTo = self::profileUpdateOrCreate($res['movedTo'], true); - if ($movedTo) { - $movedToPid = $movedTo->id; - } - } + $instance = self::getOrCreateInstance($domain); + $movedToPid = $movedToCheck ? null : self::handleMovedTo($res); $profile = Profile::updateOrCreate( [ 'domain' => strtolower($domain), 'username' => Purify::clean($webfinger), ], - [ - 'webfinger' => Purify::clean($webfinger), - 'key_id' => $res['publicKey']['id'], - 'remote_url' => $res['id'], - 'name' => isset($res['name']) ? Purify::clean($res['name']) : 'user', - 'bio' => isset($res['summary']) ? Purify::clean($res['summary']) : null, - 'sharedInbox' => isset($res['endpoints']) && isset($res['endpoints']['sharedInbox']) ? $res['endpoints']['sharedInbox'] : null, - 'inbox_url' => $res['inbox'], - 'outbox_url' => isset($res['outbox']) ? $res['outbox'] : null, - 'public_key' => $res['publicKey']['publicKeyPem'], - 'indexable' => isset($res['indexable']) && is_bool($res['indexable']) ? $res['indexable'] : false, - 'moved_to_profile_id' => $movedToPid, - ] + self::buildProfileData($res, $webfinger, $movedToPid) ); - if ($profile->last_fetched_at == null || - $profile->last_fetched_at->lt(now()->subMonths(3)) - ) { - RemoteAvatarFetch::dispatch($profile); - } - $profile->last_fetched_at = now(); - $profile->save(); + self::handleProfileAvatar($profile); return $profile; } - public static function profileFetch($url) + /** + * Validate profile data from ActivityPub + */ + public static function isValidProfileData(?array $res, string $url): bool + { + if (! $res || ! isset($res['id']) || ! isset($res['inbox'])) { + return false; + } + + if (! self::validateUrl($res['inbox']) || ! self::validateUrl($res['id'])) { + return false; + } + + $urlDomain = parse_url($url, PHP_URL_HOST); + $domain = parse_url($res['id'], PHP_URL_HOST); + + return strtolower($urlDomain) === strtolower($domain); + } + + /** + * Extract username from profile data + */ + public static function extractUsername(array $res): ?string + { + $username = $res['preferredUsername'] ?? $res['nickname'] ?? null; + + if (! $username || ! ctype_alnum(str_replace(['_', '.', '-'], '', $username))) { + return null; + } + + return Purify::clean($username); + } + + /** + * Check if profile is banned + */ + public static function isProfileBanned(string $profileUrl): bool + { + return ModeratedProfile::whereProfileUrl($profileUrl) + ->whereIsBanned(true) + ->exists(); + } + + /** + * Get or create federation instance + */ + public static function getOrCreateInstance(string $domain): Instance + { + $instance = Instance::updateOrCreate(['domain' => $domain]); + + if ($instance->wasRecentlyCreated) { + \App\Jobs\InstancePipeline\FetchNodeinfoPipeline::dispatch($instance) + ->onQueue('low'); + } + + return $instance; + } + + /** + * Handle moved profile references + */ + public static function handleMovedTo(array $res): ?int + { + if (! isset($res['movedTo']) || ! self::validateUrl($res['movedTo'])) { + return null; + } + + $movedTo = self::profileUpdateOrCreate($res['movedTo'], true); + + return $movedTo?->id; + } + + /** + * Build profile data array for database + */ + public static function buildProfileData(array $res, string $webfinger, ?int $movedToPid): array + { + return [ + 'webfinger' => Purify::clean($webfinger), + 'key_id' => $res['publicKey']['id'], + 'remote_url' => $res['id'], + 'name' => isset($res['name']) ? Purify::clean($res['name']) : 'user', + 'bio' => isset($res['summary']) ? Purify::clean($res['summary']) : null, + 'sharedInbox' => $res['endpoints']['sharedInbox'] ?? null, + 'inbox_url' => $res['inbox'], + 'outbox_url' => $res['outbox'] ?? null, + 'public_key' => $res['publicKey']['publicKeyPem'], + 'indexable' => $res['indexable'] ?? false, + 'moved_to_profile_id' => $movedToPid, + ]; + } + + /** + * Handle profile avatar updates + */ + public static function handleProfileAvatar(Profile $profile): void + { + if (! $profile->last_fetched_at || + $profile->last_fetched_at->lt(now()->subMonths(3)) + ) { + RemoteAvatarFetch::dispatch($profile); + } + + $profile->last_fetched_at = now(); + $profile->save(); + } + + public static function profileFetch($url): ?Profile { return self::profileFirstOrNew($url); } diff --git a/app/Util/ActivityPub/HttpSignature.php b/app/Util/ActivityPub/HttpSignature.php index e6834aaef..20071932b 100644 --- a/app/Util/ActivityPub/HttpSignature.php +++ b/app/Util/ActivityPub/HttpSignature.php @@ -71,9 +71,14 @@ class HttpSignature public static function instanceActorSign($url, $body = false, $addlHeaders = [], $method = 'post') { $keyId = config('app.url').'/i/actor#main-key'; - $privateKey = Cache::rememberForever(InstanceActor::PKI_PRIVATE, function () { - return InstanceActor::first()->private_key; - }); + if(config_cache('database.default') === 'mysql') { + $privateKey = Cache::rememberForever(InstanceActor::PKI_PRIVATE, function () { + return InstanceActor::first()->private_key; + }); + } else { + $privateKey = InstanceActor::first()?->private_key; + } + abort_if(!$privateKey || empty($privateKey), 400, 'Missing instance actor key, please run php artisan instance:actor'); if ($body) { $digest = self::_digest($body); } diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index dd9b1578b..e98b48c49 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -417,8 +417,8 @@ class Inbox return; } - $msg = $activity['content']; - $msgText = strip_tags($activity['content']); + $msg = Purify::clean($activity['content']); + $msgText = strip_tags($msg); if (Str::startsWith($msgText, '@'.$profile->username)) { $len = strlen('@'.$profile->username); @@ -438,7 +438,6 @@ class Inbox $status = new Status; $status->profile_id = $actor->id; $status->caption = $msgText; - $status->rendered = $msg; $status->visibility = 'direct'; $status->scope = 'direct'; $status->url = $activity['id']; @@ -1081,7 +1080,6 @@ class Inbox $status->uri = $url; $status->object_url = $url; $status->caption = $text; - $status->rendered = $text; $status->scope = 'direct'; $status->visibility = 'direct'; $status->in_reply_to_profile_id = $story->profile_id; @@ -1199,7 +1197,6 @@ class Inbox $status->profile_id = $actorProfile->id; $status->type = 'story:reply'; $status->caption = $text; - $status->rendered = $text; $status->url = $url; $status->uri = $url; $status->object_url = $url; diff --git a/composer.json b/composer.json index 26b975f41..7d3320ba6 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "laravel/helpers": "^1.1", "laravel/horizon": "^5.0", "laravel/passport": "^12.0", + "laravel/pulse": "^1.3", "laravel/tinker": "^2.9", "laravel/ui": "^4.2", "league/flysystem-aws-s3-v3": "^3.0", diff --git a/composer.lock b/composer.lock index 8819e991a..79aaa3a6f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0035325cb0240e92fc378e49f76447bd", + "content-hash": "3bb2ed96bc8ff080f3415b9bcf6ac307", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.325.5", + "version": "3.336.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "195d003c902a741de53008c839cbcebddbe1f326" + "reference": "954bfdfc048840ca34afe2a2e1cbcff6681989c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/195d003c902a741de53008c839cbcebddbe1f326", - "reference": "195d003c902a741de53008c839cbcebddbe1f326", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/954bfdfc048840ca34afe2a2e1cbcff6681989c4", + "reference": "954bfdfc048840ca34afe2a2e1cbcff6681989c4", "shasum": "" }, "require": { @@ -100,8 +100,8 @@ "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "sebastian/comparator": "^1.2.3 || ^4.0", "yoast/phpunit-polyfills": "^1.0" }, @@ -154,9 +154,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.325.5" + "source": "https://github.com/aws/aws-sdk-php/tree/3.336.2" }, - "time": "2024-11-08T19:12:57+00:00" + "time": "2024-12-20T19:05:10+00:00" }, { "name": "bacon/bacon-qr-code", @@ -294,12 +294,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Buzz\\LaravelHCaptcha\\CaptchaServiceProvider" - ], "aliases": { "Captcha": "Buzz\\LaravelHCaptcha\\CaptchaFacade" - } + }, + "providers": [ + "Buzz\\LaravelHCaptcha\\CaptchaServiceProvider" + ] } }, "autoload": { @@ -808,29 +808,27 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -838,7 +836,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -849,9 +847,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/event-manager", @@ -1112,6 +1110,62 @@ ], "time": "2024-02-05T11:56:58+00:00" }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/b784cbde727cf806721451dde40eff4fec3bbe86", + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.1" + }, + "time": "2024-10-21T18:21:57+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.4.0", @@ -1430,16 +1484,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -1487,9 +1541,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "fruitcake/php-cors", @@ -2065,16 +2119,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], "aliases": { "Image": "Intervention\\Image\\Facades\\Image" - } + }, + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.4-dev" } }, "autoload": { @@ -2121,20 +2175,20 @@ }, { "name": "jaybizzle/crawler-detect", - "version": "v1.2.121", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f" + "reference": "be155e11613fa618aa18aee438955588d1092a47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/40ecda6322d4163fe2c6e1dd47c574f580b8487f", - "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/be155e11613fa618aa18aee438955588d1092a47", + "reference": "be155e11613fa618aa18aee438955588d1092a47", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.1.0" }, "require-dev": { "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" @@ -2167,9 +2221,9 @@ ], "support": { "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.121" + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.3.0" }, - "time": "2024-10-20T21:42:39+00:00" + "time": "2024-11-25T19:38:36+00:00" }, { "name": "jenssegers/agent", @@ -2378,23 +2432,23 @@ }, { "name": "laravel/framework", - "version": "v11.30.0", + "version": "v11.36.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "dff716442d9c229d716be82ccc9a7de52eb97193" + "reference": "df06f5163f4550641fdf349ebc04916a61135a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/dff716442d9c229d716be82ccc9a7de52eb97193", - "reference": "dff716442d9c229d716be82ccc9a7de52eb97193", + "url": "https://api.github.com/repos/laravel/framework/zipball/df06f5163f4550641fdf349ebc04916a61135a64", + "reference": "df06f5163f4550641fdf349ebc04916a61135a64", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -2404,35 +2458,37 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.6", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { "mockery/mockery": "1.6.8", @@ -2482,29 +2538,32 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.6", - "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.5", - "pda/pheanstalk": "^5.0", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", + "php-http/discovery": "^1.15", "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", @@ -2518,16 +2577,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", @@ -2546,6 +2605,7 @@ }, "autoload": { "files": [ + "src/Illuminate/Collections/functions.php", "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", @@ -2583,20 +2643,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-30T15:00:34+00:00" + "time": "2024-12-17T22:32:08+00:00" }, { "name": "laravel/helpers", - "version": "v1.7.0", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346" + "reference": "f28907033d7edf8a0525cfb781ab30ce6d531c35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/6caaa242a23bc39b4e3cf57304b5409260a7a346", - "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346", + "url": "https://api.github.com/repos/laravel/helpers/zipball/f28907033d7edf8a0525cfb781ab30ce6d531c35", + "reference": "f28907033d7edf8a0525cfb781ab30ce6d531c35", "shasum": "" }, "require": { @@ -2638,22 +2698,22 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.7.0" + "source": "https://github.com/laravel/helpers/tree/v1.7.1" }, - "time": "2023-11-30T14:09:05+00:00" + "time": "2024-11-26T14:56:25+00:00" }, { "name": "laravel/horizon", - "version": "v5.29.2", + "version": "v5.30.1", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "d9c39ce4e9050b33a2ff9d2cee21646a18d4cc92" + "reference": "77177646679ef2f2acf71d4d4b16036d18002040" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/d9c39ce4e9050b33a2ff9d2cee21646a18d4cc92", - "reference": "d9c39ce4e9050b33a2ff9d2cee21646a18d4cc92", + "url": "https://api.github.com/repos/laravel/horizon/zipball/77177646679ef2f2acf71d4d4b16036d18002040", + "reference": "77177646679ef2f2acf71d4d4b16036d18002040", "shasum": "" }, "require": { @@ -2684,16 +2744,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - }, "laravel": { - "providers": [ - "Laravel\\Horizon\\HorizonServiceProvider" - ], "aliases": { "Horizon": "Laravel\\Horizon\\Horizon" - } + }, + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "5.x-dev" } }, "autoload": { @@ -2718,22 +2778,22 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.29.2" + "source": "https://github.com/laravel/horizon/tree/v5.30.1" }, - "time": "2024-10-16T21:36:57+00:00" + "time": "2024-12-13T14:08:51+00:00" }, { "name": "laravel/passport", - "version": "v12.3.0", + "version": "v12.3.1", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "ca63a86697a4fa091c7dcabe88ebba91d97c785d" + "reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/ca63a86697a4fa091c7dcabe88ebba91d97c785d", - "reference": "ca63a86697a4fa091c7dcabe88ebba91d97c785d", + "url": "https://api.github.com/repos/laravel/passport/zipball/0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c", + "reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c", "shasum": "" }, "require": { @@ -2796,20 +2856,20 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2024-08-05T13:44:51+00:00" + "time": "2024-11-11T20:15:28+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.1", + "version": "v0.3.2", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "0f3848a445562dac376b27968f753c65e7e1036e" + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/0f3848a445562dac376b27968f753c65e7e1036e", - "reference": "0f3848a445562dac376b27968f753c65e7e1036e", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", "shasum": "" }, "require": { @@ -2825,7 +2885,7 @@ "require-dev": { "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", + "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, @@ -2853,38 +2913,125 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.1" + "source": "https://github.com/laravel/prompts/tree/v0.3.2" }, - "time": "2024-10-09T19:42:26+00:00" + "time": "2024-11-12T14:59:47+00:00" }, { - "name": "laravel/serializable-closure", - "version": "v1.3.5", + "name": "laravel/pulse", + "version": "v1.3.2", "source": { "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c" + "url": "https://github.com/laravel/pulse.git", + "reference": "f0bf3959faa89c05fa211632b6d2665131b017fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", + "url": "https://api.github.com/repos/laravel/pulse/zipball/f0bf3959faa89c05fa211632b6d2665131b017fc", + "reference": "f0bf3959faa89c05fa211632b6d2665131b017fc", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "doctrine/sql-formatter": "^1.4.1", + "guzzlehttp/promises": "^1.0|^2.0", + "illuminate/auth": "^10.48.4|^11.0.8", + "illuminate/cache": "^10.48.4|^11.0.8", + "illuminate/config": "^10.48.4|^11.0.8", + "illuminate/console": "^10.48.4|^11.0.8", + "illuminate/contracts": "^10.48.4|^11.0.8", + "illuminate/database": "^10.48.4|^11.0.8", + "illuminate/events": "^10.48.4|^11.0.8", + "illuminate/http": "^10.48.4|^11.0.8", + "illuminate/queue": "^10.48.4|^11.0.8", + "illuminate/redis": "^10.48.4|^11.0.8", + "illuminate/routing": "^10.48.4|^11.0.8", + "illuminate/support": "^10.48.4|^11.0.8", + "illuminate/view": "^10.48.4|^11.0.8", + "livewire/livewire": "^3.4.9", + "nesbot/carbon": "^2.67|^3.0", + "php": "^8.1", + "symfony/console": "^6.0|^7.0" + }, + "conflict": { + "nunomaduro/collision": "<7.7.0" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "guzzlehttp/guzzle": "^7.7", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^8.23.1|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.2", + "phpstan/phpstan": "^1.11", + "predis/predis": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Pulse": "Laravel\\Pulse\\Facades\\Pulse" + }, + "providers": [ + "Laravel\\Pulse\\PulseServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pulse\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.", + "homepage": "https://github.com/laravel/pulse", + "keywords": [ + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/pulse/issues", + "source": "https://github.com/laravel/pulse" + }, + "time": "2024-12-12T18:17:53+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2916,7 +3063,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-09-23T13:33:08+00:00" + "time": "2024-12-16T15:26:28+00:00" }, { "name": "laravel/tinker", @@ -2986,16 +3133,16 @@ }, { "name": "laravel/ui", - "version": "v4.5.2", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "c75396f63268c95b053c8e4814eb70e0875e9628" + "reference": "a34609b15ae0c0512a0cf47a21695a2729cb7f93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/c75396f63268c95b053c8e4814eb70e0875e9628", - "reference": "c75396f63268c95b053c8e4814eb70e0875e9628", + "url": "https://api.github.com/repos/laravel/ui/zipball/a34609b15ae0c0512a0cf47a21695a2729cb7f93", + "reference": "a34609b15ae0c0512a0cf47a21695a2729cb7f93", "shasum": "" }, "require": { @@ -3043,9 +3190,9 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.5.2" + "source": "https://github.com/laravel/ui/tree/v4.6.0" }, - "time": "2024-05-08T18:07:10+00:00" + "time": "2024-11-21T15:06:41+00:00" }, { "name": "lcobucci/clock", @@ -3186,16 +3333,16 @@ }, { "name": "league/commonmark", - "version": "2.5.3", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + "reference": "d150f911e0079e90ae3c106734c93137c184f932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d150f911e0079e90ae3c106734c93137c184f932", + "reference": "d150f911e0079e90ae3c106734c93137c184f932", "shasum": "" }, "require": { @@ -3220,8 +3367,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -3231,7 +3379,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -3288,7 +3436,7 @@ "type": "tidelift" } ], - "time": "2024-08-16T11:46:16+00:00" + "time": "2024-12-07T15:34:16+00:00" }, { "name": "league/config", @@ -3738,16 +3886,16 @@ }, { "name": "league/oauth2-server", - "version": "8.5.4", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "ab7714d073844497fd222d5d0a217629089936bc" + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/ab7714d073844497fd222d5d0a217629089936bc", - "reference": "ab7714d073844497fd222d5d0a217629089936bc", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/cc8778350f905667e796b3c2364a9d3bd7a73518", + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518", "shasum": "" }, "require": { @@ -3814,7 +3962,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.4" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.5" }, "funding": [ { @@ -3822,24 +3970,24 @@ "type": "github" } ], - "time": "2023-08-25T22:35:12+00:00" + "time": "2024-12-20T23:06:10+00:00" }, { "name": "league/uri", - "version": "7.4.1", + "version": "7.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + "reference": "81fb5145d2644324614cc532b28efd0215bda430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.3", + "league/uri-interfaces": "^7.5", "php": "^8.1" }, "conflict": { @@ -3904,7 +4052,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" + "source": "https://github.com/thephpleague/uri/tree/7.5.1" }, "funding": [ { @@ -3912,20 +4060,20 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:40:02+00:00" }, { "name": "league/uri-interfaces", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", "shasum": "" }, "require": { @@ -3988,7 +4136,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" }, "funding": [ { @@ -3996,7 +4144,83 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:18:47+00:00" + }, + { + "name": "livewire/livewire", + "version": "v3.5.18", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "62f0fa6b340a467c25baa590a567d9a134b357da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/62f0fa6b340a467c25baa590a567d9a134b357da", + "reference": "62f0fa6b340a467c25baa590a567d9a134b357da", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Livewire": "Livewire\\Livewire" + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.18" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-12-23T15:05:02+00:00" }, { "name": "minishlink/web-push", @@ -4129,16 +4353,16 @@ }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { @@ -4158,12 +4382,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -4214,7 +4440,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -4226,7 +4452,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "mtdowling/jmespath.php", @@ -4337,10 +4563,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -4350,6 +4572,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -4608,31 +4834,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.5" + "symfony/console": "^7.1.8" }, "require-dev": { - "illuminate/console": "^11.28.0", - "laravel/pint": "^1.18.1", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", "mockery/mockery": "^1.6.12", "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.5", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4675,7 +4901,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -4691,7 +4917,7 @@ "type": "github" } ], - "time": "2024-10-15T16:15:16+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "nyholm/psr7", @@ -4981,21 +5207,21 @@ }, { "name": "pbmedia/laravel-ffmpeg", - "version": "8.5.0", + "version": "8.6.0", "source": { "type": "git", "url": "https://github.com/protonemedia/laravel-ffmpeg.git", - "reference": "44f260839e68ce8c785d502f99b998729cdb5321" + "reference": "f14efc53e8a52b53a237a9910b32e795dafcf8bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/44f260839e68ce8c785d502f99b998729cdb5321", - "reference": "44f260839e68ce8c785d502f99b998729cdb5321", + "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/f14efc53e8a52b53a237a9910b32e795dafcf8bc", + "reference": "f14efc53e8a52b53a237a9910b32e795dafcf8bc", "shasum": "" }, "require": { "illuminate/contracts": "^10.0|^11.0", - "php": "^8.1|^8.2|^8.3", + "php": "^8.1|^8.2|^8.3|^8.4", "php-ffmpeg/php-ffmpeg": "^1.2", "ramsey/collection": "^2.0" }, @@ -5011,12 +5237,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "ProtoneMedia\\LaravelFFMpeg\\Support\\ServiceProvider" - ], "aliases": { "FFMpeg": "ProtoneMedia\\LaravelFFMpeg\\Support\\FFMpeg" - } + }, + "providers": [ + "ProtoneMedia\\LaravelFFMpeg\\Support\\ServiceProvider" + ] } }, "autoload": { @@ -5047,7 +5273,7 @@ ], "support": { "issues": "https://github.com/protonemedia/laravel-ffmpeg/issues", - "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/8.5.0" + "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/8.6.0" }, "funding": [ { @@ -5055,25 +5281,25 @@ "type": "github" } ], - "time": "2024-03-12T11:20:32+00:00" + "time": "2024-11-12T16:12:23+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", - "reference": "785a5ba05dd88b3b8146f85f18476b259b23917c" + "reference": "5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/785a5ba05dd88b3b8146f85f18476b259b23917c", - "reference": "785a5ba05dd88b3b8146f85f18476b259b23917c", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5", + "reference": "5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5", "shasum": "" }, "require": { "evenement/evenement": "^3.0", - "php": "^8.0 || ^8.1 || ^8.2 || ^8.3", + "php": "^8.0 || ^8.1 || ^8.2 || ^8.3 || ^8.4", "psr/log": "^1.0 || ^2.0 || ^3.0", "spatie/temporary-directory": "^2.0", "symfony/cache": "^5.4 || ^6.0 || ^7.0", @@ -5081,7 +5307,7 @@ }, "require-dev": { "mockery/mockery": "^1.5", - "phpunit/phpunit": "^9.5.10" + "phpunit/phpunit": "^9.5.10 || ^10.0" }, "suggest": { "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" @@ -5142,9 +5368,9 @@ ], "support": { "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues", - "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.2.0" + "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.3.0" }, - "time": "2024-01-02T10:37:01+00:00" + "time": "2024-11-12T15:39:52+00:00" }, { "name": "phpoption/phpoption", @@ -5223,16 +5449,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.47", + "version": "2.0.48", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb" + "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b7d7d90ee7df7f33a664b4aea32d50a305d35adb", - "reference": "b7d7d90ee7df7f33a664b4aea32d50a305d35adb", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61", + "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61", "shasum": "" }, "require": { @@ -5313,7 +5539,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.47" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48" }, "funding": [ { @@ -5329,7 +5555,7 @@ "type": "tidelift" } ], - "time": "2024-02-26T04:55:38+00:00" + "time": "2024-12-14T21:03:54+00:00" }, { "name": "pixelfed/fractal", @@ -5511,16 +5737,16 @@ }, { "name": "predis/predis", - "version": "v2.2.2", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9", "shasum": "" }, "require": { @@ -5529,7 +5755,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.3", "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" + "phpunit/phpunit": "^8.0 || ^9.4" }, "suggest": { "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" @@ -5560,7 +5786,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.2" + "source": "https://github.com/predis/predis/tree/v2.3.0" }, "funding": [ { @@ -5568,7 +5794,7 @@ "type": "github" } ], - "time": "2023-09-13T16:42:03+00:00" + "time": "2024-11-21T20:00:02+00:00" }, { "name": "psr/cache", @@ -6033,16 +6259,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "shasum": "" }, "require": { @@ -6069,12 +6295,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -6106,9 +6332,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2024-12-10T01:58:33+00:00" }, { "name": "pusher/pusher-php-server", @@ -6455,16 +6681,16 @@ }, { "name": "spatie/db-dumper", - "version": "3.7.0", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/spatie/db-dumper.git", - "reference": "22553ab8c34a9bb70645cb9bc2d9f236f3135705" + "reference": "55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/22553ab8c34a9bb70645cb9bc2d9f236f3135705", - "reference": "22553ab8c34a9bb70645cb9bc2d9f236f3135705", + "url": "https://api.github.com/repos/spatie/db-dumper/zipball/55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016", + "reference": "55d4d6710e1ab18c1e7ce2b22b8ad4bea2a30016", "shasum": "" }, "require": { @@ -6502,7 +6728,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/db-dumper/tree/3.7.0" + "source": "https://github.com/spatie/db-dumper/tree/3.7.1" }, "funding": [ { @@ -6514,7 +6740,7 @@ "type": "github" } ], - "time": "2024-09-23T08:58:35+00:00" + "time": "2024-11-18T14:54:31+00:00" }, { "name": "spatie/image-optimizer", @@ -6740,16 +6966,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.5", + "version": "1.17.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" + "reference": "9ab30fd24f677e5aa370ea4cf6b41c517d16cf85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/9ab30fd24f677e5aa370ea4cf6b41c517d16cf85", + "reference": "9ab30fd24f677e5aa370ea4cf6b41c517d16cf85", "shasum": "" }, "require": { @@ -6758,10 +6984,10 @@ }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0", - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^9.5.24", - "spatie/pest-plugin-test-time": "^1.1" + "orchestra/testbench": "^7.7|^8.0|^9.0", + "pestphp/pest": "^1.22|^2", + "phpunit/phpunit": "^9.5.24|^10.5", + "spatie/pest-plugin-test-time": "^1.1|^2.2" }, "type": "library", "autoload": { @@ -6788,7 +7014,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.17.0" }, "funding": [ { @@ -6796,7 +7022,7 @@ "type": "github" } ], - "time": "2024-08-27T18:56:10+00:00" + "time": "2024-12-09T16:29:14+00:00" }, { "name": "spatie/laravel-signal-aware-command", @@ -6830,12 +7056,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider" - ], "aliases": { "Signal": "Spatie\\SignalAwareCommand\\Facades\\Signal" - } + }, + "providers": [ + "Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider" + ] } }, "autoload": { @@ -7067,16 +7293,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928" + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/23b61c9592ee72233c31625f0ae805dd1571e928", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928", + "url": "https://api.github.com/repos/symfony/cache/zipball/e7e983596b744c4539f31e79b0350a6cf5878a20", + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20", "shasum": "" }, "require": { @@ -7104,6 +7330,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -7144,7 +7371,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.7" + "source": "https://github.com/symfony/cache/tree/v7.2.1" }, "funding": [ { @@ -7160,20 +7387,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:08:50+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -7220,7 +7447,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -7236,20 +7463,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/clock", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { @@ -7294,7 +7521,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.6" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -7310,20 +7537,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3284aafcac338b6e86fd955ee4d794cbe434151a", - "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -7387,7 +7614,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.7" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -7403,20 +7630,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -7452,7 +7679,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -7468,20 +7695,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -7519,7 +7746,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -7535,20 +7762,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "6150b89186573046167796fa5f3f76601d5145f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", + "reference": "6150b89186573046167796fa5f3f76601d5145f8", "shasum": "" }, "require": { @@ -7594,7 +7821,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.1" }, "funding": [ { @@ -7610,20 +7837,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -7674,7 +7901,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -7690,20 +7917,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -7750,7 +7977,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -7766,20 +7993,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { @@ -7814,7 +8041,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -7830,27 +8057,27 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.14", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "05d88cbd816ad6e0202edd9a9963cb9d615b8826" + "reference": "60a113666fa67e598abace38e5f46a0954d8833d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/05d88cbd816ad6e0202edd9a9963cb9d615b8826", - "reference": "05d88cbd816ad6e0202edd9a9963cb9d615b8826", + "url": "https://api.github.com/repos/symfony/http-client/zipball/60a113666fa67e598abace38e5f46a0954d8833d", + "reference": "60a113666fa67e598abace38e5f46a0954d8833d", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -7907,7 +8134,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.14" + "source": "https://github.com/symfony/http-client/tree/v6.4.16" }, "funding": [ { @@ -7923,20 +8150,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2024-11-27T11:52:33+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.0", + "version": "v3.5.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" + "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645", + "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645", "shasum": "" }, "require": { @@ -7944,12 +8171,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -7985,7 +8212,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2" }, "funding": [ { @@ -8001,35 +8228,36 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-12-07T08:49:48+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5183b61657807099d98f3367bcccb850238b17a9" + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5183b61657807099d98f3367bcccb850238b17a9", - "reference": "5183b61657807099d98f3367bcccb850238b17a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -8062,7 +8290,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.7" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -8078,20 +8306,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:02:46+00:00" + "time": "2024-11-13T18:58:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "7f137cda31fd41e422edcdc01915f2c095b84399" + "reference": "d8ae58eecae44c8e66833e76cc50a4ad3c002d97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7f137cda31fd41e422edcdc01915f2c095b84399", - "reference": "7f137cda31fd41e422edcdc01915f2c095b84399", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d8ae58eecae44c8e66833e76cc50a4ad3c002d97", + "reference": "d8ae58eecae44c8e66833e76cc50a4ad3c002d97", "shasum": "" }, "require": { @@ -8120,7 +8348,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -8148,7 +8376,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -8176,7 +8404,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.7" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.1" }, "funding": [ { @@ -8192,20 +8420,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:54:34+00:00" + "time": "2024-12-11T12:09:10+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { @@ -8214,7 +8442,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -8256,7 +8484,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -8272,7 +8500,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mailgun-mailer", @@ -8345,16 +8573,16 @@ }, { "name": "symfony/mime", - "version": "v7.1.6", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", "shasum": "" }, "require": { @@ -8409,7 +8637,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.6" + "source": "https://github.com/symfony/mime/tree/v7.2.1" }, "funding": [ { @@ -8425,7 +8653,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8453,8 +8681,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8529,8 +8757,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8608,8 +8836,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8690,8 +8918,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8774,8 +9002,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8848,8 +9076,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -8928,8 +9156,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9010,8 +9238,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -9065,16 +9293,16 @@ }, { "name": "symfony/process", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "9b8a40b7289767aa7117e957573c2a535efe6585" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9b8a40b7289767aa7117e957573c2a535efe6585", - "reference": "9b8a40b7289767aa7117e957573c2a535efe6585", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -9106,7 +9334,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.7" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -9122,20 +9350,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:25:12+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6" + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/f16471bb19f6685b9ccf0a2c03c213840ae68cd6", - "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", "shasum": "" }, "require": { @@ -9189,7 +9417,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.6" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" }, "funding": [ { @@ -9205,20 +9433,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-26T08:57:56+00:00" }, { "name": "symfony/routing", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -9270,7 +9498,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.6" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -9286,20 +9514,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -9353,7 +9581,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -9369,20 +9597,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/61b72d66bf96c360a727ae6232df5ac83c71f626", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -9440,7 +9668,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.6" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -9456,24 +9684,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -9534,7 +9763,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -9550,20 +9779,20 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2024-11-12T20:47:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -9612,7 +9841,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -9628,20 +9857,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -9686,7 +9915,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.6" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -9702,20 +9931,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f6ea51f669760cacd7464bf7eaa0be87b8072db1" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f6ea51f669760cacd7464bf7eaa0be87b8072db1", - "reference": "f6ea51f669760cacd7464bf7eaa0be87b8072db1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -9731,7 +9960,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -9769,7 +9998,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.7" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -9785,20 +10014,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "90173ef89c40e7c8c616653241048705f84130ef" + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", - "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a6a89f95a46af0f142874c9d650a6358d13070d", + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d", "shasum": "" }, "require": { @@ -9845,7 +10074,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { @@ -9861,7 +10090,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-18T07:58:17+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10002,16 +10231,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -10036,7 +10265,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -10048,7 +10277,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -10072,7 +10301,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "web-token/jwt-core", @@ -10515,16 +10744,16 @@ "packages-dev": [ { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -10572,9 +10801,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "filp/whoops", @@ -10700,16 +10929,16 @@ }, { "name": "laravel/pint", - "version": "v1.18.1", + "version": "v1.18.3", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", "shasum": "" }, "require": { @@ -10720,13 +10949,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", "laravel-zero/framework": "^10.4.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" }, "bin": [ "builds/pint" @@ -10762,20 +10991,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-09-24T17:22:50+00:00" + "time": "2024-11-26T15:34:00+00:00" }, { "name": "laravel/telescope", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "749369e996611d803e7c1b57929b482dd676008d" + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/749369e996611d803e7c1b57929b482dd676008d", - "reference": "749369e996611d803e7c1b57929b482dd676008d", + "url": "https://api.github.com/repos/laravel/telescope/zipball/7ee46fbea8e3b01108575c8edf7377abddfe8bb9", + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9", "shasum": "" }, "require": { @@ -10829,9 +11058,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v5.2.4" + "source": "https://github.com/laravel/telescope/tree/v5.2.6" }, - "time": "2024-10-29T15:35:13+00:00" + "time": "2024-11-25T20:34:58+00:00" }, { "name": "mockery/mockery", @@ -11193,16 +11422,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.7", + "version": "11.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca" + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7f08030e8811582cc459871d28d6f5a1a4d35ca", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", "shasum": "" }, "require": { @@ -11221,7 +11450,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.4.1" + "phpunit/phpunit": "^11.5.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -11259,7 +11488,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" }, "funding": [ { @@ -11267,7 +11496,7 @@ "type": "github" } ], - "time": "2024-10-09T06:21:38+00:00" + "time": "2024-12-11T12:34:27+00:00" }, { "name": "phpunit/php-file-iterator", @@ -11516,16 +11745,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.4.3", + "version": "11.5.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76" + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e8e8ed1854de5d36c088ec1833beae40d2dedd76", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2b94d4f2450b9869fa64a46fd8a6a41997aef56a", + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a", "shasum": "" }, "require": { @@ -11535,7 +11764,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", @@ -11546,14 +11775,15 @@ "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.1.1", + "sebastian/comparator": "^6.2.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.1.3", + "sebastian/exporter": "^6.3.0", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.0", - "sebastian/version": "^5.0.2" + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -11564,7 +11794,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.4-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -11596,7 +11826,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.1" }, "funding": [ { @@ -11612,7 +11842,7 @@ "type": "tidelift" } ], - "time": "2024-10-28T13:07:50+00:00" + "time": "2024-12-11T10:52:48+00:00" }, { "name": "sebastian/cli-parser", @@ -11673,23 +11903,23 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268" + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { @@ -11718,7 +11948,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" }, "funding": [ { @@ -11726,7 +11956,7 @@ "type": "github" } ], - "time": "2024-07-03T04:44:28+00:00" + "time": "2024-12-12T09:59:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -12052,16 +12282,16 @@ }, { "name": "sebastian/exporter", - "version": "6.1.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { @@ -12070,7 +12300,7 @@ "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.2" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -12118,7 +12348,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -12126,7 +12356,7 @@ "type": "github" } ], - "time": "2024-07-03T04:56:19+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", @@ -12537,6 +12767,58 @@ ], "time": "2024-10-09T05:16:32+00:00" }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.3", @@ -12590,7 +12872,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -12603,6 +12885,6 @@ "ext-mbstring": "*", "ext-openssl": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/config/cache.php b/config/cache.php index 88129848e..db2925e13 100644 --- a/config/cache.php +++ b/config/cache.php @@ -85,11 +85,29 @@ return [ 'database' => env('REDIS_DATABASE', 0), ], + 'session' => [ + 'scheme' => env('REDIS_SCHEME', 'tcp'), + 'path' => env('REDIS_PATH'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DATABASE_SESSION', 1), + ], + + 'pulse' => [ + 'scheme' => env('REDIS_SCHEME', 'tcp'), + 'path' => env('REDIS_PATH'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DATABASE_PULSE', 2), + ], + ], 'redis:session' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => 'session', 'prefix' => 'pf_session', ], diff --git a/config/database.php b/config/database.php index 92d6a2ba2..2a3cf3393 100644 --- a/config/database.php +++ b/config/database.php @@ -143,6 +143,24 @@ return [ 'database' => env('REDIS_DATABASE', 0), ], + 'session' => [ + 'scheme' => env('REDIS_SCHEME', 'tcp'), + 'path' => env('REDIS_PATH'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DATABASE_SESSION', 1), + ], + + 'pulse' => [ + 'scheme' => env('REDIS_SCHEME', 'tcp'), + 'path' => env('REDIS_PATH'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DATABASE_PULSE', 2), + ], + ], 'dbal' => [ diff --git a/config/media.php b/config/media.php index 46c1719db..5e3b32ae6 100644 --- a/config/media.php +++ b/config/media.php @@ -24,6 +24,10 @@ return [ ], ], + 'image_optimize' => [ + 'catch_unoptimized_media_hour_limit' => env('PF_CATCHUNOPTIMIZEDMEDIA', false), + ], + 'hls' => [ /* |-------------------------------------------------------------------------- diff --git a/config/pulse.php b/config/pulse.php new file mode 100644 index 000000000..7341ca7f0 --- /dev/null +++ b/config/pulse.php @@ -0,0 +1,236 @@ + env('PULSE_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | Pulse Path + |-------------------------------------------------------------------------- + | + | This is the path which the Pulse dashboard will be accessible from. Feel + | free to change this path to anything you'd like. Note that this won't + | affect the path of the internal API that is never exposed to users. + | + */ + + 'path' => env('PULSE_PATH', 'pulse'), + + /* + |-------------------------------------------------------------------------- + | Pulse Master Switch + |-------------------------------------------------------------------------- + | + | This configuration option may be used to completely disable all Pulse + | data recorders regardless of their individual configurations. This + | provides a single option to quickly disable all Pulse recording. + | + */ + + 'enabled' => env('PULSE_ENABLED', false), + + /* + |-------------------------------------------------------------------------- + | Pulse Storage Driver + |-------------------------------------------------------------------------- + | + | This configuration option determines which storage driver will be used + | while storing entries from Pulse's recorders. In addition, you also + | may provide any options to configure the selected storage driver. + | + */ + + 'storage' => [ + 'driver' => env('PULSE_STORAGE_DRIVER', 'database'), + + 'trim' => [ + 'keep' => env('PULSE_STORAGE_KEEP', '7 days'), + ], + + 'database' => [ + 'connection' => env('PULSE_DB_CONNECTION'), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Ingest Driver + |-------------------------------------------------------------------------- + | + | This configuration options determines the ingest driver that will be used + | to capture entries from Pulse's recorders. Ingest drivers are great to + | free up your request workers quickly by offloading the data storage. + | + */ + + 'ingest' => [ + 'driver' => env('PULSE_INGEST_DRIVER', 'storage'), + + 'buffer' => env('PULSE_INGEST_BUFFER', 5_000), + + 'trim' => [ + 'lottery' => [1, 1_000], + 'keep' => env('PULSE_INGEST_KEEP', '7 days'), + ], + + 'redis' => [ + 'connection' => env('PULSE_REDIS_CONNECTION'), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Cache Driver + |-------------------------------------------------------------------------- + | + | This configuration option determines the cache driver that will be used + | for various tasks, including caching dashboard results, establishing + | locks for events that should only occur on one server and signals. + | + */ + + 'cache' => env('PULSE_CACHE_DRIVER'), + + /* + |-------------------------------------------------------------------------- + | Pulse Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will be assigned to every Pulse route, giving you the + | chance to add your own middleware to this list or change any of the + | existing middleware. Of course, reasonable defaults are provided. + | + */ + + 'middleware' => [ + 'web', + Authorize::class, + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Recorders + |-------------------------------------------------------------------------- + | + | The following array lists the "recorders" that will be registered with + | Pulse, along with their configuration. Recorders gather application + | event data from requests and tasks to pass to your ingest driver. + | + */ + + 'recorders' => [ + Recorders\CacheInteractions::class => [ + 'enabled' => env('PULSE_CACHE_INTERACTIONS_ENABLED', true), + 'sample_rate' => env('PULSE_CACHE_INTERACTIONS_SAMPLE_RATE', 1), + 'ignore' => [ + ...Pulse::defaultVendorCacheKeys(), + ], + 'groups' => [ + '/^job-exceptions:.*/' => 'job-exceptions:*', + // '/:\d+/' => ':*', + ], + ], + + Recorders\Exceptions::class => [ + 'enabled' => env('PULSE_EXCEPTIONS_ENABLED', true), + 'sample_rate' => env('PULSE_EXCEPTIONS_SAMPLE_RATE', 1), + 'location' => env('PULSE_EXCEPTIONS_LOCATION', true), + 'ignore' => [ + // '/^Package\\\\Exceptions\\\\/', + ], + ], + + Recorders\Queues::class => [ + 'enabled' => env('PULSE_QUEUES_ENABLED', true), + 'sample_rate' => env('PULSE_QUEUES_SAMPLE_RATE', 1), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\Servers::class => [ + 'server_name' => env('PULSE_SERVER_NAME', gethostname()), + 'directories' => explode(':', env('PULSE_SERVER_DIRECTORIES', '/')), + ], + + Recorders\SlowJobs::class => [ + 'enabled' => env('PULSE_SLOW_JOBS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_JOBS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\SlowOutgoingRequests::class => [ + 'enabled' => env('PULSE_SLOW_OUTGOING_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_OUTGOING_REQUESTS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000), + 'ignore' => [ + // '#^http://127\.0\.0\.1:13714#', // Inertia SSR... + ], + 'groups' => [ + // '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*', + // '#^https?://([^/]*).*$#' => '\1', + // '#/\d+#' => '/*', + ], + ], + + Recorders\SlowQueries::class => [ + 'enabled' => env('PULSE_SLOW_QUERIES_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_QUERIES_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000), + 'location' => env('PULSE_SLOW_QUERIES_LOCATION', true), + 'max_query_length' => env('PULSE_SLOW_QUERIES_MAX_QUERY_LENGTH'), + 'ignore' => [ + '/(["`])pulse_[\w]+?\1/', // Pulse tables... + '/(["`])telescope_[\w]+?\1/', // Telescope tables... + ], + ], + + Recorders\SlowRequests::class => [ + 'enabled' => env('PULSE_SLOW_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_REQUESTS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000), + 'ignore' => [ + '#^/'.env('PULSE_PATH', 'pulse').'$#', // Pulse dashboard... + '#^/telescope#', // Telescope dashboard... + ], + ], + + Recorders\UserJobs::class => [ + 'enabled' => env('PULSE_USER_JOBS_ENABLED', true), + 'sample_rate' => env('PULSE_USER_JOBS_SAMPLE_RATE', 1), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\UserRequests::class => [ + 'enabled' => env('PULSE_USER_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_USER_REQUESTS_SAMPLE_RATE', 1), + 'ignore' => [ + '#^/'.env('PULSE_PATH', 'pulse').'$#', // Pulse dashboard... + '#^/telescope#', // Telescope dashboard... + ], + ], + ], +]; diff --git a/config/services.php b/config/services.php index 3f73b64aa..a1e56ac99 100644 --- a/config/services.php +++ b/config/services.php @@ -17,6 +17,8 @@ return [ 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', ], 'ses' => [ diff --git a/database/migrations/2018_09_30_051108_create_direct_messages_table.php b/database/migrations/2018_09_30_051108_create_direct_messages_table.php index 63b305f4d..97db01e3c 100644 --- a/database/migrations/2018_09_30_051108_create_direct_messages_table.php +++ b/database/migrations/2018_09_30_051108_create_direct_messages_table.php @@ -19,7 +19,7 @@ class CreateDirectMessagesTable extends Migration $table->bigInteger('from_id')->unsigned()->index(); $table->string('from_profile_ids')->nullable(); $table->boolean('group_message')->default(false); - $table->bigInteger('status_id')->unsigned()->integer(); + $table->bigInteger('status_id')->unsigned(); $table->unique(['to_id', 'from_id', 'status_id']); $table->timestamp('read_at')->nullable(); $table->timestamps(); diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php new file mode 100644 index 000000000..5d194e2c9 --- /dev/null +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -0,0 +1,84 @@ +shouldRun()) { + return; + } + + Schema::create('pulse_values', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('timestamp'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->mediumText('value'); + + $table->index('timestamp'); // For trimming... + $table->index('type'); // For fast lookups and purging... + $table->unique(['type', 'key_hash']); // For data integrity and upserts... + }); + + Schema::create('pulse_entries', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('timestamp'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->bigInteger('value')->nullable(); + + $table->index('timestamp'); // For trimming... + $table->index('type'); // For purging... + $table->index('key_hash'); // For mapping... + $table->index(['timestamp', 'type', 'key_hash', 'value']); // For aggregate queries... + }); + + Schema::create('pulse_aggregates', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('bucket'); + $table->unsignedMediumInteger('period'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->string('aggregate'); + $table->decimal('value', 20, 2); + $table->unsignedInteger('count')->nullable(); + + $table->unique(['bucket', 'period', 'type', 'aggregate', 'key_hash']); // Force "on duplicate update"... + $table->index(['period', 'bucket']); // For trimming... + $table->index('type'); // For purging... + $table->index(['period', 'type', 'aggregate', 'bucket']); // For aggregate queries... + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('pulse_values'); + Schema::dropIfExists('pulse_entries'); + Schema::dropIfExists('pulse_aggregates'); + } +}; diff --git a/database/migrations/2024_05_20_062706_update_group_posts_table.php b/database/migrations/2024_05_20_062706_update_group_posts_table.php index 99f272be9..828727395 100644 --- a/database/migrations/2024_05_20_062706_update_group_posts_table.php +++ b/database/migrations/2024_05_20_062706_update_group_posts_table.php @@ -2,6 +2,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; return new class extends Migration @@ -12,6 +13,9 @@ return new class extends Migration public function up(): void { Schema::table('group_posts', function (Blueprint $table) { + if (DB::getDriverName() === 'sqlite') { + $table->dropUnique(['status_id']); + } $table->dropColumn('status_id'); $table->dropColumn('reply_child_id'); $table->dropColumn('in_reply_to_id'); diff --git a/docker-compose.yml b/docker-compose.yml index 2a805eb7c..ea61e595e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: # # See: https://github.com/nginx-proxy/nginx-proxy/tree/main/docs proxy: - image: nginxproxy/nginx-proxy:1.4 + image: "nginxproxy/nginx-proxy:${DOCKER_PROXY_VERSION}" container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-proxy" restart: unless-stopped profiles: diff --git a/funding.json b/funding.json new file mode 100644 index 000000000..507d8441e --- /dev/null +++ b/funding.json @@ -0,0 +1,68 @@ +{ + "version": "v1.0.0", + "entity": { + "type": "individual", + "role": "owner", + "name": "Daniel Supernault", + "email": "danielsupernault@gmail.com", + "phone": "", + "description": "I'm the developer behind Pixelfed, an open-source, federated photo-sharing platform that prioritizes privacy, community, and creativity. With a passion for building ethical alternatives to mainstream social networks, I have championed decentralized technologies and empowered users to share their stories without compromising their digital autonomy. As the driving force behind Pixelfed, I combine innovative development with a thoughtful approach to user experience, fostering an online space that feels personal, authentic, and inclusive.", + "webpageUrl": { + "url": "https://github.com/pixelfed/pixelfed" + } + }, + "projects": [ + { + "guid": "pixelfed", + "name": "Pixelfed", + "description": "Pixelfed is a free, open-source photo-sharing platform designed to put users in control of their content. Built on the principles of decentralization, Pixelfed offers a refreshing alternative to traditional social media, prioritizing privacy, community, and ethical design. Whether you're an artist, photographer, or someone who loves sharing moments, Pixelfed lets you connect and create without intrusive ads, algorithms, or data exploitation. Fully federated and part of the Fediverse, Pixelfed empowers users to join or host their own instances while still connecting with a global network of creatives and communities. It's not just a platform—it's a movement toward a better, more user-centered internet.", + "webpageUrl": { + "url": "https://github.com/pixelfed/pixelfed" + }, + "repositoryUrl": { + "url": "https://github.com/pixelfed/pixelfed" + }, + "licenses": ["spdx:AGPL-3.0"], + "tags": ["activitypub", "fediverse", "laravel", "pixelfed"] + } + ], + "funding": { + "channels": [ + { + "guid": "github-sponsors", + "type": "payment-provider", + "address": "https://github.com/sponsors/dansup", + "description": "Sponsor me through Github." + }, + { + "guid": "paypal-sponsors", + "type": "payment-provider", + "address": "https://www.paypal.com/paypalme/dansup", + "description": "Sponsor me through Paypal." + } + ], + "plans": [ + { + "guid": "developer-time", + "status": "active", + "name": "Developer compensation", + "description": "This will cover the cost of one developer working part-time on the projects.", + "amount": 0, + "currency": "USD", + "frequency": "monthly", + "channels": ["github-sponsors", "paypal-sponsors"] + }, + { + "guid": "support-plan", + "status": "active", + "name": "Support plan", + "description": "Pay anything you wish/can to show your support for the projects.", + "amount": 0, + "currency": "USD", + "frequency": "one-time", + "channels": ["github-sponsors", "paypal-sponsors"] + } + ], + "history": [] + } +} diff --git a/package-lock.json b/package-lock.json index ec29866a7..2c64259da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "vue-loading-overlay": "^3.3.3", "vue-timeago": "^5.1.2", "vue-tribute": "^1.0.7", + "webgl-media-editor": "^0.0.1", "zuck.js": "^1.6.0" }, "devDependencies": { @@ -97,9 +98,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "engines": { "node": ">=6.9.0" } @@ -142,12 +143,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -167,18 +168,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", @@ -231,12 +220,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -255,9 +244,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -360,18 +349,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -434,11 +411,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -827,11 +804,10 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -958,13 +934,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1510,15 +1485,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1527,9 +1502,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -1909,9 +1884,9 @@ } }, "node_modules/@glidejs/glide": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@glidejs/glide/-/glide-3.6.2.tgz", - "integrity": "sha512-oXw7In0IZV69PC0PChQakY+yh+UnqIb5+zfVuEIzub6Kkfl1foo7TAhr2PZXPzihOG9YS57t8wvdzBFEZ0aPVA==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@glidejs/glide/-/glide-3.7.1.tgz", + "integrity": "sha512-8he0pZpLSqTesSFYiuWdhBmtdlYSPWxfPUCKtkkiX6ZmT8UdMdmoFPtJaOwLBXv4p2JiGxqbuPdiRGGo2e/htQ==" }, "node_modules/@hcaptcha/vue-hcaptcha": { "version": "1.3.0", @@ -1922,9 +1897,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2599,11 +2574,11 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/node-forge": { @@ -2947,9 +2922,9 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/@zip.js/zip.js": { - "version": "2.7.53", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.53.tgz", - "integrity": "sha512-G6Bl5wN9EXXVaTUIox71vIX5Z454zEBe+akKpV4m1tUboIctT5h7ID3QXCJd/Lfy2rSvmkTmZIucf1jGRR4f5A==", + "version": "2.7.54", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.54.tgz", + "integrity": "sha512-qMrJVg2hoEsZJjMJez9yI2+nZlBUxgYzGV3mqcb2B/6T1ihXp0fWBDYlVHlHquuorgNUQP5a8qSmX6HF5rFJNg==", "engines": { "bun": ">=0.7.0", "deno": ">=1.0.0", @@ -3165,9 +3140,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/assert": { "version": "1.5.1", @@ -3234,9 +3209,9 @@ } }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -3244,6 +3219,11 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" + }, "node_modules/babel-helper-vue-jsx-merge-props": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", @@ -3268,12 +3248,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -3301,11 +3281,11 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3374,9 +3354,9 @@ } }, "node_modules/bigpicture": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/bigpicture/-/bigpicture-2.6.2.tgz", - "integrity": "sha512-IZmRDr7ZSJLDtDvOP/dfqvJhMBqV/tGQAl3UgvkaCzePIkHYlYV/uCg9349E4RPF3ng7QM+eqFZ2CY7tE6pLMA==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/bigpicture/-/bigpicture-2.6.3.tgz", + "integrity": "sha512-Zmnca4YpQn3iygBNSxiyILBVk/a0nvdn3BAmNyZ3KLG5aasDYg+f0oEBqsbohL2YPS5UPqrk3NZH2zXSSHDKIg==" }, "node_modules/binary-extensions": { "version": "2.3.0", @@ -3558,10 +3538,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -3705,9 +3699,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "funding": [ { "type": "opencollective", @@ -3723,9 +3717,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -3782,15 +3776,41 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -3828,9 +3848,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001679", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001679.tgz", - "integrity": "sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "funding": [ { "type": "opencollective", @@ -3968,12 +3988,15 @@ } }, "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/clean-css": { @@ -4290,9 +4313,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/create-hash": { "version": "1.2.0", @@ -4367,9 +4390,9 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "dependencies": { "nice-try": "^1.0.4", @@ -4652,9 +4675,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" }, @@ -4828,9 +4851,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/dir-glob": { "version": "3.0.1", @@ -4969,20 +4992,33 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.55", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", - "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" + "version": "1.5.75", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz", + "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==" }, "node_modules/elliptic": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", - "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -4994,9 +5030,9 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5028,9 +5064,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5072,12 +5108,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -5095,6 +5128,17 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", @@ -5263,9 +5307,9 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5325,9 +5369,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -5348,7 +5392,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -5363,6 +5407,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -5378,6 +5426,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5742,15 +5804,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5775,6 +5842,12 @@ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "license": "MIT" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5847,11 +5920,11 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5891,21 +5964,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -5914,15 +5976,15 @@ } }, "node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, "node_modules/hash-sum": { @@ -5959,9 +6021,9 @@ } }, "node_modules/hls.js": { - "version": "1.5.17", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.17.tgz", - "integrity": "sha512-wA66nnYFvQa1o4DO/BFgLNRKnBTVXpNeldGRBJ2Y0SvFtdwvFKCbqa9zhHoZLoxHhZ+jYsj3aIBkWQQCPNOhMw==" + "version": "1.5.18", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.18.tgz", + "integrity": "sha512-znxR+2jecWluu/0KOBqUcvVyAB5tLff10vjMGrpAlz1eFY+ZhF1bY3r82V+Bk7WJdk03iTjtja9KFFz5BrqjSA==" }, "node_modules/hmac-drbg": { "version": "1.0.1", @@ -6292,9 +6354,9 @@ } }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", "dev": true }, "node_modules/import-fresh": { @@ -6423,9 +6485,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", "dependencies": { "hasown": "^2.0.2" }, @@ -6623,9 +6685,9 @@ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "bin": { "jsesc": "bin/jsesc" }, @@ -6690,9 +6752,9 @@ } }, "node_modules/laravel-echo": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.16.1.tgz", - "integrity": "sha512-++Ylb6M3ariC9Rk5WE5gZjj6wcEV5kvLF8b+geJ5/rRIfdoOA+eG6b9qJPrarMD9rY28Apx+l3eelIrCc2skVg==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.17.1.tgz", + "integrity": "sha512-ORWc4vDfnBj/Oe5ThZ5kYyGItRjLDqAQUyhD/7UhehUOqc+s5x9HEBjtMVludNMP6VuXw6t7Uxt8bp63kaTofg==", "dev": true, "engines": { "node": ">=10" @@ -6975,6 +7037,14 @@ "semver": "bin/semver.js" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -7082,9 +7152,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/mime": { "version": "1.6.0", @@ -7240,9 +7310,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", @@ -7395,9 +7465,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -7474,9 +7544,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -7555,13 +7625,15 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -7817,9 +7889,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -7902,9 +7974,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -7921,7 +7993,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -8180,12 +8252,12 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -8195,12 +8267,24 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dependencies": { + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -8209,6 +8293,18 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", @@ -8558,9 +8654,9 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/pump": { "version": "3.0.2", @@ -8594,9 +8690,9 @@ "dev": true }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -8795,14 +8891,14 @@ "dev": true }, "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -8816,9 +8912,9 @@ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" }, "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dependencies": { "jsesc": "~3.0.2" }, @@ -8826,6 +8922,17 @@ "regjsparser": "bin/parser" } }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -8864,17 +8971,20 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9035,13 +9145,13 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.80.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz", - "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==", + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", + "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", "dev": true, "dependencies": { "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -9093,9 +9203,9 @@ } }, "node_modules/sass/node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "dependencies": { "readdirp": "^4.0.1" @@ -9370,9 +9480,12 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9383,14 +9496,65 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9668,9 +9832,9 @@ } }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dependencies": { "fast-fifo": "^1.3.2", "queue-tick": "^1.0.1", @@ -9895,9 +10059,9 @@ } }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -9912,15 +10076,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -9944,14 +10108,46 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -9967,9 +10163,21 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/text-decoder": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", - "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } }, "node_modules/thunky": { "version": "1.1.0", @@ -10048,6 +10256,12 @@ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", "dev": true }, + "node_modules/twgl.js": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/twgl.js/-/twgl.js-5.5.4.tgz", + "integrity": "sha512-6kFOmijOpmblTN9CCwOTCxK4lPg7rCyQjLuub6EMOlEp89Ex6yUcsMjsmH7andNPL2NE3XmHdqHeP5gVKKPhxw==", + "license": "MIT" + }, "node_modules/twitter-text": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/twitter-text/-/twitter-text-2.0.5.tgz", @@ -10077,9 +10291,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -10535,21 +10749,33 @@ "node": ">= 8" } }, + "node_modules/webgl-media-editor": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/webgl-media-editor/-/webgl-media-editor-0.0.1.tgz", + "integrity": "sha512-TxnuRl3rpWa1Cia/pn+vh+0iz3yDNwzsrnRGJ61YkdZAYuimu2afBivSHv0RK73hKza6Y/YoRCkuEcsFmtxPNw==", + "license": "AGPL-3.0-only", + "dependencies": { + "cropperjs": "^1.6.2", + "gl-matrix": "^3.4.3", + "throttle-debounce": "^5.0.2", + "twgl.js": "^5.5.4" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -10632,9 +10858,9 @@ } }, "node_modules/webpack-cli/node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10739,9 +10965,9 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -10749,7 +10975,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -10846,9 +11072,9 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -10856,7 +11082,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", diff --git a/package.json b/package.json index 7724f040c..691972ced 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "vue-loading-overlay": "^3.3.3", "vue-timeago": "^5.1.2", "vue-tribute": "^1.0.7", + "webgl-media-editor": "^0.0.1", "zuck.js": "^1.6.0" }, "collective": { diff --git a/public/_lang/af.json b/public/_lang/af.json index 1acb08636..fc91f9371 100644 Binary files a/public/_lang/af.json and b/public/_lang/af.json differ diff --git a/public/_lang/ar.json b/public/_lang/ar.json index d88d5693b..a4dcab05b 100644 Binary files a/public/_lang/ar.json and b/public/_lang/ar.json differ diff --git a/public/_lang/bn.json b/public/_lang/bn.json index 1acb08636..d98e3dc1f 100644 Binary files a/public/_lang/bn.json and b/public/_lang/bn.json differ diff --git a/public/_lang/bs.json b/public/_lang/bs.json index 1acb08636..fc91f9371 100644 Binary files a/public/_lang/bs.json and b/public/_lang/bs.json differ diff --git a/public/_lang/ca.json b/public/_lang/ca.json index c12749db0..390c83f01 100644 Binary files a/public/_lang/ca.json and b/public/_lang/ca.json differ diff --git a/public/_lang/cs.json b/public/_lang/cs.json index fcf926ddf..245f50b88 100644 Binary files a/public/_lang/cs.json and b/public/_lang/cs.json differ diff --git a/public/_lang/cy.json b/public/_lang/cy.json index d21b67253..a544ff1a2 100644 Binary files a/public/_lang/cy.json and b/public/_lang/cy.json differ diff --git a/public/_lang/da.json b/public/_lang/da.json index 1acb08636..370ab2d03 100644 Binary files a/public/_lang/da.json and b/public/_lang/da.json differ diff --git a/public/_lang/de.json b/public/_lang/de.json index 653f352dc..048814f67 100644 Binary files a/public/_lang/de.json and b/public/_lang/de.json differ diff --git a/public/_lang/el.json b/public/_lang/el.json index a28e536a0..7d03b00b7 100644 Binary files a/public/_lang/el.json and b/public/_lang/el.json differ diff --git a/public/_lang/es.json b/public/_lang/es.json index a5b24ea1e..fcbe4b17f 100644 Binary files a/public/_lang/es.json and b/public/_lang/es.json differ diff --git a/public/_lang/eu.json b/public/_lang/eu.json index 4561c0e7f..1608126f1 100644 Binary files a/public/_lang/eu.json and b/public/_lang/eu.json differ diff --git a/public/_lang/fa.json b/public/_lang/fa.json index 8033bad73..1b18e4c6d 100644 Binary files a/public/_lang/fa.json and b/public/_lang/fa.json differ diff --git a/public/_lang/fi.json b/public/_lang/fi.json index 1acb08636..1f9fa01d6 100644 Binary files a/public/_lang/fi.json and b/public/_lang/fi.json differ diff --git a/public/_lang/fr.json b/public/_lang/fr.json index 925028a2c..bf9af15af 100644 Binary files a/public/_lang/fr.json and b/public/_lang/fr.json differ diff --git a/public/_lang/gd.json b/public/_lang/gd.json index 112a79ded..420f637d8 100644 Binary files a/public/_lang/gd.json and b/public/_lang/gd.json differ diff --git a/public/_lang/gl.json b/public/_lang/gl.json index 68b685273..43902057f 100644 Binary files a/public/_lang/gl.json and b/public/_lang/gl.json differ diff --git a/public/_lang/he.json b/public/_lang/he.json index c434c9eb7..ceefac458 100644 Binary files a/public/_lang/he.json and b/public/_lang/he.json differ diff --git a/public/_lang/hi.json b/public/_lang/hi.json index 1acb08636..9ca7e7d23 100644 Binary files a/public/_lang/hi.json and b/public/_lang/hi.json differ diff --git a/public/_lang/hr.json b/public/_lang/hr.json index 1acb08636..fc91f9371 100644 Binary files a/public/_lang/hr.json and b/public/_lang/hr.json differ diff --git a/public/_lang/hu.json b/public/_lang/hu.json index 2db23adba..c58426a4e 100644 Binary files a/public/_lang/hu.json and b/public/_lang/hu.json differ diff --git a/public/_lang/id.json b/public/_lang/id.json index 37fca65dd..554eb7487 100644 Binary files a/public/_lang/id.json and b/public/_lang/id.json differ diff --git a/public/_lang/it.json b/public/_lang/it.json index 5e30d2e69..3cd1e2ced 100644 Binary files a/public/_lang/it.json and b/public/_lang/it.json differ diff --git a/public/_lang/ja.json b/public/_lang/ja.json index f52fbe6d3..cd6ca79d7 100644 Binary files a/public/_lang/ja.json and b/public/_lang/ja.json differ diff --git a/public/_lang/ko.json b/public/_lang/ko.json index 456929703..c0dca1379 100644 Binary files a/public/_lang/ko.json and b/public/_lang/ko.json differ diff --git a/public/_lang/me.json b/public/_lang/me.json index 1acb08636..fc91f9371 100644 Binary files a/public/_lang/me.json and b/public/_lang/me.json differ diff --git a/public/_lang/mk.json b/public/_lang/mk.json index 1acb08636..fc91f9371 100644 Binary files a/public/_lang/mk.json and b/public/_lang/mk.json differ diff --git a/public/_lang/nl.json b/public/_lang/nl.json index 9d49929a1..d8d468338 100644 Binary files a/public/_lang/nl.json and b/public/_lang/nl.json differ diff --git a/public/_lang/no.json b/public/_lang/no.json index 1acb08636..a9a97c18f 100644 Binary files a/public/_lang/no.json and b/public/_lang/no.json differ diff --git a/public/_lang/oc.json b/public/_lang/oc.json index 0fca07e45..ab65f4408 100644 Binary files a/public/_lang/oc.json and b/public/_lang/oc.json differ diff --git a/public/_lang/pl.json b/public/_lang/pl.json index fbbcf029e..34ebf7647 100644 Binary files a/public/_lang/pl.json and b/public/_lang/pl.json differ diff --git a/public/_lang/pt.json b/public/_lang/pt.json index b98b0a5d1..f3eb9a64f 100644 Binary files a/public/_lang/pt.json and b/public/_lang/pt.json differ diff --git a/public/_lang/ro.json b/public/_lang/ro.json index 1acb08636..22b6299ce 100644 Binary files a/public/_lang/ro.json and b/public/_lang/ro.json differ diff --git a/public/_lang/ru.json b/public/_lang/ru.json index 81e62649a..2cad80bf8 100644 Binary files a/public/_lang/ru.json and b/public/_lang/ru.json differ diff --git a/public/_lang/sk.json b/public/_lang/sk.json index 31f53469d..cd7536be4 100644 Binary files a/public/_lang/sk.json and b/public/_lang/sk.json differ diff --git a/public/_lang/sr.json b/public/_lang/sr.json index 1acb08636..b52728000 100644 Binary files a/public/_lang/sr.json and b/public/_lang/sr.json differ diff --git a/public/_lang/sv.json b/public/_lang/sv.json index 1acb08636..36badbb9d 100644 Binary files a/public/_lang/sv.json and b/public/_lang/sv.json differ diff --git a/public/_lang/th.json b/public/_lang/th.json index 5445b0116..9da33b30b 100644 Binary files a/public/_lang/th.json and b/public/_lang/th.json differ diff --git a/public/_lang/tr.json b/public/_lang/tr.json index 274abb51d..49d1ce183 100644 Binary files a/public/_lang/tr.json and b/public/_lang/tr.json differ diff --git a/public/_lang/vi.json b/public/_lang/vi.json index 3f76b862f..a0433015a 100644 Binary files a/public/_lang/vi.json and b/public/_lang/vi.json differ diff --git a/public/_lang/zh.json b/public/_lang/zh.json index 1acb08636..d0d6c25c8 100644 Binary files a/public/_lang/zh.json and b/public/_lang/zh.json differ diff --git a/public/js/changelog.bundle.7fc2ee6c4475458c.js b/public/js/changelog.bundle.d40f01eba00c9885.js similarity index 100% rename from public/js/changelog.bundle.7fc2ee6c4475458c.js rename to public/js/changelog.bundle.d40f01eba00c9885.js diff --git a/public/js/compose.chunk.b06beb250e24db17.js b/public/js/compose.chunk.b06beb250e24db17.js new file mode 100644 index 000000000..ccd32b23e Binary files /dev/null and b/public/js/compose.chunk.b06beb250e24db17.js differ diff --git a/public/js/compose.chunk.e1f297b242137d23.js.LICENSE.txt b/public/js/compose.chunk.b06beb250e24db17.js.LICENSE.txt similarity index 100% rename from public/js/compose.chunk.e1f297b242137d23.js.LICENSE.txt rename to public/js/compose.chunk.b06beb250e24db17.js.LICENSE.txt diff --git a/public/js/compose.chunk.e1f297b242137d23.js b/public/js/compose.chunk.e1f297b242137d23.js deleted file mode 100644 index 91ed42f8b..000000000 Binary files a/public/js/compose.chunk.e1f297b242137d23.js and /dev/null differ diff --git a/public/js/compose.js b/public/js/compose.js index 358d724f3..8e1ab44ca 100644 Binary files a/public/js/compose.js and b/public/js/compose.js differ diff --git a/public/js/daci.chunk.3ed914c15dec4ff4.js b/public/js/daci.chunk.61b540b1630f8445.js similarity index 100% rename from public/js/daci.chunk.3ed914c15dec4ff4.js rename to public/js/daci.chunk.61b540b1630f8445.js diff --git a/public/js/discover.chunk.2986d7e977f5188a.js b/public/js/discover.chunk.00d9b5656d32080e.js similarity index 100% rename from public/js/discover.chunk.2986d7e977f5188a.js rename to public/js/discover.chunk.00d9b5656d32080e.js diff --git a/public/js/discover~findfriends.chunk.84758c764668a02c.js b/public/js/discover~findfriends.chunk.6d494abb9e464081.js similarity index 100% rename from public/js/discover~findfriends.chunk.84758c764668a02c.js rename to public/js/discover~findfriends.chunk.6d494abb9e464081.js diff --git a/public/js/discover~hashtag.bundle.93ce902dca5b65e3.js b/public/js/discover~hashtag.bundle.93ce902dca5b65e3.js new file mode 100644 index 000000000..556e69eb8 Binary files /dev/null and b/public/js/discover~hashtag.bundle.93ce902dca5b65e3.js differ diff --git a/public/js/discover~hashtag.bundle.db1d86f9e9dcb79a.js b/public/js/discover~hashtag.bundle.db1d86f9e9dcb79a.js deleted file mode 100644 index b6c51b20b..000000000 Binary files a/public/js/discover~hashtag.bundle.db1d86f9e9dcb79a.js and /dev/null differ diff --git a/public/js/discover~memories.chunk.3b45432a80b08e9b.js b/public/js/discover~memories.chunk.9541b66de9d5d907.js similarity index 100% rename from public/js/discover~memories.chunk.3b45432a80b08e9b.js rename to public/js/discover~memories.chunk.9541b66de9d5d907.js diff --git a/public/js/discover~myhashtags.chunk.67fd16950ee21ad8.js b/public/js/discover~myhashtags.chunk.e2ca0db60346d0c2.js similarity index 100% rename from public/js/discover~myhashtags.chunk.67fd16950ee21ad8.js rename to public/js/discover~myhashtags.chunk.e2ca0db60346d0c2.js diff --git a/public/js/discover~serverfeed.chunk.93bc564867eaa7c3.js b/public/js/discover~serverfeed.chunk.138d9d53d1debac1.js similarity index 100% rename from public/js/discover~serverfeed.chunk.93bc564867eaa7c3.js rename to public/js/discover~serverfeed.chunk.138d9d53d1debac1.js diff --git a/public/js/discover~settings.chunk.950c11c918a541b0.js b/public/js/discover~settings.chunk.b1b5642ccef06123.js similarity index 100% rename from public/js/discover~settings.chunk.950c11c918a541b0.js rename to public/js/discover~settings.chunk.b1b5642ccef06123.js diff --git a/public/js/dms.chunk.b7e970fb49da0199.js b/public/js/dms.chunk.1a2a644df5c78346.js similarity index 100% rename from public/js/dms.chunk.b7e970fb49da0199.js rename to public/js/dms.chunk.1a2a644df5c78346.js diff --git a/public/js/dms~message.chunk.011f31232754f650.js b/public/js/dms~message.chunk.4e68bb824f396d86.js similarity index 100% rename from public/js/dms~message.chunk.011f31232754f650.js rename to public/js/dms~message.chunk.4e68bb824f396d86.js diff --git a/public/js/error404.bundle.ad885ef6f9b2c101.js b/public/js/error404.bundle.e2f43f5006962e80.js similarity index 100% rename from public/js/error404.bundle.ad885ef6f9b2c101.js rename to public/js/error404.bundle.e2f43f5006962e80.js diff --git a/public/js/group.create.0d645a1de271e28d.js b/public/js/group.create.72c3a1e5c1dc00dc.js similarity index 100% rename from public/js/group.create.0d645a1de271e28d.js rename to public/js/group.create.72c3a1e5c1dc00dc.js diff --git a/public/js/groups-page-about.06576420562628e3.js b/public/js/groups-page-about.76a616aa7e1a367b.js similarity index 100% rename from public/js/groups-page-about.06576420562628e3.js rename to public/js/groups-page-about.76a616aa7e1a367b.js diff --git a/public/js/groups-page-media.f611a51e684c48ef.js b/public/js/groups-page-media.056a7bbc46b79034.js similarity index 100% rename from public/js/groups-page-media.f611a51e684c48ef.js rename to public/js/groups-page-media.056a7bbc46b79034.js diff --git a/public/js/groups-page-members.bfdefdd66058e838.js b/public/js/groups-page-members.a8ea4f209fcbe238.js similarity index 100% rename from public/js/groups-page-members.bfdefdd66058e838.js rename to public/js/groups-page-members.a8ea4f209fcbe238.js diff --git a/public/js/groups-page-topics.431ebaf843ca9b16.js b/public/js/groups-page-topics.f69667c933f7d122.js similarity index 100% rename from public/js/groups-page-topics.431ebaf843ca9b16.js rename to public/js/groups-page-topics.f69667c933f7d122.js diff --git a/public/js/groups-page.53eccead9512c61f.js b/public/js/groups-page.d484dab549a033ca.js similarity index 100% rename from public/js/groups-page.53eccead9512c61f.js rename to public/js/groups-page.d484dab549a033ca.js diff --git a/public/js/groups-post.639cb121bdc6f4a7.js b/public/js/groups-post.4c3d4860b029bbaf.js similarity index 100% rename from public/js/groups-post.639cb121bdc6f4a7.js rename to public/js/groups-post.4c3d4860b029bbaf.js diff --git a/public/js/groups-profile.3b11ffa46ae76520.js b/public/js/groups-profile.1bb8be935d1f108a.js similarity index 100% rename from public/js/groups-profile.3b11ffa46ae76520.js rename to public/js/groups-profile.1bb8be935d1f108a.js diff --git a/public/js/home.chunk.c362371940daf318.js b/public/js/home.chunk.acf96f52790bffa6.js similarity index 99% rename from public/js/home.chunk.c362371940daf318.js rename to public/js/home.chunk.acf96f52790bffa6.js index 4ebd0feb2..bfc47a564 100644 Binary files a/public/js/home.chunk.c362371940daf318.js and b/public/js/home.chunk.acf96f52790bffa6.js differ diff --git a/public/js/home.chunk.c362371940daf318.js.LICENSE.txt b/public/js/home.chunk.acf96f52790bffa6.js.LICENSE.txt similarity index 100% rename from public/js/home.chunk.c362371940daf318.js.LICENSE.txt rename to public/js/home.chunk.acf96f52790bffa6.js.LICENSE.txt diff --git a/public/js/i18n.bundle.882da44b752e4e1a.js b/public/js/i18n.bundle.951c52d1740442f6.js similarity index 100% rename from public/js/i18n.bundle.882da44b752e4e1a.js rename to public/js/i18n.bundle.951c52d1740442f6.js diff --git a/public/js/landing.js b/public/js/landing.js index 3069baa87..5d9df030e 100644 Binary files a/public/js/landing.js and b/public/js/landing.js differ diff --git a/public/js/manifest.js b/public/js/manifest.js index 38f8d015d..196fbee81 100644 Binary files a/public/js/manifest.js and b/public/js/manifest.js differ diff --git a/public/js/notifications.chunk.8c41265737b2568a.js b/public/js/notifications.chunk.a882b19f4469ed55.js similarity index 100% rename from public/js/notifications.chunk.8c41265737b2568a.js rename to public/js/notifications.chunk.a882b19f4469ed55.js diff --git a/public/js/post.chunk.5f457aeaa4ae598c.js b/public/js/post.chunk.0757a6f1391ea041.js similarity index 99% rename from public/js/post.chunk.5f457aeaa4ae598c.js rename to public/js/post.chunk.0757a6f1391ea041.js index 8b86545da..9e69d8bfc 100644 Binary files a/public/js/post.chunk.5f457aeaa4ae598c.js and b/public/js/post.chunk.0757a6f1391ea041.js differ diff --git a/public/js/post.chunk.5f457aeaa4ae598c.js.LICENSE.txt b/public/js/post.chunk.0757a6f1391ea041.js.LICENSE.txt similarity index 100% rename from public/js/post.chunk.5f457aeaa4ae598c.js.LICENSE.txt rename to public/js/post.chunk.0757a6f1391ea041.js.LICENSE.txt diff --git a/public/js/profile.chunk.9e77e21e157a47c5.js b/public/js/profile.chunk.5a5ea597e5286899.js similarity index 100% rename from public/js/profile.chunk.9e77e21e157a47c5.js rename to public/js/profile.chunk.5a5ea597e5286899.js diff --git a/public/js/profile~followers.bundle.f26ee6ed6ced9aa7.js b/public/js/profile~followers.bundle.a595bbddf5b02150.js similarity index 100% rename from public/js/profile~followers.bundle.f26ee6ed6ced9aa7.js rename to public/js/profile~followers.bundle.a595bbddf5b02150.js diff --git a/public/js/profile~following.bundle.4ac5466dca6ca1c4.js b/public/js/profile~following.bundle.1c64fbecaa81a368.js similarity index 100% rename from public/js/profile~following.bundle.4ac5466dca6ca1c4.js rename to public/js/profile~following.bundle.1c64fbecaa81a368.js diff --git a/public/js/spa.js b/public/js/spa.js index 5c1950c77..bd016167c 100644 Binary files a/public/js/spa.js and b/public/js/spa.js differ diff --git a/public/js/vendor.js b/public/js/vendor.js index 1753e176e..344264c2e 100644 Binary files a/public/js/vendor.js and b/public/js/vendor.js differ diff --git a/public/js/vendor.js.LICENSE.txt b/public/js/vendor.js.LICENSE.txt index 83e24868a..1632173a3 100644 --- a/public/js/vendor.js.LICENSE.txt +++ b/public/js/vendor.js.LICENSE.txt @@ -1,3 +1,7 @@ +/* @license twgl.js 5.5.4 Copyright (c) 2015, Gregg Tavares All Rights Reserved. +Available via the MIT license. +see: http://github.com/greggman/twgl.js for details */ + /*! * Bootstrap v4.6.2 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) @@ -41,7 +45,7 @@ */ /*! - * Glide.js v3.6.2 + * Glide.js v3.7.1 * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/) * Released under the MIT License. */ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index fa05d8a82..55c0b502e 100644 Binary files a/public/mix-manifest.json and b/public/mix-manifest.json differ diff --git a/resources/assets/components/Hashtag.vue b/resources/assets/components/Hashtag.vue index 01094a85b..62665c1db 100644 --- a/resources/assets/components/Hashtag.vue +++ b/resources/assets/components/Hashtag.vue @@ -1,325 +1,336 @@ diff --git a/resources/assets/js/components/ComposeModal.vue b/resources/assets/js/components/ComposeModal.vue index 94f6f5e13..1ec98c64f 100644 --- a/resources/assets/js/components/ComposeModal.vue +++ b/resources/assets/js/components/ComposeModal.vue @@ -1,6 +1,6 @@ Post Post - Next @@ -342,8 +341,8 @@
-
- +
-
- -
-
-
- -
+ +

-
- +
+
@@ -427,7 +398,7 @@
- +
@@ -780,7 +751,7 @@
- +

{{video.title ? video.title.slice(0,70) : 'Untitled'}}

{{video.description ? video.description.slice(0,90) : 'No description'}}

@@ -839,13 +810,6 @@
- -
-
- -

Applying filters...

-
-
@@ -875,13 +839,17 @@ import 'cropperjs/dist/cropper.css'; import Autocomplete from '@trevoreyre/autocomplete-vue' import '@trevoreyre/autocomplete-vue/dist/style.css' import VueTribute from 'vue-tribute' +import { MediaEditor, MediaEditorPreview, MediaEditorFilterMenu } from 'webgl-media-editor/vue2' +import { filterEffects } from './filters'; export default { components: { VueCropper, Autocomplete, - VueTribute + VueTribute, + MediaEditorPreview, + MediaEditorFilterMenu }, data() { @@ -892,10 +860,9 @@ export default { composeText: '', composeTextLength: 0, nsfw: false, - filters: [], - currentFilter: false, ids: [], media: [], + files: [], carouselCursor: 0, uploading: false, uploadProgress: 100, @@ -923,7 +890,6 @@ export default { }, namedPages: [ - 'filteringMedia', 'cropPhoto', 'tagPeople', 'addLocation', @@ -1044,13 +1010,26 @@ export default { collectionsPage: 1, collectionsCanLoadMore: false, spoilerText: undefined, - isFilteringMedia: false, - filteringMediaTimeout: undefined, - filteringRemainingCount: 0, isPosting: false, } }, + created() { + this.editor = new MediaEditor({ + effects: filterEffects, + onEdit: (index, {effect, intensity, crop}) => { + if (index >= this.files.length) return + const file = this.files[index] + + this.$set(file, 'editState', { effect, intensity, crop }) + }, + onRenderPreview: (sourceIndex, previewUrl) => { + const media = this.media[sourceIndex] + if (media) media.preview_url = previewUrl + }, + }) + }, + computed: { spoilerTextLength: function() { return this.spoilerText ? this.spoilerText.length : 0; @@ -1058,7 +1037,6 @@ export default { }, beforeMount() { - this.filters = window.App.util.filters.sort(); axios.get('/api/compose/v0/settings') .then(res => { this.composeSettings = res.data; @@ -1075,8 +1053,12 @@ export default { }); }, - mounted() { - this.mediaWatcher(); + destroyed() { + this.files.forEach(fileInfo => { + URL.revokeObjectURL(fileInfo.url); + }) + this.files.length = this.media.length = 0 + this.editor = undefined }, methods: { @@ -1156,39 +1138,55 @@ export default { this.mode = 'text'; }, - mediaWatcher() { - let self = this; - $(document).on('change', '#pf-dz', function(e) { - self.mediaUpload(); - }); - }, + onInputFile(event) { + const input = event.target + const files = Array.from(input.files) + input.value = null; - mediaUpload() { let self = this; - self.uploading = true; - let io = document.querySelector('#pf-dz'); - if(!io.files.length) { - self.uploading = false; - } - Array.prototype.forEach.call(io.files, function(io, i) { - if(self.media && self.media.length + i >= self.config.uploader.album_limit) { + + files.forEach((file, i) => { + if(self.media && self.media.length >= self.config.uploader.album_limit) { swal('Error', 'You can only upload ' + self.config.uploader.album_limit + ' photos per album', 'error'); - self.uploading = false; self.page = 2; return; } - let type = io.type; let acceptedMimes = self.config.uploader.media_types.split(','); - let validated = $.inArray(type, acceptedMimes); + let validated = $.inArray(file.type, acceptedMimes); if(validated == -1) { swal('Invalid File Type', 'The file you are trying to add is not a valid mime type. Please upload a '+self.config.uploader.media_types+' only.', 'error'); - self.uploading = false; self.page = 2; return; } + const type = file.type.replace(/\/.*/, '') + const url = URL.createObjectURL(file) + const preview_url = type === 'image' ? url : '/storage/no-preview.png' + + this.files.push({ file, editState: undefined }) + this.media.push({ url, preview_url, type }) + }) + + if (this.media.length) { + this.page = 3 + } else { + this.page = 2 + } + }, + + async mediaUpload() { + this.uploading = true; + + const uploadPromises = this.files.map(async (fileInfo, i) => { + let file = fileInfo.file + const media = this.media[i] + + if (media.type === 'image' && fileInfo.editState) { + file = await this.editor.toBlob(i) + } + let form = new FormData(); - form.append('file', io); + form.append('file', file); let xhrConfig = { onUploadProgress: function(e) { @@ -1197,12 +1195,13 @@ export default { } }; - axios.post('/api/compose/v0/media/upload', form, xhrConfig) + const self = this + + await axios.post('/api/compose/v0/media/upload', form, xhrConfig) .then(function(e) { self.uploadProgress = 100; self.ids.push(e.data.id); - self.media.push(e.data); - self.uploading = false; + Object.assign(media, e.data) setTimeout(function() { // if(type === 'video/mp4') { // self.pageTitle = 'Edit Video Details'; @@ -1216,131 +1215,100 @@ export default { }).catch(function(e) { switch(e.response.status) { case 403: - self.uploading = false; - io.value = null; swal('Account size limit reached', 'Contact your admin for assistance.', 'error'); self.page = 2; break; case 413: - self.uploading = false; - io.value = null; - swal('File is too large', 'The file you uploaded has the size of ' + self.formatBytes(io.size) + '. Unfortunately, only images up to ' + self.formatBytes(self.config.uploader.max_photo_size * 1024) + ' are supported.\nPlease resize the file and try again.', 'error'); + swal('File is too large', 'The file you uploaded has the size of ' + self.formatBytes(file.size) + '. Unfortunately, only images up to ' + self.formatBytes(self.config.uploader.max_photo_size * 1024) + ' are supported.\nPlease resize the file and try again.', 'error'); self.page = 2; break; case 451: - self.uploading = false; - io.value = null; swal('Banned Content', 'This content has been banned and cannot be uploaded.', 'error'); self.page = 2; break; case 429: - self.uploading = false; - io.value = null; swal('Limit Reached', 'You can upload up to 250 photos or videos per day and you\'ve reached that limit. Please try again later.', 'error'); self.page = 2; break; case 500: - self.uploading = false; - io.value = null; swal('Error', e.response.data.message, 'error'); self.page = 2; break; default: - self.uploading = false; - io.value = null; swal('Oops, something went wrong!', 'An unexpected error occurred.', 'error'); self.page = 2; break; } + + throw e }); - io.value = null; - self.uploadProgress = 0; }); + + await Promise.all(uploadPromises).finally(() => { + this.uploadProgress = 0; + this.uploading = false; + }); }, - toggleFilter(e, filter) { - this.media[this.carouselCursor].filter_class = filter; - this.currentFilter = filter; - }, - - deleteMedia() { + async deleteMedia() { if(window.confirm('Are you sure you want to delete this media?') == false) { return; } let id = this.media[this.carouselCursor].id; - axios.delete('/api/compose/v0/media/delete', { - params: { - id: id - } - }).then(res => { - this.ids.splice(this.carouselCursor, 1); - this.media.splice(this.carouselCursor, 1); - if(this.media.length == 0) { - this.ids = []; - this.media = []; - this.carouselCursor = 0; - } else { - this.carouselCursor = 0; - } - }).catch(err => { - swal('Whoops!', 'An error occured when attempting to delete this, please try again', 'error'); - }); + if (id) { + try { + await axios.delete('/api/compose/v0/media/delete', { + params: { + id: id + } + }) + } + catch(err) { + swal('Whoops!', 'An error occured when attempting to delete this, please try again', 'error'); + return + } + } + this.ids.splice(this.carouselCursor, 1); + this.media.splice(this.carouselCursor, 1); + + URL.revokeObjectURL(this.files[this.carouselCursor]?.url) + this.files.splice(this.carouselCursor, 1) + + if(this.media.length == 0) { + this.ids = []; + this.media = []; + this.carouselCursor = 0; + } else { + this.carouselCursor = 0; + } }, mediaReorder(dir) { - const m = this.media; - const cur = this.carouselCursor; - const pla = m[cur]; - let res = []; - let cursor = 0; + const prevIndex = this.carouselCursor + const newIndex = prevIndex + (dir === 'prev' ? -1 : 1) - if(dir == 'prev') { - if(cur == 0) { - for (let i = cursor; i < m.length - 1; i++) { - res[i] = m[i+1]; - } - res[m.length - 1] = pla; - cursor = 0; - } else { - res = this.handleSwap(m, cur, cur - 1); - cursor = cur - 1; - } - } else { - if(cur == m.length - 1) { - res = m; - let lastItem = res.pop(); - res.unshift(lastItem); - cursor = m.length - 1; - } else { - res = this.handleSwap(m, cur, cur + 1); - cursor = cur + 1; - } - } - this.$nextTick(() => { - this.media = res; - this.carouselCursor = cursor; - }) + if (newIndex < 0 || newIndex >= this.media.length) return + + const [removedFile] = this.files.splice(prevIndex, 1) + const [removedMedia] = this.media.splice(prevIndex, 1) + const [removedId] = this.ids.splice(prevIndex, 1) + + this.files.splice(newIndex, 0, removedFile) + this.media.splice(newIndex, 0, removedMedia) + this.ids.splice(newIndex, 0, removedId) + this.carouselCursor = newIndex }, - handleSwap(arr, index1, index2) { - if (index1 >= 0 && index1 < arr.length && index2 >= 0 && index2 < arr.length) { - const temp = arr[index1]; - arr[index1] = arr[index2]; - arr[index2] = temp; - return arr; - } - }, - - compose() { + async compose() { let state = this.composeState; - if(this.uploadProgress != 100 || this.ids.length == 0) { + if(this.files.length == 0) { return; } @@ -1353,11 +1321,14 @@ export default { switch(state) { case 'publish': this.isPosting = true; - let count = this.media.filter(m => m.filter_class && !m.hasOwnProperty('is_filtered')).length; - if(count) { - this.applyFilterToMedia(); - return; + + try { + await this.mediaUpload().finally(() => this.isPosting = false) + } catch { + this.isPosting = false; + return } + if(this.composeSettings.media_descriptions === true) { let count = this.media.filter(m => { return !m.hasOwnProperty('alt') || m.alt.length < 2; @@ -1420,6 +1391,8 @@ export default { this.defineErrorMessage(err); break; } + }).finally(() => { + this.isPosting = false; }); return; break; @@ -1488,10 +1461,6 @@ export default { switch(this.mode) { case 'photo': switch(this.page) { - case 'filteringMedia': - this.page = 2; - break; - case 'addText': this.page = 1; break; @@ -1526,10 +1495,6 @@ export default { case 'video': switch(this.page) { - case 'filteringMedia': - this.page = 2; - break; - case 'licensePicker': this.page = 'video-2'; break; @@ -1550,10 +1515,6 @@ export default { this.page = 1; break; - case 'filteringMedia': - this.page = 2; - break; - case 'textOptions': this.page = 'addText'; break; @@ -1593,31 +1554,14 @@ export default { this.page = 2; break; - case 'filteringMedia': - break; - case 'cropPhoto': - this.pageLoading = true; - let self = this; - this.$refs.cropper.getCroppedCanvas({ - maxWidth: 4096, - maxHeight: 4096, - fillColor: '#fff', - imageSmoothingEnabled: false, - imageSmoothingQuality: 'high', - }).toBlob(function(blob) { - self.mediaCropped = true; - let data = new FormData(); - data.append('file', blob); - data.append('id', self.ids[self.carouselCursor]); - let url = '/api/compose/v0/media/update'; - axios.post(url, data).then(res => { - self.media[self.carouselCursor].url = res.data.url; - self.pageLoading = false; - self.page = 2; - }).catch(err => { - }); - }); + const { editState } = this.files[this.carouselCursor] + const croppedState = { + ...editState, + crop: this.$refs.cropper.getData() + } + this.editor.setEditState(this.carouselCursor, croppedState) + this.page = 2; break; case 2: @@ -1764,111 +1708,6 @@ export default { }); }, - applyFilterToMedia() { - // this is where the magic happens - let count = this.media.filter(m => m.filter_class).length; - if(count) { - this.page = 'filteringMedia'; - this.filteringRemainingCount = count; - this.$nextTick(() => { - this.isFilteringMedia = true; - Promise.all(this.media.map(media => { - return this.applyFilterToMediaSave(media); - })).catch(err => { - console.error(err); - swal('Oops!', 'An error occurred while applying filters to your media. Please refresh the page and try again. If the problem persist, please try a different web browser.', 'error'); - }); - }) - } else { - this.page = 3; - } - }, - - async applyFilterToMediaSave(media) { - if(!media.filter_class) { - return; - } - - // Load image - const image = document.createElement('img'); - image.src = media.url; - await new Promise((resolve, reject) => { - image.addEventListener('load', () => resolve()); - image.addEventListener('error', () => { - reject(new Error('Failed to load image')); - }); - }); - - // Create canvas - let canvas; - let usingOffscreenCanvas = false; - if('OffscreenCanvas' in window) { - canvas = new OffscreenCanvas(image.width, image.height); - usingOffscreenCanvas = true; - } else { - canvas = document.createElement('canvas'); - canvas.width = image.width; - canvas.height = image.height; - } - - // Draw image with filter to canvas - const ctx = canvas.getContext('2d'); - if (!ctx) { - throw new Error('Failed to get canvas context'); - } - if (!('filter' in ctx)) { - throw new Error('Canvas filter not supported'); - } - ctx.filter = App.util.filterCss[media.filter_class]; - ctx.drawImage(image, 0, 0, image.width, image.height); - ctx.save(); - - // Convert canvas to blob - let blob; - if(usingOffscreenCanvas) { - blob = await canvas.convertToBlob({ - type: media.mime, - quality: 1, - }); - } else { - blob = await new Promise((resolve, reject) => { - canvas.toBlob(blob => { - if(blob) { - resolve(blob); - } else { - reject( - new Error('Failed to convert canvas to blob'), - ); - } - }, media.mime, 1); - }); - } - - // Upload blob / Update media - const data = new FormData(); - data.append('file', blob); - data.append('id', media.id); - await axios.post('/api/compose/v0/media/update', data); - media.is_filtered = true; - this.updateFilteringMedia(); - }, - - updateFilteringMedia() { - this.filteringRemainingCount--; - this.filteringMediaTimeout = setTimeout(() => this.filteringMediaTimeoutJob(), 500); - }, - - filteringMediaTimeoutJob() { - if(this.filteringRemainingCount === 0) { - this.isFilteringMedia = false; - clearTimeout(this.filteringMediaTimeout); - setTimeout(() => this.compose(), 500); - } else { - clearTimeout(this.filteringMediaTimeout); - this.filteringMediaTimeout = setTimeout(() => this.filteringMediaTimeoutJob(), 1000); - } - }, - tagSearch(input) { if (input.length < 1) { return []; } let self = this; @@ -2059,6 +1898,11 @@ export default { this.collectionsCanLoadMore = true; }); } + }, + watch: { + files(value) { + this.editor.setSources(value.map(f => f.file)) + }, } } @@ -2111,5 +1955,34 @@ export default { } } } + .media-editor { + background-color: transparent; + border: none !important; + box-shadow: none !important; + font-size: 12px; + + --height-menu-row: 5rem; + --gap-preview: 0rem; + --height-menu-row-scroll: 10rem; + + --color-bg-button: transparent; /*var(--light);*/ + --color-bg-preview: transparent; /*var(--light-gray);*/ + --color-bg-button-hover: var(--light-gray); + --color-bg-acc: var(--card-bg); + + --color-fnt-default: var(--body-color); + --color-fnt-acc: var(--text-lighter); + + --color-scrollbar-thumb: var(--light-gray); + --color-scrollbar-both: var(--light-gray) transparent; + + --color-slider-thumb: var(--text-lighter); + --color-slider-progress: var(--light-gray); + --color-slider-track: var(--light); + + --color-crop-outline: var(--light-gray); + --color-crop-dashed: #ffffffde; + --color-crop-overlay: #00000082; + } } diff --git a/resources/assets/js/components/filters.js b/resources/assets/js/components/filters.js new file mode 100644 index 000000000..59579c809 --- /dev/null +++ b/resources/assets/js/components/filters.js @@ -0,0 +1,290 @@ +export const filterEffects = [ + { + name: '1984', + ops: [ + { type: 'sepia', intensity: 0.5 }, + { type: 'hue_rotate', angle: -30 }, + { type: 'adjust_color', brightness: 0, contrast: 0, saturation: 0.4 }, + ], + }, + { + name: 'Azen', + ops: [ + { type: 'sepia', intensity: 0.2 }, + { type: 'adjust_color', brightness: 0.15, contrast: 0, saturation: 0.4 }, + ], + }, + { + name: 'Astairo', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0.1, saturation: 0.3 }, + ], + }, + { + name: 'Grasbee', + ops: [ + { type: 'sepia', intensity: 0.5 }, + { type: 'adjust_color', brightness: 0, contrast: 0.2, saturation: 0.8 }, + ], + }, + { + name: 'Bookrun', + ops: [ + { type: 'sepia', intensity: 0.4 }, + { type: 'adjust_color', brightness: 0.1, contrast: 0.25, saturation: -0.1 }, + { type: 'hue_rotate', angle: -2 }, + ], + }, + { + name: 'Borough', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.25, saturation: 0 }, + { type: 'hue_rotate', angle: 5 }, + ], + }, + { + name: 'Farms', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.25, saturation: 0.35 }, + { type: 'hue_rotate', angle: -5 }, + ], + }, + { + name: 'Hairsadone', + ops: [ + { type: 'sepia', intensity: 0.15 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.25, saturation: 0 }, + { type: 'hue_rotate', angle: 5 }, + ], + }, + { + name: 'Cleana', + ops: [ + { type: 'sepia', intensity: 0.5 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.15, saturation: -0.1 }, + { type: 'hue_rotate', angle: -2 }, + ], + }, + { + name: 'Catpatch', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0, contrast: .5, saturation: 0.1 }, + ], + }, + { + name: 'Earlyworm', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.15, saturation: -0.1 }, + { type: 'hue_rotate', angle: -5 }, + ], + }, + { + name: 'Plaid', + ops: [{ type: 'adjust_color', brightness: 0.1, contrast: 0.1, saturation: 0 }], + }, + { + name: 'Kyo', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0.15, saturation: 0.35 }, + { type: 'hue_rotate', angle: -5 }, + ], + }, + { + name: 'Yefe', + ops: [ + { type: 'sepia', intensity: 0.4 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0.5, saturation: 0.4 }, + { type: 'hue_rotate', angle: -10 }, + ], + }, + { + name: 'Godess', + ops: [ + { type: 'sepia', intensity: 0.5 }, + { type: 'adjust_color', brightness: 0.05, contrast: 0.05, saturation: 0.35 }, + ], + }, + { + name: 'Yards', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0.2, saturation: 0.05 }, + { type: 'hue_rotate', angle: -15 }, + ], + }, + { + name: 'Quill', + ops: [{ type: 'adjust_color', brightness: 0.25, contrast: -0.15, saturation: -1 }], + }, + { + name: 'Juno', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.15, contrast: 0.15, saturation: 0.8 }, + ], + }, + { + name: 'Rankine', + ops: [ + { type: 'sepia', intensity: 0.15 }, + { type: 'adjust_color', brightness: 0.1, contrast: 0.5, saturation: 0 }, + { type: 'hue_rotate', angle: -10 }, + ], + }, + { + name: 'Mark', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.3, contrast: 0.2, saturation: 0.25 }, + ], + }, + { + name: 'Chill', + ops: [{ type: 'adjust_color', brightness: 0, contrast: 0.5, saturation: 0.1 }], + }, + { + name: 'Van', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.05, contrast: 0.05, saturation: 1 }, + ], + }, + { + name: 'Apache', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.05, contrast: 0.05, saturation: 0.75 }, + ], + }, + { + name: 'May', + ops: [{ type: 'adjust_color', brightness: 0.15, contrast: 0.1, saturation: 0.1 }], + }, + { + name: 'Ceres', + ops: [ + { type: 'adjust_color', brightness: 0.4, contrast: -0.05, saturation: -1 }, + { type: 'sepia', intensity: 0.35 }, + ], + }, + { + name: 'Knoxville', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: -0.1, contrast: 0.5, saturation: 0 }, + { type: 'hue_rotate', angle: -15 }, + ], + }, + { + name: 'Felicity', + ops: [{ type: 'adjust_color', brightness: 0.25, contrast: 0.1, saturation: 0.1 }], + }, + { + name: 'Sandblast', + ops: [ + { type: 'sepia', intensity: 0.15 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0, saturation: 0 }, + ], + }, + { + name: 'Daisy', + ops: [ + { type: 'sepia', intensity: 0.75 }, + { type: 'adjust_color', brightness: 0.25, contrast: -0.25, saturation: 0.4 }, + ], + }, + { + name: 'Elevate', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.2, contrast: 0.25, saturation: -0.1 }, + ], + }, + { + name: 'Nevada', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: -0.1, contrast: 0.5, saturation: 0 }, + { type: 'hue_rotate', angle: -15 }, + ], + }, + { + name: 'Futura', + ops: [ + { type: 'sepia', intensity: 0.15 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.25, saturation: 0.2 }, + ], + }, + { + name: 'Sleepy', + ops: [ + { type: 'sepia', intensity: 0.15 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.25, saturation: 0.2 }, + ], + }, + { + name: 'Steward', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.25, contrast: 0.1, saturation: 0.25 }, + ], + }, + { + name: 'Savoy', + ops: [ + { type: 'sepia', intensity: 0.4 }, + { type: 'adjust_color', brightness: 0.2, contrast: -0.1, saturation: 0.4 }, + { type: 'hue_rotate', angle: -10 }, + ], + }, + { + name: 'Blaze', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: -0.05, contrast: 0.5, saturation: 0 }, + { type: 'hue_rotate', angle: -15 }, + ], + }, + { + name: 'Apricot', + ops: [ + { type: 'sepia', intensity: 0.25 }, + { type: 'adjust_color', brightness: 0.1, contrast: 0.1, saturation: 0 }, + ], + }, + { + name: 'Gloming', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.15, contrast: 0.2, saturation: 0.3 }, + ], + }, + { + name: 'Walter', + ops: [ + { type: 'sepia', intensity: 0.35 }, + { type: 'adjust_color', brightness: 0.25, contrast: -0.2, saturation: 0.4 }, + ], + }, + { + name: 'Poplar', + ops: [ + { type: 'adjust_color', brightness: 0.2, contrast: -0.15, saturation: -0.95 }, + { type: 'sepia', intensity: 0.5 }, + ], + }, + { + name: 'Xenon', + ops: [ + { type: 'sepia', intensity: 0.45 }, + { type: 'adjust_color', brightness: 0.75, contrast: 0.25, saturation: 0.3 }, + { type: 'hue_rotate', angle: -5 }, + ], + }, + ] diff --git a/resources/assets/js/i18n/af.json b/resources/assets/js/i18n/af.json index 1acb08636..fc91f9371 100644 --- a/resources/assets/js/i18n/af.json +++ b/resources/assets/js/i18n/af.json @@ -10,6 +10,7 @@ "shared": "Shared", "shares": "Shares", "unshare": "Unshare", + "bookmark": "Bookmark", "cancel": "Cancel", "copyLink": "Copy Link", "delete": "Delete", @@ -19,6 +20,10 @@ "other": "Other", "readMore": "Read more", "success": "Success", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", "sensitive": "Sensitive", "sensitiveContent": "Sensitive Content", "sensitiveContentWarning": "This post may contain sensitive content" @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ar.json b/resources/assets/js/i18n/ar.json index d88d5693b..a4dcab05b 100644 --- a/resources/assets/js/i18n/ar.json +++ b/resources/assets/js/i18n/ar.json @@ -10,6 +10,7 @@ "shared": "\u062a\u0645\u0651\u064e \u0645\u064f\u0634\u0627\u0631\u064e\u0643\u064e\u062a\u064f\u0647", "shares": "\u0645\u064f\u0634\u0627\u0631\u064e\u0643\u064e\u0627\u062a", "unshare": "\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0645\u064f\u0634\u0627\u0631\u064e\u0643\u064e\u0629", + "bookmark": "\u0636\u064e\u0639 \u0639\u064e\u0644\u0627\u0645\u064e\u0629\u064b \u0645\u064e\u0631\u062c\u0650\u0639\u0650\u064a\u0651\u064e\u0629", "cancel": "\u0625\u0644\u063a\u0627\u0621", "copyLink": "\u0646\u064e\u0633\u062e \u0627\u0644\u0631\u0627\u0628\u0650\u0637", "delete": "\u062d\u064e\u0630\u0641", @@ -19,6 +20,10 @@ "other": "\u0627\u064f\u062e\u0631\u0649", "readMore": "\u0642\u0631\u0627\u0621\u0629\u064f \u0627\u0644\u0645\u0632\u064a\u062f", "success": "\u0646\u064e\u062c\u0627\u062d", + "proceed": "\u062a\u0627\u0628\u0650\u0639", + "next": "\u0627\u0644\u062a\u0651\u064e\u0627\u0644\u064a", + "close": "\u0625\u063a\u0652\u0644\u064e\u0627\u0642", + "clickHere": "\u0627\u0650\u0636\u0652\u063a\u064e\u0637 \u0647\u064f\u0646\u064e\u0627", "sensitive": "\u062d\u0633\u0651\u064e\u0627\u0633", "sensitiveContent": "\u0645\u064f\u062d\u062a\u064e\u0648\u064b\u0649 \u062d\u0633\u0651\u064e\u0627\u0633", "sensitiveContentWarning": "\u0642\u062f \u064a\u062d\u062a\u0648\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u064e\u0646\u0634\u0648\u0631 \u0639\u0644\u0649 \u0645\u064f\u062d\u062a\u0648\u064b\u0649 \u062d\u0633\u0651\u064e\u0627\u0633" @@ -73,7 +78,8 @@ "groupPost": "\u0645\u064e\u0646\u0634\u0648\u0631 \u0645\u064e\u062c\u0645\u0648\u0639\u064e\u0629", "modlog": "\u0633\u062c\u0644\u0627\u062a \u0627\u0644\u0645\u064f\u0634\u0631\u0650\u0641", "post": "\u0645\u064e\u0646\u0634\u0648\u0631", - "story": "\u0642\u064e\u0635\u0651\u064e\u0629" + "story": "\u0642\u064e\u0635\u0651\u064e\u0629", + "noneFound": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0625\u0634\u0639\u0627\u0631\u0627\u062a" }, "post": { "shareToFollowers": "\u0627\u0644\u0645\u064f\u0634\u0627\u0631\u0643\u0629 \u0645\u064e\u0639\u064e \u0627\u0644\u0645\u064f\u062a\u0627\u0628\u0650\u0639\u064a\u0646", @@ -142,9 +148,23 @@ "add": "\u0625\u0636\u0627\u0641\u064e\u0629\u064f \u0642\u064e\u0635\u0651\u064e\u0629" }, "timeline": { - "peopleYouMayKnow": "\u0623\u0634\u062e\u0627\u0635\u064c \u0642\u064e\u062f \u062a\u064e\u0639\u0631\u0650\u0641\u064f\u0647\u064f\u0645" + "peopleYouMayKnow": "\u0623\u0634\u062e\u0627\u0635\u064c \u0642\u064e\u062f \u062a\u064e\u0639\u0631\u0650\u0641\u064f\u0647\u064f\u0645", + "onboarding": { + "welcome": "\u0645\u064e\u0631\u062d\u064e\u0628\u064b\u0627", + "thisIsYourHomeFeed": "\u0647\u064e\u0630\u0650\u0647\u0650 \u0647\u0650\u064a\u064e \u062a\u064e\u063a\u0630\u0650\u064a\u064e\u062a\u064f\u0643\u064e \u0627\u0644\u0631\u0651\u064e\u0626\u0650\u064a\u0633\u064e\u0629\u060c \u0647\u0650\u064a\u064e \u062a\u064e\u063a\u0630\u0650\u064a\u064e\u0629\u064f \u0645\u064f\u0631\u064e\u062a\u0651\u064e\u0628\u064e\u0629\u064c \u0632\u064e\u0645\u064e\u0646\u0650\u064a\u0651\u064b\u0627\u060c \u0645\u064f\u0643\u064e\u0648\u0651\u064e\u0646\u064e\u0629 \u0645\u0650\u0646 \u0645\u064e\u0646\u0634\u0648\u0631\u0627\u062a\u0650 \u0627\u0644\u062d\u0650\u0633\u0627\u0628\u064e\u0627\u062a\u0650 \u0627\u0644\u0651\u064e\u062a\u0650\u064a \u062a\u064f\u062a\u0628\u0650\u0639\u064f\u0647\u064e\u0627.", + "letUsHelpYouFind": "\u062f\u064e\u0639\u0646\u0627 \u0646\u064f\u0633\u0627\u0639\u0650\u062f\u064f\u0643\u064e \u0641\u0650\u064a \u0627\u0644\u0639\u064f\u062b\u064f\u0648\u0631\u0650 \u0639\u064e\u0644\u064e\u0649 \u0623\u0634\u062e\u0627\u0635\u064d \u064a\u064f\u062b\u064a\u0631\u064f\u0648\u0646\u064e \u0627\u0650\u0647\u062a\u0650\u0645\u064e\u0627\u0645\u064e\u0643\u064e \u0644\u0650\u0645\u064f\u062a\u0627\u0628\u064e\u0639\u064e\u062a\u0650\u0647\u0650\u0645", + "refreshFeed": "\u062d\u064e\u062f\u0651\u0650\u062b \u062a\u064e\u063a\u0630\u0650\u064a\u064e\u062a\u064a" + } }, "hashtags": { "emptyFeed": "\u0639\u0644\u0649 \u0645\u0627 \u064a\u064e\u0628\u062f\u0648\u0627\u060c \u0644\u0627 \u064a\u064f\u0645\u0643\u0650\u0646\u064f\u0646\u0627 \u0627\u0644\u0639\u064f\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u064a \u0645\u064e\u0646\u0634\u0648\u0631 \u064a\u064e\u062d\u062a\u064e\u0648\u064a \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0648\u064e\u0633\u0645" + }, + "report": { + "report": "\u0625\u0628\u0644\u064e\u0627\u063a", + "selectReason": "\u062d\u064e\u062f\u0651\u0650\u062f \u0633\u064e\u0628\u064e\u0628\u064e\u0627\u064b", + "reported": "\u0645\u064f\u0628\u0652\u0644\u064e\u063a\u064c \u0639\u064e\u0646\u0647", + "sendingReport": "\u0625\u0631\u0633\u064e\u0627\u0644\u064f \u0627\u0644\u062a\u0651\u064e\u0642\u0631\u064a\u0631\u0650 \u062c\u064e\u0627\u0631\u064d", + "thanksMsg": "\u0634\u064f\u0643\u0631\u064b\u0627 \u0639\u064e\u0644\u064e\u0649 \u0627\u0644\u0625\u0628\u0644\u064e\u0627\u063a\u060c \u0623\u064f\u0646\u0627\u0633\u064c \u0645\u0650\u0646 \u0623\u0645\u062b\u0627\u0644\u0650\u0643\u064e \u064a\u064f\u0633\u0627\u0639\u0650\u062f\u064f\u0648\u0646\u064e \u0641\u0650\u064a \u0627\u0644\u062d\u0650\u0641\u0627\u0638\u0650 \u0639\u064e\u0644\u064e\u0649 \u0633\u064e\u0644\u0627\u0645\u064e\u0629\u0650 \u0645\u064f\u062c\u062a\u064e\u0645\u064e\u0639\u0650\u0646\u064e\u0627!", + "contactAdminMsg": "\u0625\u0630\u064e\u0627 \u0631\u064e\u063a\u0650\u0628\u062a\u064e \u0641\u0650\u064a \u0627\u0644\u062a\u0651\u064e\u0648\u0627\u0635\u064f\u0644\u0650 \u0645\u064e\u0639\u064e \u0645\u064e\u0633\u0624\u0648\u0644\u064d \u062d\u064e\u0648\u0644\u064e \u0647\u064e\u0630\u064e\u0627 \u0627\u0644\u0645\u064e\u0646\u0634\u064f\u0648\u0631\u0650 \u0623\u0648 \u0627\u0644\u0625\u0628\u0644\u064e\u0627\u063a" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/bn.json b/resources/assets/js/i18n/bn.json index 1acb08636..d98e3dc1f 100644 --- a/resources/assets/js/i18n/bn.json +++ b/resources/assets/js/i18n/bn.json @@ -1,110 +1,116 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af", + "commented": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af \u0995\u09b0\u09be \u09b9\u09df\u09c7\u099b\u09c7", + "comments": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af", + "like": "\u09aa\u099b\u09a8\u09cd\u09a6", + "liked": "\u09aa\u099b\u09a8\u09cd\u09a6\u0995\u09c3\u09a4", + "likes": "\u09aa\u099b\u09a8\u09cd\u09a6", + "share": "\u09ad\u09be\u0997 \u0995\u09b0\u09cb", + "shared": "\u09ad\u09be\u0997\u0995\u09c3\u09a4", + "shares": "\u09ad\u09be\u0997 \u0995\u09b0\u09be \u09b9\u09df\u09c7\u099b\u09c7", + "unshare": "\u09ad\u09be\u0997 \u09ab\u09bf\u09b0\u09a4 \u09a8\u09be\u0993", + "bookmark": "\u09ac\u09c1\u0995\u09ae\u09be\u09b0\u09cd\u0995", + "cancel": "\u09ac\u09be\u09a4\u09bf\u09b2", + "copyLink": "\u09b8\u0982\u09af\u09cb\u0997 \u0985\u09a8\u09c1\u09b2\u09bf\u09aa\u09bf", + "delete": "\u09ae\u09c1\u099b\u09cb", + "error": "\u09a4\u09cd\u09b0\u09c1\u099f\u09bf", + "errorMsg": "\u0995\u09cb\u09a8 \u09b8\u09ae\u09b8\u09cd\u09af\u09be \u09b9\u09df\u09c7\u099b\u09c7\u0964 \u0995\u09bf\u099b\u09c1\u0995\u09cd\u09b7\u09a3 \u09aa\u09b0 \u0986\u09ac\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09cb\u0964", + "oops": "\u0993\u09b9\u09cb!", + "other": "\u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af", + "readMore": "\u0986\u09b0\u09cb \u09aa\u09a1\u09bc\u09cb", + "success": "\u09b8\u09ab\u09b2\u09a4\u09be", + "proceed": "\u0985\u0997\u09cd\u09b0\u09b8\u09b0", + "next": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0", + "close": "\u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09cb", + "clickHere": "\u098f\u0996\u09be\u09a8\u09c7 \u099f\u09bf\u09aa \u09a6\u09be\u0993", + "sensitive": "\u09b8\u0982\u09ac\u09c7\u09a6\u09a8\u09b6\u09c0\u09b2", + "sensitiveContent": "\u09b8\u0982\u09ac\u09c7\u09a6\u09a8\u09b6\u09c0\u09b2 \u09ac\u09b8\u09cd\u09a4\u09c1", + "sensitiveContentWarning": "\u098f\u0987 \u09b2\u09c7\u0996\u09be/\u099b\u09ac\u09bf/\u09ad\u09bf\u09a1\u09bf\u0993\u09a4\u09c7 \u09b8\u0982\u09ac\u09c7\u09a6\u09a8\u09b6\u09c0\u09b2 \u0995\u09bf\u099b\u09c1 \u09a5\u09be\u0995\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "\u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0\u09c7\u09b0 \u09b6\u09b0\u09cd\u09a4\u09be\u09ac\u09b2\u09c0", + "privacy": "\u0997\u09cb\u09aa\u09a8\u09c0\u09af\u09bc\u09a4\u09be \u09a8\u09c0\u09a4\u09bf" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", + "admin": "\u09aa\u09cd\u09b0\u09b6\u09be\u09b8\u0995 \u09a1\u09cd\u09af\u09be\u09b6\u09ac\u09cb\u09b0\u09cd\u09a1", + "homeFeed": "\u09ae\u09c2\u09b2 \u09aa\u09cd\u09b0\u09ac\u09be\u09b9", + "localFeed": "\u09b8\u09cd\u09a5\u09be\u09a8\u09c0\u09df \u09aa\u09cd\u09b0\u09ac\u09be\u09b9", + "globalFeed": "\u09ac\u09c8\u09b6\u09cd\u09ac\u09bf\u0995 \u09aa\u09cd\u09b0\u09ac\u09be\u09b9", + "discover": "\u0986\u09ac\u09bf\u09b7\u09cd\u0995\u09be\u09b0", + "directMessages": "\u09b8\u09b0\u09be\u09b8\u09b0\u09bf \u09ac\u09be\u09b0\u09cd\u09a4\u09be", + "notifications": "\u09ac\u09bf\u099c\u09cd\u099e\u09aa\u09cd\u09a4\u09bf", + "groups": "\u09a6\u09b2", + "stories": "\u0997\u09b2\u09cd\u09aa", + "profile": "\u09a8\u09bf\u099c\u09b8\u09cd\u09ac \u09a4\u09a5\u09cd\u09af", + "drive": "\u09a1\u09cd\u09b0\u09be\u0987\u09ad", + "settings": "\u09aa\u099b\u09a8\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9", + "compose": "\u09a8\u09a4\u09c1\u09a8 \u09a4\u09c8\u09b0\u09bf \u0995\u09b0\u09cb", + "logout": "\u09aa\u09cd\u09b0\u09b8\u09cd\u09a5\u09be\u09a8", + "about": "\u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7", + "help": "\u09b8\u09b9\u09be\u09df\u09a4\u09be", + "language": "\u09ad\u09be\u09b7\u09be", + "privacy": "\u0997\u09cb\u09aa\u09a8\u09c0\u09af\u09bc\u09a4\u09be", + "terms": "\u09b6\u09b0\u09cd\u09a4\u09be\u09ac\u09b2\u09c0", + "backToPreviousDesign": "\u0986\u0997\u09c7\u09b0 \u09a8\u0995\u09b6\u09be\u09df \u09ab\u09bf\u09b0\u09c7 \u09af\u09be\u0993" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "\u09ac\u09be\u09b0\u09cd\u09a4\u09be\u09ac\u09be\u0995\u09cd\u09b8", + "sent": "\u09aa\u09cd\u09b0\u09c7\u09b0\u09bf\u09a4", + "requests": "\u0985\u09a8\u09c1\u09b0\u09cb\u09a7\u09b8\u09ae\u09c2\u09b9" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", - "post": "post", - "story": "story" + "liked": "\u09aa\u099b\u09a8\u09cd\u09a6 \u0995\u09b0\u09c7\u099b\u09c7", + "commented": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af \u0995\u09b0\u09c7\u099b\u09c7", + "reacted": "\u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09cd\u09b0\u09bf\u09df\u09be \u09a6\u09c7\u0996\u09bf\u09df\u09c7\u099b\u09c7", + "shared": "\u09ad\u09be\u0997 \u0995\u09b0\u09c7\u099b\u09c7", + "tagged": "\u0986\u09aa\u09a8\u09be\u0995\u09c7 \u099f\u09cd\u09af\u09be\u0997 \u0995\u09b0\u09c7\u099b\u09c7\u09a8", + "updatedA": "\u09b9\u09be\u09b2\u09a8\u09be\u0997\u09be\u09a6 \u0995\u09b0\u09c7\u099b\u09c7", + "sentA": "\u09aa\u09cd\u09b0\u09c7\u09b0\u09a3 \u0995\u09b0\u09c7\u099b\u09c7", + "followed": "\u0985\u09a8\u09c1\u09b8\u09c3\u09a4", + "mentioned": "\u0989\u09b2\u09cd\u09b2\u09c7\u0996 \u0995\u09b0\u09c7\u099b\u09c7\u09a8", + "you": "\u0986\u09aa\u09a8\u09bf", + "yourApplication": "\u0986\u09aa\u09a8\u09be\u09b0 \u09af\u09c1\u0995\u09cd\u09a4 \u09b9\u0993\u09df\u09be\u09b0 \u0986\u09ac\u09c7\u09a6\u09a8", + "applicationApproved": "\u0985\u09a8\u09c1\u09ae\u09cb\u09a6\u09bf\u09a4 \u09b9\u09af\u09bc\u09c7\u099b\u09c7!", + "applicationRejected": "\u0985\u09a8\u09c1\u09ae\u09cb\u09a6\u09bf\u09a4 \u09b9\u09df\u09a8\u09bf\u0964 \u0986\u09aa\u09a8\u09bf \u0986\u09ac\u09be\u09b0 \u09ec \u09ae\u09be\u09b8 \u098f\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0986\u09ac\u09c7\u09a6\u09a8 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u09a8.", + "dm": "\u09b8\u09b0\u09be\u09b8\u09b0\u09bf \u09ac\u09be\u09b0\u09cd\u09a4\u09be", + "groupPost": "\u0997\u09cd\u09b0\u09c1\u09aa \u09aa\u09cb\u09b8\u09cd\u099f", + "modlog": "\u09ae\u09a1\u09be\u09b0\u09c7\u09b6\u09a8 \u09b2\u0997", + "post": "\u09aa\u09cb\u09b8\u09cd\u099f", + "story": "\u09b8\u09cd\u099f\u09cb\u09b0\u09bf", + "noneFound": "\u0995\u09cb\u09a8\u09cb \u09a8\u09cb\u099f\u09bf\u09ab\u09bf\u0995\u09c7\u09b6\u09a8 \u09aa\u09be\u0993\u09df\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "\u0985\u09a8\u09c1\u09b8\u09be\u09b0\u09c0\u09a6\u09c7\u09b0 \u09ae\u09be\u099d\u09c7 \u09b6\u09c7\u09af\u09bc\u09be\u09b0 \u0995\u09b0\u09c1\u09a8", + "shareToOther": "\u0985\u09a8\u09cd\u09af\u09a6\u09c7\u09b0 \u09ae\u09be\u099d\u09c7 \u09b6\u09c7\u09df\u09be\u09b0 \u0995\u09b0\u09c1\u09a8", + "noLikes": "\u098f\u0996\u09a8\u09cb \u0995\u09cb\u09a8\u09cb \u09b2\u09be\u0987\u0995 \u09a8\u09c7\u0987", + "uploading": "\u0986\u09aa\u09b2\u09cb\u09a1 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "\u09aa\u09cb\u09b8\u09cd\u099f\u09b8\u09ae\u09c2\u09b9", + "followers": "\u0985\u09a8\u09c1\u09b8\u09be\u09b0\u09c0", + "following": "\u0985\u09a8\u09c1\u09b8\u09b0\u09a3 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7", + "admin": "\u09aa\u09cd\u09b0\u09b6\u09be\u09b8\u0995", + "collections": "\u09b8\u0982\u0997\u09cd\u09b0\u09b9\u09b6\u09be\u09b2\u09be", + "follow": "\u0985\u09a8\u09c1\u09b8\u09b0\u09a3 \u0995\u09b0\u09c1\u09a8", + "unfollow": "\u0985\u09a8\u09c1\u09b8\u09b0\u09a3 \u09ac\u09be\u09a4\u09bf\u09b2", + "editProfile": "\u09aa\u09cd\u09b0\u09cb\u09ab\u09be\u0987\u09b2 \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8 \u0995\u09b0\u09c1\u09a8", + "followRequested": "\u0985\u09a8\u09c1\u09b8\u09b0\u09a3 \u098f\u09b0 \u0985\u09a8\u09c1\u09b0\u09cb\u09a7 \u0995\u09b0\u09be \u09b9\u09df\u09c7\u099b\u09c7", + "joined": "\u09af\u09c1\u0995\u09cd\u09a4 \u09b9\u09af\u09bc\u09c7\u099b\u09c7\u09a8", + "emptyCollections": "\u0986\u09ae\u09b0\u09be \u0995\u09cb\u09a8\u0993 \u09b8\u0982\u0997\u09cd\u09b0\u09b9\u09b6\u09be\u09b2\u09be \u0996\u09c1\u0981\u099c\u09c7 \u09aa\u09be\u099a\u09cd\u099b\u09bf\u09a8\u09be", + "emptyPosts": "\u0986\u09ae\u09b0\u09be \u0995\u09cb\u09a8 \u09aa\u09cb\u09b7\u09cd\u099f \u0996\u09c1\u0981\u099c\u09c7 \u09aa\u09be\u099a\u09cd\u099b\u09bf\u09a8\u09be" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", + "viewPost": "\u09aa\u09cb\u09b8\u09cd\u099f \u09a6\u09c7\u0996\u09c1\u09a8", + "viewProfile": "\u09aa\u09cd\u09b0\u09cb\u09ab\u09be\u0987\u09b2 \u09a6\u09c7\u0996\u09c1\u09a8", + "moderationTools": "\u09ae\u09a1\u09be\u09b0\u09c7\u09b6\u09a8 Tools", + "report": "\u09b0\u09bf\u09aa\u09cb\u09b0\u09cd\u099f", + "archive": "\u0986\u09b0\u09cd\u0995\u09be\u0987\u09ad", "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", + "embed": "\u098f\u09ae\u09ac\u09c7\u09a1 \u0995\u09b0\u09c1\u09a8", + "selectOneOption": "\u09a8\u09bf\u09ae\u09cd\u09a8\u09b2\u09bf\u0996\u09bf\u09a4 \u09ac\u09bf\u0995\u09b2\u09cd\u09aa\u0997\u09c1\u09b2\u09bf\u09b0 \u098f\u0995\u099f\u09bf \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u0995\u09b0\u09c1\u09a8\u0964", + "unlistFromTimelines": "\u099f\u09be\u0987\u09ae\u09b2\u09be\u0987\u09a8 \u09a5\u09c7\u0995\u09c7 Unlist \u0995\u09b0\u09c1\u09a8", "addCW": "Add Content Warning", "removeCW": "Remove Content Warning", "markAsSpammer": "Mark as Spammer", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/bs.json b/resources/assets/js/i18n/bs.json index 1acb08636..fc91f9371 100644 --- a/resources/assets/js/i18n/bs.json +++ b/resources/assets/js/i18n/bs.json @@ -10,6 +10,7 @@ "shared": "Shared", "shares": "Shares", "unshare": "Unshare", + "bookmark": "Bookmark", "cancel": "Cancel", "copyLink": "Copy Link", "delete": "Delete", @@ -19,6 +20,10 @@ "other": "Other", "readMore": "Read more", "success": "Success", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", "sensitive": "Sensitive", "sensitiveContent": "Sensitive Content", "sensitiveContentWarning": "This post may contain sensitive content" @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ca.json b/resources/assets/js/i18n/ca.json index c12749db0..390c83f01 100644 --- a/resources/assets/js/i18n/ca.json +++ b/resources/assets/js/i18n/ca.json @@ -1,35 +1,40 @@ { "common": { - "comment": "Comentar", - "commented": "Comentari", + "comment": "Comenta", + "commented": "Comentat", "comments": "Comentaris", "like": "M'agrada", "liked": "M'ha agradat", - "likes": "\"M'agrada\"", + "likes": "Agradaments", "share": "Comparteix", "shared": "S'han compartit", "shares": "S'han compartit", "unshare": "Deixa de compartir", + "bookmark": "Afegeix als marcadors", "cancel": "Cancel\u00b7la", "copyLink": "Copia l'enlla\u00e7", - "delete": "Esborra", + "delete": "Elimina", "error": "Error", "errorMsg": "Alguna cosa ha anat malament. Siusplau, intenta-ho m\u00e9s tard.", - "oops": "Uix!", + "oops": "Vaja!", "other": "Altres", - "readMore": "Llegiu-ne m\u00e9s", + "readMore": "M\u00e9s informaci\u00f3", "success": "Completat amb \u00e8xit", + "proceed": "Continua", + "next": "Seg\u00fcent", + "close": "Tanca", + "clickHere": "fes clic aqu\u00ed", "sensitive": "Sensible", "sensitiveContent": "Contingut sensible", - "sensitiveContentWarning": "Aquest article pot contenir contingut sensible" + "sensitiveContentWarning": "Aquesta publicaci\u00f3 pot incloure contingut sensible" }, "site": { "terms": "Condicions d'\u00fas", - "privacy": "Pol\u00edtica de Privacitat" + "privacy": "Pol\u00edtica de privadesa" }, "navmenu": { - "search": "Cercar", - "admin": "Tauler d'Administraci\u00f3", + "search": "Cerca", + "admin": "Tauler d'administraci\u00f3", "homeFeed": "L\u00ednia de temps principal", "localFeed": "L\u00ednia de temps local", "globalFeed": "L\u00ednia de temps global", @@ -40,20 +45,20 @@ "stories": "Hist\u00f2ries", "profile": "Perfil", "drive": "Unitat", - "settings": "Par\u00e0metres", - "compose": "Crea un nou", - "logout": "Logout", + "settings": "Configuraci\u00f3", + "compose": "Crea una nova", + "logout": "Tanca la sessi\u00f3", "about": "Quant a", "help": "Ajuda", "language": "Idioma", "privacy": "Privacitat", "terms": "Termes", - "backToPreviousDesign": "Tornar al disseny anterior" + "backToPreviousDesign": "Torna al disseny anterior" }, "directMessages": { "inbox": "Safata d'entrada", - "sent": "Enviat", - "requests": "Sol\u00b7licitud" + "sent": "Enviats", + "requests": "Sol\u00b7licituds" }, "notifications": { "liked": "li agrada la teva", @@ -63,9 +68,9 @@ "tagged": "t'ha etiquetat en una", "updatedA": "actualitzat a", "sentA": "enviat a", - "followed": "seguits", - "mentioned": "mencionat", - "you": "vost\u00e8", + "followed": "t'ha seguit", + "mentioned": "mencions", + "you": "a v\u00f3s", "yourApplication": "La teva sol\u00b7licitud per unir-te", "applicationApproved": "est\u00e0 aprovat!", "applicationRejected": "ha estat rebutjat. Pots tornar a sol\u00b7licitar unir-te en 6 mesos.", @@ -73,13 +78,14 @@ "groupPost": "publicacions al grup", "modlog": "modlog", "post": "publicaci\u00f3", - "story": "hist\u00f2ria" + "story": "hist\u00f2ria", + "noneFound": "No hi ha notificacions" }, "post": { - "shareToFollowers": "Comparteix amb els seguidors", - "shareToOther": "Compartits per altres", - "noLikes": "Cap m'agrada encara", - "uploading": "Carregant" + "shareToFollowers": "Comparteix amb qui et segueix", + "shareToOther": "Comparteix amb altri", + "noLikes": "Cap m'agrada", + "uploading": "S'est\u00e0 pujant" }, "profile": { "posts": "Publicacions", @@ -88,25 +94,25 @@ "admin": "Administrador", "collections": "Col\u00b7leccions", "follow": "Segueix", - "unfollow": "Deixeu de seguir", - "editProfile": "Edita el teu perfil", - "followRequested": "Sol\u00b7licitud de seguidor", + "unfollow": "Deixa de seguir", + "editProfile": "Edita el perfil", + "followRequested": "Sol\u00b7licituds de seguiment", "joined": "S'ha unit", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "emptyCollections": "No s'ha trobat cap col\u00b7lecci\u00f3", + "emptyPosts": "No s'ha trobat cap publicaci\u00f3" }, "menu": { - "viewPost": "Veure publicaci\u00f3", + "viewPost": "Mostra la publicaci\u00f3", "viewProfile": "Mostra el perfil", "moderationTools": "Eines de moderaci\u00f3", - "report": "Informe", - "archive": "Arxiu", + "report": "Denuncia", + "archive": "Arxiva", "unarchive": "Desarxiva", "embed": "Incrusta", - "selectOneOption": "Seleccioneu una de les opcions seg\u00fcents", + "selectOneOption": "Selecciona una de les seg\u00fcents opcions", "unlistFromTimelines": "Desllista de les l\u00ednies de temps", - "addCW": "Afegeix advert\u00e8ncia de contingut", - "removeCW": "Esborra advert\u00e8ncia de contingut", + "addCW": "Afegeix av\u00eds de contingut", + "removeCW": "Elimina l'av\u00eds de contingut", "markAsSpammer": "Marca com a brossa", "markAsSpammerText": "Desllista + CW publicacions existents i futures", "spam": "Contingut brossa", @@ -114,37 +120,51 @@ "abusive": "Abusiu o nociu", "underageAccount": "Compte de menors d'edat", "copyrightInfringement": "Infracci\u00f3 de drets d\u2019autor", - "impersonation": "Suplantacions", - "scamOrFraud": "Estafa o Frau", - "confirmReport": "Confirma l'informe", - "confirmReportText": "Esteu segur que voleu informar d'aquesta publicaci\u00f3?", - "reportSent": "Informe enviat!", - "reportSentText": "Hem rebut correctament el vostre informe.", - "reportSentError": "Hi ha hagut un problema en informar d'aquesta publicaci\u00f3.", - "modAddCWConfirm": "Confirmes que vols afegir un av\u00eds de contingut a aquesta publicaci\u00f3?", - "modCWSuccess": "Av\u00eds de contingut afegit correctament", - "modRemoveCWConfirm": "Confirmes que vols esborrar un av\u00eds de contingut d'aquesta publicaci\u00f3?", + "impersonation": "Suplantaci\u00f3 d'identitat", + "scamOrFraud": "Estafa o frau", + "confirmReport": "Confirma la den\u00fancia", + "confirmReportText": "Segur que voleu denunciar aquesta publicaci\u00f3?", + "reportSent": "S'ha enviat la den\u00fancia", + "reportSentText": "Hem rebut correctament la teva den\u00fancia.", + "reportSentError": "Hi ha hagut un problema en denunciar aquesta publicaci\u00f3.", + "modAddCWConfirm": "Segur que voleu afegir un av\u00eds de contingut a aquesta publicaci\u00f3?", + "modCWSuccess": "S'ha afegit l'av\u00eds de contingut correctament", + "modRemoveCWConfirm": "Segur que voleu eliminar l'av\u00eds de contingut d'aquesta publicaci\u00f3?", "modRemoveCWSuccess": "Av\u00eds de contingut esborrat correctament", "modUnlistConfirm": "Esteu segur que voleu desllistar d'aquesta publicaci\u00f3?", "modUnlistSuccess": "Entrada desllistada amb \u00e8xit", - "modMarkAsSpammerConfirm": "Esteu segur que voleu marcar aquest usuari com a brossa? Totes les publicacions existents i futures no apareixeran a les cronologies i s'aplicar\u00e0 un av\u00eds de contingut.", + "modMarkAsSpammerConfirm": "Segur que voleu marcar aquest usuari com a brossa? Totes les publicacions existents i futures desapareixeran de les cronologies i s'aplicar\u00e0 un av\u00eds de contingut.", "modMarkAsSpammerSuccess": "El compte s'ha marcat correctament com a brossa", "toFollowers": "els seguidors", - "showCaption": "Mostra el subt\u00edtol", + "showCaption": "Mostra la descripci\u00f3", "showLikes": "Mostra els m'agrada", - "compactMode": "Mode Compacte", + "compactMode": "Mode compacte", "embedConfirmText": "En utilitzar aquesta inserci\u00f3, accepteu el nostre", - "deletePostConfirm": "Esteu segur que voleu suprimir aquesta publicaci\u00f3?", - "archivePostConfirm": "Segur que voleu arxivar aquesta publicaci\u00f3?", - "unarchivePostConfirm": "Segur que voleu desarxivar aquesta publicaci\u00f3?" + "deletePostConfirm": "Segur que voleu eliminar aquesta publicaci\u00f3?", + "archivePostConfirm": "Segur que vols arxivar aquesta publicaci\u00f3?", + "unarchivePostConfirm": "Segur que vols desarxivar aquesta publicaci\u00f3?" }, "story": { - "add": "Afegir hist\u00f2ria" + "add": "Afegeix hist\u00f2ria" }, "timeline": { - "peopleYouMayKnow": "Gent que potser coneixes" + "peopleYouMayKnow": "Gent que potser coneixeu", + "onboarding": { + "welcome": "Us donem la benvinguda", + "thisIsYourHomeFeed": "Aquesta \u00e9s la vostra l\u00ednia de temps principal que mostra cronol\u00f2gicament les publicacions de comptes que seguiu.", + "letUsHelpYouFind": "Ens agradaria ajudar-vos a trobar gent interessant per seguir", + "refreshFeed": "Actualitza la meva l\u00ednia de temps" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "No hi ha cap publicaci\u00f3 per a aquesta etiqueta" + }, + "report": { + "report": "Denuncia", + "selectReason": "Tria una ra\u00f3", + "reported": "Denunciat", + "sendingReport": "S'est\u00e0 enviant la den\u00fancia", + "thanksMsg": "Gr\u00e0cies per la den\u00fancia. Gent com v\u00f3s fa que la nostra comunitat sigui segura!", + "contactAdminMsg": "Si voleu contactar amb un o una administradora sobre aquesta publicaci\u00f3 o den\u00fancia" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/cs.json b/resources/assets/js/i18n/cs.json index fcf926ddf..245f50b88 100644 --- a/resources/assets/js/i18n/cs.json +++ b/resources/assets/js/i18n/cs.json @@ -10,6 +10,7 @@ "shared": "Sd\u00edleno", "shares": "Sd\u00edlen\u00ed", "unshare": "Zru\u0161it sd\u00edlen\u00ed", + "bookmark": "Z\u00e1lo\u017eka", "cancel": "Zru\u0161it", "copyLink": "Kop\u00edrovat odkaz", "delete": "Smazat", @@ -19,6 +20,10 @@ "other": "Dal\u0161\u00ed", "readMore": "\u010c\u00edst v\u00edce", "success": "\u00dasp\u011bch", + "proceed": "Pokra\u010dovat", + "next": "Dal\u0161\u00ed", + "close": "Zav\u0159\u00edt", + "clickHere": "klikn\u011bte zde", "sensitive": "Citliv\u00e9", "sensitiveContent": "Citliv\u00fd obsah", "sensitiveContentWarning": "Tento p\u0159\u00edsp\u011bvek m\u016f\u017ee obsahovat citliv\u00fd obsah" @@ -31,8 +36,8 @@ "search": "Hledat", "admin": "Administr\u00e1torsk\u00fd ovl\u00e1dac\u00ed panel", "homeFeed": "Domovsk\u00e1 \u010dasov\u00e1 osa", - "localFeed": "M\u00edstn\u00ed \u010dasov\u00e1 osa", - "globalFeed": "Globaln\u00ed \u010dasov\u00e1 osa", + "localFeed": "M\u00edstn\u00ed kan\u00e1l", + "globalFeed": "Glob\u00e1ln\u00ed \u010dasov\u00e1 osa", "discover": "Objevovat", "directMessages": "Soukrom\u00e9 zpr\u00e1vy", "notifications": "Ozn\u00e1men\u00ed", @@ -73,7 +78,8 @@ "groupPost": "skupinov\u00fd p\u0159\u00edsp\u011bvek", "modlog": "moder\u00e1torsk\u00fd z\u00e1znam", "post": "p\u0159\u00edsp\u011bvek", - "story": "p\u0159\u00edbeh" + "story": "p\u0159\u00edbeh", + "noneFound": "Nebyla nalezena \u017e\u00e1dn\u00e1 ozn\u00e1men\u00ed" }, "post": { "shareToFollowers": "Sd\u00edlet se sleduj\u00edc\u00edmi", @@ -142,9 +148,23 @@ "add": "P\u0159idat p\u0159\u00edb\u011bh" }, "timeline": { - "peopleYouMayKnow": "Lid\u00e9, kter\u00e9 mo\u017en\u00e1 zn\u00e1te" + "peopleYouMayKnow": "Lid\u00e9, kter\u00e9 mo\u017en\u00e1 zn\u00e1te", + "onboarding": { + "welcome": "V\u00edtejte", + "thisIsYourHomeFeed": "Toto je v\u00e1\u0161 domovsk\u00fd kan\u00e1l, chronologick\u00fd kan\u00e1l p\u0159\u00edsp\u011bvk\u016f z \u00fa\u010dt\u016f, kter\u00e9 sledujete.", + "letUsHelpYouFind": "Pom\u016f\u017eeme v\u00e1m naj\u00edt n\u011bjak\u00e9 zaj\u00edmav\u00e9 lidi ke sledov\u00e1n\u00ed", + "refreshFeed": "Obnovit m\u016fj kan\u00e1l" + } }, "hashtags": { "emptyFeed": "Zd\u00e1 se, \u017ee pro tento \u0161t\u00edtek nelze naj\u00edt \u017e\u00e1dn\u00e9 p\u0159\u00edsp\u011bvky" + }, + "report": { + "report": "Nahl\u00e1sit", + "selectReason": "Vyberte d\u016fvod", + "reported": "Nahl\u00e1\u0161eno", + "sendingReport": "Odes\u00edl\u00e1n\u00ed hl\u00e1\u0161en\u00ed", + "thanksMsg": "D\u00edky za hl\u00e1\u0161en\u00ed, lid\u00e9 jako jste vy pom\u00e1haj\u00ed udr\u017eet na\u0161i komunitu bezpe\u010dnou!", + "contactAdminMsg": "Pokud chcete kontaktovat administr\u00e1tora ohledn\u011b tohoto p\u0159\u00edsp\u011bvku nebo hl\u00e1\u0161en\u00ed" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/cy.json b/resources/assets/js/i18n/cy.json index d21b67253..a544ff1a2 100644 --- a/resources/assets/js/i18n/cy.json +++ b/resources/assets/js/i18n/cy.json @@ -10,6 +10,7 @@ "shared": "Rhannu", "shares": "Rhannu", "unshare": "Dad-rannu", + "bookmark": "Tudalnodau", "cancel": "Canslo", "copyLink": "Cop\u00efo'r ddolen", "delete": "Dileu", @@ -19,6 +20,10 @@ "other": "Arall", "readMore": "Darllen mwy", "success": "Llwyddiant", + "proceed": "Parhau", + "next": "Nesaf", + "close": "Cau", + "clickHere": "cliciwch yma", "sensitive": "Sensitif", "sensitiveContent": "Cynnwys sensitif", "sensitiveContentWarning": "Gall y post hon gynnwys cynnwys sensitif" @@ -42,7 +47,7 @@ "drive": "Gyriant storio", "settings": "Gosodiadau", "compose": "Creu newydd", - "logout": "Logout", + "logout": "Allgofnodi", "about": "Amdano", "help": "Cymorth", "language": "Iaith", @@ -73,7 +78,8 @@ "groupPost": "post gr\u0175p", "modlog": "modlog", "post": "post", - "story": "stori" + "story": "stori", + "noneFound": "Dim hysbysiadau" }, "post": { "shareToFollowers": "Rhannwch i ddilynwyr", @@ -142,9 +148,23 @@ "add": "Ychwanegu Stori" }, "timeline": { - "peopleYouMayKnow": "Pobl efallai eich bod chi'n eu hadnabod" + "peopleYouMayKnow": "Pobl efallai eich bod chi'n eu hadnabod", + "onboarding": { + "welcome": "Croeso", + "thisIsYourHomeFeed": "Dyma'ch porthiant cartref, porthiant cronolegol o bostiadau o gyfrifon rydych chi'n eu dilyn.", + "letUsHelpYouFind": "Gadewch inni eich helpu i ddod o hyd i rai pobl ddiddorol i'w dilyn", + "refreshFeed": "Adnewyddu fy mhorthiant" + } }, "hashtags": { "emptyFeed": "Ni allwn dod o hyd i unrhyw bostiadau ar gyfer yr hashnod hwn" + }, + "report": { + "report": "Adroddi", + "selectReason": "Dewiswch reswm", + "reported": "Adroddwyd", + "sendingReport": "Anfon adroddiad", + "thanksMsg": "Diolch am yr adroddiad, mae pobl fel chi yn helpu i gadw ein cymuned yn ddiogel!", + "contactAdminMsg": "Os hoffech chi gysylltu \u00e2 gweinyddwr am y post neu'r adroddiad hwn" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/da.json b/resources/assets/js/i18n/da.json index 1acb08636..370ab2d03 100644 --- a/resources/assets/js/i18n/da.json +++ b/resources/assets/js/i18n/da.json @@ -1,150 +1,170 @@ { "common": { "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "commented": "Kommenterede", + "comments": "Kommentarer", + "like": "Synes om", + "liked": "Synes om", + "likes": "Synes om", + "share": "Del", + "shared": "Delt", + "shares": "Delinger", + "unshare": "Fjern deling", + "bookmark": "Bookmark", + "cancel": "Annuller", + "copyLink": "Kopier link", + "delete": "Slet", + "error": "Fejl", + "errorMsg": "Noget gik galt. Pr\u00f8v venligst igen senere.", + "oops": "Hovsa!", + "other": "Andet", + "readMore": "L\u00e6s mere", + "success": "Succes", + "proceed": "Forts\u00e6t", + "next": "N\u00e6ste", + "close": "Luk", + "clickHere": "klik her", + "sensitive": "F\u00f8lsomt", + "sensitiveContent": "F\u00f8lsomt indhold", + "sensitiveContentWarning": "Dette opslag kan indeholde f\u00f8lsomt indhold" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Brugsvilk\u00e5r", + "privacy": "Privatlivspolitik" }, "navmenu": { - "search": "Search", + "search": "S\u00f8g", "admin": "Admin Dashboard", "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "localFeed": "Lokalt feed", + "globalFeed": "Globalt feed", + "discover": "Udforsk", + "directMessages": "Direkte beskeder", + "notifications": "Notifikationer", + "groups": "Grupper", + "stories": "Historier", + "profile": "Profil", + "drive": "Drev", + "settings": "Indstillinger", + "compose": "Opret ny", + "logout": "Log ud", + "about": "Om", + "help": "Hj\u00e6lp", + "language": "Sprog", + "privacy": "Privatliv", + "terms": "Betingelser", + "backToPreviousDesign": "G\u00e5 tilbage til forrige design" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "Indbakke", + "sent": "Sendt", + "requests": "Anmodninger" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "liked": "syntes godt om dit", + "commented": "kommenterede p\u00e5 dit", + "reacted": "reagerede p\u00e5 dit", + "shared": "delte dit", + "tagged": "taggede dig i et", + "updatedA": "opdaterede et", + "sentA": "sendte en", + "followed": "f\u00f8lger", + "mentioned": "n\u00e6vnt", + "you": "dig", + "yourApplication": "Din ans\u00f8gning om at deltage", + "applicationApproved": "blev godkendt!", + "applicationRejected": "blev afvist. Du kan ans\u00f8ge igen om 6 m\u00e5neder.", "dm": "dm", - "groupPost": "group post", + "groupPost": "gruppeopslag", "modlog": "modlog", - "post": "post", - "story": "story" + "post": "opslag", + "story": "historie", + "noneFound": "Ingen notifikationer fundet" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "Del til f\u00f8lgere", + "shareToOther": "Del til andre", + "noLikes": "Ingen synes godt om endnu", + "uploading": "Uploader" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", + "posts": "Opslag", + "followers": "F\u00f8lgere", + "following": "F\u00f8lger", "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", + "collections": "Samlinger", + "follow": "F\u00f8lg", + "unfollow": "F\u00f8lg ikke l\u00e6ngere", + "editProfile": "Redig\u00e9r profil", + "followRequested": "F\u00f8lg anmodet", + "joined": "Blev medlem", "emptyCollections": "We can't seem to find any collections", "emptyPosts": "We can't seem to find any posts" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", + "viewPost": "Se opslag", + "viewProfile": "Se profil", + "moderationTools": "Moderatorv\u00e6rkt\u00f8jer", "report": "Report", "archive": "Archive", "unarchive": "Unarchive", "embed": "Embed", "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", + "unlistFromTimelines": "Skjul fra tidslinje", + "addCW": "Tilf\u00f8j indholdsadvarsel", + "removeCW": "Fjern indholdsadvarsel", + "markAsSpammer": "Mark\u00e9r som spammer", "markAsSpammerText": "Unlist + CW existing and future posts", "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", + "sensitive": "F\u00f8lsomt indhold", + "abusive": "Kr\u00e6nkende eller skadelig", + "underageAccount": "Mindre\u00e5rig konto", + "copyrightInfringement": "Kr\u00e6nkelse af ophavsret", "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", + "scamOrFraud": "Scam eller svindel", + "confirmReport": "Bekr\u00e6ft rapport", + "confirmReportText": "Er du sikker p\u00e5, at du vil rapportere dette opslag?", + "reportSent": "Rapport sendt!", + "reportSentText": "Vi har modtaget din rapport.", "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", + "modAddCWConfirm": "Er du sikker p\u00e5, at du vil f\u00f8je en indholdsadvarsel til dette indl\u00e6g?", + "modCWSuccess": "Tilf\u00f8jede succesfuldt advarsel om indhold", "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", + "modRemoveCWSuccess": "Fjernede succesfuldt advarsel om indhold", "modUnlistConfirm": "Are you sure you want to unlist this post?", "modUnlistSuccess": "Successfully unlisted post", "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", + "modMarkAsSpammerSuccess": "Markerede succesfuldt konto som spammer", + "toFollowers": "til f\u00f8lgere", + "showCaption": "Vis billedtekst", "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", + "compactMode": "Kompakt tilstand", + "embedConfirmText": "Ved at bruge denne indlejring, accepterer du vores", + "deletePostConfirm": "Er du sikker p\u00e5, at du vil slette dette opslag?", + "archivePostConfirm": "Er du sikker p\u00e5, at du vil arkivere dette opslag?", "unarchivePostConfirm": "Are you sure you want to unarchive this post?" }, "story": { - "add": "Add Story" + "add": "Tilf\u00f8j historie" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "Folk du m\u00e5ske kender", + "onboarding": { + "welcome": "Velkommen", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Lad os hj\u00e6lpe dig med at finde nogle interessante mennesker du kan f\u00f8lge", + "refreshFeed": "Opdat\u00e9r mit feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "V\u00e6lg en \u00e5rsag", + "reported": "Rapporteret", + "sendingReport": "Sender rapport", + "thanksMsg": "Tak for rapporten, folk som dig hj\u00e6lper med at passe p\u00e5 vores f\u00e6llesskab!", + "contactAdminMsg": "Hvis du vil kontakte en administrator om dette indl\u00e6g eller rapport" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/de.json b/resources/assets/js/i18n/de.json index 653f352dc..048814f67 100644 --- a/resources/assets/js/i18n/de.json +++ b/resources/assets/js/i18n/de.json @@ -10,6 +10,7 @@ "shared": "Geteilt", "shares": "Geteilt", "unshare": "Teilen r\u00fcckg\u00e4ngig machen", + "bookmark": "Lesezeichen", "cancel": "Abbrechen", "copyLink": "Link kopieren", "delete": "L\u00f6schen", @@ -18,7 +19,11 @@ "oops": "Hoppla!", "other": "Anderes", "readMore": "Weiterlesen", - "success": "Erfolgreich", + "success": "Erfolg", + "proceed": "Fortfahren", + "next": "Weiter", + "close": "Schlie\u00dfen", + "clickHere": "hier klicken", "sensitive": "Sensibel", "sensitiveContent": "Sensibler Inhalt", "sensitiveContentWarning": "Dieser Beitrag kann sensible Inhalte enthalten" @@ -41,7 +46,7 @@ "profile": "Profil", "drive": "Festplatte", "settings": "Einstellungen", - "compose": "Neu erstellen", + "compose": "Neu erstellen:", "logout": "Ausloggen", "about": "\u00dcber uns", "help": "Hilfe", @@ -57,15 +62,15 @@ }, "notifications": { "liked": "gef\u00e4llt dein", - "commented": "kommentierte dein", + "commented": "kommentierte deinen", "reacted": "reagierte auf dein", "shared": "teilte deine", "tagged": "markierte dich in einem", "updatedA": "aktualisierte ein", "sentA": "sendete ein", - "followed": "gefolgt", - "mentioned": "erw\u00e4hnt", - "you": "du", + "followed": "folgt", + "mentioned": "erw\u00e4hnte", + "you": "dir", "yourApplication": "Deine Bewerbung um beizutreten", "applicationApproved": "wurde genehmigt!", "applicationRejected": "wurde abgelehnt. Du kannst dich in 6 Monaten erneut f\u00fcr den Beitritt bewerben.", @@ -73,7 +78,8 @@ "groupPost": "Gruppen-Post", "modlog": "modlog", "post": "Beitrag", - "story": "Story" + "story": "Story", + "noneFound": "Keine Benachrichtigungen vorhanden" }, "post": { "shareToFollowers": "Mit Folgenden teilen", @@ -119,14 +125,14 @@ "confirmReport": "Meldung best\u00e4tigen", "confirmReportText": "Bist du sicher, dass du diesen Beitrag melden m\u00f6chtest?", "reportSent": "Meldung gesendet!", - "reportSentText": "Wir haben deinen Bericht erfolgreich erhalten.", + "reportSentText": "Wir haben deine Meldung erfolgreich erhalten.", "reportSentError": "Es gab ein Problem beim Melden dieses Beitrags.", "modAddCWConfirm": "Bist du sicher, dass du diesem Beitrag eine Inhaltswarnung hinzuf\u00fcgen m\u00f6chtest?", "modCWSuccess": "Inhaltswarnung erfolgreich hinzugef\u00fcgt", - "modRemoveCWConfirm": "Bist du sicher, dass die Inhaltswarnung auf diesem Beitrag entfernt werden soll?", + "modRemoveCWConfirm": "Bist du sicher, dass die Inhaltswarnung f\u00fcr diesen Beitrag entfernt werden soll?", "modRemoveCWSuccess": "Inhaltswarnung erfolgreich entfernt", "modUnlistConfirm": "Bist du sicher, dass du diesen Beitrag nicht listen m\u00f6chtest?", - "modUnlistSuccess": "Beitrag erfolgreich nicht gelistet", + "modUnlistSuccess": "Beitrag aus Timelines entfernt", "modMarkAsSpammerConfirm": "Bist du sicher, dass du diesen Benutzer als Spam markieren m\u00f6chtest? Alle existierenden und zuk\u00fcnftigen Beitr\u00e4ge werden nicht mehr in der Zeitleiste angezeigt und mit einer Inhaltswarnung versehen.", "modMarkAsSpammerSuccess": "Konto erfolgreich als Spammer markiert", "toFollowers": "an die Folgenden", @@ -142,9 +148,23 @@ "add": "Story hinzuf\u00fcgen" }, "timeline": { - "peopleYouMayKnow": "Leute, die du vielleicht kennst" + "peopleYouMayKnow": "Leute, die du vielleicht kennst", + "onboarding": { + "welcome": "Herzlich Willkommen", + "thisIsYourHomeFeed": "Dies ist dein Heim-Feed, ein chronologischer Feed von Beitr\u00e4gen aus den Konten, denen du folgst.", + "letUsHelpYouFind": "Lass uns dir helfen, einige interessante Leute zu finden, denen du folgen kannst", + "refreshFeed": "Feed aktualisieren" + } }, "hashtags": { "emptyFeed": "Wir k\u00f6nnen keine Beitr\u00e4ge mit diesem Hashtag finden" + }, + "report": { + "report": "Melden", + "selectReason": "Einen Grund ausw\u00e4hlen", + "reported": "Gemeldet", + "sendingReport": "Meldung wird gesendet", + "thanksMsg": "Vielen Dank f\u00fcr die Meldung, Leute wie du helfen, unsere Community sicher zu halten!", + "contactAdminMsg": "Wenn du einen Administrator zu diesem Beitrag oder dieser Meldung kontaktieren m\u00f6chtest" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/el.json b/resources/assets/js/i18n/el.json index a28e536a0..7d03b00b7 100644 --- a/resources/assets/js/i18n/el.json +++ b/resources/assets/js/i18n/el.json @@ -10,6 +10,7 @@ "shared": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5", "shares": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2", "unshare": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2", + "bookmark": "\u03a3\u03b5\u03bb\u03b9\u03b4\u03bf\u03b4\u03b5\u03af\u03ba\u03c4\u03b7\u03c2", "cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7", "copyLink": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", "delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", @@ -19,6 +20,10 @@ "other": "\u0386\u03bb\u03bb\u03bf", "readMore": "\u0394\u03b9\u03b1\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1", "success": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2", + "proceed": "\u03a3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1", + "next": "\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf", + "close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", + "clickHere": "\u03ba\u03bb\u03b9\u03ba \u03b5\u03b4\u03ce", "sensitive": "\u0395\u03c5\u03b1\u03af\u03c3\u03b8\u03b7\u03c4\u03bf", "sensitiveContent": "\u0395\u03c5\u03b1\u03af\u03c3\u03b8\u03b7\u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf", "sensitiveContentWarning": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9 \u03b5\u03c5\u03b1\u03af\u03c3\u03b8\u03b7\u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf" @@ -32,8 +37,8 @@ "admin": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae", "homeFeed": "\u0391\u03c1\u03c7\u03b9\u03ba\u03ae \u03c1\u03bf\u03ae", "localFeed": "\u03a4\u03bf\u03c0\u03b9\u03ba\u03ae \u03a1\u03bf\u03ae", - "globalFeed": "\u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03b9\u03b1\u03ba\u03ae \u03a1\u03bf\u03ae", - "discover": "\u0391\u03bd\u03b1\u03ba\u03b1\u03bb\u03cd\u03c8\u03c4\u03b5", + "globalFeed": "\u039a\u03b1\u03b8\u03bf\u03bb\u03b9\u03ba\u03ae \u03a1\u03bf\u03ae", + "discover": "\u0391\u03bd\u03b1\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7", "directMessages": "\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b9\u03ba\u03ac \u039c\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03b1", "notifications": "\u0395\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2", "groups": "\u039f\u03bc\u03ac\u03b4\u03b5\u03c2", @@ -48,7 +53,7 @@ "language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1", "privacy": "\u0399\u03b4\u03b9\u03c9\u03c4\u03b9\u03ba\u03cc\u03c4\u03b7\u03c4\u03b1", "terms": "\u038c\u03c1\u03bf\u03b9", - "backToPreviousDesign": "Go back to previous design" + "backToPreviousDesign": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c0\u03af\u03c3\u03c9 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c3\u03c7\u03b5\u03b4\u03b9\u03b1\u03c3\u03bc\u03cc" }, "directMessages": { "inbox": "\u0395\u03b9\u03c3\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1", @@ -56,14 +61,14 @@ "requests": "\u0391\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03b1" }, "notifications": { - "liked": "\u03b5\u03c0\u03b9\u03c3\u03ae\u03bc\u03b1\u03bd\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03bf\u03c5 \u03b1\u03c1\u03ad\u03c3\u03b5\u03b9 \u03c4\u03bf", + "liked": "\u03c4\u03bf\u03c5 \u03ac\u03c1\u03b5\u03c3\u03b5", "commented": "\u03c3\u03c7\u03bf\u03bb\u03af\u03b1\u03c3\u03b5 \u03c3\u03c4\u03bf", - "reacted": "\u03b1\u03bd\u03c4\u03ad\u03b4\u03c1\u03b1\u03c3\u03b5 \u03c3\u03c4\u03bf {item} \u03c3\u03b1\u03c2", - "shared": "\u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03c4\u03bf {item} \u03c3\u03b1\u03c2", - "tagged": "\u03c3\u03b1\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b5 \u03bc\u03b5 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 \u03c3\u03b5 \u03bc\u03b9\u03b1 \u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7", + "reacted": "\u03b1\u03bd\u03c4\u03ad\u03b4\u03c1\u03b1\u03c3\u03b5 \u03c3\u03c4\u03bf", + "shared": "\u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03c4\u03bf", + "tagged": "\u03c3\u03b1\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b5 \u03bc\u03b5 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 \u03c3\u03b5", "updatedA": "\u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b5 \u03ad\u03bd\u03b1", "sentA": "\u03ad\u03c3\u03c4\u03b5\u03b9\u03bb\u03b5 \u03ad\u03bd\u03b1", - "followed": "followed", + "followed": "\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b5", "mentioned": "\u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b8\u03b7\u03ba\u03b5", "you": "\u03b5\u03c3\u03cd", "yourApplication": "\u0397 \u03b1\u03af\u03c4\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03c3\u03c5\u03bc\u03bc\u03b5\u03c4\u03bf\u03c7\u03ae", @@ -73,13 +78,14 @@ "groupPost": "\u03bf\u03bc\u03b1\u03b4\u03b9\u03ba\u03ae \u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7", "modlog": "modlog", "post": "\u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7", - "story": "\u03b9\u03c3\u03c4\u03bf\u03c1\u03af\u03b1" + "story": "\u03b9\u03c3\u03c4\u03bf\u03c1\u03af\u03b1", + "noneFound": "\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2" }, "post": { "shareToFollowers": "\u039c\u03bf\u03b9\u03c1\u03b1\u03c3\u03c4\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03c5\u03c2 \u03b1\u03ba\u03cc\u03bb\u03bf\u03c5\u03b8\u03bf\u03c5\u03c2", - "shareToOther": "Share to other", + "shareToOther": "\u039a\u03bf\u03b9\u03bd\u03ae \u03c7\u03c1\u03ae\u03c3\u03b7 \u03c3\u03b5 \u03ac\u03bb\u03bb\u03bf", "noLikes": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd likes \u03b1\u03ba\u03cc\u03bc\u03b1", - "uploading": "\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7" + "uploading": "\u0393\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bc\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7" }, "profile": { "posts": "\u0394\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2", @@ -88,10 +94,10 @@ "admin": "\u0394\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2", "collections": "\u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ad\u03c2", "follow": "\u0391\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b5", - "unfollow": "\u0394\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae \u03c0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2", + "unfollow": "\u0386\u03c1\u03c3\u03b7 \u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2", "editProfile": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a0\u03c1\u03bf\u03c6\u03af\u03bb", "followRequested": "\u0391\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03c4\u03b5 \u03a4\u03bf \u0391\u03af\u03c4\u03b7\u03bc\u03b1", - "joined": "Joined", + "joined": "\u0388\u03b3\u03b9\u03bd\u03b5 \u03bc\u03ad\u03bb\u03bf\u03c2", "emptyCollections": "\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03b2\u03c1\u03bf\u03cd\u03bc\u03b5 \u03c3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ad\u03c2", "emptyPosts": "\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03b2\u03c1\u03bf\u03cd\u03bc\u03b5 \u03b4\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2" }, @@ -104,47 +110,61 @@ "unarchive": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03b9\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7\u03c2", "embed": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7", "selectOneOption": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03bc\u03af\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b9\u03c2 \u03b1\u03ba\u03cc\u03bb\u03bf\u03c5\u03b8\u03b5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2", - "unlistFromTimelines": "Unlist from Timelines", + "unlistFromTimelines": "\u039a\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03a7\u03c1\u03bf\u03bd\u03bf\u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1", "addCW": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5", "removeCW": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5", "markAsSpammer": "\u03a3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7 \u03c9\u03c2 Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", + "markAsSpammerText": "\u039a\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03bb\u03af\u03c3\u03c4\u03b1 + \u03a0\u03a0 \u03c3\u03b5 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03c3\u03b5\u03c2 \u03ba\u03b1\u03b9 \u03bc\u03b5\u03bb\u03bb\u03bf\u03bd\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b4\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2", "spam": "\u0391\u03bd\u03b5\u03c0\u03b9\u03b8\u03cd\u03bc\u03b7\u03c4\u03b1", "sensitive": "\u0395\u03c5\u03b1\u03af\u03c3\u03b8\u03b7\u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf", "abusive": "\u039a\u03b1\u03c4\u03b1\u03c7\u03c1\u03b7\u03c3\u03c4\u03b9\u03ba\u03cc \u03ae \u03b5\u03c0\u03b9\u03b2\u03bb\u03b1\u03b2\u03ad\u03c2", "underageAccount": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b7\u03bb\u03af\u03ba\u03bf\u03c5", "copyrightInfringement": "\u03a0\u03b1\u03c1\u03b1\u03b2\u03af\u03b1\u03c3\u03b7 \u03c0\u03bd\u03b5\u03c5\u03bc\u03b1\u03c4\u03b9\u03ba\u03ce\u03bd \u03b4\u03b9\u03ba\u03b1\u03b9\u03c9\u03bc\u03ac\u03c4\u03c9\u03bd", - "impersonation": "Impersonation", + "impersonation": "\u0391\u03c0\u03bf\u03bc\u03af\u03bc\u03b7\u03c3\u03b7", "scamOrFraud": "\u0391\u03bd\u03b5\u03c0\u03b9\u03b8\u03cd\u03bc\u03b7\u03c4\u03bf \u03ae \u03b1\u03c0\u03ac\u03c4\u03b7", "confirmReport": "\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7 \u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2", - "confirmReportText": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "confirmReportText": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", "reportSent": "\u0397 \u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03a3\u03c4\u03ac\u03bb\u03b8\u03b7\u03ba\u03b5!", "reportSentText": "\u0388\u03c7\u03bf\u03c5\u03bc\u03b5 \u03bb\u03ac\u03b2\u03b5\u03b9 \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1 \u03c4\u03b7\u03bd \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c3\u03b1\u03c2.", "reportSentError": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b7\u03c2 \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7\u03c2.", - "modAddCWConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "modAddCWConfirm": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", "modCWSuccess": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5", - "modRemoveCWConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c6\u03b1\u03b9\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "modRemoveCWConfirm": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c6\u03b1\u03b9\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", "modRemoveCWSuccess": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2 \u03b1\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", + "modUnlistConfirm": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c6\u03b1\u03b9\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "modUnlistSuccess": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7 \u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b1\u03c0\u03cc \u03bb\u03af\u03c3\u03c4\u03b1", "modMarkAsSpammerConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c9\u03c2 spammer? \u038c\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03c3\u03b5\u03c2 \u03ba\u03b1\u03b9 \u03bc\u03b5\u03bb\u03bb\u03bf\u03bd\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b4\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03bd \u03b8\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03c7\u03c1\u03bf\u03bd\u03bf\u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1 \u03ba\u03b1\u03b9 \u03b8\u03b1 \u03b5\u03c6\u03b1\u03c1\u03bc\u03cc\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5.", "modMarkAsSpammerSuccess": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2 \u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c9\u03c2 spammer", "toFollowers": "\u03c3\u03c4\u03bf\u03c5\u03c2 \u0391\u03ba\u03cc\u03bb\u03bf\u03c5\u03b8\u03bf\u03c5\u03c2", - "showCaption": "Show Caption", + "showCaption": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1\u03c2", "showLikes": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \"\u03bc\u03bf\u03c5 \u03b1\u03c1\u03ad\u03c3\u03b5\u03b9\"", "compactMode": "\u03a3\u03c5\u03bc\u03c0\u03b1\u03b3\u03ae\u03c2 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1", - "embedConfirmText": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ce\u03bd\u03c4\u03b1\u03c2 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf, \u03c3\u03c5\u03bc\u03c6\u03c9\u03bd\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03b7\u03bd", - "deletePostConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", - "archivePostConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03b5\u03b9\u03bf\u03b8\u03b5\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "embedConfirmText": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ce\u03bd\u03c4\u03b1\u03c2 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7, \u03c3\u03c5\u03bc\u03c6\u03c9\u03bd\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5", + "deletePostConfirm": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", + "archivePostConfirm": "\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03b5\u03b9\u03bf\u03b8\u03b5\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7;", "unarchivePostConfirm": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c6\u03b1\u03b9\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c0\u03bf \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03b5\u03b9\u03bf\u03b8\u03ae\u03ba\u03b7;" }, "story": { "add": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u0399\u03c3\u03c4\u03bf\u03c1\u03af\u03b1\u03c2" }, "timeline": { - "peopleYouMayKnow": "\u0386\u03c4\u03bf\u03bc\u03b1 \u03c0\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03be\u03ad\u03c1\u03b5\u03c4\u03b5" + "peopleYouMayKnow": "\u0386\u03c4\u03bf\u03bc\u03b1 \u03c0\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03be\u03ad\u03c1\u03b5\u03c4\u03b5", + "onboarding": { + "welcome": "\u039a\u03b1\u03bb\u03ce\u03c2 \u03ae\u03c1\u03b8\u03b1\u03c4\u03b5", + "thisIsYourHomeFeed": "\u0391\u03c5\u03c4\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03b1\u03c1\u03c7\u03b9\u03ba\u03ae \u03c3\u03bf\u03c5 \u03c1\u03bf\u03ae, \u03bc\u03b9\u03b1 \u03c7\u03c1\u03bf\u03bd\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03ae \u03c1\u03bf\u03ae \u03c4\u03c9\u03bd \u03b4\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03c9\u03bd \u03b1\u03c0\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd\u03c2 \u03c0\u03bf\u03c5 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b5\u03af\u03c4\u03b5.", + "letUsHelpYouFind": "\u0391\u03c2 \u03c3\u03b1\u03c2 \u03b2\u03bf\u03b7\u03b8\u03ae\u03c3\u03bf\u03c5\u03bc\u03b5 \u03bd\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5\u03c1\u03b9\u03ba\u03bf\u03cd\u03c2 \u03b5\u03bd\u03b4\u03b9\u03b1\u03c6\u03ad\u03c1\u03bf\u03bd\u03c4\u03b5\u03c2 \u03b1\u03bd\u03b8\u03c1\u03ce\u03c0\u03bf\u03c5\u03c2 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03b5\u03c4\u03b5", + "refreshFeed": "\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c1\u03bf\u03ae\u03c2 \u03bc\u03bf\u03c5" + } }, "hashtags": { "emptyFeed": "\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03b2\u03c1\u03bf\u03cd\u03bc\u03b5 \u03b4\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf hashtag" + }, + "report": { + "report": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac", + "selectReason": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b1\u03b9\u03c4\u03af\u03b1", + "reported": "\u0391\u03bd\u03b1\u03c6\u03ad\u03c1\u03b8\u03b7\u03ba\u03b5", + "sendingReport": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2", + "thanksMsg": "\u0395\u03c5\u03c7\u03b1\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd\u03bc\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac, \u03ac\u03bd\u03b8\u03c1\u03c9\u03c0\u03bf\u03b9 \u03c3\u03b1\u03bd \u03ba\u03b9 \u03b5\u03c3\u03ac\u03c2 \u03b2\u03bf\u03b7\u03b8\u03bf\u03cd\u03bd \u03bd\u03b1 \u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03ba\u03bf\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03ac \u03bc\u03b1\u03c2 \u03b1\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2!", + "contactAdminMsg": "\u0391\u03bd \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03b4\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03ae \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/es.json b/resources/assets/js/i18n/es.json index a5b24ea1e..fcbe4b17f 100644 --- a/resources/assets/js/i18n/es.json +++ b/resources/assets/js/i18n/es.json @@ -1,27 +1,32 @@ { "common": { - "comment": "Comentario", + "comment": "Comentar", "commented": "Comentado", "comments": "Comentarios", "like": "Me gusta", "liked": "Te gusta", - "likes": "Me gustas", + "likes": "Me gusta", "share": "Compartir", "shared": "Compartido", "shares": "Compartidos", "unshare": "No compartir", + "bookmark": "Marcador", "cancel": "Cancelar", "copyLink": "Copiar Enlace", "delete": "Eliminar", "error": "Error", - "errorMsg": "Algo fue mal. Por favor int\u00e9ntelo de nuevo m\u00e1s tarde.", + "errorMsg": "Algo sali\u00f3 mal. Por favor int\u00e9ntalo de nuevo m\u00e1s tarde.", "oops": "Upss!", "other": "Otros", "readMore": "Ver m\u00e1s", "success": "Correcto", + "proceed": "Proceder", + "next": "Siguiente", + "close": "Cerrar", + "clickHere": "haz click aqu\u00ed", "sensitive": "Sensible", "sensitiveContent": "Contenido Sensible", - "sensitiveContentWarning": "Este post podr\u00eda tener contenido sensible" + "sensitiveContentWarning": "Esta publicaci\u00f3n podr\u00eda contener contenido sensible" }, "site": { "terms": "T\u00e9rminos de Uso", @@ -42,7 +47,7 @@ "drive": "Multimedia", "settings": "Ajustes", "compose": "Crear Nuevo", - "logout": "Logout", + "logout": "Cerrar sesi\u00f3n", "about": "Acerca de", "help": "Ayuda", "language": "Idioma", @@ -73,7 +78,8 @@ "groupPost": "publicaci\u00f3n de grupo", "modlog": "modlog", "post": "publicaci\u00f3n", - "story": "historia" + "story": "historia", + "noneFound": "No se han encontrado notificaciones" }, "post": { "shareToFollowers": "Compartir a seguidores", @@ -92,8 +98,8 @@ "editProfile": "Editar Perfil", "followRequested": "Seguimiento Solicitado", "joined": "Se uni\u00f3", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "emptyCollections": "Parece que no podemos encontrar ninguna colecci\u00f3n", + "emptyPosts": "Parece que no podemos encontrar ning\u00fan post" }, "menu": { "viewPost": "Ver Publicaci\u00f3n", @@ -113,8 +119,8 @@ "sensitive": "Contenido Sensible", "abusive": "Abusivo o Da\u00f1ino", "underageAccount": "Cuenta de Menor de Edad", - "copyrightInfringement": "Violaci\u00f3n de Copyright", - "impersonation": "Suplantaci\u00f3n", + "copyrightInfringement": "Infracci\u00f3n de derechos de autor", + "impersonation": "Suplantaci\u00f3n de identidad", "scamOrFraud": "Scam o Fraude", "confirmReport": "Confirmar Reporte", "confirmReportText": "\u00bfSeguro que quieres reportar esta publicaci\u00f3n?", @@ -134,17 +140,31 @@ "showLikes": "Mostrar me gustas", "compactMode": "Modo Compacto", "embedConfirmText": "Usando este incrustado, usted acepta", - "deletePostConfirm": "\u00bfSeguro que desea eliminar esta publicaci\u00f3n?", - "archivePostConfirm": "\u00bfSeguro que desea archivar esta publicaci\u00f3n?", + "deletePostConfirm": "\u00bfSeguro que deseas eliminar esta publicaci\u00f3n?", + "archivePostConfirm": "\u00bfSeguro que deseas archivar esta publicaci\u00f3n?", "unarchivePostConfirm": "\u00bfSeguro que desea desarchivar esta publicaci\u00f3n?" }, "story": { "add": "A\u00f1adir Historia" }, "timeline": { - "peopleYouMayKnow": "Gente que podr\u00edas conocer" + "peopleYouMayKnow": "Personas que quiz\u00e1s conozcas", + "onboarding": { + "welcome": "Bienvenido/a", + "thisIsYourHomeFeed": "Este es tu cronolog\u00eda principal, que muestra de manera cronol\u00f3gica las publicaciones de cuentas que sigues.", + "letUsHelpYouFind": "D\u00e9janos ayudarte a encontrar algunas personas interesantes para seguir", + "refreshFeed": "Actualizar mi cronolog\u00eda" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Parece que no podemos encontrar posts para este hashtag" + }, + "report": { + "report": "Reportar", + "selectReason": "Seleccionar un motivo", + "reported": "Reportado", + "sendingReport": "Enviando reporte", + "thanksMsg": "Gracias por el reporte, \u00a1personas como t\u00fa ayudan a mantener nuestra comunidad segura!", + "contactAdminMsg": "Si quieres contactar un administrador sobre esta publicaci\u00f3n o reporte" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/eu.json b/resources/assets/js/i18n/eu.json index 4561c0e7f..1608126f1 100644 --- a/resources/assets/js/i18n/eu.json +++ b/resources/assets/js/i18n/eu.json @@ -10,6 +10,7 @@ "shared": "Partekatuta", "shares": "Partekatze", "unshare": "Utzi partekatzeari", + "bookmark": "Laster-marka", "cancel": "Utzi", "copyLink": "Kopiatu esteka", "delete": "Ezabatu", @@ -18,7 +19,11 @@ "oops": "Ene!", "other": "Bestelakoa", "readMore": "Irakurri gehiago", - "success": "Burutu da", + "success": "Arrakastaz burutu da", + "proceed": "Jarraitu", + "next": "Hurrengoa", + "close": "Itxi", + "clickHere": "klikatu hemen", "sensitive": "Hunkigarria", "sensitiveContent": "Eduki hunkigarria", "sensitiveContentWarning": "Bidalketa honek eduki hunkigarria izan dezake" @@ -30,7 +35,7 @@ "navmenu": { "search": "Bilatu", "admin": "Adminaren panela", - "homeFeed": "Etxeko jarioa", + "homeFeed": "Hasierako jarioa", "localFeed": "Jario lokala", "globalFeed": "Jario globala", "discover": "Aurkitu", @@ -42,7 +47,7 @@ "drive": "Unitatea", "settings": "Ezarpenak", "compose": "Sortu berria", - "logout": "Saioa itxi", + "logout": "Itxi saioa", "about": "Honi buruz", "help": "Laguntza", "language": "Hizkuntza", @@ -57,7 +62,7 @@ }, "notifications": { "liked": "datsegi zure", - "commented": "iruzkindu du zure", + "commented": "-(e)k iruzkindu du zure", "reacted": "-(e)k erantzun egin du zure", "shared": "partekatu du zure", "tagged": "etiketatu zaitu hemen:", @@ -69,11 +74,12 @@ "yourApplication": "Elkartzeko zure eskaera", "applicationApproved": "onartu da!", "applicationRejected": "ez da onartu. Berriz eska dezakezu 6 hilabete barru.", - "dm": "mezu pribatua", + "dm": "mezu zuzena", "groupPost": "talde argitarapena", "modlog": "modloga", "post": "bidalketa", - "story": "istorioa" + "story": "istorioa", + "noneFound": "Ez da jakinarazpenik aurkitu" }, "post": { "shareToFollowers": "Partekatu jarraitzaileei", @@ -90,7 +96,7 @@ "follow": "Jarraitu", "unfollow": "Utzi jarraitzeari", "editProfile": "Editatu profila", - "followRequested": "Jarraitzea eskatuta", + "followRequested": "Jarraitzeko eskaera bidalita", "joined": "Elkartu da", "emptyCollections": "Ez dugu topatu bildumarik", "emptyPosts": "Ez dugu topatu bidalketarik" @@ -100,27 +106,27 @@ "viewProfile": "Ikusi profila", "moderationTools": "Moderazio tresnak", "report": "Salatu", - "archive": "Artxiboa", + "archive": "Artxibatu", "unarchive": "Desartxibatu", "embed": "Kapsulatu", "selectOneOption": "Hautatu aukera hauetako bat", - "unlistFromTimelines": "Denbora-lerroetatik ezkutatu", + "unlistFromTimelines": "Denbora-lerroetatik kendu", "addCW": "Gehitu edukiaren abisua", "removeCW": "Kendu edukiaren abisua", "markAsSpammer": "Markatu zabor-bidaltzaile gisa", "markAsSpammerText": "Ezkutatu + edukiaren abisua jarri etorkizuneko bidalketei", "spam": "Zaborra", "sensitive": "Eduki hunkigarria", - "abusive": "Bortxazko edo Mingarria", + "abusive": "Iraingarri edo mingarria", "underageAccount": "Adin txikiko baten kontua", "copyrightInfringement": "Copyrightaren urraketa", - "impersonation": "Nortasunaren iruzurra", - "scamOrFraud": "Iruzur edo lapurreta", + "impersonation": "Inpersonazioa", + "scamOrFraud": "Iruzur edo maula", "confirmReport": "Berretsi salaketa", "confirmReportText": "Ziur al zaude bidalketa hau salatu nahi duzula?", "reportSent": "Salaketa bidali da", "reportSentText": "Zure salaketa ondo jaso dugu.", - "reportSentError": "Arazo bat egon da bidalketa hau salatzean.", + "reportSentError": "Arazo bat egon da bidalketa hau salatzerakoan.", "modAddCWConfirm": "Ziur al zaude edukiaren abisua jarri nahi duzula bidalketa honetan?", "modCWSuccess": "Edukiaren abisua ondo gehitu da", "modRemoveCWConfirm": "Ziur al zaude edukiaren abisua kendu nahi duzula bidalketa honetarako?", @@ -133,7 +139,7 @@ "showCaption": "Irudiaren azalpena erakutsi", "showLikes": "Erakutsi atsegiteak", "compactMode": "Modu trinkoa", - "embedConfirmText": "Kapsulatze hau erabiliz, onartzen dituzu gure", + "embedConfirmText": "Txertaketa hau erabiliz, onartzen dituzu gure", "deletePostConfirm": "Ziur al zaude bidalketa hau ezabatu nahi duzula?", "archivePostConfirm": "Ziur al zaude bidalketa hau artxibatu nahi duzula?", "unarchivePostConfirm": "Ziur bidalketa hau desartxibatu nahi duzula?" @@ -142,9 +148,23 @@ "add": "Gehitu istorioa" }, "timeline": { - "peopleYouMayKnow": "Ezagutu dezakezun jendea" + "peopleYouMayKnow": "Ezagun dezakezun jendea", + "onboarding": { + "welcome": "Ongi etorri", + "thisIsYourHomeFeed": "Hau da zure hasierako jarioa, jarraitzen dituzun kontuen bidalketen jario kronologikoa.", + "letUsHelpYouFind": "Utz iezaguzu laguntzen jarraitzeko moduko jende interesgarria bilatzen", + "refreshFeed": "Nire jarioa eguneratu" + } }, "hashtags": { "emptyFeed": "Ez dugu topatu traola hau duen bidalketarik" + }, + "report": { + "report": "Salatu", + "selectReason": "Hautatu arrazoia", + "reported": "Salatuta", + "sendingReport": "Salaketa bidaltzen", + "thanksMsg": "Eskerrik asko salaketagatik, zu bezalako jendeak gure komunitatea seguruagoa mantentzen du!", + "contactAdminMsg": "Administratzaile batekin harremanetan jarri nahi baduzu bidalketa edo salaketa honen harira" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/fa.json b/resources/assets/js/i18n/fa.json index 8033bad73..1b18e4c6d 100644 --- a/resources/assets/js/i18n/fa.json +++ b/resources/assets/js/i18n/fa.json @@ -1,24 +1,29 @@ { "common": { - "comment": "\u062f\u06cc\u062f\u06af\u0627\u0647", - "commented": "Commented", - "comments": "\u062f\u06cc\u062f\u06af\u0627\u0647\u200c\u0647\u0627", + "comment": "\u0646\u0638\u0631", + "commented": "\u0646\u0638\u0631 \u062f\u0627\u062f\u0647 \u0634\u062f", + "comments": "\u0646\u0638\u0631", "like": "\u067e\u0633\u0646\u062f", - "liked": "Liked", + "liked": "\u067e\u0633\u0646\u062f\u06cc\u062f\u0647 \u0634\u062f", "likes": "\u067e\u0633\u0646\u062f", "share": "\u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc", - "shared": "Shared", + "shared": "\u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc \u0634\u062f", "shares": "\u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc", - "unshare": "\u0644\u063a\u0648 \u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc", + "unshare": "\u0646\u0627\u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc", + "bookmark": "\u0646\u0634\u0627\u0646\u06a9", "cancel": "\u0644\u063a\u0648", - "copyLink": "\u0631\u0648\u06af\u0631\u0641\u062a \u067e\u06cc\u0648\u0646\u062f", + "copyLink": "\u0631\u0648\u0646\u0648\u0634\u062a \u0627\u0632 \u067e\u06cc\u0648\u0646\u062f", "delete": "\u062d\u0630\u0641", "error": "\u062e\u0637\u0627", - "errorMsg": "\u0645\u0634\u06a9\u0644\u06cc \u0631\u062e \u062f\u0627\u062f\u0647 \u0627\u0633\u062a. \u0644\u0637\u0641\u0627 \u0628\u0639\u062f\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f.", + "errorMsg": "\u0686\u06cc\u0632\u06cc \u0627\u0634\u062a\u0628\u0627\u0647 \u0634\u062f. \u0644\u0637\u0641\u0627\u064b \u0628\u0639\u062f\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f.", "oops": "\u0627\u0648\u0647!", - "other": "\u0633\u0627\u06cc\u0631", - "readMore": "\u0628\u06cc\u0634\u062a\u0631 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f", + "other": "\u062f\u06cc\u06af\u0631", + "readMore": "\u0628\u06cc\u0634\u200c\u062a\u0631 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f", "success": "\u0645\u0648\u0641\u0642", + "proceed": "\u067e\u06cc\u0634\u0631\u0648\u06cc", + "next": "\u0628\u0639\u062f\u06cc", + "close": "\u0628\u0633\u062a\u0646", + "clickHere": "\u0627\u06cc\u0646\u200c\u062c\u0627 \u0631\u0627 \u0628\u0632\u0646\u06cc\u062f", "sensitive": "\u062d\u0633\u0627\u0633", "sensitiveContent": "\u0645\u062d\u062a\u0648\u0627\u06cc \u062d\u0633\u0627\u0633", "sensitiveContentWarning": "\u0627\u06cc\u0646 \u0641\u0631\u0633\u062a\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0627\u0631\u0627\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u062d\u0633\u0627\u0633 \u0628\u0627\u0634\u062f" @@ -30,7 +35,7 @@ "navmenu": { "search": "\u062c\u0633\u062a\u062c\u0648", "admin": "\u067e\u06cc\u0634\u062e\u0648\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a\u06cc", - "homeFeed": "\u062e\u0637 \u0632\u0645\u0627\u0646\u06cc \u062e\u0627\u0646\u06af\u06cc", + "homeFeed": "\u062e\u0648\u0631\u0627\u06a9 \u062e\u0627\u0646\u0647", "localFeed": "\u062e\u0637 \u0632\u0645\u0627\u0646\u06cc \u0645\u062d\u0644\u06cc", "globalFeed": "\u062e\u0637 \u0632\u0645\u0627\u0646\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc", "discover": "\u0627\u06a9\u062a\u0634\u0627\u0641", @@ -42,17 +47,17 @@ "drive": "Drive", "settings": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a", "compose": "\u0641\u0631\u0633\u062a\u0647\u0654 \u062c\u062f\u06cc\u062f", - "logout": "Logout", + "logout": "\u062e\u0631\u0648\u062c", "about": "\u062f\u0631\u0628\u0627\u0631\u0647", "help": "\u0631\u0627\u0647\u0646\u0645\u0627", "language": "\u0632\u0628\u0627\u0646", "privacy": "\u062d\u0631\u06cc\u0645 \u062e\u0635\u0648\u0635\u06cc", "terms": "\u0634\u0631\u0627\u06cc\u0637", - "backToPreviousDesign": "\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0637\u0631\u0627\u062d\u06cc \u067e\u06cc\u0634\u06cc\u0646" + "backToPreviousDesign": "\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0637\u0631\u0651\u0627\u062d\u06cc \u067e\u06cc\u0634\u06cc\u0646" }, "directMessages": { - "inbox": "\u0635\u0646\u062f\u0648\u0642 \u062f\u0631\u06cc\u0627\u0641\u062a", - "sent": "\u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u062f\u0647", + "inbox": "\u0635\u0646\u062f\u0648\u0642 \u0648\u0631\u0648\u062f\u06cc", + "sent": "\u0641\u0631\u0633\u062a\u0627\u062f\u0647", "requests": "\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627" }, "notifications": { @@ -63,17 +68,18 @@ "tagged": "tagged you in a", "updatedA": "updated a", "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", + "followed": "\u067e\u06cc \u06af\u0631\u0641\u062a", + "mentioned": "\u0627\u0634\u0627\u0631\u0647 \u06a9\u0631\u062f", "you": "\u0634\u0645\u0627", - "yourApplication": "\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0648\u0633\u062a\u0646", + "yourApplication": "\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u067e\u06cc\u0648\u0633\u062a\u0646\u062a\u0627\u0646", "applicationApproved": "\u062a\u0627\u06cc\u06cc\u062f \u0634\u062f!", - "applicationRejected": "\u0631\u062f \u0634\u062f. \u06f6 \u0645\u0627\u0647 \u062f\u06cc\u06af\u0631 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u062c\u062f\u062f\u0627 \u0627\u0642\u062f\u0627\u0645 \u06a9\u0646\u06cc\u062f.", + "applicationRejected": "\u0631\u062f \u0634\u062f. \u06f6 \u0645\u0627\u0647 \u062f\u06cc\u06af\u0631 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u062f.", "dm": "dm", "groupPost": "\u0641\u0631\u0633\u062a\u0647\u0654 \u06af\u0631\u0648\u0647\u06cc", "modlog": "modlog", "post": "\u0641\u0631\u0633\u062a\u0647", - "story": "\u062f\u0627\u0633\u062a\u0627\u0646" + "story": "\u062f\u0627\u0633\u062a\u0627\u0646", + "noneFound": "\u0647\u06cc\u0686 \u0622\u06af\u0627\u0647\u06cc\u200c\u0627\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f" }, "post": { "shareToFollowers": "\u0647\u0645\u200c\u0631\u0633\u0627\u0646\u06cc \u0628\u0627 \u062f\u0646\u0628\u0627\u0644\u200c\u06a9\u0646\u0646\u062f\u06af\u0627\u0646", @@ -115,7 +121,7 @@ "underageAccount": "\u062d\u0633\u0627\u0628 \u0632\u06cc\u0631 \u0633\u0646 \u0642\u0627\u0646\u0648\u0646\u06cc", "copyrightInfringement": "\u0646\u0642\u0636 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062d\u0642 \u062a\u06a9\u062b\u06cc\u0631", "impersonation": "\u062c\u0639\u0644 \u0647\u0648\u06cc\u062a", - "scamOrFraud": "Scam or Fraud", + "scamOrFraud": "\u0647\u0631\u0632\u0646\u0627\u0645\u0647 \u06cc\u0627 \u06a9\u0644\u0627\u0647\u200c\u0628\u0631\u062f\u0627\u0631\u06cc", "confirmReport": "\u062a\u0627\u06cc\u06cc\u062f \u06af\u0632\u0627\u0631\u0634", "confirmReportText": "\u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0641\u0631\u0633\u062a\u0647 \u0631\u0627 \u06af\u0632\u0627\u0631\u0634 \u06a9\u0646\u06cc\u062f\u061f", "reportSent": "\u06af\u0632\u0627\u0631\u0634 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u062f!", @@ -128,7 +134,7 @@ "modUnlistConfirm": "\u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0641\u0631\u0633\u062a\u0647 \u0631\u0627 \u0628\u0631\u0648\u0646\u200c\u0641\u0647\u0631\u0633\u062a \u06a9\u0646\u06cc\u062f\u061f", "modUnlistSuccess": "\u0641\u0631\u0633\u062a\u0647 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0631\u0648\u0646\u200c\u0641\u0647\u0631\u0633\u062a \u0634\u062f", "modMarkAsSpammerConfirm": "\u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0647\u0631\u0632\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0646\u0634\u0627\u0646\u0647\u200c\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f\u061f \u062a\u0645\u0627\u0645 \u0641\u0631\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0648 \u0622\u062a\u06cc \u0631\u0648\u06cc \u062e\u0637 \u0632\u0645\u0627\u0646\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0631\u0648\u0646\u200c\u0641\u0647\u0631\u0633\u062a \u062f\u0631\u0622\u0645\u062f\u0647 \u0648 \u0647\u0634\u062f\u0627\u0631 \u0645\u062d\u062a\u0648\u0627 \u0628\u0631 \u0622\u0646\u200c\u0647\u0627 \u0627\u0639\u0645\u0627\u0644 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", + "modMarkAsSpammerSuccess": "\u062d\u0633\u0627\u0628 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0647\u0631\u0632\u0647\u200c\u067e\u0631\u0627\u06a9\u0646 \u0639\u0644\u0627\u0645\u062a \u062e\u0648\u0631\u062f", "toFollowers": "\u0628\u0647 \u062f\u0646\u0628\u0627\u0644\u200c\u06a9\u0646\u0646\u062f\u06af\u0627\u0646", "showCaption": "\u0646\u0645\u0627\u06cc\u0634 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a", "showLikes": "\u0646\u0645\u0627\u06cc\u0634 \u067e\u0633\u0646\u062f\u0647\u0627", @@ -142,9 +148,23 @@ "add": "\u0627\u0641\u0632\u0648\u062f\u0646 \u062f\u0627\u0633\u062a\u0627\u0646" }, "timeline": { - "peopleYouMayKnow": "\u0627\u0641\u0631\u0627\u062f\u06cc \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0634\u0646\u0627\u0633\u06cc\u062f" + "peopleYouMayKnow": "\u0627\u0641\u0631\u0627\u062f\u06cc \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0634\u0646\u0627\u0633\u06cc\u062f", + "onboarding": { + "welcome": "\u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f", + "thisIsYourHomeFeed": "\u0627\u06cc\u0646 \u062e\u0648\u0631\u0627\u06a9 \u062e\u0627\u0646\u0647\u200c\u062a\u0627\u0646 \u0627\u0633\u062a. \u062e\u0648\u0631\u0627\u06a9\u06cc \u0632\u0645\u0627\u0646\u200c\u0646\u06af\u0627\u0634\u062a\u0647 \u0627\u0632 \u0641\u0631\u0633\u062a\u0647\u200c\u0647\u0627\u06cc\u062d\u0633\u0627\u0628\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u067e\u06cc \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u062f.", + "letUsHelpYouFind": "\u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u062f\u0631 \u06cc\u0627\u0641\u062a\u0646 \u0627\u0641\u0631\u0627\u062f \u062c\u0627\u0644\u0628 \u0628\u0631\u0627\u06cc \u067e\u06cc\u200c\u06af\u06cc\u0631\u06cc \u06cc\u0627\u0631\u06cc\u062a\u0627\u0646 \u06a9\u0646\u06cc\u0645", + "refreshFeed": "\u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u062e\u0648\u0631\u0627\u06a9\u0645" + } }, "hashtags": { "emptyFeed": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u062f \u06a9\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0686\u06cc\u0632\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0647\u0634\u062a\u06af \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u0645" + }, + "report": { + "report": "\u06af\u0632\u0627\u0631\u0634", + "selectReason": "\u06af\u0632\u06cc\u0646\u0634 \u06cc\u06a9 \u062f\u0644\u06cc\u0644", + "reported": "\u06af\u0632\u0627\u0631\u0634 \u0634\u062f", + "sendingReport": "\u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u06af\u0632\u0627\u0631\u0634", + "thanksMsg": "\u0645\u0645\u0646\u0648\u0646 \u0627\u0632 \u06af\u0632\u0627\u0631\u0634. \u0627\u0641\u0631\u0627\u062f\u06cc \u0686\u0648\u0646 \u0634\u0645\u0627 \u0627\u062c\u062a\u0645\u0627\u0639\u0645\u0627\u0646 \u0631\u0627 \u0627\u0645\u0646 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0646\u062f!", + "contactAdminMsg": "\u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0628\u0627\u0631\u0647\u062e\u200c\u0627\u06cc \u0627\u06cc\u0646 \u0641\u0631\u0633\u062a\u0647 \u06cc\u0627 \u06af\u0632\u0627\u0631\u0634 \u0628\u0627 \u0645\u062f\u06cc\u0631\u06cc \u062f\u0631 \u062a\u0645\u0627\u0633 \u0628\u0627\u0634\u06cc\u062f" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/fi.json b/resources/assets/js/i18n/fi.json index 1acb08636..1f9fa01d6 100644 --- a/resources/assets/js/i18n/fi.json +++ b/resources/assets/js/i18n/fi.json @@ -1,63 +1,68 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "Kommentti", + "commented": "Kommentoitu", + "comments": "Kommentit", + "like": "Tykk\u00e4\u00e4", + "liked": "Tyk\u00e4tty", + "likes": "Tykk\u00e4ykset", + "share": "Jaa", + "shared": "Jaettu", + "shares": "Jaot", + "unshare": "Peru jakaminen", + "bookmark": "Bookmark", + "cancel": "Peruuta", + "copyLink": "Kopioi linkki", + "delete": "Poista", + "error": "Virhe", + "errorMsg": "Jokin meni pieleen. Yrit\u00e4 my\u00f6hemmin uudelleen.", + "oops": "Oho!", + "other": "Muu", + "readMore": "Lue lis\u00e4\u00e4", + "success": "Onnistui", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", + "sensitive": "Sensitiivinen", + "sensitiveContent": "Sensitiivinen sis\u00e4lt\u00f6", + "sensitiveContentWarning": "T\u00e4m\u00e4 julkaisu saattaa sis\u00e4lt\u00e4\u00e4 sensitiivist\u00e4 sis\u00e4lt\u00f6\u00e4" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "K\u00e4ytt\u00f6ehdot", + "privacy": "Tietosuojak\u00e4yt\u00e4nt\u00f6" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "Hae", + "admin": "Yll\u00e4pit\u00e4j\u00e4n hallintapaneeli", + "homeFeed": "Kotisy\u00f6te", + "localFeed": "Paikallinen sy\u00f6te", + "globalFeed": "Maailmanlaajuinen sy\u00f6te", + "discover": "Tutustu", + "directMessages": "Yksityisviestit", + "notifications": "Ilmoitukset", + "groups": "Ryhm\u00e4t", + "stories": "Tarinat", + "profile": "Profiili", + "drive": "Asema", + "settings": "Asetukset", + "compose": "Luo uusi", + "logout": "Kirjaudu ulos", + "about": "Tietoja", + "help": "Ohje", + "language": "Kieli", + "privacy": "Yksityisyys", + "terms": "Ehdot", + "backToPreviousDesign": "Palaa aiempaan ulkoasuun" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "Saapuneet", + "sent": "L\u00e4hetetty", + "requests": "Pyynn\u00f6t" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", + "liked": "tykk\u00e4si sinun", + "commented": "kommentoi sinun", "reacted": "reacted to your", "shared": "shared your", "tagged": "tagged you in a", @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -113,38 +119,52 @@ "sensitive": "Sensitive Content", "abusive": "Abusive or Harmful", "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "copyrightInfringement": "Tekij\u00e4noikeusloukkaus", + "impersonation": "V\u00e4\u00e4rennetty henkil\u00f6llisyys", + "scamOrFraud": "Huijaus tai petos", + "confirmReport": "Vahvista ilmianto", + "confirmReportText": "Oletko varma, ett\u00e4 haluat ilmiantaa t\u00e4m\u00e4n viestin?", + "reportSent": "Ilmoitus l\u00e4hetetty!", + "reportSentText": "Saimme ilmoituksesi.", + "reportSentError": "Julkaisun ilmianto ep\u00e4onnistui.", + "modAddCWConfirm": "Haluatko varmasti lis\u00e4t\u00e4 sis\u00e4lt\u00f6varoituksen t\u00e4h\u00e4n julkaisuun?", + "modCWSuccess": "Sis\u00e4lt\u00f6varoitus lis\u00e4tty onnistuneesti", + "modRemoveCWConfirm": "Haluatko varmasti poistaa julkaisun sis\u00e4lt\u00f6varoituksen?", + "modRemoveCWSuccess": "Sis\u00e4lt\u00f6varoitus poistettu", + "modUnlistConfirm": "Haluatko varmasti piilottaa julkaisun?", + "modUnlistSuccess": "Julkaisu piilotettu onnistuneesti", + "modMarkAsSpammerConfirm": "Haluatko varmasti merkit\u00e4 k\u00e4ytt\u00e4j\u00e4n roskapostittajaksi? Kaikki nykyiset ja tulevat julkaisut saavat sis\u00e4lt\u00f6varoituksen ja julkaisut piilotetaan julkisilta aikajanoilta.", + "modMarkAsSpammerSuccess": "Tili merkitty roskapostittajaksi", + "toFollowers": "seuraajille", + "showCaption": "N\u00e4yt\u00e4 kuvaus", + "showLikes": "N\u00e4yt\u00e4 tykk\u00e4ykset", + "compactMode": "Kompakti tila", + "embedConfirmText": "K\u00e4ytt\u00e4m\u00e4ll\u00e4 upotusta, hyv\u00e4ksyt", + "deletePostConfirm": "Haluatko varmasti poistaa julkaisun?", + "archivePostConfirm": "Haluatko varmasti arkistoida julkaisun?", + "unarchivePostConfirm": "Haluatko varmasti peruuttaa julkaisun arkistoinnin?" }, "story": { - "add": "Add Story" + "add": "Lis\u00e4\u00e4 tarina" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/fr.json b/resources/assets/js/i18n/fr.json index 925028a2c..bf9af15af 100644 --- a/resources/assets/js/i18n/fr.json +++ b/resources/assets/js/i18n/fr.json @@ -10,18 +10,23 @@ "shared": "Partag\u00e9", "shares": "Partages", "unshare": "Ne plus partager", + "bookmark": "Marque-page", "cancel": "Annuler", "copyLink": "Copier le lien", "delete": "Supprimer", "error": "Erreur", "errorMsg": "Une erreur est survenue. Veuillez r\u00e9essayer plus tard.", - "oops": "Zut !", + "oops": "Oups\u00a0!", "other": "Autre", "readMore": "En savoir plus", - "success": "Op\u00e9ration r\u00e9ussie", + "success": "Succ\u00e8s", + "proceed": "Continuer", + "next": "Suivant", + "close": "Fermer", + "clickHere": "cliquez ici", "sensitive": "Sensible", "sensitiveContent": "Contenu sensible", - "sensitiveContentWarning": "Le contenu de ce message peut \u00eatre sensible" + "sensitiveContentWarning": "Le contenu de cette publication peut \u00eatre sensible" }, "site": { "terms": "Conditions d'utilisation", @@ -30,9 +35,9 @@ "navmenu": { "search": "Chercher", "admin": "Tableau de bord d'administration", - "homeFeed": "Fil principal", - "localFeed": "Fil local", - "globalFeed": "Fil global", + "homeFeed": "Flux principal", + "localFeed": "Flux local", + "globalFeed": "Flux global", "discover": "D\u00e9couvrir", "directMessages": "Messages Priv\u00e9s", "notifications": "Notifications", @@ -42,7 +47,7 @@ "drive": "M\u00e9diath\u00e8que", "settings": "Param\u00e8tres", "compose": "Publier", - "logout": "Logout", + "logout": "D\u00e9connexion", "about": "\u00c0 propos", "help": "Aide", "language": "Langue", @@ -73,7 +78,8 @@ "groupPost": "publication de groupe", "modlog": "journal de mod\u00e9ration", "post": "publication", - "story": "story" + "story": "story", + "noneFound": "Aucune notification trouv\u00e9e" }, "post": { "shareToFollowers": "Partager avec ses abonn\u00e9\u00b7e\u00b7s", @@ -90,10 +96,10 @@ "follow": "S'abonner", "unfollow": "Se d\u00e9sabonner", "editProfile": "Modifier votre profil", - "followRequested": "Demande d'abonnement", + "followRequested": "Demande d'abonnement faite", "joined": "A rejoint", "emptyCollections": "Aucune collection ne semble exister", - "emptyPosts": "Aucune publication ne semble exister" + "emptyPosts": "Il semble n\u2019y avoir aucune publication" }, "menu": { "viewPost": "Voir la publication", @@ -108,7 +114,7 @@ "addCW": "Ajouter un avertissement de contenu", "removeCW": "Enlever l\u2019avertissement de contenu", "markAsSpammer": "Marquer comme spammeur\u00b7euse", - "markAsSpammerText": "Retirer + avertissements pour les contenus existants et futurs", + "markAsSpammerText": "Retirer des flux + ajouter un avertissement de contenu pour les publications existantes et futures", "spam": "Ind\u00e9sirable", "sensitive": "Contenu sensible", "abusive": "Abusif ou pr\u00e9judiciable", @@ -126,7 +132,7 @@ "modRemoveCWConfirm": "\u00cates-vous s\u00fbr\u00b7e de vouloir supprimer l'avertissement de contenu sur cette publication ?", "modRemoveCWSuccess": "Avertissement de contenu supprim\u00e9 avec succ\u00e8s", "modUnlistConfirm": "\u00cates-vous s\u00fbr\u00b7e de vouloir retirer cette publication des flux ?", - "modUnlistSuccess": "Publication retir\u00e9e des fils avec succ\u00e8s", + "modUnlistSuccess": "Publication retir\u00e9e des flux avec succ\u00e8s", "modMarkAsSpammerConfirm": "\u00cates-vous s\u00fbr\u00b7e de vouloir marquer cet utilisateur\u00b7rice comme spammeur\u00b7euse ? Toutes les publications existantes et futures seront retir\u00e9es des flux et un avertissement de contenu sera appliqu\u00e9.", "modMarkAsSpammerSuccess": "Compte marqu\u00e9 avec succ\u00e8s comme spammeur", "toFollowers": "aux abonn\u00e9\u00b7e\u00b7s", @@ -142,9 +148,23 @@ "add": "Ajouter une story" }, "timeline": { - "peopleYouMayKnow": "Connaissances possibles" + "peopleYouMayKnow": "Connaissances possibles", + "onboarding": { + "welcome": "Bienvenue", + "thisIsYourHomeFeed": "Ceci est votre flux personnel, un flux chronologique des publications de comptes que vous suivez.", + "letUsHelpYouFind": "Laissez-nous vous aider \u00e0 trouver des personnes int\u00e9ressantes \u00e0 suivre", + "refreshFeed": "Actualiser mon flux" + } }, "hashtags": { "emptyFeed": "Aucune publication ne semble exister pour ce hashtag" + }, + "report": { + "report": "Signaler", + "selectReason": "S\u00e9lectionner un motif", + "reported": "Signal\u00e9", + "sendingReport": "Envoi du signalement", + "thanksMsg": "Merci pour votre signalement, les gens comme vous aident \u00e0 assurer la s\u00e9curit\u00e9 de notre communaut\u00e9 !", + "contactAdminMsg": "Si vous souhaitez contacter un\u00b7e administrateur\u00b7trice \u00e0 propos de cette publication ou de ce signalement" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/gd.json b/resources/assets/js/i18n/gd.json index 112a79ded..420f637d8 100644 --- a/resources/assets/js/i18n/gd.json +++ b/resources/assets/js/i18n/gd.json @@ -1,150 +1,170 @@ { "common": { "comment": "Beachd", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", + "commented": "Beachd ris", + "comments": "Beachdan", + "like": "Cuir ris na h-annsachdan", + "liked": "\u2019Na annsachd", + "likes": "Na h-annsachdan", "share": "Co-roinn", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", + "shared": "\u2019Ga cho-roinneadh", + "shares": "\u2019Ga cho-roinneadh", + "unshare": "Na co-roinn tuilleadh", + "bookmark": "Comharra-l\u00ecn", "cancel": "Sguir dheth", "copyLink": "D\u00e8an lethbhreac dhen cheangal", "delete": "Sguab \u00e0s", "error": "Mearachd", - "errorMsg": "Something went wrong. Please try again later.", + "errorMsg": "Chaidh rudeigin ce\u00e0rr. Feuch ris a-rithist an ceann greis.", "oops": "\u00ccoc!", - "other": "Other", - "readMore": "Read more", - "success": "Success", + "other": "Eile", + "readMore": "Leugh an c\u00f2rr", + "success": "Chaidh leis", + "proceed": "Lean air adhart", + "next": "Air adhart", + "close": "D\u00f9in", + "clickHere": "briog an-seo", "sensitive": "Frionasach", "sensitiveContent": "Susbaint fhrionasach", - "sensitiveContentWarning": "This post may contain sensitive content" + "sensitiveContentWarning": "Dh\u2019fhaoidte gu bheil susbaint fhrionasach sa phost seo" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Teirmichean a\u2019 chleachdaidh", + "privacy": "Poileasaidh pr\u00ecobhaideachd" }, "navmenu": { "search": "Lorg", - "admin": "Admin Dashboard", + "admin": "Deas-bh\u00f2rd na rianachd", "homeFeed": "Inbhir na dachaigh", "localFeed": "Inbhir ionadail", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", + "globalFeed": "Inbhir co-naisgte", + "discover": "Fidir", + "directMessages": "Teachdaireachdan d\u00ecreach", "notifications": "Brathan", "groups": "Buidhnean", "stories": "Sgeulan", "profile": "Pr\u00f2ifil", "drive": "Draibh", "settings": "Roghainnean", - "compose": "Cruthaich fear \u00f9r", - "logout": "Logout", + "compose": "Cruthaich", + "logout": "Cl\u00e0raich a-mach", "about": "Mu dh\u00e8idhinn", "help": "Cobhair", "language": "C\u00e0nan", "privacy": "Pr\u00ecobhaideachd", "terms": "Teirmichean", - "backToPreviousDesign": "Go back to previous design" + "backToPreviousDesign": "Till dhan cho-dhealbhachd roimhpe" }, "directMessages": { "inbox": "Am bogsa a-steach", - "sent": "Sent", + "sent": "Air a chur", "requests": "Iarrtasan" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", + "liked": "\u2013 chuir iad seo uat ris na h-annsachdan aca:", + "commented": "\u2013 thug iad beachd air seo uat:", + "reacted": "\u2013 fhreagair iad ri seo uat:", + "shared": "\u2013 cho-roinn iad seo uat:", + "tagged": "\u2013 thug iad iomradh ort ann a sheo:", + "updatedA": "\u2013 dh\u2019\u00f9raich iad", + "sentA": "\u2013 chuir iad", + "followed": "\u2013 lean iad:", + "mentioned": "\u2013 thug iad iomradh air:", + "you": "thusa", + "yourApplication": "Tha an t-iarrtas agad air ballrachd air a", + "applicationApproved": "ghabhail ris!", + "applicationRejected": "dhi\u00f9ltadh. \u2019S urrainn dhut iarrtas air ballrachd a chur a-steach a-rithist \u00e0s d\u00e8idh 6 m\u00ecosan.", + "dm": "teachdaireachd dh\u00ecreach", + "groupPost": "post buidhinn", + "modlog": "loga nam maor", "post": "post", - "story": "sgeul" + "story": "sgeul", + "noneFound": "Cha deach brath a lorg" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "Co-roinn leis an luchd-leantainn", + "shareToOther": "Co-roinn le c\u00e0ch", + "noLikes": "Chan eil seo \u2019na annsachd fhathast", + "uploading": "\u2019Ga luchdadh suas" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", + "posts": "Postaichean", + "followers": "Luchd-leantainn", + "following": "A\u2019 leantainn", + "admin": "Rianaire", "collections": "Cruinneachaidhean", - "follow": "Lean air", - "unfollow": "Unfollow", + "follow": "Lean", + "unfollow": "Na lean tuilleadh", "editProfile": "Deasaich a\u2019 phr\u00f2ifil", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "followRequested": "Iarrar leantainn", + "joined": "Air ballrachd fhaighinn", + "emptyCollections": "Cha do lorg sinn cruinneachadh sam bith", + "emptyPosts": "Cha do lorg sinn post sam bith" }, "menu": { "viewPost": "Seall am post", "viewProfile": "Seall a\u2019 phr\u00f2ifil", "moderationTools": "Innealan na maorsainneachd", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", + "report": "D\u00e8an gearan", + "archive": "Tasglannaich", + "unarchive": "Thoir \u00e0s an tasg-lann", "embed": "Leabaich", "selectOneOption": "Tagh t\u00e8 dhe na roghainnean seo", - "unlistFromTimelines": "Unlist from Timelines", + "unlistFromTimelines": "Falaich o loidhnichean-ama", "addCW": "Cuir rabhadh susbainte ris", "removeCW": "Thoir air falbh an rabhadh susbainte", "markAsSpammer": "Cuir comharra gur e spamair a th\u2019 ann", - "markAsSpammerText": "Unlist + CW existing and future posts", + "markAsSpammerText": "Falaich o loidhnichean-ama \u204a cuir comharra na frionasachd ri postaichean a tha ann \u2019s ri teachd", "spam": "Spama", "sensitive": "Susbaint fhrionasach", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", + "abusive": "Droch-dh\u00ecolach no cronail", + "underageAccount": "Cunntas fo-aoisich", + "copyrightInfringement": "Briseadh a-steach air c\u00f2ir-lethbhreac", + "impersonation": "Ann an riochd cuideigin eile", + "scamOrFraud": "Cleas-meallaidh no foill", "confirmReport": "Dearbh an gearan", - "confirmReportText": "Are you sure you want to report this post?", + "confirmReportText": "A bheil thu cinnteach gu bheil thu airson gearan a dh\u00e8anamh mun phost seo?", "reportSent": "Chaidh an gearan a chur!", "reportSentText": "Fhuair sinn do ghearan.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", + "reportSentError": "Thachair duilgheadas le gearan a dh\u00e8anamh mun phost seo.", + "modAddCWConfirm": "A bheil thu cinnteach gu bheil thu airson rabhadh susbainte a chur ris a\u2019 phost seo?", + "modCWSuccess": "Chaidh rabhadh susbainte a chur ris", + "modRemoveCWConfirm": "A bheil thu cinnteach gu bheil thu airson an rabhadh susbainte a thoirt air falbh on phost seo?", + "modRemoveCWSuccess": "Chaidh an rabhadh susbainte a thoirt air falbh", + "modUnlistConfirm": "A bheil thu cinnteach gu bheil thu airson am post seo fhalach o liostaichean?", + "modUnlistSuccess": "Chaidh am post fhalach o liostaichean", + "modMarkAsSpammerConfirm": "A bheil tu cinnteach gu bheil thu comharra an spamair a chur ris a\u2019 cleachdaiche seo? Th\u00e8id gach post a tha ann is postaichean ri teachd fhalach o loidhnichean-ama agus rabadh susbainte a chur riutha.", + "modMarkAsSpammerSuccess": "Chaidh comharra an spamair a chur ris a\u2019 chunntas", + "toFollowers": "dhan luchd-leantainn", "showCaption": "Seall am fo-thiotal", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", + "showLikes": "Seal na h-annsachdan", + "compactMode": "Am modh d\u00f9mhlaichte", + "embedConfirmText": "Nuair a chleachdas tu an leabachadh seo, aontaichidh tu ri", "deletePostConfirm": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh \u00e0s?", "archivePostConfirm": "A bheil thu cinnteach gu bheil thu airson am post seo a chur dhan tasg-lann?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "unarchivePostConfirm": "A bheil thu cinnteach gu bheil thu airson am post seo a thoirt \u00e0s an tasg-lann?" }, "story": { "add": "Cuir sgeul ris" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "Daoine as aithne dhut \u2019s d\u00f2cha", + "onboarding": { + "welcome": "F\u00e0ilte ort", + "thisIsYourHomeFeed": "Seo inbhir na dachaigh agad a sheallas na postaichean o na cunntasan a leanas tu dhut, a-r\u00e8ir an ama.", + "letUsHelpYouFind": "An cuidich sinn thu ach an lorg thu daoine inntinneach ri an leantainn?", + "refreshFeed": "Ath-nuadhaich an t-inbhir agam" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Cha do lorg sinn post sam bith dhan taga hais seo" + }, + "report": { + "report": "D\u00e8an gearan", + "selectReason": "Tagh adhbhar", + "reported": "Chaidh gearan a dh\u00e8anamh", + "sendingReport": "A\u2019 cur a\u2019 ghearain", + "thanksMsg": "M\u00f2ran taing airson gearan a dh\u00e8anamh, cuidichidh daoine mar a tha thu fh\u00e8in ach an cumamaid ar coimhearsnachd s\u00e0bhailte!", + "contactAdminMsg": "Nam bu toigh leat fios a chur gu rianaire mun post no ghearan seo" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/gl.json b/resources/assets/js/i18n/gl.json index 68b685273..43902057f 100644 --- a/resources/assets/js/i18n/gl.json +++ b/resources/assets/js/i18n/gl.json @@ -10,6 +10,7 @@ "shared": "Compartiu", "shares": "Compartido", "unshare": "Non compartir", + "bookmark": "Marcar", "cancel": "Cancelar", "copyLink": "Copiar ligaz\u00f3n", "delete": "Eliminar", @@ -19,6 +20,10 @@ "other": "Outro", "readMore": "Ler m\u00e1is", "success": "\u00c9xito", + "proceed": "Proceder", + "next": "Seguinte", + "close": "Pechar", + "clickHere": "preme aqu\u00ed", "sensitive": "Sensible", "sensitiveContent": "Contido sensible", "sensitiveContentWarning": "Esta publicaci\u00f3n pode conter contido sensible" @@ -42,7 +47,7 @@ "drive": "Drive", "settings": "Axustes", "compose": "Crear Nova", - "logout": "Logout", + "logout": "Sa\u00edr", "about": "Acerca de", "help": "Axuda", "language": "Idioma", @@ -63,17 +68,18 @@ "tagged": "etiquetoute nunca", "updatedA": "actualizou unha", "sentA": "enviou unha", - "followed": "seguiu", - "mentioned": "mencionou", - "you": "you", + "followed": "seguiute", + "mentioned": "mencionoute", + "you": "ti", "yourApplication": "A t\u00faa solicitude para unirte", "applicationApproved": "foi aprobada!", "applicationRejected": "for rexeitada. Podes volver a solicitar unirte en 6 meses.", "dm": "md", - "groupPost": "group post", + "groupPost": "publicaci\u00f3n grupal", "modlog": "modlog", "post": "publicaci\u00f3n", - "story": "historia" + "story": "historia", + "noneFound": "Non hai notificaci\u00f3ns" }, "post": { "shareToFollowers": "Compartir a seguidores", @@ -92,8 +98,8 @@ "editProfile": "Editar perfil", "followRequested": "Seguimento pedido", "joined": "Uniuse", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "emptyCollections": "Non podemos atopar ningunha colecci\u00f3n", + "emptyPosts": "Non podemos atopar ningunha publicaci\u00f3n" }, "menu": { "viewPost": "Ver publicaci\u00f3n", @@ -142,9 +148,23 @@ "add": "Engadir historia" }, "timeline": { - "peopleYouMayKnow": "Xente que podes co\u00f1ecer" + "peopleYouMayKnow": "Xente que podes co\u00f1ecer", + "onboarding": { + "welcome": "Benvido/a", + "thisIsYourHomeFeed": "Esta \u00e9 a t\u00faa cronolox\u00eda de inicio, formada por publicaci\u00f3ns en orde cronol\u00f3xica das contas que segues.", + "letUsHelpYouFind": "Deixa que che axudemos a atopar xente interesante que seguir", + "refreshFeed": "Actualiza a cronolox\u00eda" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Non podemos atopar ningunha publicaci\u00f3n con este cancelo" + }, + "report": { + "report": "Denunciar", + "selectReason": "Elixe unha raz\u00f3n", + "reported": "Denunciado", + "sendingReport": "Enviando a denuncia", + "thanksMsg": "Grazas pola denuncia e axudarnos a manter segura a comunidade!", + "contactAdminMsg": "Se queres contactar coa administraci\u00f3n acerca desta publicaci\u00f3n ou denuncia" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/he.json b/resources/assets/js/i18n/he.json index c434c9eb7..ceefac458 100644 --- a/resources/assets/js/i18n/he.json +++ b/resources/assets/js/i18n/he.json @@ -10,6 +10,7 @@ "shared": "\u05e9\u05d9\u05ea\u05e4\u05d5", "shares": "\u05e9\u05d9\u05ea\u05d5\u05e4\u05d9\u05dd", "unshare": "\u05d1\u05d9\u05d8\u05d5\u05dc-\u05e9\u05d9\u05ea\u05d5\u05e3", + "bookmark": "\u05e9\u05de\u05d9\u05e8\u05d4", "cancel": "\u05d1\u05d9\u05d8\u05d5\u05dc", "copyLink": "\u05d4\u05e2\u05ea\u05e7 \u05e7\u05d9\u05e9\u05d5\u05e8", "delete": "\u05de\u05d7\u05e7", @@ -19,6 +20,10 @@ "other": "\u05d0\u05d7\u05e8", "readMore": "\u05e7\u05e8\u05d0 \u05e2\u05d5\u05d3", "success": "\u05d4\u05e6\u05dc\u05d7\u05d4", + "proceed": "\u05d4\u05de\u05e9\u05da", + "next": "\u05d4\u05d1\u05d0", + "close": "\u05e1\u05d2\u05d5\u05e8", + "clickHere": "\u05dc\u05d7\u05e5 \u05db\u05d0\u05df", "sensitive": "\u05e8\u05d2\u05d9\u05e9", "sensitiveContent": "\u05ea\u05d5\u05db\u05df \u05e8\u05d2\u05d9\u05e9", "sensitiveContentWarning": "\u05e4\u05d5\u05e1\u05d8 \u05d6\u05d4 \u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05db\u05d9\u05dc \u05ea\u05d5\u05db\u05df \u05e8\u05d2\u05d9\u05e9" @@ -63,7 +68,7 @@ "tagged": "\u05ea\u05d9\u05d9\u05d2\u05d5 \u05d0\u05d5\u05ea\u05da \u05d1\u05ea\u05d5\u05da", "updatedA": "\u05e2\u05d3\u05db\u05e0\u05d5", "sentA": "\u05e9\u05dc\u05d7\u05d5", - "followed": "\u05e2\u05d5\u05e7\u05d1\u05d9\u05dd", + "followed": "\u05e2\u05e7\u05d1\u05d5", "mentioned": "\u05e6\u05d9\u05d9\u05e0\u05d5", "you": "\u05d0\u05ea\u05db\u05dd", "yourApplication": "\u05d1\u05e7\u05e9\u05ea\u05db\u05dd \u05dc\u05d4\u05e6\u05d8\u05e8\u05e4\u05d5\u05ea", @@ -73,7 +78,8 @@ "groupPost": "\u05e4\u05d5\u05e1\u05d8 \u05e7\u05d1\u05d5\u05e6\u05ea\u05d9", "modlog": "\u05dc\u05d5\u05d2 \u05de\u05e0\u05d4\u05dc\u05d9\u05dd", "post": "\u05e4\u05d5\u05e1\u05d8", - "story": "\u05e1\u05d8\u05d5\u05e8\u05d9" + "story": "\u05e1\u05d8\u05d5\u05e8\u05d9", + "noneFound": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05d4\u05ea\u05e8\u05d0\u05d5\u05ea" }, "post": { "shareToFollowers": "\u05e9\u05ea\u05e3 \u05dc\u05e2\u05d5\u05e7\u05d1\u05d9\u05dd", @@ -142,9 +148,23 @@ "add": "\u05d4\u05d5\u05e1\u05e3 \u05e1\u05d8\u05d5\u05e8\u05d9" }, "timeline": { - "peopleYouMayKnow": "\u05d0\u05e0\u05e9\u05d9\u05dd \u05e9\u05d0\u05ea\u05dd \u05d0\u05d5\u05dc\u05d9 \u05de\u05db\u05d9\u05e8\u05d9\u05dd" + "peopleYouMayKnow": "\u05d0\u05e0\u05e9\u05d9\u05dd \u05e9\u05d0\u05ea\u05dd \u05d0\u05d5\u05dc\u05d9 \u05de\u05db\u05d9\u05e8\u05d9\u05dd", + "onboarding": { + "welcome": "\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd", + "thisIsYourHomeFeed": "\u05d6\u05d4\u05d5 \u05e4\u05d9\u05d3 \u05d4\u05d1\u05d9\u05ea, \u05e4\u05d9\u05d3 \u05db\u05e8\u05d5\u05e0\u05d5\u05dc\u05d5\u05d2\u05d9 \u05e9\u05dc \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05de\u05d7\u05e9\u05d1\u05d5\u05e0\u05d5\u05ea \u05d0\u05d7\u05e8\u05d9\u05d4\u05dd \u05d0\u05ea\u05dd \u05e2\u05d5\u05e7\u05d1\u05d9\u05dd.", + "letUsHelpYouFind": "\u05d0\u05e4\u05e9\u05e8\u05d5 \u05dc\u05e0\u05d5 \u05dc\u05e2\u05d6\u05d5\u05e8 \u05dc\u05da \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05e0\u05e9\u05d9\u05dd \u05de\u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05dc\u05e2\u05e7\u05d5\u05d1", + "refreshFeed": "\u05e8\u05d9\u05e2\u05e0\u05d5\u05df \u05d4\u05e4\u05d9\u05d3" + } }, "hashtags": { "emptyFeed": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05e2\u05d1\u05d5\u05e8 \u05ea\u05d9\u05d5\u05d2 \u05d6\u05d4" + }, + "report": { + "report": "\u05d3\u05d5\u05d5\u05d7", + "selectReason": "\u05d1\u05d7\u05e8\u05d5 \u05e1\u05d9\u05d1\u05d4", + "reported": "\u05d3\u05d9\u05d5\u05d5\u05d7 \u05e0\u05e9\u05dc\u05d7", + "sendingReport": "\u05e9\u05d5\u05dc\u05d7 \u05d3\u05d9\u05d5\u05d5\u05d7", + "thanksMsg": "\u05ea\u05d5\u05d3\u05d4 \u05e2\u05dc \u05d4\u05d3\u05d9\u05d5\u05d5\u05d7, \u05d0\u05e0\u05e9\u05d9\u05dd \u05db\u05de\u05d5\u05db\u05dd \u05de\u05e1\u05e2\u05d9\u05d9\u05dd \u05dc\u05e9\u05de\u05d5\u05e8 \u05e2\u05dc \u05d1\u05d8\u05d7\u05d5\u05df \u05e7\u05d4\u05d9\u05dc\u05ea\u05e0\u05d5!", + "contactAdminMsg": "\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05db\u05dd \u05dc\u05d9\u05e6\u05d5\u05e8 \u05e7\u05e9\u05e8 \u05e2\u05dd \u05de\u05e0\u05d4\u05dc \u05dc\u05d2\u05d1\u05d9 \u05d4\u05e4\u05d5\u05e1\u05d8 \u05d0\u05d5 \u05d3\u05d9\u05d5\u05d5\u05d7 \u05d4\u05d6\u05d4" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/hi.json b/resources/assets/js/i18n/hi.json index 1acb08636..9ca7e7d23 100644 --- a/resources/assets/js/i18n/hi.json +++ b/resources/assets/js/i18n/hi.json @@ -1,130 +1,136 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940 \u0915\u0930\u0947\u0902", + "commented": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "comments": "\u091f\u093f\u092a\u094d\u092a\u0923\u093f\u092f\u093e\u0901", + "like": "\u0930\u0941\u091a\u093f", + "liked": "\u0930\u0941\u091a\u093f", + "likes": "\u0930\u0941\u091a\u093f", + "share": "\u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "shared": "\u0938\u093e\u091d\u093e", + "shares": "\u0938\u093e\u091d\u093e", + "unshare": "\u0938\u093e\u091d\u093e \u0928 \u0915\u0930\u0947\u0902", + "bookmark": "\u092c\u0941\u0915\u092e\u093e\u0930\u094d\u0915", + "cancel": "\u0930\u0926\u094d\u0926", + "copyLink": "\u0932\u093f\u0902\u0915 \u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f", + "delete": "\u0935\u093f\u0932\u094b\u092a\u0928", + "error": "\u0924\u094d\u0930\u0941\u091f\u093f", + "errorMsg": "\u0915\u0941\u091b \u0926\u094b\u0937 \u0939\u0948\u0964 \u0915\u0943\u092a\u092f\u093e \u092a\u0941\u0928\u0903 \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902\u0964", + "oops": "\u0913\u0939!", + "other": "\u0905\u0928\u094d\u092f", + "readMore": "\u0906\u0917\u0947 \u092a\u095d\u0947\u0902", + "success": "\u0938\u092b\u0932 \u0939\u0941\u0906", + "proceed": "\u0906\u0917\u0947 \u092c\u095d\u0947\u0902", + "next": "\u0905\u0917\u0932\u093e", + "close": "\u092c\u0902\u0926 \u0915\u0930\u0947\u0902", + "clickHere": "\u092f\u0939\u093e\u0901 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902", + "sensitive": "\u0938\u0902\u0935\u0947\u0926\u0928\u0936\u0940\u0932", + "sensitiveContent": "\u0938\u0902\u0935\u0947\u0926\u0928\u0936\u0940\u0932 \u0935\u093f\u0937\u092f \u0935\u0938\u094d\u0924\u0941", + "sensitiveContentWarning": "\u0907\u0938\u092e\u0947\u0902 \u092a\u094d\u0930\u0915\u093e\u0936\u093f\u0924 \u0935\u093f\u0937\u092f-\u0935\u0938\u094d\u0924\u0941 \u0938\u0902\u0935\u0947\u0926\u0928\u0936\u0940\u0932 \u0939\u094b \u0938\u0915\u0924\u0940 \u0939\u0948\u0964" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "\u0909\u092a\u092f\u094b\u0917 \u0915\u0947 \u0905\u0928\u0941\u092c\u0902\u0927", + "privacy": "\u0917\u094b\u092a\u0928\u0940\u092f\u0924\u093e \u0928\u0940\u0924\u093f" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "\u0916\u094b\u091c\u0947\u0902", + "admin": "\u090f\u0921\u092e\u093f\u0928 \u0921\u0948\u0936\u092c\u094b\u0930\u094d\u0921", + "homeFeed": "\u0939\u094b\u092e \u092b\u0940\u0921", + "localFeed": "\u0932\u094b\u0915\u0932 \u095e\u0940\u0921", + "globalFeed": "\u0917\u094d\u0932\u094b\u092c\u0932 \u095e\u0940\u0921", + "discover": "\u0905\u0928\u094d\u0935\u0947\u0937\u0923", + "directMessages": "\u0938\u0902\u0926\u0947\u0936", + "notifications": "\u0938\u0942\u091a\u0928\u093e\u090f\u0901", + "groups": "\u0938\u092e\u0942\u0939", + "stories": "\u0915\u0925\u093e\u090f\u0901", + "profile": "\u092a\u094d\u0930\u094b\u092b\u093e\u0907\u0932", + "drive": "\u0921\u094d\u0930\u093e\u0907\u0935", + "settings": "\u0938\u092e\u093e\u092f\u094b\u091c\u0928", + "compose": "\u0928\u092f\u093e \u092c\u0928\u093e\u090f\u0901", + "logout": "\u0932\u0949\u0917\u0906\u0909\u091f", + "about": "\u092a\u0930\u093f\u091c\u094d\u091e\u093e\u0928", + "help": "\u0938\u0939\u093e\u092f\u0924\u093e", + "language": "\u092d\u093e\u0937\u093e", + "privacy": "\u0917\u094b\u092a\u0928\u0940\u092f\u0924\u093e", + "terms": "\u0905\u0928\u0941\u092c\u0902\u0927", + "backToPreviousDesign": "\u092a\u093f\u091b\u0932\u0947 \u0938\u0902\u092a\u093e\u0926\u0915 \u092a\u0947 \u0935\u093e\u092a\u0938 \u091c\u093e\u090f\u0901" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "\u0938\u0928\u094d\u0926\u0947\u0936", + "sent": "\u092d\u0947\u091c\u0947 \u0917\u090f", + "requests": "\u0928\u093f\u0935\u0947\u0926\u0928" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", - "post": "post", - "story": "story" + "liked": "\u0906\u092a\u0915\u0940 \u092a\u0938\u0902\u0926", + "commented": "\u0906\u092a\u0915\u0940 (\u092a\u094b\u0938\u094d\u091f) \u092a\u0947 \u0915\u092e\u0947\u0902\u091f \u0915\u093f\u090f", + "reacted": "\u0906\u092a\u0915\u0947 \u0932\u093f\u090f \u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e \u0926\u093f\u092f\u0947", + "shared": "\u0906\u092a\u0915\u093e \u0936\u0947\u092f\u0930 \u0915\u093f\u092f\u0947", + "tagged": "\u0906\u092a\u0915\u0947 \u090f\u0915 (\u092a\u094b\u0938\u094d\u091f) \u092e\u0947\u0902 \u091f\u0948\u0917 \u0915\u093f\u092f\u093e \u0917\u092f\u093e", + "updatedA": "\u0905\u092a\u0921\u0947\u091f \u0915\u0930\u0947\u0902 ....", + "sentA": "\u092d\u0947\u091c\u0947\u0902....", + "followed": "\u0905\u0928\u0941\u0917\u092e\u0928 \u0915\u093f\u092f\u093e", + "mentioned": "\u0909\u0932\u094d\u0932\u0947\u0916 \u0915\u093f\u092f\u093e", + "you": "\u0906\u092a", + "yourApplication": "\u091c\u0941\u095c\u0928\u0947 \u0939\u0947\u0924\u0941 \u0906\u092a\u0915\u093e \u0906\u0935\u0947\u0926\u0928", + "applicationApproved": "\u0938\u094d\u0935\u0940\u0915\u0943\u0924 \u0915\u093f\u092f\u093e \u0917\u092f\u093e", + "applicationRejected": "\u0905\u0938\u094d\u0935\u0940\u0915\u0943\u0924 \u0915\u093f\u092f\u093e \u0917\u092f\u093e\u0964 \u0906\u092a \u096c \u092e\u093e\u0938 \u0915\u0947 \u0909\u092a\u0930\u093e\u0902\u0924 \u092a\u0941\u0928\u0903 \u0906\u0935\u0947\u0926\u0928 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", + "dm": "\u0938\u0902\u0926\u0947\u0936", + "groupPost": "\u0938\u093e\u092e\u0942\u0939\u093f\u0915 \u092a\u094d\u0930\u0915\u093e\u0936\u0928", + "modlog": "\u092e\u0949\u0921\u0932\u0949\u0917", + "post": "\u092a\u094d\u0930\u0915\u093e\u0936\u0928", + "story": "\u0915\u0925\u093e", + "noneFound": "\u0915\u094b\u0908 \u0928\u094b\u091f\u0940\u092b\u093f\u0915\u0947\u0938\u0928 \u0928\u0939\u0940\u0902 \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0939\u0941\u092f\u0940" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "\u0905\u0928\u0941\u092f\u093e\u092f\u093f\u092f\u094b\u0902 \u0938\u0947 \u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "shareToOther": "\u0905\u0928\u094d\u092f\u094b\u0902 \u0938\u0947 \u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "noLikes": "\u0905\u092d\u0940 \u0924\u0915 \u0915\u094b\u0908 \u0930\u0941\u091a\u093f \u0928\u0939\u0940\u0902", + "uploading": "\u0905\u092a\u0932\u094b\u0921 \u0939\u094b \u0930\u0939\u093e \u0939\u0948" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "\u092a\u094d\u0930\u0915\u093e\u0936\u0928", + "followers": "\u092b\u094b\u0932\u094b\u0905\u0930\u094d\u0938", + "following": "\u092b\u0949\u0932\u094b\u0907\u0902\u0917", + "admin": "\u090f\u0921\u092e\u093f\u0928", + "collections": "\u0915\u0932\u0947\u0915\u094d\u0936\u0928\u0938", + "follow": "\u092b\u0949\u0932\u094b", + "unfollow": "\u0905\u0928\u092b\u0949\u0932\u094b", + "editProfile": "\u092a\u094d\u0930\u094b\u092b\u093e\u0907\u0932 \u0938\u092e\u094d\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902", + "followRequested": "\u0930\u093f\u0915\u094d\u0935\u0947\u0938\u094d\u091f\u090f\u0921 \u0915\u094b \u092b\u0949\u0932\u094b \u0915\u0930\u0947\u0902", + "joined": "\u091c\u094d\u0935\u093e\u0907\u0928\u0921", + "emptyCollections": "\u0939\u092e\u0947\u0902 \u0915\u093f\u0938\u0940 \u0938\u0902\u0917\u094d\u0930\u0939\u094b\u0902 \u0915\u093e \u092a\u0924\u093e \u0928\u0939\u0940\u0902 \u0932\u0917 \u0938\u0915\u0924\u093e", + "emptyPosts": "\u0939\u092e \u0915\u093f\u0938\u0940 \u092a\u094b\u0938\u094d\u091f \u0915\u093e \u092a\u0924\u093e \u0928\u0939\u0940\u0902 \u0932\u0917 \u0938\u0915\u0924\u093e \u0939\u0948" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", + "viewPost": "\u092a\u094b\u0938\u094d\u091f \u0926\u0947\u0916\u0947\u0902", + "viewProfile": "\u092a\u094d\u0930\u094b\u092b\u093e\u0907\u0932 \u0926\u0947\u0916\u0947\u0902", + "moderationTools": "\u092e\u0949\u0921\u0930\u0947\u0936\u0928 \u091f\u0942\u0932\u094d\u0938", + "report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f", "archive": "Archive", "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", - "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", + "embed": "\u090f\u092e\u094d\u092c\u0947\u0921", + "selectOneOption": "\u0915\u093f\u0938\u0940 \u090f\u0915 \u0935\u093f\u0915\u0932\u094d\u092a \u0915\u094b \u091a\u0941\u0928\u0947", + "unlistFromTimelines": "\u091f\u093e\u0907\u092e\u0932\u093e\u0907\u0928\u094d\u0938 \u0938\u0947 \u0939\u091f\u093e\u090f\u0902", + "addCW": "\u0915\u0902\u091f\u0947\u0902\u091f \u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u091c\u094b\u095c\u0947\u0902", + "removeCW": "\u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u0915\u0902\u091f\u0947\u0902\u091f \u0939\u091f\u093e\u090f\u0902", + "markAsSpammer": "\u0938\u094d\u092a\u0948\u092e\u0930 \u092e\u093e\u0930\u094d\u0915 \u0915\u0930\u0947\u0902", + "markAsSpammerText": "\u0905\u0928\u0932\u093f\u0938\u094d\u091f + \u0938\u0940\u0921\u092c\u0932\u094d\u092f\u0941 \u092e\u094c\u091c\u0942\u0926\u093e \u0914\u0930 \u092d\u0935\u093f\u0937\u094d\u092f \u092a\u094b\u0938\u094d\u091f", + "spam": "\u0938\u094d\u092a\u0948\u092e", + "sensitive": "\u0938\u0947\u0902\u0938\u093f\u091f\u093f\u0935 \u0915\u0902\u091f\u0947\u0902\u091f", + "abusive": "\u0905\u092a\u092e\u093e\u0928\u091c\u0928\u0915 \u092f\u093e \u0939\u093e\u0928\u093f\u0915\u093e\u0930\u0915", + "underageAccount": "\u0928\u093e\u092c\u093e\u0932\u093f\u0917 \u0905\u0915\u093e\u0909\u0902\u091f", + "copyrightInfringement": "\u0915\u0949\u092a\u0940\u0930\u093e\u0908\u091f \u0915\u093e \u0909\u0932\u094d\u0932\u0902\u0918\u0928", + "impersonation": "\u092a\u094d\u0930\u0924\u093f\u0930\u0942\u092a\u0923", "scamOrFraud": "Scam or Fraud", "confirmReport": "Confirm Report", "confirmReportText": "Are you sure you want to report this post?", "reportSent": "Report Sent!", "reportSentText": "We have successfully received your report.", "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", + "modAddCWConfirm": "\u0915\u094d\u092f\u093e \u092f\u0939 \u0928\u093f\u0936\u094d\u091a\u093f\u0924 \u0939\u0948 \u0915\u093f \u0906\u092a \u092a\u094d\u0930\u0915\u093e\u0936\u093f\u0924 \u0938\u093e\u092e\u0917\u094d\u0930\u0940 \u0915\u0947 \u0938\u093e\u0925 \u0935\u093f\u0937\u092f-\u0935\u0938\u094d\u0924\u0941 \u0938\u092e\u094d\u092c\u0902\u0927\u093f\u0924 \u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u091c\u094b\u095c\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948\u0902?", + "modCWSuccess": "\u0935\u093f\u0937\u092f-\u0935\u0938\u094d\u0924\u0941 \u0938\u092e\u094d\u092c\u0902\u0927\u093f\u0924 \u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u0938\u092b\u0932\u0924\u093e \u0938\u0947 \u091c\u094b\u095c\u0940 \u0917\u092f\u0940", + "modRemoveCWConfirm": "\u0915\u094d\u092f\u093e \u092f\u0939 \u0928\u093f\u0936\u094d\u091a\u093f\u0924 \u0939\u0948 \u0915\u093f \u0906\u092a \u092a\u094d\u0930\u0915\u093e\u0936\u093f\u0924 \u0938\u093e\u092e\u0917\u094d\u0930\u0940 \u0938\u0947 \u0935\u093f\u0937\u092f-\u0935\u0938\u094d\u0924\u0941 \u0938\u092e\u094d\u092c\u0902\u0927\u093f\u0924 \u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u0939\u091f\u093e\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948\u0902?", + "modRemoveCWSuccess": "\u0935\u093f\u0937\u092f-\u0935\u0938\u094d\u0924\u0941 \u0938\u092e\u094d\u092c\u0902\u0927\u093f\u0924 \u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u0938\u092b\u0932\u0924\u093e \u0938\u0947 \u0939\u091f\u093e\u0908 \u0917\u092f\u0940", "modUnlistConfirm": "Are you sure you want to unlist this post?", "modUnlistSuccess": "Successfully unlisted post", "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/hr.json b/resources/assets/js/i18n/hr.json index 1acb08636..fc91f9371 100644 --- a/resources/assets/js/i18n/hr.json +++ b/resources/assets/js/i18n/hr.json @@ -10,6 +10,7 @@ "shared": "Shared", "shares": "Shares", "unshare": "Unshare", + "bookmark": "Bookmark", "cancel": "Cancel", "copyLink": "Copy Link", "delete": "Delete", @@ -19,6 +20,10 @@ "other": "Other", "readMore": "Read more", "success": "Success", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", "sensitive": "Sensitive", "sensitiveContent": "Sensitive Content", "sensitiveContentWarning": "This post may contain sensitive content" @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/hu.json b/resources/assets/js/i18n/hu.json index 2db23adba..c58426a4e 100644 --- a/resources/assets/js/i18n/hu.json +++ b/resources/assets/js/i18n/hu.json @@ -4,24 +4,29 @@ "commented": "Hozz\u00e1sz\u00f3lva", "comments": "Hozz\u00e1sz\u00f3l\u00e1sok", "like": "Tetszik", - "liked": "Tetszik", + "liked": "Kedvelve", "likes": "Kedvel\u00e9sek", "share": "Megoszt\u00e1s", "shared": "Megosztva", "shares": "Megoszt\u00e1sok", "unshare": "Megoszt\u00e1s visszavon\u00e1sa", - "cancel": "M\u00e9gsem", - "copyLink": "Link m\u00e1sol\u00e1sa", + "bookmark": "K\u00f6nyvjelz\u0151", + "cancel": "M\u00e9gse", + "copyLink": "Hivatkoz\u00e1s m\u00e1sol\u00e1sa", "delete": "T\u00f6rl\u00e9s", "error": "Hiba", - "errorMsg": "Valami hiba t\u00f6rt\u00e9nt. Pr\u00f3b\u00e1ld \u00fajra k\u00e9s\u0151bb.", + "errorMsg": "Hiba t\u00f6rt\u00e9nt. Pr\u00f3b\u00e1lja \u00fajra k\u00e9s\u0151bb.", "oops": "Hopp\u00e1!", "other": "Egy\u00e9b", "readMore": "Tov\u00e1bb", - "success": "Siker", + "success": "Sikeres", + "proceed": "Folytat\u00e1s", + "next": "K\u00f6vetkez\u0151", + "close": "Bez\u00e1r\u00e1s", + "clickHere": "kattintson ide", "sensitive": "\u00c9rz\u00e9keny", - "sensitiveContent": "K\u00e9nyes tartalom", - "sensitiveContentWarning": "Ez a poszt k\u00e9nyes tartalmat tartalmazhat" + "sensitiveContent": "\u00c9rz\u00e9keny tartalom", + "sensitiveContentWarning": "Ez a bejegyz\u00e9s \u00e9rz\u00e9keny tartalmat tartalmazhat" }, "site": { "terms": "Felhaszn\u00e1l\u00e1si felt\u00e9telek", @@ -30,7 +35,7 @@ "navmenu": { "search": "Keres\u00e9s", "admin": "Admin ir\u00e1ny\u00edt\u00f3pult", - "homeFeed": "Saj\u00e1t id\u0151vonal", + "homeFeed": "Kezd\u0151lap", "localFeed": "Helyi id\u0151vonal", "globalFeed": "Glob\u00e1lis id\u0151vonal", "discover": "Felfedez\u00e9s", @@ -39,13 +44,13 @@ "groups": "Csoportok", "stories": "T\u00f6rt\u00e9netek", "profile": "Profil", - "drive": "Meghajt\u00f3", + "drive": "T\u00e1rhely", "settings": "Be\u00e1ll\u00edt\u00e1sok", "compose": "\u00daj l\u00e9trehoz\u00e1sa", - "logout": "Logout", + "logout": "Kijelentkez\u00e9s", "about": "R\u00f3lunk", "help": "S\u00fag\u00f3", - "language": "Nyelvek", + "language": "Nyelv", "privacy": "Adatv\u00e9delem", "terms": "Felt\u00e9telek", "backToPreviousDesign": "Vissza az el\u0151z\u0151 kin\u00e9zetre" @@ -53,27 +58,28 @@ "directMessages": { "inbox": "Bej\u00f6v\u0151", "sent": "Elk\u00fcld\u00f6tt", - "requests": "K\u00e9relmek" + "requests": "K\u00e9r\u00e9sek" }, "notifications": { - "liked": "kedvelte %-t", - "commented": "hozz\u00e1sz\u00f3lt a %-hez", - "reacted": "reag\u00e1lt a %-re", - "shared": "megosztotta a %-t", + "liked": "kedvelte ezt:", + "commented": "hozz\u00e1sz\u00f3lt ehhez:", + "reacted": "reag\u00e1lt erre:", + "shared": "megosztotta ezt:", "tagged": "megjel\u00f6lt ebben", - "updatedA": "friss\u00edtette a %-t", - "sentA": "k\u00fcld\u00f6tt egy %-t", - "followed": "k\u00f6vet\u00e9s", - "mentioned": "megeml\u00edtett", - "you": "te", - "yourApplication": "A csatlakoz\u00e1si k\u00e9relmed", - "applicationApproved": "elfogadva!", - "applicationRejected": "elutas\u00edtva. A csatlakoz\u00e1st 6 h\u00f3nap m\u00falva \u00fajra k\u00e9relmezheted.", + "updatedA": "friss\u00edtette ezt:", + "sentA": "ezt k\u00fcldte:", + "followed": "k\u00f6veti", + "mentioned": "megeml\u00edtette", + "you": "\u00d6nt", + "yourApplication": "A csatlakoz\u00e1si k\u00e9r\u00e9s\u00e9t", + "applicationApproved": "elfogadt\u00e1k!", + "applicationRejected": "elutas\u00edtott\u00e1k. A csatlakoz\u00e1st 6 h\u00f3nap m\u00falva \u00fajra k\u00e9rheti.", "dm": "k\u00f6zvetlen \u00fczenet", - "groupPost": "csoportos poszt", + "groupPost": "csoportos bejegyz\u00e9s", "modlog": "mod napl\u00f3", "post": "bejegyz\u00e9s", - "story": "t\u00f6rt\u00e9net" + "story": "t\u00f6rt\u00e9net", + "noneFound": "Nincsenek \u00e9rtes\u00edt\u00e9sek" }, "post": { "shareToFollowers": "Megoszt\u00e1s a k\u00f6vet\u0151kkel", @@ -90,25 +96,25 @@ "follow": "K\u00f6vet\u00e9s", "unfollow": "K\u00f6vet\u00e9s visszavon\u00e1sa", "editProfile": "Profil szerkeszt\u00e9se", - "followRequested": "K\u00f6vet\u00e9si k\u00e9relmek", + "followRequested": "K\u00f6vet\u00e9si k\u00e9r\u00e9sek", "joined": "Csatlakozott", - "emptyCollections": "\u00dagy fest, nem tal\u00e1lhat\u00f3 egy kollekci\u00f3 se", - "emptyPosts": "\u00dagy fest, nem tal\u00e1lhat\u00f3 egy bejegyz\u00e9s se" + "emptyCollections": "\u00dagy t\u0171nik, hogy egy gy\u0171jtem\u00e9ny sem tal\u00e1lhat\u00f3", + "emptyPosts": "\u00dagy t\u0171nik, hogy egy bejegyz\u00e9s sem tal\u00e1lhat\u00f3" }, "menu": { "viewPost": "Bejegyz\u00e9s megtekint\u00e9se", "viewProfile": "Profil megtekint\u00e9se", "moderationTools": "Moder\u00e1ci\u00f3s eszk\u00f6z\u00f6k", - "report": "Bejelent\u00e9s", + "report": "Jelent\u00e9s", "archive": "Archiv\u00e1l\u00e1s", "unarchive": "Vissza\u00e1ll\u00edt\u00e1s arch\u00edvumb\u00f3l", "embed": "Be\u00e1gyaz\u00e1s", - "selectOneOption": "K\u00e9rj\u00fck, v\u00e1lassz egyet az al\u00e1bbi lehet\u0151s\u00e9gek k\u00f6z\u00fcl", + "selectOneOption": "V\u00e1lasszon egyet az al\u00e1bbi lehet\u0151s\u00e9gek k\u00f6z\u00fcl", "unlistFromTimelines": "A bejegyz\u00e9sek ne jelenjenek meg az id\u0151vonalon", "addCW": "Tartalmi figyelmeztet\u00e9s hozz\u00e1d\u00e1sa", - "removeCW": "Tartalmi figyelmeztet\u00e9s t\u00f6rl\u00e9se", + "removeCW": "Tartalmi figyelmeztet\u00e9s elt\u00e1vol\u00edt\u00e1sa", "markAsSpammer": "Megjel\u00f6l\u00e9s spammerk\u00e9nt", - "markAsSpammerText": "\u00d6sszes jelenlegi \u00e9s j\u00f6v\u0151beli bejegyz\u00e9s elrejt\u00e9se \u00e9s tartalom figyelmeztet\u00e9ssel ell\u00e1t\u00e1sa", + "markAsSpammerText": "\u00d6sszes jelenlegi \u00e9s j\u00f6v\u0151beli bejegyz\u00e9s elrejt\u00e9se, \u00e9s tartalmi figyelmeztet\u00e9ssel ell\u00e1t\u00e1sa", "spam": "Spam", "sensitive": "\u00c9rz\u00e9keny tartalom", "abusive": "B\u00e1ntalmaz\u00f3 vagy k\u00e1ros", @@ -116,35 +122,49 @@ "copyrightInfringement": "Szerz\u0151i jogok megs\u00e9rt\u00e9se", "impersonation": "Megszem\u00e9lyes\u00edt\u00e9s", "scamOrFraud": "\u00c1tver\u00e9s vagy vissza\u00e9l\u00e9s", - "confirmReport": "Bejelent\u00e9s meger\u0151s\u00edt\u00e9se", - "confirmReportText": "Biztosan jelenteni akarod ezt a bejegyz\u00e9st?", + "confirmReport": "Jelent\u00e9s meger\u0151s\u00edt\u00e9se", + "confirmReportText": "Biztos, hogy jelenti ezt a bejegyz\u00e9st?", "reportSent": "Jelent\u00e9s elk\u00fcldve!", "reportSentText": "A bejelent\u00e9st sikeresen fogadtuk.", "reportSentError": "Probl\u00e9ma l\u00e9pett fel a bejegyz\u00e9s jelent\u00e9se k\u00f6zben.", - "modAddCWConfirm": "Biztosan tartalom figyelmeztet\u00e9st akarsz erre a bejegyz\u00e9sre alkalmazni?", - "modCWSuccess": "Tartalom figyelmeztet\u00e9s alkalmaz\u00e1sa sikeres", - "modRemoveCWConfirm": "Biztosan elt\u00e1vol\u00edtod a tartalom figyelmeztet\u00e9st err\u0151l a bejegyz\u00e9sr\u0151l?", - "modRemoveCWSuccess": "Tartalom figyelmeztet\u00e9s elt\u00e1vol\u00edt\u00e1sa sikeres", - "modUnlistConfirm": "Biztosan el akarod rejteni ezt a bejegyz\u00e9st?", + "modAddCWConfirm": "Biztos, hogy tartalmi figyelmeztet\u00e9st ad hozz\u00e1 ehhez a bejegyz\u00e9shez?", + "modCWSuccess": "Tartalmi figyelmeztet\u00e9s hozz\u00e1ad\u00e1sa sikeres", + "modRemoveCWConfirm": "Biztos, hogy elt\u00e1vol\u00edtja a tartalmi figyelmeztet\u00e9st err\u0151l a bejegyz\u00e9sr\u0151l?", + "modRemoveCWSuccess": "Tartalmi figyelmeztet\u00e9s elt\u00e1vol\u00edt\u00e1sa sikeres", + "modUnlistConfirm": "Biztos, hogy elrejti ezt a bejegyz\u00e9st?", "modUnlistSuccess": "Bejegyz\u00e9s elrejt\u00e9se sikeres", "modMarkAsSpammerConfirm": "Biztosan spammernek jel\u00f6l\u00f6d ezt a felhaszn\u00e1l\u00f3t? Az \u00f6sszes jelenlegi \u00e9s j\u00f6v\u0151beli bejegyz\u00e9se elrejt\u00e9sre ker\u00fcl az id\u0151vonalon \u00e9s tartalom figyelmeztet\u00e9s ker\u00fcl alkalmaz\u00e1sra.", "modMarkAsSpammerSuccess": "A fi\u00f3k sikeresen spammerk\u00e9nt jel\u00f6lve", "toFollowers": "k\u00f6vet\u0151k", - "showCaption": "K\u00e9pal\u00e1\u00edr\u00e1s mutat\u00e1sa", + "showCaption": "Felirat megjelen\u00edt\u00e9se", "showLikes": "L\u00e1jkok mutat\u00e1sa", "compactMode": "Kompakt m\u00f3d", - "embedConfirmText": "A beilleszt\u00e9s haszn\u00e1lat\u00e1val hozz\u00e1j\u00e1rulsz a mi", - "deletePostConfirm": "Biztosan t\u00f6r\u00f6lni akarod ezt a bejegyz\u00e9st?", - "archivePostConfirm": "Biztosan archiv\u00e1lni akarod ezt a bejegyz\u00e9st?", - "unarchivePostConfirm": "Biztosan vissza akarod vonni ennek a bejegyz\u00e9snek az archiv\u00e1l\u00e1s\u00e1t?" + "embedConfirmText": "A be\u00e1gyaz\u00e1s haszn\u00e1lat\u00e1val belegyezik a k\u00f6vetkez\u0151be:", + "deletePostConfirm": "Biztos, hogy t\u00f6rli ezt a bejegyz\u00e9st?", + "archivePostConfirm": "Biztos, hogy archiv\u00e1lja ezt a bejegyz\u00e9st?", + "unarchivePostConfirm": "Biztos, hogy visszavonja a bejegyz\u00e9s archiv\u00e1l\u00e1s\u00e1t?" }, "story": { "add": "T\u00f6rt\u00e9net hozz\u00e1ad\u00e1sa" }, "timeline": { - "peopleYouMayKnow": "Emberek akiket ismerhetsz" + "peopleYouMayKnow": "Emberek, akiket ismerhet", + "onboarding": { + "welcome": "\u00dcdv\u00f6z\u00f6lj\u00fck", + "thisIsYourHomeFeed": "Ez a kezd\u0151lap, az \u00d6n \u00e1ltal k\u00f6vetett fi\u00f3kok bejegyz\u00e9sei id\u0151rendi sorrendben.", + "letUsHelpYouFind": "Keress\u00fcnk \u00e9rdekes, k\u00f6vethet\u0151 embereket", + "refreshFeed": "Kezd\u0151lap friss\u00edt\u00e9se" + } }, "hashtags": { "emptyFeed": "\u00dagy t\u0171nik nem tal\u00e1lhat\u00f3 egy bejegyz\u00e9s sem ehhez a hashtag-hez" + }, + "report": { + "report": "Jelent\u00e9s", + "selectReason": "V\u00e1lasszon egy indokot", + "reported": "Jelentve", + "sendingReport": "Jelent\u00e9s elk\u00fcld\u00e9se", + "thanksMsg": "K\u00f6sz\u00f6nj\u00fck a jelent\u00e9st, az \u00d6nh\u00f6z hasonl\u00f3 emberek teszik a k\u00f6z\u00f6ss\u00e9g\u00fcnket biztons\u00e1goss\u00e1!", + "contactAdminMsg": "Ha kapcsolatba akar l\u00e9pni egy adminisztr\u00e1torral a bejegyz\u00e9ssel vagy jelent\u00e9ssel kapcsolatban" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/id.json b/resources/assets/js/i18n/id.json index 37fca65dd..554eb7487 100644 --- a/resources/assets/js/i18n/id.json +++ b/resources/assets/js/i18n/id.json @@ -1,24 +1,29 @@ { "common": { - "comment": "Komentar", + "comment": "Komentari", "commented": "Dikomentari", "comments": "Komentar", - "like": "Menyukai", + "like": "Sukai", "liked": "Disukai", "likes": "Suka", "share": "Bagikan", "shared": "Dibagikan", "shares": "Dibagikan", "unshare": "Batalkan berbagi", + "bookmark": "Penanda Buku", "cancel": "Batal", "copyLink": "Salin tautan", "delete": "Hapus", - "error": "Kesalahan", - "errorMsg": "Telah terjadi kesalahan. Silakan coba lagi nanti.", + "error": "Galat", + "errorMsg": "Terjadi kesalahan. Silakan coba lagi nanti.", "oops": "Oops!", "other": "Lainnya", "readMore": "Baca selengkapnya", "success": "Berhasil", + "proceed": "Lanjut", + "next": "Berikutnya", + "close": "Tutup", + "clickHere": "klik di sini", "sensitive": "Sensitif", "sensitiveContent": "Konten Sensitif", "sensitiveContentWarning": "Postingan ini mengandung konten sensitif" @@ -31,24 +36,24 @@ "search": "Cari", "admin": "Dasbor Admin", "homeFeed": "Beranda", - "localFeed": "Umpan lokal", - "globalFeed": "Umpan global", + "localFeed": "Beranda Setempat", + "globalFeed": "Beranda Global", "discover": "Jelajahi", "directMessages": "Pesan Langsung", - "notifications": "Notifikasi", + "notifications": "Pemberitahuan", "groups": "Grup", "stories": "Cerita", "profile": "Profil", - "drive": "Perangkat Keras", + "drive": "Kandar", "settings": "Pengaturan", - "compose": "Membuat baru", + "compose": "Buat", "logout": "Keluar", "about": "Tentang", "help": "Bantuan", "language": "Bahasa", "privacy": "Privasi", "terms": "Ketentuan", - "backToPreviousDesign": "Kembali ke desain sebelumnya" + "backToPreviousDesign": "Kembali ke rancangan sebelumnya" }, "directMessages": { "inbox": "Kotak Masuk", @@ -58,37 +63,38 @@ "notifications": { "liked": "menyukai", "commented": "mengomentari", - "reacted": "bereaksi terhadap", + "reacted": "bereaksi ke", "shared": "membagikan", - "tagged": "menandai Anda pada sebuah", - "updatedA": "mengupdate sebuah", - "sentA": "mengirim sebuah", + "tagged": "menandai Anda di", + "updatedA": "memperbarui", + "sentA": "mengirim", "followed": "diikuti", "mentioned": "disebut", - "you": "anda", - "yourApplication": "Aplikasi anda untuk mengikuti", + "you": "Anda", + "yourApplication": "Aplikasi Anda untuk mengikuti", "applicationApproved": "telah disetujui!", - "applicationRejected": "telah ditolak. Anda dapat kembali mengajukan untuk bergabung dalam 6 bulan.", + "applicationRejected": "ditolak. Anda dapat mengajukan lagi untuk bergabung dalam 6 bulan.", "dm": "dm", "groupPost": "postingan grup", "modlog": "modlog", "post": "postingan", - "story": "cerita" + "story": "cerita", + "noneFound": "Tidak ditemukan pemberitahuan" }, "post": { - "shareToFollowers": "Membagikan kepada pengikut", - "shareToOther": "Membagikan ke orang lain", - "noLikes": "Belum ada yang menyukai", + "shareToFollowers": "Bagikan kepada pengikut", + "shareToOther": "Bagikan ke orang lain", + "noLikes": "Masih belum disukai", "uploading": "Mengunggah" }, "profile": { "posts": "Postingan", "followers": "Pengikut", "following": "Mengikuti", - "admin": "Pengelola", + "admin": "Pengurus", "collections": "Koleksi", "follow": "Ikuti", - "unfollow": "Berhenti Ikuti", + "unfollow": "Berhenti ikuti", "editProfile": "Ubah Profil", "followRequested": "Meminta Permintaan Mengikuti", "joined": "Bergabung", @@ -101,7 +107,7 @@ "moderationTools": "Alat Moderasi", "report": "Laporkan", "archive": "Arsipkan", - "unarchive": "Keluarkan dari arsip", + "unarchive": "Lepas arsip", "embed": "Penyemat", "selectOneOption": "Pilih salah satu dari opsi berikut", "unlistFromTimelines": "Keluarkan dari Timeline", @@ -142,9 +148,23 @@ "add": "Tambah Cerita" }, "timeline": { - "peopleYouMayKnow": "Orang yang mungkin Anda kenal" + "peopleYouMayKnow": "Orang yang mungkin Anda kenal", + "onboarding": { + "welcome": "Selamat Datang", + "thisIsYourHomeFeed": "Ini merupakan tampilan beranda Anda, tampilan dari postingan akun yang Anda ikuti secara kronologis.", + "letUsHelpYouFind": "Biarkan kami membantumu menemukan orang-orang yang menarik untuk diikuti", + "refreshFeed": "Segarkan laman umpan" + } }, "hashtags": { "emptyFeed": "Sepertinya kami tidak dapat menemukan postingan untuk tagar ini" + }, + "report": { + "report": "Laporkan", + "selectReason": "Pilih alasan", + "reported": "Terlaporkan", + "sendingReport": "Mengirim laporan", + "thanksMsg": "Terima kasih atas laporannya, tindakan Anda amat membantu menjaga komunitas!", + "contactAdminMsg": "Jika Anda berminat menghubungi seorang administrator mengenai postingan ini atau melaporkan" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/it.json b/resources/assets/js/i18n/it.json index 5e30d2e69..3cd1e2ced 100644 --- a/resources/assets/js/i18n/it.json +++ b/resources/assets/js/i18n/it.json @@ -3,13 +3,14 @@ "comment": "Commenta", "commented": "Commentato", "comments": "Commenti", - "like": "Like", + "like": "Mi piace", "liked": "Like aggiunto", "likes": "Tutti i Like", "share": "Condividi", "shared": "Condiviso", "shares": "Condivisioni", "unshare": "Annulla condivisione", + "bookmark": "Preferiti", "cancel": "Annulla", "copyLink": "Copia link", "delete": "Elimina", @@ -19,6 +20,10 @@ "other": "Altro", "readMore": "Leggi di pi\u00f9", "success": "Riuscito", + "proceed": "Continua", + "next": "Avanti", + "close": "Chiudi", + "clickHere": "clicca qui", "sensitive": "Sensibile", "sensitiveContent": "Contenuto Sensibile", "sensitiveContentWarning": "Questo post potrebbe contenere contenuti sensibili" @@ -57,15 +62,15 @@ }, "notifications": { "liked": "ha messo like a", - "commented": "ha commentato", + "commented": "ha commentato il tuo", "reacted": "ha reagito a", - "shared": "ha condiviso", + "shared": "ha condiviso il tuo", "tagged": "ti ha taggato in", "updatedA": "ha aggiornato un", "sentA": "ha inviato un", - "followed": "stai seguendo", + "followed": "sta seguendo", "mentioned": "menzionato", - "you": "tu", + "you": "te", "yourApplication": "La tua candidatura per unirti", "applicationApproved": "\u00e8 stata approvata!", "applicationRejected": "\u00e8 stata respinta. Puoi richiedere di unirti fra 6 mesi.", @@ -73,7 +78,8 @@ "groupPost": "post di gruppo", "modlog": "modlog", "post": "post", - "story": "storia" + "story": "storia", + "noneFound": "Non ci sono notifiche" }, "post": { "shareToFollowers": "Condividi con i follower", @@ -142,9 +148,23 @@ "add": "Aggiungi Storia" }, "timeline": { - "peopleYouMayKnow": "Persone che potresti conoscere" + "peopleYouMayKnow": "Persone che potresti conoscere", + "onboarding": { + "welcome": "Benvenuto", + "thisIsYourHomeFeed": "Questo \u00e8 il tuo feed principale, un feed in ordine cronologico dei post da account che segui.", + "letUsHelpYouFind": "Ti aiutiamo a trovare delle persone interessanti da seguire", + "refreshFeed": "Aggiorna il mio feed" + } }, "hashtags": { - "emptyFeed": "Non riusciamo a trovare alcun post con questo hashtag" + "emptyFeed": "Non riusciamo a trovare nessun post con questo hashtag" + }, + "report": { + "report": "Segnala", + "selectReason": "Seleziona un motivo", + "reported": "Segnalato", + "sendingReport": "Invio della segnalazione", + "thanksMsg": "Grazie per la segnalazione, le persone come te aiutano a mantenere la comunit\u00e0 al sicuro!", + "contactAdminMsg": "Se desideri contattare un amministratore per questo post o rapporto" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ja.json b/resources/assets/js/i18n/ja.json index f52fbe6d3..cd6ca79d7 100644 --- a/resources/assets/js/i18n/ja.json +++ b/resources/assets/js/i18n/ja.json @@ -10,6 +10,7 @@ "shared": "\u5171\u6709\u3055\u308c\u307e\u3057\u305f", "shares": "\u5171\u6709", "unshare": "\u5171\u6709\u89e3\u9664", + "bookmark": "\u30d6\u30c3\u30af\u30de\u30fc\u30af", "cancel": "\u30ad\u30e3\u30f3\u30bb\u30eb", "copyLink": "\u30ea\u30f3\u30af\u3092\u30b3\u30d4\u30fc", "delete": "\u524a\u9664", @@ -19,6 +20,10 @@ "other": "\u305d\u306e\u4ed6", "readMore": "\u3082\u3063\u3068\u8aad\u3080", "success": "\u6210\u529f\u3057\u307e\u3057\u305f", + "proceed": "\u7d9a\u884c", + "next": "\u6b21\u3078", + "close": "\u9589\u3058\u308b", + "clickHere": "\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af", "sensitive": "\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6", "sensitiveContent": "\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u306a\u30b3\u30f3\u30c6\u30f3\u30c4", "sensitiveContentWarning": "\u3053\u306e\u6295\u7a3f\u306b\u306f\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059" @@ -56,24 +61,25 @@ "requests": "\u30ea\u30af\u30a8\u30b9\u30c8" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", + "liked": "\u3055\u3093\u304c\u6b21\u3092\u3044\u3044\u306d\u3057\u307e\u3057\u305f:", + "commented": "\u3055\u3093\u304c\u6b21\u306b\u30b3\u30e1\u30f3\u30c8\u3057\u307e\u3057\u305f:", + "reacted": "\u3055\u3093\u304c\u6b21\u306b\u53cd\u5fdc\u3057\u307e\u3057\u305f:", + "shared": "\u3055\u3093\u304c\u6b21\u3092\u5171\u6709\u3057\u307e\u3057\u305f:", + "tagged": "\u3055\u3093\u304c\u6b21\u306b\u3042\u306a\u305f\u3092\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3057\u305f:", + "updatedA": "\u3055\u3093\u304c\u6b21\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f:", + "sentA": "\u3055\u3093\u304c\u6b21\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f:", + "followed": "\u3055\u3093\u304c\u30d5\u30a9\u30ed\u30fc\u3057\u307e\u3057\u305f:", + "mentioned": "\u3055\u3093\u304c\u8fd4\u4fe1\u3057\u307e\u3057\u305f:", "you": "\u3042\u306a\u305f", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "yourApplication": "\u53c2\u52a0\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3", + "applicationApproved": "\u304c\u627f\u8a8d\u3055\u308c\u307e\u3057\u305f!", + "applicationRejected": "\u306f\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u30026\u30f6\u6708\u5f8c\u306b\u518d\u5ea6\u53c2\u52a0\u3092\u7533\u8acb\u3067\u304d\u307e\u3059\u3002", "dm": "dm", "groupPost": "\u30b0\u30eb\u30fc\u30d7\u306e\u6295\u7a3f", "modlog": "\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u30ed\u30b0", "post": "\u6295\u7a3f", - "story": "\u30b9\u30c8\u30fc\u30ea\u30fc" + "story": "\u30b9\u30c8\u30fc\u30ea\u30fc", + "noneFound": "\u901a\u77e5\u306f\u3042\u308a\u307e\u305b\u3093" }, "post": { "shareToFollowers": "\u30d5\u30a9\u30ed\u30ef\u30fc\u306b\u5171\u6709", @@ -129,11 +135,11 @@ "modUnlistSuccess": "\u6295\u7a3f\u304c\u975e\u8868\u793a\u306b\u306a\u308a\u307e\u3057\u305f", "modMarkAsSpammerConfirm": "\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u30b9\u30d1\u30e0\u3068\u3057\u3066\u767b\u9332\u3057\u3066\u3044\u3044\u3067\u3059\u304b\uff1f\u65e2\u5b58\u306e\u307e\u305f\u3001\u4eca\u5f8c\u306e\u6295\u7a3f\u306f\u3059\u3079\u3066\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306b\u8868\u793a\u3055\u308c\u305a\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u8b66\u544a\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002", "modMarkAsSpammerSuccess": "\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30b9\u30d1\u30e0\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3057\u305f", - "toFollowers": "to Followers", + "toFollowers": "\u30d5\u30a9\u30ed\u30ef\u30fc\u5411\u3051", "showCaption": "\u8aac\u660e\u3092\u8868\u793a", "showLikes": "\u3044\u3044\u306d\u3092\u8868\u793a", "compactMode": "\u30b3\u30f3\u30d1\u30af\u30c8\u30e2\u30fc\u30c9", - "embedConfirmText": "By using this embed, you agree to our", + "embedConfirmText": "\u3053\u306e\u57cb\u3081\u8fbc\u307f\u3092\u5229\u7528\u3059\u308b\u4e8b\u3067\u3001\u3042\u306a\u305f\u306f\u6b21\u306b\u540c\u610f\u3057\u305f\u3068\u307f\u306a\u3055\u308c\u307e\u3059:", "deletePostConfirm": "\u672c\u5f53\u306b\u3053\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f", "archivePostConfirm": "\u672c\u5f53\u306b\u3053\u306e\u6295\u7a3f\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u307e\u3059\u304b\uff1f", "unarchivePostConfirm": "\u672c\u5f53\u306b\u3053\u306e\u6295\u7a3f\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u304b\u3089\u524a\u9664\u3057\u307e\u3059\u304b\uff1f" @@ -142,9 +148,23 @@ "add": "\u30b9\u30c8\u30fc\u30ea\u30fc\u3092\u8ffd\u52a0" }, "timeline": { - "peopleYouMayKnow": "\u77e5\u308a\u5408\u3044\u304b\u3082" + "peopleYouMayKnow": "\u77e5\u308a\u5408\u3044\u304b\u3082", + "onboarding": { + "welcome": "\u3088\u3046\u3053\u305d", + "thisIsYourHomeFeed": "\u3053\u308c\u306f\u3042\u306a\u305f\u306e\u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30c9\u3067\u3059\u3001\u30d5\u30a9\u30ed\u30fc\u3057\u3066\u3044\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u306e\u6295\u7a3f\u304c\u6642\u7cfb\u5217\u3067\u8868\u793a\u3055\u308c\u307e\u3059\u3002", + "letUsHelpYouFind": "\u8208\u5473\u306e\u3042\u308b\u4eba\u3092\u30d5\u30a9\u30ed\u30fc\u3059\u308b\u304a\u624b\u4f1d\u3044\u3092\u3057\u307e\u3059", + "refreshFeed": "\u30d5\u30a3\u30fc\u30c9\u3092\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5" + } }, "hashtags": { "emptyFeed": "\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bf\u30b0\u306e\u6295\u7a3f\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f" + }, + "report": { + "report": "\u5831\u544a", + "selectReason": "\u7406\u7531\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044", + "reported": "\u5831\u544a\u6e08\u307f", + "sendingReport": "\u5831\u544a\u3092\u9001\u4fe1\u4e2d", + "thanksMsg": "\u5831\u544a\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u3042\u306a\u305f\u306e\u3088\u3046\u306a\u4eba\u3005\u304c\u79c1\u9054\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30fc\u3092\u5b89\u5168\u306b\u4fdd\u3061\u307e\u3059\uff01", + "contactAdminMsg": "\u3053\u306e\u6295\u7a3f\u307e\u305f\u306f\u5831\u544a\u306b\u3064\u3044\u3066\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u305f\u3044\u5834\u5408" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ko.json b/resources/assets/js/i18n/ko.json index 456929703..c0dca1379 100644 --- a/resources/assets/js/i18n/ko.json +++ b/resources/assets/js/i18n/ko.json @@ -1,24 +1,29 @@ { "common": { "comment": "\ub313\uae00", - "commented": "Commented", - "comments": "Comments", + "commented": "\ub313\uae00 \uc500", + "comments": "\ub313\uae00", "like": "\uc88b\uc544\uc694", - "liked": "Liked", - "likes": "Likes", + "liked": "\uc88b\uc544\ud568", + "likes": "\uc88b\uc544\uc694", "share": "\uacf5\uc720", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", + "shared": "\uacf5\uc720\ud568", + "shares": "\uacf5\uc720\ud558\uae30", + "unshare": "\uacf5\uc720 \ud574\uc81c", + "bookmark": "\ubd81\ub9c8\ud06c", "cancel": "\ucde8\uc18c", - "copyLink": "Copy Link", - "delete": "Delete", + "copyLink": "\ub9c1\ud06c \ubcf5\uc0ac", + "delete": "\uc9c0\uc6b0\uae30", "error": "\uc624\ub958", "errorMsg": "\ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uc138\uc694.", "oops": "\uc774\ub7f0!", - "other": "\uae30\ud0c0", + "other": "\ub4f1", "readMore": "\ub354\ubcf4\uae30", "success": "\uc131\uacf5", + "proceed": "\uc9c4\ud589", + "next": "\ub2e4\uc74c", + "close": "\ub2eb\uae30", + "clickHere": "\uc5ec\uae30\ub97c \ud074\ub9ad", "sensitive": "\ubbfc\uac10\ud568 ", "sensitiveContent": "\ubbfc\uac10\ud55c \ub0b4\uc6a9", "sensitiveContentWarning": "\uc774 \uac8c\uc2dc\ubb3c\uc740 \ubbfc\uac10\ud55c \ub0b4\uc6a9\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4" @@ -33,118 +38,133 @@ "homeFeed": "\ud648 \ud53c\ub4dc", "localFeed": "\ub85c\uceec \ud53c\ub4dc", "globalFeed": "\uae00\ub85c\ubc8c \ud53c\ub4dc", - "discover": "\ubc1c\uacac\ud558\uae30", + "discover": "\ubc1c\uacac", "directMessages": "\ucabd\uc9c0", "notifications": "\uc54c\ub9bc", "groups": "\uadf8\ub8f9", - "stories": "\uc2a4\ud1a0\ub9ac", + "stories": "\uc774\uc57c\uae30", "profile": "\ud504\ub85c\ud544", "drive": "\ub4dc\ub77c\uc774\ube0c", "settings": "\uc124\uc815", "compose": "\uc0c8\ub85c \ub9cc\ub4e4\uae30", - "logout": "Logout", + "logout": "\ub85c\uadf8\uc544\uc6c3", "about": "\uc815\ubcf4", "help": "\ub3c4\uc6c0\ub9d0", "language": "\uc5b8\uc5b4", "privacy": "\uac1c\uc778\uc815\ubcf4", "terms": "\uc57d\uad00", - "backToPreviousDesign": "\uc774\uc804 \ub514\uc790\uc778\uc73c\ub85c \ub3cc\uc544\uac00\uae30" + "backToPreviousDesign": "\uc774\uc804 \ub514\uc790\uc778\uc73c\ub85c \ub418\ub3cc\ub9ac\uae30" }, "directMessages": { - "inbox": "\ubc1b\uc740 \ud3b8\uc9c0\ud568", + "inbox": "\ubc1b\uc740\ucabd\uc9c0\ud568", "sent": "\ubcf4\ub0c4", "requests": "\uc694\uccad \ub0b4\uc5ed" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", - "post": "post", - "story": "story" + "liked": "\ub0b4\uac00 \uc88b\uc544\ud55c", + "commented": "\ub0b4 \ub313\uae00", + "reacted": "\ub0b4 \ubc18\uc751", + "shared": "\ub0b4\uac00 \uacf5\uc720\ud568", + "tagged": "\ub0b4\uac00 \ud0dc\uadf8\ub428", + "updatedA": "\uc5c5\ub370\uc774\ud2b8", + "sentA": "\ubcf4\ub0b8 \uc774", + "followed": "\ub2d8\uc774 \ud314\ub85c\uc6b0", + "mentioned": " \ub2d8\uc73c\ub85c\ubd80\ud130\uc758 \uba58\uc158", + "you": "\ub098", + "yourApplication": "\uac00\uc785 \uc2e0\uccad\uc11c \uc791\uc131", + "applicationApproved": "\uc2b9\uc778\ub418\uc5c8\uc2b5\ub2c8\ub2e4!", + "applicationRejected": "\uc774 \ubc18\ub824\ub418\uc5c8\uc2b5\ub2c8\ub2e4. 6\uac1c\uc6d4 \ud6c4\uc5d0 \ub2e4\uc2dc \uc7ac\uc2e0\uccad\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "dm": "DM", + "groupPost": "\ubb36\uc5b4 \ubc1c\ud589", + "modlog": "\ubaa8\ub4dc\ub85c\uadf8", + "post": "\ubc1c\ud589", + "story": "\uc774\uc57c\uae30", + "noneFound": "\uc54c\ub9bc\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc74c" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "\ud314\ub85c\uc6cc\uc5d0\uac8c \uacf5\uc720\ud558\uae30", + "shareToOther": "\ub2e4\ub978 \uacf3\uc5d0 \uacf5\uc720\ud558\uae30", + "noLikes": "\uc544\uc9c1 \uc88b\uc544\uc694 \uc5c6\uc74c", + "uploading": "\uc5c5\ub85c\ub4dc \uc911" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "\ubc1c\ud589\ubb3c", + "followers": "\ud314\ub85c\uc6cc", + "following": "\ud314\ub85c\uc789", + "admin": "\uad00\ub9ac\uc790", + "collections": "\uceec\ub809\uc158", + "follow": "\ud314\ub85c\uc6b0", + "unfollow": "\uc5b8\ud314\ub85c\uc6b0", + "editProfile": "\ud504\ub85c\ud544 \ud3b8\uc9d1", + "followRequested": "\ud314\ub85c\uc6b0 \uc694\uccad\ud568", + "joined": "\uac00\uc785\ud568", + "emptyCollections": "\uc544\ubb34 \uceec\ub809\uc158\ub3c4 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "emptyPosts": "\uc544\ubb34 \ubc1c\ud589\ubb3c\ub3c4 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", + "viewPost": "\ubc1c\ud589\ubb3c \ubcf4\uae30", + "viewProfile": "\ud504\ub85c\ud544 \ubcf4\uae30", + "moderationTools": "\uc911\uc7ac \ub3c4\uad6c", + "report": "\uc2e0\uace0", + "archive": "\ubcf4\uad00", + "unarchive": "\ubcf4\uad00 \ud574\uc81c", + "embed": "\uc784\ubca0\ub4dc", + "selectOneOption": "\ub2e4\uc74c\uc758 \uc120\ud0dd\uc0ac\ud56d \uc911 \ud558\ub098\ub97c \uace0\ub974\uc138\uc694.", + "unlistFromTimelines": "\ud0c0\uc784\ub77c\uc778\uc5d0\uc11c \uc81c\uc678", + "addCW": "\ub0b4\uc6a9 \uacbd\uace0 \ubd99\uc774\uae30", + "removeCW": "\ub0b4\uc6a9 \uacbd\uace0 \ub5bc\uae30", + "markAsSpammer": "\uc2a4\ud328\uba38\ub85c \ud45c\uc2dc", + "markAsSpammerText": "\ud604\uc874 \ubc0f \ubbf8\ub798 \ubc1c\ud589\ubb3c\uc5d0 \ubbf8\ub4f1\uc7ac \ubc0f \ub0b4\uc6a9 \uacbd\uace0", "spam": "\uc2a4\ud338", "sensitive": "\ubbfc\uac10\ud55c \ub0b4\uc6a9", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", + "abusive": "\uac00\ud559 \ub610\ub294 \uc720\ud574", + "underageAccount": "\ubbf8\uc131\ub144 \uacc4\uc815", + "copyrightInfringement": "\uc800\uc791\uad8c \uc704\ubc18", + "impersonation": "\uc0ac\uce6d", + "scamOrFraud": "\uc2a4\ud338 \ub610\ub294 \uc0ac\uae30", + "confirmReport": "\uc2e0\uace0 \ud655\uc778", + "confirmReportText": "\uc774 \uac8c\uc2dc\ubb3c\uc744 \uc81c\ubcf4\ud560\uae4c\uc694?", + "reportSent": "\uc2e0\uace0 \ubc1c\uc1a1!", + "reportSentText": "\uc81c\ubcf4\ub97c \uc798 \uc218\ub839\ud558\uc600\uc2b5\ub2c8\ub2e4.", "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", + "modAddCWConfirm": "\uc774 \uac8c\uc2dc\ubb3c\uc774 \ub0b4\uc6a9 \uacbd\uace0\ub97c \ubd99\uc77c\uae4c\uc694?", + "modCWSuccess": "\ub0b4\uc6a9\uacbd\uace0\ub97c \ubd99\uc784", "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", + "modRemoveCWSuccess": "\ub0b4\uc6a9\uacbd\uace0\ub97c \ub5cc", "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", + "modUnlistSuccess": "\ubc1c\ud589\ubb3c \ubbf8\ub4f1\uc7ac \ucc98\ub9ac\ub97c \ub9c8\ucce4\uc2b5\ub2c8\ub2e4.", + "modMarkAsSpammerConfirm": "\ud574\ub2f9 \uc774\uc6a9\uc790\ub97c \uc815\ub9d0 \uc2a4\ud328\uba38\ub85c \ud45c\uc2dc\ud560\uae4c\uc694?\n\ub0b4\uc6a9 \uacbd\uace0\uac00 \uc801\uc6a9\ub418\uba70 \uc774\uc804\uacfc \uc774\ud6c4\uc758 \ubaa8\ub4e0 \ubc1c\ud589\ubb3c\uc774 \ud0c0\uc784\ub77c\uc778\uc5d0 \ubbf8\ub4f1\uc7ac\ub429\ub2c8\ub2e4.", + "modMarkAsSpammerSuccess": "\uc2a4\ud328\uba38 \uacc4\uc815\uc73c\ub85c \ud45c\uc2dc\ud568", + "toFollowers": "\ud314\ub85c\uc6cc", + "showCaption": "\uc790\ub9c9 \ubcf4\uc774\uae30", + "showLikes": "\uc88b\uc544\uc694 \ubcf4\uae30", + "compactMode": "\ucf64\ud329\ud2b8 \ubaa8\ub4dc", "embedConfirmText": "By using this embed, you agree to our", "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "archivePostConfirm": "\uc774 \ubc1c\ud589\ubb3c\uc744 \uc815\ub9d0 \ubcf4\uad00\ud560\uae4c\uc694?", + "unarchivePostConfirm": "\uc774 \ubc1c\ud589\ubb3c\uc744 \uc815\ub9d0 \ubcf4\uad00 \ucde8\uc18c\ud560\uae4c\uc694?" }, "story": { - "add": "Add Story" + "add": "\uc774\uc57c\uae30 \ucd94\uac00" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "\uc54c \uc218\ub3c4 \uc788\ub294 \uc0ac\ub78c", + "onboarding": { + "welcome": "\ubc18\uac00\uc6cc\uc694", + "thisIsYourHomeFeed": "\uc774\uacf3\uc740 \ud314\ub85c\uc6b0 \ud55c \uac8c\uc2dc\ubb3c\uc744 \uc2dc\uac04 \uc21c\uc73c\ub85c \ubcf4\uc5ec\uc8fc\ub294 \ud648 \ud53c\ub4dc\uc608\uc694.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "\ub0b4 \ud53c\ub4dc \uc0c8\ub85c \uace0\uce68" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "\uc2e0\uace0", + "selectReason": "\uc774\uc720 \uace0\ub974\uae30", + "reported": "\uc2e0\uace0 \ub9c8\uce68", + "sendingReport": "\uc2e0\uace0 \ubcf4\ub0b4\ub294 \uc911", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/me.json b/resources/assets/js/i18n/me.json index 1acb08636..fc91f9371 100644 --- a/resources/assets/js/i18n/me.json +++ b/resources/assets/js/i18n/me.json @@ -10,6 +10,7 @@ "shared": "Shared", "shares": "Shares", "unshare": "Unshare", + "bookmark": "Bookmark", "cancel": "Cancel", "copyLink": "Copy Link", "delete": "Delete", @@ -19,6 +20,10 @@ "other": "Other", "readMore": "Read more", "success": "Success", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", "sensitive": "Sensitive", "sensitiveContent": "Sensitive Content", "sensitiveContentWarning": "This post may contain sensitive content" @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/mk.json b/resources/assets/js/i18n/mk.json index 1acb08636..fc91f9371 100644 --- a/resources/assets/js/i18n/mk.json +++ b/resources/assets/js/i18n/mk.json @@ -10,6 +10,7 @@ "shared": "Shared", "shares": "Shares", "unshare": "Unshare", + "bookmark": "Bookmark", "cancel": "Cancel", "copyLink": "Copy Link", "delete": "Delete", @@ -19,6 +20,10 @@ "other": "Other", "readMore": "Read more", "success": "Success", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", "sensitive": "Sensitive", "sensitiveContent": "Sensitive Content", "sensitiveContentWarning": "This post may contain sensitive content" @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/nl.json b/resources/assets/js/i18n/nl.json index 9d49929a1..d8d468338 100644 --- a/resources/assets/js/i18n/nl.json +++ b/resources/assets/js/i18n/nl.json @@ -10,6 +10,7 @@ "shared": "Gedeeld", "shares": "Gedeeld door", "unshare": "Niet meer delen", + "bookmark": "Bladwijzer", "cancel": "Annuleren", "copyLink": "Link kopi\u00ebren", "delete": "Verwijderen", @@ -19,6 +20,10 @@ "other": "Anders", "readMore": "Lees meer", "success": "Geslaagd", + "proceed": "Doorgaan", + "next": "Volgende", + "close": "Sluiten", + "clickHere": "klik hier", "sensitive": "Gevoelig", "sensitiveContent": "Gevoelige inhoud", "sensitiveContentWarning": "Deze post kan gevoelige inhoud bevatten" @@ -42,7 +47,7 @@ "drive": "Drive", "settings": "Instellingen", "compose": "Nieuwe aanmaken", - "logout": "Logout", + "logout": "Uitloggen", "about": "Over", "help": "Hulp", "language": "Taal", @@ -73,7 +78,8 @@ "groupPost": "groepspost", "modlog": "modlogboek", "post": "post", - "story": "verhaal" + "story": "verhaal", + "noneFound": "Geen notificaties gevonden" }, "post": { "shareToFollowers": "Deel met volgers", @@ -92,8 +98,8 @@ "editProfile": "Profiel bewerken", "followRequested": "Volgen verzocht", "joined": "Lid geworden", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "emptyCollections": "We kunnen geen collecties vinden", + "emptyPosts": "We kunnen geen posts vinden" }, "menu": { "viewPost": "Post bekijken", @@ -142,9 +148,23 @@ "add": "Verhaal toevoegen" }, "timeline": { - "peopleYouMayKnow": "Mensen die u misschien kent" + "peopleYouMayKnow": "Mensen die u misschien kent", + "onboarding": { + "welcome": "Welkom", + "thisIsYourHomeFeed": "Dit is je thuisfeed, een chronologische feed van accounts die je volgt.", + "letUsHelpYouFind": "Laat ons u helpen interessante mensen te vinden om te volgen", + "refreshFeed": "Mijn feed vernieuwen" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "We kunnen geen berichten voor deze hashtag vinden" + }, + "report": { + "report": "Rapporteren", + "selectReason": "Een reden selecteren", + "reported": "Gerapporteerd", + "sendingReport": "Rapport versturen", + "thanksMsg": "Bedankt voor het rapport, mensen zoals u helpen onze gemeenschap veilig te houden!", + "contactAdminMsg": "Als u over dit bericht of rapport contact wilt opnemen met een beheerder" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/no.json b/resources/assets/js/i18n/no.json index 1acb08636..a9a97c18f 100644 --- a/resources/assets/js/i18n/no.json +++ b/resources/assets/js/i18n/no.json @@ -1,150 +1,170 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "Kommenter", + "commented": "Kommenterte", + "comments": "Kommentarer", + "like": "Lik", + "liked": "Likt", + "likes": "Liker", + "share": "Del", + "shared": "Delt", + "shares": "Delinger", + "unshare": "Fjern deling", + "bookmark": "Bookmerk", + "cancel": "Avbryt", + "copyLink": "Kopier lenke", + "delete": "Slett", + "error": "Feil", + "errorMsg": "Noe gikk galt. Vennligst pr\u00f8v igjen senere.", + "oops": "Oi sann!", + "other": "Annet", + "readMore": "Les mer", + "success": "Suksess", + "proceed": "Fortsett", + "next": "Neste", + "close": "Lukk", + "clickHere": "klikk her", + "sensitive": "Sensitivt", + "sensitiveContent": "Sensitivt innhold", + "sensitiveContentWarning": "Dette innlegget kan inneholde sensitivt innhold" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Bruksvilk\u00e5r", + "privacy": "Retningslinjer for personvern" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "S\u00f8k", + "admin": "Administrasjonspanel", + "homeFeed": "Hjemstr\u00f8m", + "localFeed": "Lokal str\u00f8m", + "globalFeed": "Global str\u00f8m", + "discover": "Utforsk", + "directMessages": "Direktemeldinger", + "notifications": "Notifikasjoner", + "groups": "Grupper", + "stories": "Historier", + "profile": "Profil", + "drive": "Drev", + "settings": "Innstillinger", + "compose": "Opprett ny", + "logout": "Logg ut", + "about": "Om", + "help": "Hjelp", + "language": "Spr\u00e5k", + "privacy": "Personvern", + "terms": "Vilk\u00e5r", + "backToPreviousDesign": "G\u00e5 tilbake til forrige design" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "Innboks", + "sent": "Sendt", + "requests": "Foresp\u00f8rsler" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "liked": "likte din", + "commented": "kommenterte din", + "reacted": "reagerte p\u00e5 din", + "shared": "delte din", + "tagged": "tagget deg i en", + "updatedA": "oppdaterte en", + "sentA": "sendte en", + "followed": "fulgte", + "mentioned": "nevnte", + "you": "deg", + "yourApplication": "Din deltagelsess\u00f8knad", + "applicationApproved": "ble godkjent!", + "applicationRejected": "ble avvist. Du san s\u00f8ke p\u00e5 nytt om 6 m\u00e5neder.", "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", - "post": "post", - "story": "story" + "groupPost": "gruppeinnlegg", + "modlog": "modlogg", + "post": "innlegg", + "story": "historie", + "noneFound": "Ingen nye varsler" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "Del med f\u00f8lgere", + "shareToOther": "Del til andre", + "noLikes": "Ingen liker enn\u00e5", + "uploading": "Laster opp" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "Innlegg", + "followers": "F\u00f8lgere", + "following": "F\u00f8lger", + "admin": "Administrer", + "collections": "Samlinger", + "follow": "F\u00f8lg", + "unfollow": "Slutt \u00e5 f\u00f8lge", + "editProfile": "Rediger profil", + "followRequested": "F\u00f8lgeforesp\u00f8rsler", + "joined": "Ble med", + "emptyCollections": "Vi kunne ikke finne noen samlinger", + "emptyPosts": "Vi kunne ikke finne noen innlegg" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", + "viewPost": "Vis innlegg", + "viewProfile": "Vis profil", + "moderationTools": "Modereringsverkt\u00f8y", + "report": "Rapporter", + "archive": "Arkiver", + "unarchive": "Fjern fra arkiv", + "embed": "Bygg inn", + "selectOneOption": "Velg ett av f\u00f8lgende alternativer", + "unlistFromTimelines": "Fjern fra tidslinjer", + "addCW": "Legg til innholdsvarsel", + "removeCW": "Fjern innholdsvarsel", + "markAsSpammer": "Marker som spammer", + "markAsSpammerText": "Avlisting + innholdsvarsel p\u00e5 eksisterende og fremtidige innlegg", "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "sensitive": "Sensitivt innhold", + "abusive": "Krenkende eller skadelig", + "underageAccount": "Mindre\u00e5rig konto", + "copyrightInfringement": "Brudd p\u00e5 opphavsrett", + "impersonation": "Imitering", + "scamOrFraud": "S\u00f8ppelpost eller svindel", + "confirmReport": "Bekreft rapport", + "confirmReportText": "Er du sikker p\u00e5 at du vil rapportere dette innlegget?", + "reportSent": "Rapporten er sendt!", + "reportSentText": "Vi har mottatt din rapport.", + "reportSentError": "Der var et problem med \u00e5 rapportere dette innlegget.", + "modAddCWConfirm": "Er du sikker p\u00e5 at du vil legge til et innholdsvarsel p\u00e5 dette innlegget?", + "modCWSuccess": "Innholdsvarsel ble lagt til", + "modRemoveCWConfirm": "Er du sikker p\u00e5 at du vil fjerne innholdsvarselet for dette innlegget?", + "modRemoveCWSuccess": "Innholdsvarsel ble fjernet", + "modUnlistConfirm": "Er du sikker p\u00e5 at du vil avliste dette innlegget?", + "modUnlistSuccess": "Avlistet innlegget", + "modMarkAsSpammerConfirm": "Er du sikker p\u00e5 at du vil markere denne brukeren som en spammer? Alle eksisterende og fremtidige innlegg vil bli avlistet p\u00e5 tidslinjer og et innholdsvarsel vil bli lagt til.", + "modMarkAsSpammerSuccess": "Vellykket markering av konto som spammer", + "toFollowers": "til f\u00f8lgere", + "showCaption": "Vis bildetekst", + "showLikes": "Vis liker", + "compactMode": "Kompaktmodus", + "embedConfirmText": "Ved \u00e5 bruke denne innbakingen, godtar du v\u00e5r", + "deletePostConfirm": "Er du sikker p\u00e5 at du vil slette dette innlegget?", + "archivePostConfirm": "Er du sikker p\u00e5 at du vil arkiveren dette innlegget?", + "unarchivePostConfirm": "Er du sikker p\u00e5 at vil hente dette innlegget tilbake fra arkivet?" }, "story": { - "add": "Add Story" + "add": "Legg til historie" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "Folk du kanskje kjenner", + "onboarding": { + "welcome": "Velkommen", + "thisIsYourHomeFeed": "Dette er din hjemstr\u00f8m, en kronologisk str\u00f8m av innlegg fra konti du f\u00f8lger.", + "letUsHelpYouFind": "La oss hjelpe deg \u00e5 finne noen interessante folk \u00e5 f\u00f8lge", + "refreshFeed": "Oppdater str\u00f8mmen min" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Vi kunne ikke finne noen innlegg for denne emneknaggen" + }, + "report": { + "report": "Rapporter", + "selectReason": "Velg en \u00e5rsak", + "reported": "Rapportert", + "sendingReport": "Sender rapport", + "thanksMsg": "Takk for at du rapporte, folk som deg hjelper med \u00e5 holde fellesskapet trygt!", + "contactAdminMsg": "Om du \u00f8nsker \u00e5 kontakte en administrator for dette innlegget eller denne rapporten" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/oc.json b/resources/assets/js/i18n/oc.json index 0fca07e45..ab65f4408 100644 --- a/resources/assets/js/i18n/oc.json +++ b/resources/assets/js/i18n/oc.json @@ -1,58 +1,63 @@ { "common": { "comment": "Comentar", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", + "commented": "Comentat", + "comments": "Comentaris", + "like": "Agradar", + "liked": "Agradat", + "likes": "Aqu\u00f2 m'agrada", + "share": "Partejar", + "shared": "Partejat", + "shares": "Partages", + "unshare": "Partejar pas mai", + "bookmark": "Marcapaginas", "cancel": "Anullar", - "copyLink": "Copy Link", - "delete": "Delete", + "copyLink": "Copiar lo ligam", + "delete": "Suprimir", "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "errorMsg": "Una error es subrevenguda. Volgatz tornar ensajar mai tard.", + "oops": "Ops!", + "other": "Autre", + "readMore": "Ne legir mai", + "success": "Capitada", + "proceed": "Contunhar", + "next": "Seguent", + "close": "Tampar", + "clickHere": "clicatz aic\u00ed", + "sensitive": "Sensible", + "sensitiveContent": "Contengut sensible", + "sensitiveContentWarning": "Lo contengut d'aquela publicacion poiri\u00e1 \u00e8sser sensibla" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Condicions d'utilizacion", + "privacy": "Politica de confidencialitat" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", + "search": "Cercar", + "admin": "Tabl\u00e8u de mandas d'administracion", + "homeFeed": "Flux principal", + "localFeed": "Flux local", "globalFeed": "Global Feed", - "discover": "Discover", + "discover": "Descobrir", "directMessages": "Direct Messages", "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", + "groups": "Grops", + "stories": "Contes", + "profile": "Perfil", "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", + "settings": "Param\u00e8tres", + "compose": "Ajustar una nov\u00e8la", + "logout": "", + "about": "A prepaus", + "help": "Ajuda", + "language": "Lenga", + "privacy": "Confidencialitat", + "terms": "Condicions d\u2019utilizacion", "backToPreviousDesign": "Go back to previous design" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", + "inbox": "Dintrant", + "sent": "Mandats", "requests": "Requests" }, "notifications": { @@ -61,19 +66,20 @@ "reacted": "reacted to your", "shared": "shared your", "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", + "updatedA": "actualizat un", + "sentA": "a enviat un", + "followed": "s'es abonat a", + "mentioned": "a mencionat", + "you": "vos", + "yourApplication": "V\u00f2stra candidatura a rej\u00f3nher", + "applicationApproved": "es estada aprovada!", + "applicationRejected": "es estada regetada.", + "dm": "messatge privat", "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -106,7 +112,7 @@ "selectOneOption": "Select one of the following options", "unlistFromTimelines": "Unlist from Timelines", "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", + "removeCW": "Lo t\u00e8xte es rescondut jos l\u2019avertiment", "markAsSpammer": "Mark as Spammer", "markAsSpammerText": "Unlist + CW existing and future posts", "spam": "Spam", @@ -142,9 +148,23 @@ "add": "Apondre Story" }, "timeline": { - "peopleYouMayKnow": "Personas que coneiss\u00e8tz benl\u00e8u" + "peopleYouMayKnow": "Personas que coneiss\u00e8tz benl\u00e8u", + "onboarding": { + "welcome": "Benvengut", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/pl.json b/resources/assets/js/i18n/pl.json index fbbcf029e..34ebf7647 100644 --- a/resources/assets/js/i18n/pl.json +++ b/resources/assets/js/i18n/pl.json @@ -10,6 +10,7 @@ "shared": "Udost\u0119pnione", "shares": "Udost\u0119pnione", "unshare": "Anuluj udost\u0119pnianie", + "bookmark": "Zak\u0142adka", "cancel": "Anuluj", "copyLink": "Kopiuj Link", "delete": "Usu\u0144", @@ -19,6 +20,10 @@ "other": "Inne", "readMore": "Czytaj wi\u0119cej", "success": "Sukces", + "proceed": "Kontynuuj", + "next": "Nast\u0119pny", + "close": "Zamknij", + "clickHere": "kliknij tutaj", "sensitive": "Wra\u017cliwe", "sensitiveContent": "Tre\u015b\u0107 wra\u017cliwa", "sensitiveContentWarning": "Ten post mo\u017ce zawiera\u0107 wra\u017cliwe tre\u015bci" @@ -42,7 +47,7 @@ "drive": "Dysk", "settings": "Ustawienia", "compose": "Utw\u00f3rz nowy", - "logout": "Logout", + "logout": "Wyloguj si\u0119", "about": "O nas", "help": "Pomoc", "language": "J\u0119zyk", @@ -73,7 +78,8 @@ "groupPost": "post grupowy", "modlog": "logi", "post": "post", - "story": "opowie\u015b\u0107" + "story": "opowie\u015b\u0107", + "noneFound": "Brak powiadomie\u0144" }, "post": { "shareToFollowers": "Udost\u0119pnij obserwuj\u0105cym", @@ -142,9 +148,23 @@ "add": "Dodaj Opowie\u015b\u0107" }, "timeline": { - "peopleYouMayKnow": "Ludzie, kt\u00f3rych mo\u017cesz zna\u0107" + "peopleYouMayKnow": "Ludzie, kt\u00f3rych mo\u017cesz zna\u0107", + "onboarding": { + "welcome": "Witaj", + "thisIsYourHomeFeed": "To jest Tw\u00f3j kana\u0142 g\u0142\u00f3wny, chronologiczny kana\u0142 wpis\u00f3w z kont, kt\u00f3re \u015bledzisz.", + "letUsHelpYouFind": "Pomo\u017cemy Ci znale\u017a\u0107 ciekawych ludzi do obserwowania", + "refreshFeed": "Od\u015bwie\u017c m\u00f3j kana\u0142" + } }, "hashtags": { "emptyFeed": "Nie mo\u017cemy znale\u017a\u0107 \u017cadnych post\u00f3w dla tego hasztaga" + }, + "report": { + "report": "Zg\u0142o\u015b", + "selectReason": "Wybierz przyczyn\u0119", + "reported": "Zg\u0142oszono", + "sendingReport": "Wysy\u0142anie zg\u0142oszenia", + "thanksMsg": "Dzi\u0119kujemy za zg\u0142oszenie, ludzie tacy jak ty pomagaj\u0105 chroni\u0107 nasz\u0105 spo\u0142eczno\u015b\u0107!", + "contactAdminMsg": "Je\u015bli chcesz skontaktowa\u0107 si\u0119 z administratorem w sprawie tego wpisu lub go zg\u0142osi\u0107" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/pt.json b/resources/assets/js/i18n/pt.json index b98b0a5d1..f3eb9a64f 100644 --- a/resources/assets/js/i18n/pt.json +++ b/resources/assets/js/i18n/pt.json @@ -3,148 +3,168 @@ "comment": "Comentar", "commented": "Comentado", "comments": "Coment\u00e1rios", - "like": "Curtir", - "liked": "Curtiu", - "likes": "Curtidas", - "share": "Compartilhar", - "shared": "Compartilhado", - "shares": "Compartilhamentos", - "unshare": "Desfazer compartilhamento", + "like": "Gosto", + "liked": "Gostei", + "likes": "Gostos", + "share": "Partilhar", + "shared": "Partilhado", + "shares": "Partilhas", + "unshare": "Despartilhar", + "bookmark": "Favorito", "cancel": "Cancelar", "copyLink": "Copiar link", - "delete": "Apagar", + "delete": "Eliminar", "error": "Erro", - "errorMsg": "Algo deu errado. Por favor, tente novamente mais tarde.", - "oops": "Opa!", + "errorMsg": "Algo correu mal. Por favor, tente novamente mais tarde.", + "oops": "Oops!", "other": "Outro", - "readMore": "Leia mais", + "readMore": "Ler mais", "success": "Sucesso", + "proceed": "Continuar", + "next": "Seguinte", + "close": "Fechar", + "clickHere": "clique aqui", "sensitive": "Sens\u00edvel", "sensitiveContent": "Conte\u00fado sens\u00edvel", - "sensitiveContentWarning": "Esta publica\u00e7\u00e3o pode conter conte\u00fado inapropriado" + "sensitiveContentWarning": "Este post pode conter conte\u00fado sens\u00edvel" }, "site": { "terms": "Termos de Uso", "privacy": "Pol\u00edtica de Privacidade" }, "navmenu": { - "search": "Pesquisar", - "admin": "Painel do Administrador", - "homeFeed": "P\u00e1gina inicial", + "search": "Pesquisa", + "admin": "Painel de Administra\u00e7\u00e3o", + "homeFeed": "Inicio", "localFeed": "Feed local", "globalFeed": "Feed global", - "discover": "Explorar", - "directMessages": "Mensagens privadas", + "discover": "Descobrir", + "directMessages": "Mensagens Diretas", "notifications": "Notifica\u00e7\u00f5es", "groups": "Grupos", - "stories": "Hist\u00f3rias", + "stories": "Stories", "profile": "Perfil", - "drive": "M\u00eddias", - "settings": "Configura\u00e7\u00f5es", + "drive": "Disco", + "settings": "Defini\u00e7\u00f5es", "compose": "Criar novo", - "logout": "Sair", + "logout": "Terminar Sess\u00e3o", "about": "Sobre", "help": "Ajuda", "language": "Idioma", "privacy": "Privacidade", "terms": "Termos", - "backToPreviousDesign": "Voltar ao design anterior" + "backToPreviousDesign": "Voltar ao design antigo" }, "directMessages": { - "inbox": "Caixa de entrada", + "inbox": "Caixa de Entrada", "sent": "Enviadas", - "requests": "Solicita\u00e7\u00f5es" + "requests": "Pedidos" }, "notifications": { - "liked": "curtiu seu", - "commented": "comentou em seu", + "liked": "gostou do seu", + "commented": "comentou no seu", "reacted": "reagiu ao seu", - "shared": "compartilhou seu", - "tagged": "marcou voc\u00ea em um", - "updatedA": "atualizou um(a)", + "shared": "Partilhou o seu", + "tagged": "marcou voc\u00ea numa publica\u00e7\u00e3o", + "updatedA": "atualizou", "sentA": "enviou um", "followed": "seguiu", - "mentioned": "mencionado", + "mentioned": "mencionou", "you": "voc\u00ea", - "yourApplication": "Sua inscri\u00e7\u00e3o para participar", + "yourApplication": "A sua candidatura para se juntar", "applicationApproved": "foi aprovado!", - "applicationRejected": "foi rejeitado. Voc\u00ea pode se inscrever novamente para participar em 6 meses.", - "dm": "mensagem direta", - "groupPost": "postagem do grupo", + "applicationRejected": "foi rejeitado. Voc\u00ea pode inscrever-se novamente em 6 meses.", + "dm": "dm", + "groupPost": "publica\u00e7\u00e3o de grupo", "modlog": "hist\u00f3rico de modera\u00e7\u00e3o", "post": "publica\u00e7\u00e3o", - "story": "hist\u00f3ria" + "story": "story", + "noneFound": "Nenhuma notifica\u00e7\u00e3o encontrada" }, "post": { - "shareToFollowers": "Compartilhar com os seguidores", - "shareToOther": "Compartilhar com outros", - "noLikes": "Ainda sem curtidas", - "uploading": "Enviando" + "shareToFollowers": "Partilhar com os seguidores", + "shareToOther": "Partilhar com outros", + "noLikes": "Ainda sem gostos", + "uploading": "A enviar" }, "profile": { "posts": "Publica\u00e7\u00f5es", "followers": "Seguidores", - "following": "Seguindo", - "admin": "Administrador", + "following": "A seguir", + "admin": "Admin", "collections": "Cole\u00e7\u00f5es", "follow": "Seguir", "unfollow": "Deixar de seguir", "editProfile": "Editar Perfil", - "followRequested": "Solicita\u00e7\u00e3o de seguir enviada", - "joined": "Entrou", + "followRequested": "Pedido para seguir enviado", + "joined": "Juntou-se", "emptyCollections": "N\u00e3o conseguimos encontrar nenhuma cole\u00e7\u00e3o", - "emptyPosts": "N\u00e3o encontramos nenhuma publica\u00e7\u00e3o" + "emptyPosts": "N\u00e3o conseguimos encontrar nenhuma publica\u00e7\u00e3o" }, "menu": { "viewPost": "Ver publica\u00e7\u00e3o", - "viewProfile": "Ver Perfil", + "viewProfile": "Ver perfil", "moderationTools": "Ferramentas de modera\u00e7\u00e3o", "report": "Denunciar", - "archive": "Arquivo", - "unarchive": "Desarquivar", + "archive": "Arquivar", + "unarchive": "Retirar do arquivo", "embed": "Incorporar", - "selectOneOption": "Selecione uma das op\u00e7\u00f5es a seguir", - "unlistFromTimelines": "Retirar das linhas do tempo", + "selectOneOption": "Selecione uma das seguintes op\u00e7\u00f5es", + "unlistFromTimelines": "Remover das cronologias", "addCW": "Adicionar aviso de conte\u00fado", "removeCW": "Remover aviso de conte\u00fado", - "markAsSpammer": "Marcar como Spammer", - "markAsSpammerText": "Retirar das linhas do tempo + adicionar aviso de conte\u00fado \u00e0s publica\u00e7\u00f5es antigas e futuras", - "spam": "Lixo Eletr\u00f4nico", - "sensitive": "Conte\u00fado sens\u00edvel", - "abusive": "Abusivo ou Prejudicial", + "markAsSpammer": "Marcar como spammer", + "markAsSpammerText": "Remover das cronologias e adicionar um aviso de conte\u00fado \u00e0s publica\u00e7\u00f5es existentes e futuras", + "spam": "Spam", + "sensitive": "Conte\u00fado Sens\u00edvel", + "abusive": "Abusivo ou prejudicial", "underageAccount": "Conta de menor de idade", - "copyrightInfringement": "Viola\u00e7\u00e3o de direitos autorais", - "impersonation": "Roubo de identidade", - "scamOrFraud": "Golpe ou Fraude", + "copyrightInfringement": "Viola\u00e7\u00e3o de direitos de autor", + "impersonation": "Roubo de Identidade", + "scamOrFraud": "Esquema ou fraude", "confirmReport": "Confirmar den\u00fancia", - "confirmReportText": "Voc\u00ea realmente quer denunciar esta publica\u00e7\u00e3o?", + "confirmReportText": "Tem a certeza que deseja denunciar esta mensagem?", "reportSent": "Den\u00fancia enviada!", - "reportSentText": "N\u00f3s recebemos sua den\u00fancia com sucesso.", - "reportSentError": "Houve um problema ao denunciar esta publica\u00e7\u00e3o.", - "modAddCWConfirm": "Voc\u00ea realmente quer adicionar um aviso de conte\u00fado a esta publica\u00e7\u00e3o?", - "modCWSuccess": "Aviso de conte\u00fado sens\u00edvel adicionado com sucesso", - "modRemoveCWConfirm": "Voc\u00ea realmente quer remover o aviso de conte\u00fado desta publica\u00e7\u00e3o?", - "modRemoveCWSuccess": "Aviso de conte\u00fado sens\u00edvel removido com sucesso", - "modUnlistConfirm": "Voc\u00ea realmente quer definir esta publica\u00e7\u00e3o como n\u00e3o listada?", - "modUnlistSuccess": "A publica\u00e7\u00e3o foi definida como n\u00e3o listada com sucesso", - "modMarkAsSpammerConfirm": "Voc\u00ea realmente quer denunciar este usu\u00e1rio por spam? Todas as suas publica\u00e7\u00f5es anteriores e futuras ser\u00e3o marcadas com um aviso de conte\u00fado e removidas das linhas do tempo.", - "modMarkAsSpammerSuccess": "Perfil denunciado com sucesso", - "toFollowers": "para seguidores", - "showCaption": "Mostrar legenda", - "showLikes": "Mostrar curtidas", + "reportSentText": "Recebemos com sucesso a sua den\u00fancia.", + "reportSentError": "Ocorreu um erro ao denunciar este conte\u00fado.", + "modAddCWConfirm": "Tem a certeza que pretende adicionar um aviso de conte\u00fado \u00e0 publica\u00e7\u00e3o?", + "modCWSuccess": "Adicionou com sucesso um aviso de conte\u00fado", + "modRemoveCWConfirm": "Tem a certeza que pretende remover o aviso de conte\u00fado desta publica\u00e7\u00e3o?", + "modRemoveCWSuccess": "Removeu com sucesso o aviso de conte\u00fado", + "modUnlistConfirm": "Tem a certeza que pretende deslistar este post?", + "modUnlistSuccess": "Deslistou com sucesso este post", + "modMarkAsSpammerConfirm": "Tem a certeza que deseja marcar este utilizador como spammer? Todos os posts existentes e futuros ser\u00e3o deslistados da timeline e o alerta de conte\u00fado ser\u00e1 aplicado.", + "modMarkAsSpammerSuccess": "Marcou com sucesso esta conta como spammer", + "toFollowers": "para Seguidores", + "showCaption": "Mostar legenda", + "showLikes": "Mostrar Gostos", "compactMode": "Modo compacto", - "embedConfirmText": "Ao usar de forma \u201cembed\u201d, voc\u00ea concorda com nossas", - "deletePostConfirm": "Voc\u00ea tem certeza que deseja excluir esta publica\u00e7\u00e3o?", - "archivePostConfirm": "Tem certeza que deseja arquivar esta publica\u00e7\u00e3o?", - "unarchivePostConfirm": "Tem certeza que deseja desarquivar esta publica\u00e7\u00e3o?" + "embedConfirmText": "Ao utilizar este conte\u00fado, aceita os nossos", + "deletePostConfirm": "Tem a certeza que pretende apagar esta publica\u00e7\u00e3o?", + "archivePostConfirm": "Tem a certeza que pretende arquivar esta publica\u00e7\u00e3o?", + "unarchivePostConfirm": "Tem a certeza que pretende desarquivar este post?" }, "story": { - "add": "Adicionar Story" + "add": "Adicionar Storie" }, "timeline": { - "peopleYouMayKnow": "Pessoas que voc\u00ea talvez conhe\u00e7a" + "peopleYouMayKnow": "Pessoas que talvez conhe\u00e7a", + "onboarding": { + "welcome": "Bem-vindo", + "thisIsYourHomeFeed": "Este \u00e9 o seu feed pessoal, com publica\u00e7\u00f5es em ordem cronol\u00f3gica das contas que segue.", + "letUsHelpYouFind": "Deixe-nos ajudar a encontrar algumas pessoas interessantes para seguir", + "refreshFeed": "Atualizar o meu feed" + } }, "hashtags": { - "emptyFeed": "N\u00e3o encontramos nenhuma publica\u00e7\u00e3o com esta hashtag" + "emptyFeed": "N\u00e3o conseguimos encontrar publica\u00e7\u00f5es com essa hashtag" + }, + "report": { + "report": "Denunciar", + "selectReason": "Selecione uma raz\u00e3o", + "reported": "Denunciado", + "sendingReport": "A enviar den\u00fancia", + "thanksMsg": "Obrigado pela den\u00fancia, pessoas como voc\u00ea ajudam a manter a nossa comunidade segura!", + "contactAdminMsg": "Se quiser entrar em contato com um administrador acerca desta publica\u00e7\u00e3o ou den\u00fancia" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ro.json b/resources/assets/js/i18n/ro.json index 1acb08636..22b6299ce 100644 --- a/resources/assets/js/i18n/ro.json +++ b/resources/assets/js/i18n/ro.json @@ -1,150 +1,170 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "Comentariu", + "commented": "Comentariu", + "comments": "Comentarii", + "like": "\u00cemi place", + "liked": "Apreciate", + "likes": "Aprecieri", + "share": "Partajeaz\u0103", + "shared": "Partajat", + "shares": "Partajeaz\u0103", + "unshare": "Anularea partaj\u0103rii", + "bookmark": "Bookmark", + "cancel": "Anuleaz\u0103", + "copyLink": "Copiere leg\u0103tur\u0103", + "delete": "\u0218terge", + "error": "Eroare", + "errorMsg": "A ap\u0103rut o problem\u0103. Te rug\u0103m s\u0103 \u00eencerci din nou mai t\u00e2rziu.", + "oops": "Ups!", + "other": "Altele", + "readMore": "Cite\u0219te mai mult", + "success": "Succes", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", + "sensitive": "Sensibil", + "sensitiveContent": "Con\u021binut sensibil", + "sensitiveContentWarning": "Aceast\u0103 postare poate con\u021bine con\u021binut sensibil" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Condi\u021bii de utilizare", + "privacy": "Politica de confiden\u0163ialitate" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "Caut\u0103", + "admin": "Panou de administrare", + "homeFeed": "Flux Acas\u0103", + "localFeed": "Flux local", + "globalFeed": "Flux Global", + "discover": "Descoper\u0103", + "directMessages": "Mesaje directe", + "notifications": "Notific\u0103ri", + "groups": "Grupuri", + "stories": "Pove\u015fti", + "profile": "Profil", + "drive": "Unitate", + "settings": "Set\u0103ri", + "compose": "Creaz\u0103 nou", + "logout": "Deconectare", + "about": "Despre", + "help": "Ajutor", + "language": "Limb\u0103", + "privacy": "Confiden\u021bialitate", + "terms": "Termeni", + "backToPreviousDesign": "\u00cenapoi la design-ul anterior" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "Mesaje", + "sent": "Trimis", + "requests": "Cereri" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "liked": "\u021bi-a pl\u0103cut", + "commented": "a comentat la", + "reacted": "a reac\u021bionat la", + "shared": "\u021bi-a distribuit", + "tagged": "te-a etichetat \u00eentr-un", + "updatedA": "a actualizat o", + "sentA": "a trimis o", + "followed": "urm\u0103rit", + "mentioned": "men\u021bionat", + "you": "tu", + "yourApplication": "Cererea ta de a te al\u0103tura", + "applicationApproved": "a fost aprobat\u0103!", + "applicationRejected": "a fost respins. Pute\u0163i aplica din nou pentru a v\u0103 al\u0103tura \u00een 6 luni.", "dm": "dm", - "groupPost": "group post", + "groupPost": "postare grup", "modlog": "modlog", - "post": "post", - "story": "story" + "post": "postare", + "story": "poveste", + "noneFound": "No notifications found" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "Distribuie c\u0103tre urm\u0103ritori", + "shareToOther": "Distribui\u021bi altora", + "noLikes": "\u00cenc\u0103 nu sunt aprecieri", + "uploading": "Se \u00eencarc\u0103" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "Post\u0103ri", + "followers": "Urm\u0103ritori", + "following": "Urm\u0103ri\u021bi", + "admin": "Administrator", + "collections": "Colec\u021bii", + "follow": "Urm\u0103re\u0219te", + "unfollow": "Nu mai urm\u0103ri", + "editProfile": "Editare profil", + "followRequested": "Urm\u0103re\u0219te cererea", + "joined": "S-a al\u0103turat", + "emptyCollections": "Se pare c\u0103 nu putem g\u0103si colec\u021bii", + "emptyPosts": "Se pare c\u0103 nu putem g\u0103si niciun post" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", + "viewPost": "Vizualiza\u021bi postul", + "viewProfile": "Vezi Profilul", + "moderationTools": "Instrumente de moderare", + "report": "Raporteaz\u0103", + "archive": "Arhiv\u0103", + "unarchive": "Dezarhiveaz\u0103", + "embed": "\u00cencorporeaz\u0103", + "selectOneOption": "Selecta\u0163i una dintre urm\u0103toarele op\u0163iuni", + "unlistFromTimelines": "Dezlistare din Timelines", + "addCW": "Adaug\u0103 un avertisment privind con\u021binutul", + "removeCW": "Elimin\u0103 avertismentul privind con\u021binutul", + "markAsSpammer": "Marcheaz\u0103 ca Spammer", + "markAsSpammerText": "Anulare list\u0103 + post\u0103ri CW existente \u0219i viitoare", "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "sensitive": "Con\u021binut sensibil", + "abusive": "Abusiv sau d\u0103un\u0103tor", + "underageAccount": "Cont Minor", + "copyrightInfringement": "\u00cenc\u0103lcarea drepturilor de autor", + "impersonation": "Furt de identitate", + "scamOrFraud": "\u00cen\u0219el\u0103torie sau fraud\u0103", + "confirmReport": "Confirma\u021bi raportul", + "confirmReportText": "E\u0219ti sigur c\u0103 vrei s\u0103 raportezi aceast\u0103 postare?", + "reportSent": "Raport trimis!", + "reportSentText": "Am primit cu succes raportul dvs.", + "reportSentError": "A existat o problem\u0103 la raportarea acestei post\u0103ri.", + "modAddCWConfirm": "Sunte\u0163i sigur c\u0103 dori\u0163i s\u0103 ad\u0103uga\u0163i un avertisment cu privire la con\u0163inut la acest post?", + "modCWSuccess": "Avertizare con\u021binut ad\u0103ugat cu succes", + "modRemoveCWConfirm": "Sigur dori\u021bi s\u0103 elimina\u021bi avertizarea con\u021binutului pe acest post?", + "modRemoveCWSuccess": "Avertisment con\u021binut \u0219ters cu succes", + "modUnlistConfirm": "E\u0219ti sigur c\u0103 vrei s\u0103 elimini aceast\u0103 postare?", + "modUnlistSuccess": "Mesaj nelistat cu succes", + "modMarkAsSpammerConfirm": "Sunte\u0163i sigur c\u0103 dori\u0163i s\u0103 marca\u0163i acest utilizator ca un spammer? Toate post\u0103rile existente \u0219i viitoare vor fi nelistate pe calendare \u0219i se va aplica un avertisment privind con\u021binutul.", + "modMarkAsSpammerSuccess": "Contul marcat cu succes ca spammer", + "toFollowers": "la Urm\u0103ritori", + "showCaption": "Afi\u0219a\u021bi legenda", + "showLikes": "Arat\u0103 like-urile", + "compactMode": "Modul compact", + "embedConfirmText": "Folosind acest lucru \u00eencorporat, sunte\u021bi de acord cu", + "deletePostConfirm": "Sunte\u0163i sigur c\u0103 dori\u0163i s\u0103 \u015fterge\u0163i acest post?", + "archivePostConfirm": "Sunte\u021bi sigur c\u0103 dori\u021bi s\u0103 arhiva\u021bi acest post?", + "unarchivePostConfirm": "Sunte\u021bi sigur c\u0103 dori\u021bi s\u0103 dezarhiva\u021bi acest post?" }, "story": { - "add": "Add Story" + "add": "Ad\u0103uga\u021bi poveste" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "Persoane pe care i-ai putea cunoa\u0219te", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Nu putem g\u0103si post\u0103ri pentru acest hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/ru.json b/resources/assets/js/i18n/ru.json index 81e62649a..2cad80bf8 100644 --- a/resources/assets/js/i18n/ru.json +++ b/resources/assets/js/i18n/ru.json @@ -10,6 +10,7 @@ "shared": "\u041f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c", "shares": "\u041f\u043e\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c", "unshare": "\u041d\u0435 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f", + "bookmark": "\u0417\u0430\u043a\u043b\u0430\u0434\u043a\u0430", "cancel": "\u041e\u0442\u043c\u0435\u043d\u0430", "copyLink": "\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c", @@ -19,6 +20,10 @@ "other": "\u041f\u0440\u043e\u0447\u0435\u0435", "readMore": "\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435", "success": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e", + "proceed": "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c", + "next": "\u0414\u0430\u043b\u0435\u0435", + "close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", + "clickHere": "\u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c", "sensitive": "\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439", "sensitiveContent": "\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442", "sensitiveContentWarning": "\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442" @@ -41,8 +46,8 @@ "profile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c", "drive": "\u0414\u0438\u0441\u043a", "settings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", - "compose": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0441\u0442", - "logout": "Logout", + "compose": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439", + "logout": "\u0412\u044b\u0439\u0442\u0438", "about": "\u041e \u043d\u0430\u0441", "help": "\u041f\u043e\u043c\u043e\u0449\u044c", "language": "\u042f\u0437\u044b\u043a", @@ -61,19 +66,20 @@ "reacted": "\u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u0432\u0430\u0448", "shared": "\u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0432\u0430\u0448\u0438\u043c", "tagged": "\u043e\u0442\u043c\u0435\u0442\u0438\u043b \u0432\u0430\u0441 \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438", - "updatedA": "updated a", + "updatedA": "\u043e\u0431\u043d\u043e\u0432\u0438\u043b(\u0430)", "sentA": "\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b", "followed": "\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0441\u044f", - "mentioned": "mentioned", + "mentioned": "\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b(\u0430)", "you": "\u0432\u044b", "yourApplication": "\u0412\u0430\u0448\u0435 \u0437\u0430\u044f\u0432\u043a\u0430 \u043d\u0430 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435", "applicationApproved": "\u0431\u044b\u043b\u043e \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u043e!", "applicationRejected": "\u0431\u044b\u043b\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432.", "dm": "\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435", - "groupPost": "\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b", - "modlog": "modlog", + "groupPost": "\u043f\u043e\u0441\u0442 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435", + "modlog": "\u0436\u0443\u0440\u043d\u0430\u043b \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u0438", "post": "\u043f\u043e\u0441\u0442", - "story": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f" + "story": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f", + "noneFound": "\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b" }, "post": { "shareToFollowers": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c\u0438", @@ -108,7 +114,7 @@ "addCW": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435", "removeCW": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435", "markAsSpammer": "\u041f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u043f\u0430\u043c\u0435\u0440\u0430", - "markAsSpammerText": "Unlist + CW existing and future posts", + "markAsSpammerText": "\u0421\u043a\u0440\u044b\u0442\u044c \u0438\u0437 \u043b\u0435\u043d\u0442 \u0438 \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438", "spam": "\u0421\u043f\u0430\u043c", "sensitive": "\u0414\u0435\u043b\u0438\u043a\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442", "abusive": "\u0416\u0435\u0441\u0442\u043e\u043a\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u0434\u0430", @@ -126,14 +132,14 @@ "modRemoveCWConfirm": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435 \u0441 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430?", "modRemoveCWSuccess": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043e", "modUnlistConfirm": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043b\u0435\u043d\u0442?", - "modUnlistSuccess": "Successfully unlisted post", + "modUnlistSuccess": "\u041f\u043e\u0441\u0442 \u0443\u0434\u0430\u043b\u0435\u043d", "modMarkAsSpammerConfirm": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043f\u0430\u043c\u043e\u043c? \u0412\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 \u0441\u0440\u043e\u043a\u0438, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0438.", "modMarkAsSpammerSuccess": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a \u0441\u043f\u0430\u043c\u043c\u0435\u0440", - "toFollowers": "to Followers", + "toFollowers": "\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430\u043c", "showCaption": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c", "showLikes": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \"\u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f\"", "compactMode": "\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c", - "embedConfirmText": "By using this embed, you agree to our", + "embedConfirmText": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0442, \u0432\u044b \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044c \u0441 \u043d\u0430\u0448\u0438\u043c\u0438", "deletePostConfirm": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442?", "archivePostConfirm": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442?", "unarchivePostConfirm": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430?" @@ -142,9 +148,23 @@ "add": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e" }, "timeline": { - "peopleYouMayKnow": "\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0434\u0440\u0443\u0437\u044c\u044f" + "peopleYouMayKnow": "\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0434\u0440\u0443\u0437\u044c\u044f", + "onboarding": { + "welcome": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c", + "thisIsYourHomeFeed": "\u042d\u0442\u043e \u0432\u0430\u0448\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u043b\u0435\u043d\u0442\u0430, \u0433\u0434\u0435 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u043f\u043e\u0441\u0442\u044b \u0441 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b.", + "letUsHelpYouFind": "\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043c\u044b \u043f\u043e\u043c\u043e\u0436\u0435\u043c \u0432\u0430\u043c \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f", + "refreshFeed": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u044e \u043b\u0435\u043d\u0442\u0443" + } }, "hashtags": { "emptyFeed": "\u041f\u043e\u0445\u043e\u0436\u0435, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0445\u044d\u0448\u0442\u0435\u0433\u0430" + }, + "report": { + "report": "\u041f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f", + "selectReason": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0443", + "reported": "\u0416\u0430\u043b\u043e\u0431\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430", + "sendingReport": "\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0436\u0430\u043b\u043e\u0431\u044b", + "thanksMsg": "\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435! \u0422\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u0432\u044b, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435!", + "contactAdminMsg": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0436\u0430\u043b\u043e\u0431\u044b" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/sk.json b/resources/assets/js/i18n/sk.json index 31f53469d..cd7536be4 100644 --- a/resources/assets/js/i18n/sk.json +++ b/resources/assets/js/i18n/sk.json @@ -10,6 +10,7 @@ "shared": "Zdie\u013ean\u00e9", "shares": "Zdia\u013ean\u00e9", "unshare": "Zru\u0161i\u0165 zdie\u013eanie", + "bookmark": "Ulo\u017ei\u0165", "cancel": "Zru\u0161i\u0165", "copyLink": "Skop\u00edrova\u0165 odkaz", "delete": "Vymaza\u0165", @@ -19,6 +20,10 @@ "other": "In\u00e9", "readMore": "Zobrazi\u0165 viac", "success": "Hotovo", + "proceed": "Pokra\u010dova\u0165", + "next": "\u010ealej", + "close": "Zavrie\u0165", + "clickHere": "klikni tu", "sensitive": "Citliv\u00fd", "sensitiveContent": "Citliv\u00fd obsah", "sensitiveContentWarning": "Tento pr\u00edspevok m\u00f4\u017ee obsahova\u0165 citliv\u00fd obsah" @@ -73,7 +78,8 @@ "groupPost": "skupinov\u00fd pr\u00edspevok", "modlog": "modlog", "post": "pr\u00edspevok", - "story": "story" + "story": "story", + "noneFound": "\u017diadne n\u00e1jden\u00e9 notifik\u00e1cie" }, "post": { "shareToFollowers": "Zdie\u013ea\u0165 pre sledovate\u013eov", @@ -128,7 +134,7 @@ "modUnlistConfirm": "Naozaj chcete odstr\u00e1ni\u0165 zo zoznamu tento pr\u00edspevok?", "modUnlistSuccess": "Pr\u00edspevok bol \u00faspe\u0161ne odstr\u00e1nen\u00fd zo zoznamu", "modMarkAsSpammerConfirm": "Naozaj chcete ozna\u010di\u0165 tohto pou\u017e\u00edvate\u013ea ako odosielate\u013ea spamu? V\u0161etky existuj\u00face a bud\u00face pr\u00edspevky bud\u00fa odstr\u00e1nen\u00e9 z timelines a bude pridan\u00e9 upozornenie o obsahu.", - "modMarkAsSpammerSuccess": "\u00da\u010det bol \u00faspe\u0161ne ozna\u010den\u00fd ako odosielate\u013ea spamu", + "modMarkAsSpammerSuccess": "\u00da\u010det bol \u00faspe\u0161ne ozna\u010den\u00fd ako spammer", "toFollowers": "pre Sleduj\u00facich", "showCaption": "Zobrazi\u0165 Titulok", "showLikes": "Zobrazi\u0165 P\u00e1\u010di sa mi", @@ -142,9 +148,23 @@ "add": "Prida\u0165 Story" }, "timeline": { - "peopleYouMayKnow": "\u013dudia ktor\u00fdch mo\u017eno pozn\u00e1te" + "peopleYouMayKnow": "\u013dudia ktor\u00fdch mo\u017eno pozn\u00e1te", + "onboarding": { + "welcome": "Vitajte", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Nechajte n\u00e1s pom\u00f4c\u0165 v\u00e1m n\u00e1js\u0165 zauj\u00edmav\u00fdch \u013eud\u00ed ktor\u00fdch m\u00f4\u017eete sledova\u0165", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "Zd\u00e1 sa, \u017ee nem\u00f4\u017eeme n\u00e1js\u0165 \u017eiadne pr\u00edspevky pre tento hashtag" + }, + "report": { + "report": "Nahl\u00e1si\u0165", + "selectReason": "Vyberte d\u00f4vod", + "reported": "Nahl\u00e1sen\u00e9", + "sendingReport": "Odosielanie hl\u00e1senia", + "thanksMsg": "\u010eakujeme za hl\u00e1senie, \u013eudia ako vy pom\u00e1haj\u00fa udr\u017eiava\u0165 na\u0161u komunitu v bezpe\u010d\u00ed!", + "contactAdminMsg": "Ak chcete kontaktova\u0165 administr\u00e1tora oh\u013eadom tohto pr\u00edspevku alebo ho nahl\u00e1si\u0165" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/sr.json b/resources/assets/js/i18n/sr.json index 1acb08636..b52728000 100644 --- a/resources/assets/js/i18n/sr.json +++ b/resources/assets/js/i18n/sr.json @@ -1,34 +1,39 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "Komentar", + "commented": "Komentarisao", + "comments": "Komentari", + "like": "Svi\u0111a mi se", + "liked": "Svi\u0111a mi se", + "likes": "Svi\u0111anja", + "share": "Podeli", + "shared": "Podeljeno", + "shares": "Deljenja", + "unshare": "Nemoj deliti", + "bookmark": "Bookmark", + "cancel": "Otka\u017ei", + "copyLink": "Kopiraj vezu", + "delete": "Obri\u0161i", + "error": "Gr\u0435\u0161ka", + "errorMsg": "Ne\u0161to nije u redu. Poku\u0161aj ponovo kasnije.", + "oops": "Ups!", + "other": "Ostalo", + "readMore": "Pro\u010ditaj vi\u0161e", + "success": "Uspeh", + "proceed": "Proceed", + "next": "Next", + "close": "Close", + "clickHere": "click here", + "sensitive": "Osetljivo", + "sensitiveContent": "Osetljivi sadr\u017eaj", + "sensitiveContentWarning": "Ovaj post mo\u017ee sadr\u017eati osetljivi sadr\u017eaj" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Uslovi kori\u0161\u0107enja", + "privacy": "Politika privatnosti" }, "navmenu": { - "search": "Search", + "search": "Pretraga", "admin": "Admin Dashboard", "homeFeed": "Home Feed", "localFeed": "Local Feed", @@ -73,7 +78,8 @@ "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", @@ -142,9 +148,23 @@ "add": "Add Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "People you may know", + "onboarding": { + "welcome": "Welcome", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "Refresh my feed" + } }, "hashtags": { "emptyFeed": "We can't seem to find any posts for this hashtag" + }, + "report": { + "report": "Report", + "selectReason": "Select a reason", + "reported": "Reported", + "sendingReport": "Sending report", + "thanksMsg": "Thanks for the report, people like you help keep our community safe!", + "contactAdminMsg": "If you'd like to contact an administrator about this post or report" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/sv.json b/resources/assets/js/i18n/sv.json index 1acb08636..36badbb9d 100644 --- a/resources/assets/js/i18n/sv.json +++ b/resources/assets/js/i18n/sv.json @@ -1,150 +1,170 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "Kommentar", + "commented": "Kommenterade", + "comments": "Kommentarer", + "like": "Gilla", + "liked": "Gillad", + "likes": "Gillanden", + "share": "Dela", + "shared": "Utdelad", + "shares": "Utdelade", + "unshare": "Sluta dela ut", + "bookmark": "Bokm\u00e4rk", + "cancel": "Avbryt", + "copyLink": "Kopiera l\u00e4nk", + "delete": "Ta bort", + "error": "Fel", + "errorMsg": "N\u00e5got gick fel. V\u00e4nligen f\u00f6rs\u00f6k igen senare.", + "oops": "Hoppsan!", + "other": "Andra", + "readMore": "L\u00e4s mer", + "success": "Lyckades", + "proceed": "Forts\u00e4tt", + "next": "N\u00e4sta", + "close": "St\u00e4ng", + "clickHere": "klicka h\u00e4r", + "sensitive": "K\u00e4nsligt", + "sensitiveContent": "K\u00e4nsligt inneh\u00e5ll", + "sensitiveContentWarning": "Det h\u00e4r inl\u00e4gget kan inneh\u00e5lla k\u00e4nsligt inneh\u00e5ll" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "Anv\u00e4ndarvillkor", + "privacy": "Integritetspolicy" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "search": "S\u00f6k", + "admin": "Kontrollpanel f\u00f6r administrat\u00f6r", + "homeFeed": "Hemfl\u00f6de", + "localFeed": "Lokalt fl\u00f6de", + "globalFeed": "Globalt fl\u00f6de", + "discover": "Uppt\u00e4ck", + "directMessages": "Direktmeddelanden", + "notifications": "Notifikationer", + "groups": "Grupper", + "stories": "Historier", + "profile": "Profil", + "drive": "Enhet", + "settings": "Inst\u00e4llningar", + "compose": "Skapa ny", + "logout": "Logga ut", + "about": "Om", + "help": "Hj\u00e4lp", + "language": "Spr\u00e5k", + "privacy": "Integritet", + "terms": "Villkor", + "backToPreviousDesign": "G\u00e5 tillbaka till f\u00f6reg\u00e5ende design" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "Inkorg", + "sent": "Skickat", + "requests": "F\u00f6rfr\u00e5gningar" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "liked": "gillade ditt", + "commented": "kommenterade p\u00e5 din", + "reacted": "reagerade p\u00e5 din", + "shared": "delade din", + "tagged": "taggade dig i ett", + "updatedA": "uppdaterade en", + "sentA": "skickade en", + "followed": "f\u00f6ljde", + "mentioned": "n\u00e4mnde", + "you": "du", + "yourApplication": "Din ans\u00f6kan f\u00f6r att g\u00e5 med", + "applicationApproved": "blev godk\u00e4nd!", + "applicationRejected": "nekades. Du kan s\u00f6ka f\u00f6r att g\u00e5 med igen om 6 m\u00e5nader.", "dm": "dm", - "groupPost": "group post", + "groupPost": "gruppinl\u00e4gg", "modlog": "modlog", - "post": "post", - "story": "story" + "post": "inl\u00e4gg", + "story": "historik", + "noneFound": "Inga aviseringar hittades" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "Dela till f\u00f6ljare", + "shareToOther": "Dela till andra", + "noLikes": "Inga gilla-markeringar \u00e4n", + "uploading": "Laddar upp" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "posts": "Inl\u00e4gg", + "followers": "F\u00f6ljare", + "following": "F\u00f6ljer", + "admin": "Administrat\u00f6r", + "collections": "Kollektioner", + "follow": "F\u00f6lj", + "unfollow": "Sluta f\u00f6lja", + "editProfile": "Redigera profil", + "followRequested": "F\u00f6ljf\u00f6rfr\u00e5gan skickad", + "joined": "Gick med", + "emptyCollections": "Vi verkar inte hitta n\u00e5gra kollektioner", + "emptyPosts": "Vi verkar inte hitta n\u00e5gra inl\u00e4gg" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", - "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "viewPost": "Visa inl\u00e4gg", + "viewProfile": "Visa profil", + "moderationTools": "Modereringsverktyg", + "report": "Rapportera", + "archive": "Arkivera", + "unarchive": "Avarkivera", + "embed": "B\u00e4dda in", + "selectOneOption": "V\u00e4lj ett av f\u00f6ljande alternativ", + "unlistFromTimelines": "Avlista fr\u00e5n tidslinjer", + "addCW": "L\u00e4gg till inneh\u00e5llsvarning", + "removeCW": "Ta bort k\u00e4nslighetsvarning", + "markAsSpammer": "Markera som spammare", + "markAsSpammerText": "Avlista + k\u00e4nslighetsmarkera nuvarande och framtida inl\u00e4gg", + "spam": "Skr\u00e4ppost", + "sensitive": "K\u00e4nsligt inneh\u00e5ll", + "abusive": "Missbruk eller skadligt", + "underageAccount": "Minder\u00e5rigt konto", + "copyrightInfringement": "Upphovsr\u00e4ttsintr\u00e5ng", + "impersonation": "Personimitation", + "scamOrFraud": "Bedr\u00e4geri", + "confirmReport": "Bekr\u00e4fta anm\u00e4lan", + "confirmReportText": "\u00c4r du s\u00e4ker att du vill anm\u00e4la detta inl\u00e4gg?", + "reportSent": "Anm\u00e4lan skickad!", + "reportSentText": "Vi har f\u00e5tt emot din anm\u00e4lan till detta inl\u00e4gg.", + "reportSentError": "N\u00e5got gick fel n\u00e4r detta inl\u00e4gget skulle anm\u00e4las.", + "modAddCWConfirm": "\u00c4r du s\u00e4ker att du vill l\u00e4gga till k\u00e4nslighetsvarning p\u00e5 detta inl\u00e4gget?", + "modCWSuccess": "Lade till k\u00e4nslighetsvarning", + "modRemoveCWConfirm": "\u00c4r du s\u00e4ker att du vill ta bort k\u00e4nslighetsvarningen p\u00e5 detta inl\u00e4gget?", + "modRemoveCWSuccess": "Tog bort k\u00e4nsloghetsvarning", + "modUnlistConfirm": "\u00c4r du s\u00e4ker att du vill avlista detta inl\u00e4gget?", + "modUnlistSuccess": "Avlistade inl\u00e4gget", + "modMarkAsSpammerConfirm": "\u00c4r du s\u00e4ker att du vill markera detta konto som spammare? Alla nuvarande och framtida inl\u00e4gg kommer avlistas och en k\u00e4nslighetsvarning kommer l\u00e4ggas till p\u00e5 inl\u00e4ggen", + "modMarkAsSpammerSuccess": "Markerade kontot som spammare", + "toFollowers": "till f\u00f6ljare", + "showCaption": "Visa bildtext", + "showLikes": "Visa gilla-markeringar", + "compactMode": "Kompaktl\u00e4ge", + "embedConfirmText": "Genom att anv\u00e4nda denna inb\u00e4ddning godk\u00e4nner du v\u00e5r", + "deletePostConfirm": "\u00c4r du s\u00e4ker att du vill ta bort detta inl\u00e4gg?", + "archivePostConfirm": "\u00c4r du s\u00e4ker att du vill arkivera detta inl\u00e4gg?", + "unarchivePostConfirm": "\u00c4r du s\u00e4ker att du vill avarkivera detta inl\u00e4gg?" }, "story": { - "add": "Add Story" + "add": "L\u00e4gg till Story" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "Personer du kanske k\u00e4nner", + "onboarding": { + "welcome": "V\u00e4lkommen", + "thisIsYourHomeFeed": "Detta \u00e4r ditt hem foder, ett kronologiskt fl\u00f6de av inl\u00e4gg fr\u00e5n konton du f\u00f6ljer.", + "letUsHelpYouFind": "L\u00e5t oss hj\u00e4lpa dig att hitta n\u00e5gra intressanta m\u00e4nniskor att f\u00f6lja", + "refreshFeed": "Uppdatera mitt fl\u00f6de" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Vi kan inte hitta n\u00e5gra inl\u00e4gg med den hashtagen" + }, + "report": { + "report": "Rapportera", + "selectReason": "V\u00e4lj en anledning", + "reported": "Rapporterad", + "sendingReport": "Skickar rapport", + "thanksMsg": "Tack f\u00f6r rapporten, personer som gillar att du hj\u00e4lper till att skydda v\u00e5r gemenskap!", + "contactAdminMsg": "Om du vill kontakta en administrat\u00f6r om detta inl\u00e4gg eller rapport" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/th.json b/resources/assets/js/i18n/th.json index 5445b0116..9da33b30b 100644 --- a/resources/assets/js/i18n/th.json +++ b/resources/assets/js/i18n/th.json @@ -1,139 +1,170 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "\u0e04\u0e27\u0e32\u0e21\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19", + "commented": "\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e27\u0e32\u0e21\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19\u0e19\u0e35\u0e49\u0e41\u0e25\u0e49\u0e27", + "comments": "\u0e04\u0e27\u0e32\u0e21\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19", + "like": "\u0e16\u0e39\u0e01\u0e43\u0e08", + "liked": "\u0e16\u0e39\u0e01\u0e43\u0e08\u0e41\u0e25\u0e49\u0e27", + "likes": "\u0e16\u0e39\u0e01\u0e43\u0e08", + "share": "\u0e41\u0e0a\u0e23\u0e4c", + "shared": "\u0e41\u0e0a\u0e23\u0e4c\u0e41\u0e25\u0e49\u0e27", + "shares": "\u0e41\u0e0a\u0e23\u0e4c", + "unshare": "\u0e40\u0e25\u0e34\u0e01\u0e41\u0e0a\u0e23\u0e4c", + "bookmark": "\u0e1a\u0e38\u0e4a\u0e04\u0e21\u0e32\u0e23\u0e4c\u0e01", + "cancel": "\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01", + "copyLink": "\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e25\u0e34\u0e07\u0e04\u0e4c", + "delete": "\u0e25\u0e1a", + "error": "\u0e40\u0e01\u0e34\u0e14\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14", + "errorMsg": "\u0e21\u0e35\u0e1a\u0e32\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07\u0e43\u0e19\u0e20\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07", + "oops": "\u0e42\u0e2d\u0e4a\u0e30!", + "other": "\u0e2d\u0e37\u0e48\u0e19\u0e46", + "readMore": "\u0e2d\u0e48\u0e32\u0e19\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21", + "success": "\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08", + "proceed": "\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23", + "next": "\u0e16\u0e31\u0e14\u0e44\u0e1b", + "close": "\u0e1b\u0e34\u0e14", + "clickHere": "\u0e04\u0e25\u0e34\u0e01\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48", + "sensitive": "\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e2d\u0e48\u0e2d\u0e19", + "sensitiveContent": "\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e35\u0e48\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e2d\u0e48\u0e2d\u0e19", + "sensitiveContentWarning": "\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e21\u0e35\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e35\u0e48\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e2d\u0e48\u0e2d\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e48\u0e2d\u0e19\u0e44\u0e27" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "\u0e02\u0e49\u0e2d\u0e15\u0e01\u0e25\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "privacy": "\u0e19\u0e42\u0e22\u0e1a\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", - "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "backToPreviousDesign": "Go back to previous design" + "search": "\u0e04\u0e49\u0e19\u0e2b\u0e32", + "admin": "\u0e41\u0e2d\u0e14\u0e21\u0e34\u0e19\u0e41\u0e14\u0e0a\u0e1a\u0e2d\u0e23\u0e4c\u0e14", + "homeFeed": "\u0e42\u0e2e\u0e21\u0e2b\u0e19\u0e49\u0e32\u0e1f\u0e35\u0e14", + "localFeed": "\u0e2b\u0e19\u0e49\u0e32\u0e1f\u0e35\u0e14\u0e17\u0e49\u0e2d\u0e07\u0e16\u0e34\u0e48\u0e19", + "globalFeed": "\u0e2b\u0e19\u0e49\u0e32\u0e1f\u0e35\u0e14\u0e17\u0e31\u0e48\u0e27\u0e42\u0e25\u0e01", + "discover": "\u0e2a\u0e33\u0e23\u0e27\u0e08", + "directMessages": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27", + "notifications": "\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19", + "groups": "\u0e01\u0e25\u0e38\u0e48\u0e21", + "stories": "\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e23\u0e32\u0e27", + "profile": "\u0e42\u0e1b\u0e23\u0e44\u0e1f\u0e25\u0e4c", + "drive": "\u0e44\u0e14\u0e23\u0e1f\u0e4c", + "settings": "\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32", + "compose": "\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48", + "logout": "\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e23\u0e30\u0e1a\u0e1a", + "about": "\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a", + "help": "\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d", + "language": "\u0e20\u0e32\u0e29\u0e32", + "privacy": "\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27", + "terms": "\u0e02\u0e49\u0e2d\u0e15\u0e01\u0e25\u0e07", + "backToPreviousDesign": "\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21", + "sent": "\u0e2a\u0e48\u0e07", + "requests": "\u0e04\u0e33\u0e02\u0e2d" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", + "liked": "\u0e16\u0e39\u0e01\u0e43\u0e08\u0e04\u0e38\u0e13\u0e41\u0e25\u0e49\u0e27", + "commented": "\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e27\u0e32\u0e21\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19\u0e04\u0e38\u0e13\u0e41\u0e25\u0e49\u0e27", + "reacted": "\u0e15\u0e2d\u0e1a\u0e2a\u0e19\u0e2d\u0e07\u0e16\u0e36\u0e07\u0e04\u0e38\u0e13", + "shared": "\u0e04\u0e38\u0e13\u0e41\u0e0a\u0e23\u0e4c\u0e41\u0e25\u0e49\u0e27", + "tagged": "\u0e21\u0e35\u0e04\u0e19\u0e44\u0e14\u0e49\u0e01\u0e25\u0e48\u0e32\u0e27\u0e16\u0e36\u0e07\u0e04\u0e38\u0e13\u0e43\u0e19", + "updatedA": "\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e41\u0e25\u0e49\u0e27\u0e40\u0e21\u0e37\u0e48\u0e2d", + "sentA": "\u0e2a\u0e48\u0e07\u0e40\u0e21\u0e37\u0e48\u0e2d", + "followed": "\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21\u0e41\u0e25\u0e49\u0e27", + "mentioned": "\u0e01\u0e25\u0e48\u0e32\u0e27\u0e16\u0e36\u0e07\u0e41\u0e25\u0e49\u0e27", + "you": "\u0e04\u0e38\u0e13", + "yourApplication": "\u0e22\u0e37\u0e48\u0e19\u0e43\u0e1a\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21", + "applicationApproved": "\u0e44\u0e14\u0e49\u0e2d\u0e19\u0e38\u0e21\u0e31\u0e15\u0e34\u0e41\u0e25\u0e49\u0e27!", + "applicationRejected": "\u0e16\u0e39\u0e01\u0e1b\u0e0f\u0e34\u0e40\u0e2a\u0e18\u0e41\u0e25\u0e49\u0e27 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e43\u0e2b\u0e21\u0e48\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e44\u0e14\u0e49\u0e20\u0e32\u0e22\u0e43\u0e19 6 \u0e40\u0e14\u0e37\u0e2d\u0e19\u0e19\u0e30", "dm": "dm", - "groupPost": "group post", - "modlog": "modlog", - "post": "post", - "story": "story" + "groupPost": "\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e01\u0e25\u0e38\u0e48\u0e21", + "modlog": "\u0e21\u0e47\u0e2d\u0e14\u0e25\u0e47\u0e2d\u0e01", + "post": "\u0e42\u0e1e\u0e2a\u0e15\u0e4c", + "story": "\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e23\u0e32\u0e27", + "noneFound": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19" }, "post": { - "shareToFollowers": "Share to followers", - "shareToOther": "Share to other", - "noLikes": "No likes yet", - "uploading": "Uploading" + "shareToFollowers": "\u0e41\u0e0a\u0e23\u0e4c\u0e43\u0e2b\u0e49\u0e1c\u0e39\u0e49\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "shareToOther": "\u0e41\u0e0a\u0e23\u0e4c\u0e43\u0e2b\u0e49\u0e2d\u0e37\u0e48\u0e19\u0e46", + "noLikes": "\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e43\u0e08", + "uploading": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2d\u0e31\u0e1e\u0e42\u0e2b\u0e25\u0e14" }, "profile": { - "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", - "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", - "joined": "Joined" + "posts": "\u0e42\u0e1e\u0e2a\u0e15\u0e4c", + "followers": "\u0e1c\u0e39\u0e49\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "following": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "admin": "\u0e1c\u0e39\u0e49\u0e14\u0e39\u0e41\u0e25\u0e23\u0e30\u0e1a\u0e1a", + "collections": "\u0e04\u0e2d\u0e25\u0e40\u0e25\u0e01\u0e0a\u0e31\u0e19", + "follow": "\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "unfollow": "\u0e40\u0e25\u0e34\u0e01\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "editProfile": "\u0e41\u0e01\u0e49\u0e44\u0e02\u0e42\u0e1b\u0e23\u0e4c\u0e44\u0e1f\u0e25\u0e4c", + "followRequested": "\u0e04\u0e33\u0e02\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "joined": "\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e41\u0e25\u0e49\u0e27", + "emptyCollections": "\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e23\u0e32\u0e08\u0e30\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e04\u0e2d\u0e25\u0e40\u0e25\u0e01\u0e0a\u0e31\u0e19\u0e43\u0e14\u0e46", + "emptyPosts": "\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e23\u0e32\u0e08\u0e30\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e43\u0e14\u0e46" }, "menu": { - "viewPost": "View Post", - "viewProfile": "View Profile", - "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", - "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", - "modUnlistConfirm": "Are you sure you want to unlist this post?", - "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "viewPost": "\u0e14\u0e39\u0e42\u0e1e\u0e2a\u0e15\u0e4c", + "viewProfile": "\u0e14\u0e39\u0e42\u0e1b\u0e23\u0e44\u0e1f\u0e25\u0e4c", + "moderationTools": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e01\u0e25\u0e31\u0e48\u0e19\u0e01\u0e23\u0e2d\u0e07", + "report": "\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19", + "archive": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e2a\u0e33\u0e04\u0e31\u0e0d", + "unarchive": "\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e01\u0e32\u0e23\u0e40\u0e01\u0e47\u0e1a\u0e16\u0e32\u0e27\u0e23", + "embed": "\u0e1d\u0e31\u0e07", + "selectOneOption": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e43\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e01\u0e33\u0e25\u0e31\u0e07\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21\u0e14\u0e31\u0e07\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e19\u0e35\u0e49", + "unlistFromTimelines": "\u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e08\u0e32\u0e01\u0e44\u0e17\u0e21\u0e4c\u0e44\u0e25\u0e19\u0e4c", + "addCW": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32", + "removeCW": "\u0e25\u0e1a\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e2d\u0e2d\u0e01", + "markAsSpammer": "\u0e17\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e1a\u0e2d\u0e01\u0e27\u0e48\u0e32\u0e2a\u0e41\u0e1b\u0e21\u0e40\u0e01\u0e2d\u0e23\u0e4c", + "markAsSpammerText": "\u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07 + CW \u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27\u0e41\u0e25\u0e30\u0e43\u0e19\u0e2d\u0e19\u0e32\u0e04\u0e15", + "spam": "\u0e2a\u0e41\u0e1b\u0e21", + "sensitive": "\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e35\u0e48\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e2d\u0e48\u0e2d\u0e19", + "abusive": "\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e32\u0e08\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e31\u0e19\u0e15\u0e23\u0e32\u0e22", + "underageAccount": "\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e17\u0e35\u0e48\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49\u0e1a\u0e23\u0e23\u0e25\u0e38\u0e19\u0e34\u0e15\u0e34\u0e20\u0e32\u0e27\u0e30", + "copyrightInfringement": "\u0e01\u0e32\u0e23\u0e25\u0e30\u0e40\u0e21\u0e34\u0e14\u0e25\u0e34\u0e02\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c", + "impersonation": "\u0e41\u0e2d\u0e1a\u0e2d\u0e49\u0e32\u0e07\u0e1a\u0e38\u0e04\u0e04\u0e25\u0e2d\u0e37\u0e48\u0e19", + "scamOrFraud": "\u0e2b\u0e25\u0e2d\u0e01\u0e25\u0e27\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e09\u0e49\u0e2d\u0e42\u0e01\u0e07", + "confirmReport": "\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e01\u0e32\u0e23\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19", + "confirmReportText": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49?", + "reportSent": "\u0e2a\u0e48\u0e07\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27!", + "reportSentText": "\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27\u0e19\u0e30", + "reportSentError": "\u0e40\u0e01\u0e34\u0e14\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e01\u0e33\u0e25\u0e31\u0e07\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49", + "modAddCWConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e43\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49?", + "modCWSuccess": "\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27\u0e44\u0e14\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32", + "modRemoveCWConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e25\u0e1a\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e43\u0e19\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49?", + "modRemoveCWSuccess": "\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27\u0e44\u0e14\u0e49\u0e25\u0e1a\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32", + "modUnlistConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e43\u0e19\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49?", + "modUnlistSuccess": "\u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27", + "modMarkAsSpammerConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e27\u0e48\u0e32\u0e08\u0e30\u0e17\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e23\u0e32\u0e22\u0e19\u0e35\u0e49\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e41\u0e1b\u0e21? \u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e30\u0e43\u0e19\u0e2d\u0e19\u0e32\u0e04\u0e15\u0e08\u0e30\u0e16\u0e39\u0e01\u0e19\u0e33\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e44\u0e17\u0e21\u0e4c\u0e44\u0e25\u0e19\u0e4c\u0e41\u0e25\u0e30\u0e43\u0e2a\u0e48\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32", + "modMarkAsSpammerSuccess": "\u0e17\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e1a\u0e2d\u0e01\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e41\u0e1b\u0e21\u0e40\u0e21\u0e2d\u0e23\u0e4c\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27", + "toFollowers": "\u0e16\u0e36\u0e07\u0e1c\u0e39\u0e49\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "showCaption": "\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e1a\u0e23\u0e23\u0e22\u0e32\u0e22\u0e20\u0e32\u0e1e", + "showLikes": "\u0e41\u0e2a\u0e14\u0e07\u0e44\u0e25\u0e04\u0e4c", + "compactMode": "\u0e42\u0e2b\u0e21\u0e14\u0e01\u0e30\u0e17\u0e31\u0e14\u0e23\u0e31\u0e14", + "embedConfirmText": "\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e1d\u0e31\u0e07\u0e19\u0e35\u0e49\u0e41\u0e2a\u0e14\u0e07\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e22\u0e2d\u0e21\u0e23\u0e31\u0e1a\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32", + "deletePostConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e25\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49?", + "archivePostConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49\u0e16\u0e32\u0e27\u0e23?", + "unarchivePostConfirm": "\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e25\u0e34\u0e01\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e19\u0e35\u0e49\u0e16\u0e32\u0e27\u0e23?" }, "story": { - "add": "Add Story" + "add": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e23\u0e32\u0e27" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "\u0e04\u0e19\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e2d\u0e32\u0e08\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01", + "onboarding": { + "welcome": "\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a", + "thisIsYourHomeFeed": "\u0e19\u0e35\u0e48\u0e04\u0e37\u0e2d\u0e42\u0e2e\u0e21\u0e1f\u0e35\u0e14\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e1f\u0e35\u0e14\u0e17\u0e35\u0e48\u0e08\u0e30\u0e41\u0e2a\u0e14\u0e07\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e15\u0e32\u0e21\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e40\u0e27\u0e25\u0e32\u0e08\u0e32\u0e01\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "letUsHelpYouFind": "\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e0a\u0e48\u0e27\u0e22\u0e04\u0e38\u0e13\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e1c\u0e39\u0e49\u0e04\u0e19\u0e17\u0e35\u0e48\u0e19\u0e48\u0e32\u0e2a\u0e19\u0e43\u0e08\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21", + "refreshFeed": "\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e1f\u0e35\u0e14\u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19" + } + }, + "hashtags": { + "emptyFeed": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e2e\u0e0a\u0e41\u0e17\u0e47\u0e01\u0e19\u0e35\u0e49" + }, + "report": { + "report": "\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19", + "selectReason": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e2b\u0e15\u0e38\u0e1c\u0e25", + "reported": "\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27", + "sendingReport": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e48\u0e07\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19", + "thanksMsg": "\u0e02\u0e2d\u0e1a\u0e04\u0e38\u0e13\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e0a\u0e38\u0e21\u0e0a\u0e19\u0e41\u0e25\u0e30\u0e1c\u0e39\u0e49\u0e04\u0e19\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22!", + "contactAdminMsg": "\u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e14\u0e39\u0e41\u0e25\u0e23\u0e30\u0e1a\u0e1a\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e1e\u0e2a\u0e15\u0e4c\u0e2b\u0e23\u0e37\u0e2d\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/tr.json b/resources/assets/js/i18n/tr.json index 274abb51d..49d1ce183 100644 --- a/resources/assets/js/i18n/tr.json +++ b/resources/assets/js/i18n/tr.json @@ -1,15 +1,16 @@ { "common": { "comment": "Yorum", - "commented": "Yorumlar", + "commented": "Yorumlad\u0131", "comments": "Yorumlar", "like": "Be\u011fen", "liked": "Be\u011fenildi", - "likes": "Be\u011feniler", + "likes": "Be\u011fenenler", "share": "Payla\u015f", - "shared": "Payla\u015f\u0131lan", + "shared": "Payla\u015f\u0131ld\u0131", "shares": "Payla\u015f\u0131lanlar", "unshare": "Payla\u015f\u0131m\u0131 kald\u0131r", + "bookmark": "Yerimi", "cancel": "\u0130ptal", "copyLink": "Ba\u011flant\u0131y\u0131 Kopyala", "delete": "Sil", @@ -17,9 +18,13 @@ "errorMsg": "Bir \u015feyler yanl\u0131\u015f gitti. L\u00fctfen daha sonra tekrar deneyiniz.", "oops": "Hay aksi!", "other": "Di\u011fer", - "readMore": "Daha fazlas\u0131n\u0131 oku", + "readMore": "Daha fazlas\u0131", "success": "Ba\u015far\u0131l\u0131", - "sensitive": "Hassasiyet", + "proceed": "\u0130lerleyiniz", + "next": "\u0130leri", + "close": "Kapat", + "clickHere": "buraya t\u0131klay\u0131n", + "sensitive": "Hassas", "sensitiveContent": "Hassas i\u00e7erik", "sensitiveContentWarning": "Bu ileti hassas i\u00e7erik i\u00e7eriyor olabilir" }, @@ -28,13 +33,13 @@ "privacy": "Gizlilik Politikas\u0131" }, "navmenu": { - "search": "Arama", + "search": "Ara", "admin": "Y\u00f6netici Paneli", - "homeFeed": "Home Feed", + "homeFeed": "Anasayfa", "localFeed": "Yerel Ak\u0131\u015f", "globalFeed": "Evrensel Ak\u0131\u015f", "discover": "Ke\u015ffet", - "directMessages": "Direkt Mesajlar", + "directMessages": "Do\u011frudan Mesajlar", "notifications": "Bildirimler", "groups": "Gruplar", "stories": "Hikayeler", @@ -42,7 +47,7 @@ "drive": "Depolama", "settings": "Ayarlar", "compose": "Yeni olu\u015ftur", - "logout": "Logout", + "logout": "Oturumu kapat", "about": "Hakk\u0131nda", "help": "Yard\u0131m", "language": "Dil", @@ -56,70 +61,71 @@ "requests": "\u0130stekler" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", - "tagged": "tagged you in a", - "updatedA": "updated a", - "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", + "liked": "be\u011fendim", + "commented": "yorum yazd\u0131", + "reacted": "tepki verdi", + "shared": "payla\u015ft\u0131", + "tagged": "sizi etiketledi", + "updatedA": "g\u00fcncel bir", + "sentA": "g\u00f6nderdi", + "followed": "takip etti", + "mentioned": "bahsetti", "you": "sen", "yourApplication": "Kat\u0131lma iste\u011finiz", "applicationApproved": "onayland\u0131!", "applicationRejected": "reddedildi. 6 ay sonra, tekrar kat\u0131lma iste\u011finde bulunabilirsiniz.", - "dm": "\u00f6zel mesaj", - "groupPost": "group post", + "dm": "dm", + "groupPost": "grup g\u00f6nderisi", "modlog": "modlog", - "post": "post", - "story": "hikaye" + "post": "g\u00f6nderi", + "story": "hikaye", + "noneFound": "Bildirim bulunamad\u0131" }, "post": { - "shareToFollowers": "Takip\u00e7ileri payla\u015f", - "shareToOther": "Share to other", + "shareToFollowers": "Takip\u00e7ilerle payla\u015f", + "shareToOther": "Di\u011ferleriyle payla\u015f", "noLikes": "Hen\u00fcz be\u011fenilmedi", - "uploading": "Y\u00fckleniyor" + "uploading": "Kar\u015f\u0131ya Y\u00fckleniyor" }, "profile": { "posts": "G\u00f6nderiler", "followers": "Takip\u00e7iler", "following": "Takip ediliyor", "admin": "Y\u00f6netici", - "collections": "Koleksiyonlar", + "collections": "Derlemeler", "follow": "Takip et", "unfollow": "Takibi b\u0131rak", "editProfile": "Profili D\u00fczenle", "followRequested": "Takip \u0130ste\u011fi", "joined": "Kat\u0131ld\u0131", - "emptyCollections": "We can't seem to find any collections", - "emptyPosts": "We can't seem to find any posts" + "emptyCollections": "Herhangi bir koleksiyon bulunmuyor", + "emptyPosts": "Herhangi bir g\u00f6nderi bulunmuyor" }, "menu": { "viewPost": "G\u00f6nderiyi g\u00f6r\u00fcnt\u00fcle", "viewProfile": "Profili G\u00f6r\u00fcnt\u00fcle", - "moderationTools": "Denetim Ayarlar\u0131", + "moderationTools": "Denetim Ara\u00e7lar\u0131", "report": "Bildir", - "archive": "Archive", + "archive": "Ar\u015fiv", "unarchive": "Ar\u015fivden \u00e7\u0131kar", - "embed": "Embed", + "embed": "Yerle\u015ftir", "selectOneOption": "A\u015fa\u011f\u0131daki se\u00e7eneklerden birini se\u00e7in", "unlistFromTimelines": "Ak\u0131\u015flardan kald\u0131r", "addCW": "\u0130\u00e7erik Uyar\u0131s\u0131n\u0131 Ekle", "removeCW": "\u0130\u00e7erik Uyar\u0131s\u0131n\u0131 Kald\u0131r", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", - "spam": "\u0130stenmeyen", + "markAsSpammer": "\u0130stenmeyen \u0130leti G\u00f6ndericisi Olarak \u0130\u015faretle", + "markAsSpammerText": "Mevcut ve gelecekteki g\u00f6nderileri + CW listesini kald\u0131r\u0131n", + "spam": "\u0130stenmeyen posta", "sensitive": "Hassas i\u00e7erik", "abusive": "\u0130stismarc\u0131 veya Zararl\u0131", - "underageAccount": "Underage Account", + "underageAccount": "Ya\u015f\u0131 Tutmayan Hesap", "copyrightInfringement": "Telif hakk\u0131 ihlali", "impersonation": "Taklit Hesap", "scamOrFraud": "Doland\u0131r\u0131c\u0131l\u0131k", "confirmReport": "Bildirimi onayla", "confirmReportText": "Bu payla\u015f\u0131m\u0131 bildirmek istedi\u011finizden emin misiniz?", "reportSent": "Rapor G\u00f6nderildi!", - "reportSentText": "Raporunuzu ba\u015far\u0131yla ald\u0131k.", + "reportSentText": "Raporunuzu ba\u015far\u0131l\u0131 bir \u015fekilde ald\u0131k.", "reportSentError": "Bu g\u00f6nderi bildirilirken bir sorun olu\u015ftu.", "modAddCWConfirm": "Bu g\u00f6nderiye bir i\u00e7erik uyar\u0131s\u0131 eklemek istedi\u011finizden emin misiniz?", "modCWSuccess": "\u0130\u00e7erik uyar\u0131s\u0131 ba\u015far\u0131yla eklendi", @@ -133,7 +139,7 @@ "showCaption": "A\u00e7\u0131klamay\u0131 g\u00f6ster", "showLikes": "Be\u011fenileri G\u00f6ster", "compactMode": "Kompakt Mod", - "embedConfirmText": "By using this embed, you agree to our", + "embedConfirmText": "Bu g\u00f6m\u00fcy\u00fc kullanarak,", "deletePostConfirm": "Bu g\u00f6nderiyi silmek istedi\u011finizden emin misiniz?", "archivePostConfirm": "Bu g\u00f6nderiyi ar\u015fivlemek istedi\u011finizden emin misiniz?", "unarchivePostConfirm": "Bu g\u00f6nderiyi ar\u015fivden \u00e7\u0131karmak istedi\u011finize emin misiniz?" @@ -142,9 +148,23 @@ "add": "Hikaye ekle" }, "timeline": { - "peopleYouMayKnow": "Tan\u0131yor olabilece\u011fin ki\u015filer" + "peopleYouMayKnow": "Tan\u0131yor olabilece\u011fin ki\u015filer", + "onboarding": { + "welcome": "Ho\u015f Geldiniz", + "thisIsYourHomeFeed": "Buras\u0131 sizin ak\u0131\u015f sayfan\u0131z, takip etti\u011finiz hesaplar\u0131n payla\u015f\u0131mlar\u0131 kronolojik g\u00f6sterilir.", + "letUsHelpYouFind": "Takip etmek i\u00e7in size baz\u0131 ilgin\u00e7 ki\u015fileri bulman\u0131zda yard\u0131mc\u0131 olal\u0131m", + "refreshFeed": "Ak\u0131\u015f\u0131m\u0131 yenile" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "Bu etiket ile ilgili bir g\u00f6nderi bulam\u0131yoruz" + }, + "report": { + "report": "Bildir", + "selectReason": "Bir sebep se\u00e7in", + "reported": "Bildirildi", + "sendingReport": "Bildiri g\u00f6nderiliyor", + "thanksMsg": "Bildirdi\u011finiz i\u00e7in te\u015fekk\u00fcrler, sizin gibi insanlar sayesinde toplulu\u011fumuz g\u00fcvende kal\u0131yor!", + "contactAdminMsg": "E\u011fer bu g\u00f6nderi veya bildirim hakk\u0131nda bir y\u00f6netici ile irtibata ge\u00e7mek istiyorsan\u0131z" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/vi.json b/resources/assets/js/i18n/vi.json index 3f76b862f..a0433015a 100644 --- a/resources/assets/js/i18n/vi.json +++ b/resources/assets/js/i18n/vi.json @@ -10,6 +10,7 @@ "shared": "\u0110\u00e3 chia s\u1ebb", "shares": "L\u01b0\u1ee3t chia s\u1ebb", "unshare": "H\u1ee7y chia s\u1ebb", + "bookmark": "L\u01b0u", "cancel": "H\u1ee7y", "copyLink": "Ch\u00e9p link", "delete": "X\u00f3a", @@ -19,6 +20,10 @@ "other": "Kh\u00e1c", "readMore": "Xem th\u00eam", "success": "Ho\u00e0n t\u1ea5t", + "proceed": "Ti\u1ebfp t\u1ee5c", + "next": "Ti\u1ebfp theo", + "close": "\u0110\u00f3ng", + "clickHere": "nh\u1ea5n v\u00e0o \u0111\u00e2y", "sensitive": "Nh\u1ea1y c\u1ea3m", "sensitiveContent": "N\u1ed9i dung nh\u1ea1y c\u1ea3m", "sensitiveContentWarning": "\u1ea2nh n\u00e0y c\u00f3 th\u1ec3 ch\u1ee9a n\u1ed9i dung nh\u1ea1y c\u1ea3m" @@ -59,7 +64,7 @@ "liked": "\u0111\u00e3 th\u00edch \u1ea3nh", "commented": "b\u00ecnh lu\u1eadn v\u1ec1 \u1ea3nh", "reacted": "xem \u1ea3nh", - "shared": "chia s\u1ebb \u1ea3nh", + "shared": "\u0111\u00e3 chia s\u1ebb", "tagged": "nh\u1eafc \u0111\u1ebfn b\u1ea1n trong", "updatedA": "\u0111\u00e3 c\u1eadp nh\u1eadt", "sentA": "\u0111\u00e3 g\u1eedi m\u1ed9t", @@ -73,7 +78,8 @@ "groupPost": "\u1ea3nh \u0111\u0103ng nh\u00f3m", "modlog": "nh\u1eadt k\u00fd ki\u1ec3m duy\u1ec7t", "post": "b\u00e0i \u0111\u0103ng", - "story": "kho\u1ea3nh kh\u1eafc" + "story": "kho\u1ea3nh kh\u1eafc", + "noneFound": "Kh\u00f4ng c\u00f3 th\u00f4ng b\u00e1o m\u1edbi" }, "post": { "shareToFollowers": "Chia s\u1ebb \u0111\u1ebfn ng\u01b0\u1eddi theo d\u00f5i", @@ -139,12 +145,26 @@ "unarchivePostConfirm": "B\u1ea1n c\u00f3 ch\u1eafc mu\u1ed1n b\u1ecf l\u01b0u tr\u1eef \u1ea3nh n\u00e0y?" }, "story": { - "add": "Th\u00eam kho\u1ea3nh kh\u1eafc" + "add": "Kho\u1ea3nh kh\u1eafc" }, "timeline": { - "peopleYouMayKnow": "Nh\u1eefng ng\u01b0\u1eddi b\u1ea1n c\u00f3 th\u1ec3 bi\u1ebft" + "peopleYouMayKnow": "Nh\u1eefng ng\u01b0\u1eddi b\u1ea1n c\u00f3 th\u1ec3 bi\u1ebft", + "onboarding": { + "welcome": "Ch\u00e0o m\u1eebng", + "thisIsYourHomeFeed": "\u0110\u00e2y l\u00e0 b\u1ea3ng tin c\u1ee7a b\u1ea1n, \u0111\u01b0\u1ee3c x\u1ebfp theo th\u1ee9 t\u1ef1 th\u1eddi gian v\u1edbi nh\u1eefng t\u00e0i kho\u1ea3n m\u00e0 b\u1ea1n theo d\u00f5i.", + "letUsHelpYouFind": "\u0110\u00e2y l\u00e0 v\u00e0i ng\u01b0\u1eddi th\u00fa v\u1ecb m\u00e0 b\u1ea1n n\u00ean theo d\u00f5i", + "refreshFeed": "L\u00e0m t\u01b0\u01a1i b\u1ea3ng tin" + } }, "hashtags": { "emptyFeed": "Kh\u00f4ng t\u00ecm th\u1ea5y \u1ea3nh n\u00e0o v\u1edbi hashtag n\u00e0y" + }, + "report": { + "report": "B\u00e1o c\u00e1o", + "selectReason": "Ch\u1ecdn m\u1ed9t l\u00fd do", + "reported": "B\u1ecb b\u00e1o c\u00e1o", + "sendingReport": "\u0110ang g\u1eedi b\u00e1o c\u00e1o...", + "thanksMsg": "C\u1ea3m \u01a1n \u0111\u00e3 g\u1eedi b\u00e1o c\u00e1o, b\u1ea1n \u0111\u00e3 gi\u00fap c\u1ed9ng \u0111\u1ed3ng s\u1ea1ch h\u01a1n!", + "contactAdminMsg": "N\u1ebfu c\u1ea7n thi\u1ebft, h\u00e3y li\u00ean h\u1ec7 qu\u1ea3n tr\u1ecb vi\u00ean v\u1ec1 \u1ea3nh n\u00e0y ho\u1eb7c b\u00e1o c\u00e1o" } } \ No newline at end of file diff --git a/resources/assets/js/i18n/zh.json b/resources/assets/js/i18n/zh.json index 1acb08636..d0d6c25c8 100644 --- a/resources/assets/js/i18n/zh.json +++ b/resources/assets/js/i18n/zh.json @@ -1,96 +1,102 @@ { "common": { - "comment": "Comment", - "commented": "Commented", - "comments": "Comments", - "like": "Like", - "liked": "Liked", - "likes": "Likes", - "share": "Share", - "shared": "Shared", - "shares": "Shares", - "unshare": "Unshare", - "cancel": "Cancel", - "copyLink": "Copy Link", - "delete": "Delete", - "error": "Error", - "errorMsg": "Something went wrong. Please try again later.", - "oops": "Oops!", - "other": "Other", - "readMore": "Read more", - "success": "Success", - "sensitive": "Sensitive", - "sensitiveContent": "Sensitive Content", - "sensitiveContentWarning": "This post may contain sensitive content" + "comment": "\u8a55\u8ad6", + "commented": "\u5df2\u8a55\u8ad6", + "comments": "\u689d\u610f\u898b\u8a55\u8ad6", + "like": "\u6309\u8b9a", + "liked": "\u5df2\u6309\u8b9a", + "likes": "\u500b\u4eba\u5df2\u6309\u8b9a", + "share": "\u5206\u4eab", + "shared": "\u5df2\u5206\u4eab", + "shares": "\u6b21\u5206\u4eab", + "unshare": "\u53d6\u6d88\u5206\u4eab", + "bookmark": "\u66f8\u7c64", + "cancel": "\u53d6\u6d88", + "copyLink": "\u8907\u88fd\u9023\u7d50", + "delete": "\u5220\u9664", + "error": "\u932f\u8aa4", + "errorMsg": "\u51fa\u4e86\u9ede\u5c0f\u554f\u984c\uff0c\u8acb\u7a0d\u5f8c\u91cd\u8a66\u3002", + "oops": "\u5443\u2026", + "other": "\u5176\u4ed6", + "readMore": "\u7e7c\u7e8c\u8b80\u4e0b\u53bb", + "success": "\u6210\u529f", + "proceed": "\u7e7c\u7e8c", + "next": "\u4e0b\u4e00\u500b", + "close": "\u95dc\u9589", + "clickHere": "\u9ede\u64ca\u6b64\u8655", + "sensitive": "\u654f\u611f\u5167\u5bb9", + "sensitiveContent": "\u654f\u611f\u5167\u5bb9", + "sensitiveContentWarning": "\u9019\u7bc7\u6587\u53ef\u80fd\u5305\u542b\u654f\u611f\u5167\u5bb9" }, "site": { - "terms": "Terms of Use", - "privacy": "Privacy Policy" + "terms": "\u4f7f\u7528\u689d\u6b3e", + "privacy": "\u96b1\u79c1\u6b0a\u653f\u7b56" }, "navmenu": { - "search": "Search", - "admin": "Admin Dashboard", - "homeFeed": "Home Feed", - "localFeed": "Local Feed", - "globalFeed": "Global Feed", - "discover": "Discover", - "directMessages": "Direct Messages", - "notifications": "Notifications", - "groups": "Groups", - "stories": "Stories", - "profile": "Profile", + "search": "\u641c\u5c0b", + "admin": "\u7ba1\u7406\u5100\u8868\u677f", + "homeFeed": "\u9996\u9801\u52d5\u614b", + "localFeed": "\u7ad9\u5167\u52d5\u614b", + "globalFeed": "\u806f\u90a6\u52d5\u614b", + "discover": "\u63a2\u7d22", + "directMessages": "\u79c1\u4eba\u8a0a\u606f", + "notifications": "\u901a\u77e5", + "groups": "\u7fa4\u7d44", + "stories": "\u9650\u6642\u52d5\u614b", + "profile": "\u500b\u4eba\u6a94\u6848", "drive": "Drive", - "settings": "Settings", - "compose": "Create New", - "logout": "Logout", - "about": "About", - "help": "Help", - "language": "Language", - "privacy": "Privacy", - "terms": "Terms", - "backToPreviousDesign": "Go back to previous design" + "settings": "\u8a2d\u5b9a", + "compose": "\u65b0\u589e", + "logout": "\u767b\u51fa", + "about": "\u95dc\u65bc", + "help": "\u8aac\u660e", + "language": "\u8a9e\u8a00", + "privacy": "\u96b1\u79c1\u6b0a", + "terms": "\u689d\u6b3e", + "backToPreviousDesign": "\u56de\u5230\u5148\u524d\u7684\u8a2d\u8a08" }, "directMessages": { - "inbox": "Inbox", - "sent": "Sent", - "requests": "Requests" + "inbox": "\u6536\u4ef6\u593e", + "sent": "\u5bc4\u4ef6\u593e", + "requests": "\u8acb\u6c42" }, "notifications": { - "liked": "liked your", - "commented": "commented on your", - "reacted": "reacted to your", - "shared": "shared your", + "liked": "\u559c\u6b61\u4f60\u7684", + "commented": "\u8a55\u8ad6\u4e86\u4f60\u7684", + "reacted": "\u53cd\u61c9\u4e86\u4f60\u7684", + "shared": "\u5206\u4eab\u4e86\u4f60\u7684", "tagged": "tagged you in a", "updatedA": "updated a", "sentA": "sent a", - "followed": "followed", - "mentioned": "mentioned", - "you": "you", - "yourApplication": "Your application to join", - "applicationApproved": "was approved!", - "applicationRejected": "was rejected. You can re-apply to join in 6 months.", - "dm": "dm", + "followed": "\u5df2\u95dc\u6ce8", + "mentioned": "\u88ab\u63d0\u53ca", + "you": "\u4f60", + "yourApplication": "\u60a8\u7684\u52a0\u5165\u7533\u8acb", + "applicationApproved": "\u88ab\u6279\u51c6\u4e86\uff01", + "applicationRejected": "\u88ab\u62d2\u7d55\u3002\u60a8\u53ef\u4ee5\u5728 6 \u500b\u6708\u5f8c\u518d\u6b21\u7533\u8acb\u52a0\u5165\u3002", + "dm": "\u76f4\u63a5\u8a0a\u606f", "groupPost": "group post", "modlog": "modlog", "post": "post", - "story": "story" + "story": "story", + "noneFound": "No notifications found" }, "post": { "shareToFollowers": "Share to followers", "shareToOther": "Share to other", "noLikes": "No likes yet", - "uploading": "Uploading" + "uploading": "\u4e0a\u50b3\u4e2d" }, "profile": { "posts": "Posts", - "followers": "Followers", - "following": "Following", - "admin": "Admin", + "followers": "\u8ddf\u96a8\u8005", + "following": "\u8ffd\u8e64\u4e2d", + "admin": "\u7ba1\u7406\u54e1", "collections": "Collections", - "follow": "Follow", - "unfollow": "Unfollow", - "editProfile": "Edit Profile", - "followRequested": "Follow Requested", + "follow": "\u8ffd\u8e64", + "unfollow": "\u53d6\u6d88\u8ffd\u8e64", + "editProfile": "\u7de8\u8f2f\u500b\u4eba\u6a94\u6848", + "followRequested": "\u8ffd\u8e64\u8acb\u6c42", "joined": "Joined", "emptyCollections": "We can't seem to find any collections", "emptyPosts": "We can't seem to find any posts" @@ -99,52 +105,66 @@ "viewPost": "View Post", "viewProfile": "View Profile", "moderationTools": "Moderation Tools", - "report": "Report", - "archive": "Archive", - "unarchive": "Unarchive", - "embed": "Embed", - "selectOneOption": "Select one of the following options", - "unlistFromTimelines": "Unlist from Timelines", - "addCW": "Add Content Warning", - "removeCW": "Remove Content Warning", - "markAsSpammer": "Mark as Spammer", - "markAsSpammerText": "Unlist + CW existing and future posts", - "spam": "Spam", - "sensitive": "Sensitive Content", - "abusive": "Abusive or Harmful", - "underageAccount": "Underage Account", - "copyrightInfringement": "Copyright Infringement", - "impersonation": "Impersonation", - "scamOrFraud": "Scam or Fraud", - "confirmReport": "Confirm Report", - "confirmReportText": "Are you sure you want to report this post?", - "reportSent": "Report Sent!", - "reportSentText": "We have successfully received your report.", - "reportSentError": "There was an issue reporting this post.", - "modAddCWConfirm": "Are you sure you want to add a content warning to this post?", - "modCWSuccess": "Successfully added content warning", - "modRemoveCWConfirm": "Are you sure you want to remove the content warning on this post?", - "modRemoveCWSuccess": "Successfully removed content warning", + "report": "\u6aa2\u8209", + "archive": "\u5c01\u5b58", + "unarchive": "\u53d6\u6d88\u5c01\u5b58", + "embed": "\u5d4c\u5165", + "selectOneOption": "\u9078\u64c7\u4ee5\u4e0b\u9078\u9805\u4e4b\u4e00", + "unlistFromTimelines": "\u4e0d\u5728\u6642\u9593\u8ef8\u4e2d\u4e0a\u986f\u793a", + "addCW": "\u589e\u52a0\u5167\u5bb9\u8b66\u544a", + "removeCW": "\u79fb\u9664\u5167\u5bb9\u8b66\u544a", + "markAsSpammer": "\u6a19\u8a18\u70ba\u5783\u573e\u8a0a\u606f\u4f86\u6e90\u8005", + "markAsSpammerText": "\u5c0d\u8a08\u6709\u53ca\u672a\u4f86\u8cbc\u6587\u8a2d\u5b9a\u6210\u4e0d\u5217\u51fa\u548c\u589e\u52a0\u5167\u5bb9\u8b66\u544a", + "spam": "\u5783\u573e\u8a0a\u606f", + "sensitive": "\u654f\u611f\u5167\u5bb9", + "abusive": "\u8fb1\u7f75\u6216\u6709\u5bb3", + "underageAccount": "\u672a\u6210\u5e74\u5e33\u865f", + "copyrightInfringement": "\u4fb5\u72af\u7248\u6b0a", + "impersonation": "\u5047\u5192\u5e33\u865f", + "scamOrFraud": "\u8a50\u9a19\u5167\u5bb9", + "confirmReport": "\u78ba\u8a8d\u6aa2\u8209", + "confirmReportText": "\u4f60\u78ba\u5b9a\u8981\u6aa2\u8209\u9019\u7bc7\u8cbc\u6587\uff1f", + "reportSent": "\u6aa2\u8209\u5df2\u9001\u51fa\uff01", + "reportSentText": "\u6211\u5011\u5df2\u7d93\u6536\u5230\u4f60\u7684\u6aa2\u8209\u3002", + "reportSentError": "\u6aa2\u8209\u6b64\u8cbc\u6587\u6642\u51fa\u73fe\u554f\u984c\u3002", + "modAddCWConfirm": "\u60a8\u78ba\u5b9a\u8981\u70ba\u6b64\u8cbc\u6587\u6dfb\u52a0\u5167\u5bb9\u8b66\u544a\u55ce\uff1f", + "modCWSuccess": "\u6210\u529f\u6dfb\u52a0\u5167\u5bb9\u8b66\u544a", + "modRemoveCWConfirm": "\u60a8\u78ba\u5b9a\u8981\u522a\u9664\u6b64\u8cbc\u6587\u4e0a\u7684\u5167\u5bb9\u8b66\u544a\u55ce\uff1f", + "modRemoveCWSuccess": "\u5df2\u6210\u529f\u522a\u9664\u5167\u5bb9\u8b66\u544a", "modUnlistConfirm": "Are you sure you want to unlist this post?", "modUnlistSuccess": "Successfully unlisted post", - "modMarkAsSpammerConfirm": "Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.", - "modMarkAsSpammerSuccess": "Successfully marked account as spammer", - "toFollowers": "to Followers", - "showCaption": "Show Caption", - "showLikes": "Show Likes", - "compactMode": "Compact Mode", - "embedConfirmText": "By using this embed, you agree to our", - "deletePostConfirm": "Are you sure you want to delete this post?", - "archivePostConfirm": "Are you sure you want to archive this post?", - "unarchivePostConfirm": "Are you sure you want to unarchive this post?" + "modMarkAsSpammerConfirm": "\u60a8\u78ba\u5b9a\u8981\u5c07\u6b64\u4f7f\u7528\u8005\u6a19\u8a18\u70ba\u5783\u573e\u8a0a\u606f\u767c\u9001\u8005\u55ce\uff1f\u6240\u6709\u73fe\u6709\u548c\u672a\u4f86\u7684\u8cbc\u6587\u5c07\u6539\u70ba\u975e\u516c\u958b\uff0c\u4e26\u5c07\u52a0\u4e0a\u5167\u5bb9\u8b66\u544a\u3002", + "modMarkAsSpammerSuccess": "\u5df2\u6210\u529f\u5c07\u5e33\u6236\u6a19\u8a18\u70ba\u5783\u573e\u8a0a\u606f\u767c\u9001\u8005", + "toFollowers": "\u7d66\u95dc\u6ce8\u8005", + "showCaption": "\u986f\u793a\u6587\u5b57\u8aaa\u660e", + "showLikes": "\u986f\u793a\u559c\u6b61", + "compactMode": "\u7dca\u6e4a\u6a21\u5f0f", + "embedConfirmText": "\u4f7f\u7528\u6b64\u5d4c\u5165\u5f0f\u5167\u5bb9\u5373\u8868\u793a\u60a8\u540c\u610f\u6211\u5011\u7684", + "deletePostConfirm": "\u4f60\u78ba\u5b9a\u8981\u522a\u9664\u6b64\u8cbc\u6587\uff1f", + "archivePostConfirm": "\u60a8\u78ba\u5b9a\u8981\u5c01\u5b58\u6b64\u8cbc\u6587\u55ce\uff1f", + "unarchivePostConfirm": "\u60a8\u78ba\u5b9a\u8981\u89e3\u9664\u5c01\u5b58\u6b64\u8cbc\u6587\u55ce\uff1f" }, "story": { - "add": "Add Story" + "add": "\u65b0\u589e\u6545\u4e8b" }, "timeline": { - "peopleYouMayKnow": "People you may know" + "peopleYouMayKnow": "\u4f60\u53ef\u80fd\u8a8d\u8b58", + "onboarding": { + "welcome": "\u6b61\u8fce", + "thisIsYourHomeFeed": "This is your home feed, a chronological feed of posts from accounts you follow.", + "letUsHelpYouFind": "Let us help you find some interesting people to follow", + "refreshFeed": "\u66f4\u65b0\u6211\u7684\u6e90" + } }, "hashtags": { - "emptyFeed": "We can't seem to find any posts for this hashtag" + "emptyFeed": "\u6211\u5011\u4f3c\u4e4e\u627e\u4e0d\u5230\u6b64\u4e3b\u984c\u6a19\u7c64\u7684\u4efb\u4f55\u8cbc\u6587" + }, + "report": { + "report": "\u6aa2\u8209", + "selectReason": "\u9078\u64c7\u4e00\u500b\u7406\u7531", + "reported": "\u5df2\u6aa2\u8209", + "sendingReport": "\u9001\u51fa\u6aa2\u8209", + "thanksMsg": "\u611f\u8b1d\u4f60\u7684\u6aa2\u8209\u8b93\u4e16\u754c\u66f4\u7f8e\u597d\uff01", + "contactAdminMsg": "\u5982\u679c\u4f60\u60f3\u8981\u63d0\u4f9b\u66f4\u591a\u6709\u95dc\u672c\u6b21\u6aa2\u8209\u7684\u5167\u5bb9\u7d66\u7ba1\u7406\u54e1" } } \ No newline at end of file diff --git a/resources/lang/af/web.php b/resources/lang/af/web.php index 3844f847a..2c6a7b418 100644 --- a/resources/lang/af/web.php +++ b/resources/lang/af/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Shared', 'shares' => 'Shares', 'unshare' => 'Unshare', + 'bookmark' => 'Bookmark', 'cancel' => 'Cancel', 'copyLink' => 'Copy Link', @@ -23,6 +24,10 @@ return [ 'other' => 'Other', 'readMore' => 'Read more', 'success' => 'Success', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', 'sensitive' => 'Sensitive', 'sensitiveContent' => 'Sensitive Content', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/ar/web.php b/resources/lang/ar/web.php index 416d56e53..26adc8d89 100644 --- a/resources/lang/ar/web.php +++ b/resources/lang/ar/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'تمَّ مُشارَكَتُه', 'shares' => 'مُشارَكَات', 'unshare' => 'إلغاء المُشارَكَة', + 'bookmark' => 'ضَع عَلامَةً مَرجِعِيَّة', 'cancel' => 'إلغاء', 'copyLink' => 'نَسخ الرابِط', @@ -23,6 +24,10 @@ return [ 'other' => 'اُخرى', 'readMore' => 'قراءةُ المزيد', 'success' => 'نَجاح', + 'proceed' => 'تابِع', + 'next' => 'التَّالي', + 'close' => 'إغْلَاق', + 'clickHere' => 'اِضْغَط هُنَا', 'sensitive' => 'حسَّاس', 'sensitiveContent' => 'مُحتَوًى حسَّاس', @@ -97,6 +102,7 @@ return [ 'modlog' => 'سجلات المُشرِف', 'post' => 'مَنشور', 'story' => 'قَصَّة', + 'noneFound' => 'لم يتم العثور على إشعارات', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'أشخاصٌ قَد تَعرِفُهُم' + 'peopleYouMayKnow' => 'أشخاصٌ قَد تَعرِفُهُم', + + 'onboarding' => [ + 'welcome' => 'مَرحَبًا', + 'thisIsYourHomeFeed' => 'هَذِهِ هِيَ تَغذِيَتُكَ الرَّئِيسَة، هِيَ تَغذِيَةُ مُرَتَّبَةٌ زَمَنِيًّا، مُكَوَّنَة مِن مَنشوراتِ الحِسابَاتِ الَّتِي تُتبِعُهَا.', + 'letUsHelpYouFind' => 'دَعنا نُساعِدُكَ فِي العُثُورِ عَلَى أشخاصٍ يُثيرُونَ اِهتِمَامَكَ لِمُتابَعَتِهِم', + 'refreshFeed' => 'حَدِّث تَغذِيَتي', + ], ], 'hashtags' => [ 'emptyFeed' => 'على ما يَبدوا، لا يُمكِنُنا العُثور على أي مَنشور يَحتَوي على هذا الوَسم' ], + 'report' => [ + 'report' => 'إبلَاغ', + 'selectReason' => 'حَدِّد سَبَبَاً', + 'reported' => 'مُبْلَغٌ عَنه', + 'sendingReport' => 'إرسَالُ التَّقريرِ جَارٍ', + 'thanksMsg' => 'شُكرًا عَلَى الإبلَاغ، أُناسٌ مِن أمثالِكَ يُساعِدُونَ فِي الحِفاظِ عَلَى سَلامَةِ مُجتَمَعِنَا!', + 'contactAdminMsg' => 'إذَا رَغِبتَ فِي التَّواصُلِ مَعَ مَسؤولٍ حَولَ هَذَا المَنشُورِ أو الإبلَاغ', + ], + ]; diff --git a/resources/lang/bn/web.php b/resources/lang/bn/web.php index 3844f847a..d8018a0e2 100644 --- a/resources/lang/bn/web.php +++ b/resources/lang/bn/web.php @@ -3,136 +3,142 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'মন্তব্য', + 'commented' => 'মন্তব্য করা হয়েছে', + 'comments' => 'মন্তব্য', + 'like' => 'পছন্দ', + 'liked' => 'পছন্দকৃত', + 'likes' => 'পছন্দ', + 'share' => 'ভাগ করো', + 'shared' => 'ভাগকৃত', + 'shares' => 'ভাগ করা হয়েছে', + 'unshare' => 'ভাগ ফিরত নাও', + 'bookmark' => 'বুকমার্ক', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'বাতিল', + 'copyLink' => 'সংযোগ অনুলিপি', + 'delete' => 'মুছো', + 'error' => 'ত্রুটি', + 'errorMsg' => 'কোন সমস্যা হয়েছে। কিছুক্ষণ পর আবার চেষ্টা করো।', + 'oops' => 'ওহো!', + 'other' => 'অন্যান্য', + 'readMore' => 'আরো পড়ো', + 'success' => 'সফলতা', + 'proceed' => 'অগ্রসর', + 'next' => 'পরবর্তী', + 'close' => 'বন্ধ করো', + 'clickHere' => 'এখানে টিপ দাও', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'সংবেদনশীল', + 'sensitiveContent' => 'সংবেদনশীল বস্তু', + 'sensitiveContentWarning' => 'এই লেখা/ছবি/ভিডিওতে সংবেদনশীল কিছু থাকতে পারে', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'ব্যবহারের শর্তাবলী', + 'privacy' => 'গোপনীয়তা নীতি', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'অনুসন্ধান', + 'admin' => 'প্রশাসক ড্যাশবোর্ড', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'মূল প্রবাহ', + 'localFeed' => 'স্থানীয় প্রবাহ', + 'globalFeed' => 'বৈশ্বিক প্রবাহ', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'আবিষ্কার', + 'directMessages' => 'সরাসরি বার্তা', + 'notifications' => 'বিজ্ঞপ্তি', + 'groups' => 'দল', + 'stories' => 'গল্প', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'নিজস্ব তথ্য', + 'drive' => 'ড্রাইভ', + 'settings' => 'পছন্দসমূহ', + 'compose' => 'নতুন তৈরি করো', + 'logout' => 'প্রস্থান', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'সম্পর্কে', + 'help' => 'সহায়তা', + 'language' => 'ভাষা', + 'privacy' => 'গোপনীয়তা', + 'terms' => 'শর্তাবলী', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'আগের নকশায় ফিরে যাও' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'বার্তাবাক্স', + 'sent' => 'প্রেরিত', + 'requests' => 'অনুরোধসমূহ' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'পছন্দ করেছে', + 'commented' => 'মন্তব্য করেছে', + 'reacted' => 'প্রতিক্রিয়া দেখিয়েছে', + 'shared' => 'ভাগ করেছে', + 'tagged' => 'আপনাকে ট্যাগ করেছেন', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'হালনাগাদ করেছে', + 'sentA' => 'প্রেরণ করেছে', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'অনুসৃত', + 'mentioned' => 'উল্লেখ করেছেন', + 'you' => 'আপনি', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'আপনার যুক্ত হওয়ার আবেদন', + 'applicationApproved' => 'অনুমোদিত হয়েছে!', + 'applicationRejected' => 'অনুমোদিত হয়নি। আপনি আবার ৬ মাস এর মধ্যে আবেদন করতে পারেন.', - 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'dm' => 'সরাসরি বার্তা', + 'groupPost' => 'গ্রুপ পোস্ট', + 'modlog' => 'মডারেশন লগ', + 'post' => 'পোস্ট', + 'story' => 'স্টোরি', + 'noneFound' => 'কোনো নোটিফিকেশন পাওয়া যায়নি', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'অনুসারীদের মাঝে শেয়ার করুন', + 'shareToOther' => 'অন্যদের মাঝে শেয়ার করুন', + 'noLikes' => 'এখনো কোনো লাইক নেই', + 'uploading' => 'আপলোড করা হচ্ছে', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => 'পোস্টসমূহ', + 'followers' => 'অনুসারী', + 'following' => 'অনুসরণ করা হচ্ছে', + 'admin' => 'প্রশাসক', + 'collections' => 'সংগ্রহশালা', + 'follow' => 'অনুসরণ করুন', + 'unfollow' => 'অনুসরণ বাতিল', + 'editProfile' => 'প্রোফাইল সম্পাদন করুন', + 'followRequested' => 'অনুসরণ এর অনুরোধ করা হয়েছে', + 'joined' => 'যুক্ত হয়েছেন', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'আমরা কোনও সংগ্রহশালা খুঁজে পাচ্ছিনা', + 'emptyPosts' => 'আমরা কোন পোষ্ট খুঁজে পাচ্ছিনা', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', + 'viewPost' => 'পোস্ট দেখুন', + 'viewProfile' => 'প্রোফাইল দেখুন', + 'moderationTools' => 'মডারেশন Tools', + 'report' => 'রিপোর্ট', + 'archive' => 'আর্কাইভ', 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'embed' => 'এমবেড করুন', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', + 'selectOneOption' => 'নিম্নলিখিত বিকল্পগুলির একটি নির্বাচন করুন।', + 'unlistFromTimelines' => 'টাইমলাইন থেকে Unlist করুন', 'addCW' => 'Add Content Warning', 'removeCW' => 'Remove Content Warning', 'markAsSpammer' => 'Mark as Spammer', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/bs/web.php b/resources/lang/bs/web.php index 3844f847a..2c6a7b418 100644 --- a/resources/lang/bs/web.php +++ b/resources/lang/bs/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Shared', 'shares' => 'Shares', 'unshare' => 'Unshare', + 'bookmark' => 'Bookmark', 'cancel' => 'Cancel', 'copyLink' => 'Copy Link', @@ -23,6 +24,10 @@ return [ 'other' => 'Other', 'readMore' => 'Read more', 'success' => 'Success', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', 'sensitive' => 'Sensitive', 'sensitiveContent' => 'Sensitive Content', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/ca/web.php b/resources/lang/ca/web.php index 4e09a186a..eef1a3b52 100644 --- a/resources/lang/ca/web.php +++ b/resources/lang/ca/web.php @@ -3,40 +3,45 @@ return [ 'common' => [ - 'comment' => 'Comentar', - 'commented' => 'Comentari', + 'comment' => 'Comenta', + 'commented' => 'Comentat', 'comments' => 'Comentaris', 'like' => 'M\'agrada', 'liked' => 'M\'ha agradat', - 'likes' => '"M\'agrada"', + 'likes' => 'Agradaments', 'share' => 'Comparteix', 'shared' => 'S\'han compartit', 'shares' => 'S\'han compartit', 'unshare' => 'Deixa de compartir', + 'bookmark' => 'Afegeix als marcadors', 'cancel' => 'Cancel·la', 'copyLink' => 'Copia l\'enllaç', - 'delete' => 'Esborra', + 'delete' => 'Elimina', 'error' => 'Error', 'errorMsg' => 'Alguna cosa ha anat malament. Siusplau, intenta-ho més tard.', - 'oops' => 'Uix!', + 'oops' => 'Vaja!', 'other' => 'Altres', - 'readMore' => 'Llegiu-ne més', + 'readMore' => 'Més informació', 'success' => 'Completat amb èxit', + 'proceed' => 'Continua', + 'next' => 'Següent', + 'close' => 'Tanca', + 'clickHere' => 'fes clic aquí', 'sensitive' => 'Sensible', 'sensitiveContent' => 'Contingut sensible', - 'sensitiveContentWarning' => 'Aquest article pot contenir contingut sensible', + 'sensitiveContentWarning' => 'Aquesta publicació pot incloure contingut sensible', ], 'site' => [ 'terms' => 'Condicions d\'ús', - 'privacy' => 'Política de Privacitat', + 'privacy' => 'Política de privadesa', ], 'navmenu' => [ - 'search' => 'Cercar', - 'admin' => 'Tauler d\'Administració', + 'search' => 'Cerca', + 'admin' => 'Tauler d\'administració', // Timelines 'homeFeed' => 'Línia de temps principal', @@ -53,9 +58,9 @@ return [ // Self links 'profile' => 'Perfil', 'drive' => 'Unitat', - 'settings' => 'Paràmetres', - 'compose' => 'Crea un nou', - 'logout' => 'Logout', + 'settings' => 'Configuració', + 'compose' => 'Crea una nova', + 'logout' => 'Tanca la sessió', // Nav footer 'about' => 'Quant a', @@ -65,13 +70,13 @@ return [ 'terms' => 'Termes', // Temporary links - 'backToPreviousDesign' => 'Tornar al disseny anterior' + 'backToPreviousDesign' => 'Torna al disseny anterior' ], 'directMessages' => [ 'inbox' => 'Safata d\'entrada', - 'sent' => 'Enviat', - 'requests' => 'Sol·licitud' + 'sent' => 'Enviats', + 'requests' => 'Sol·licituds' ], 'notifications' => [ @@ -84,9 +89,9 @@ return [ 'updatedA' => 'actualitzat a', 'sentA' => 'enviat a', - 'followed' => 'seguits', - 'mentioned' => 'mencionat', - 'you' => 'vostè', + 'followed' => 't\'ha seguit', + 'mentioned' => 'mencions', + 'you' => 'a vós', 'yourApplication' => 'La teva sol·licitud per unir-te', 'applicationApproved' => 'està aprovat!', @@ -97,13 +102,14 @@ return [ 'modlog' => 'modlog', 'post' => 'publicació', 'story' => 'història', + 'noneFound' => 'No hi ha notificacions', ], 'post' => [ - 'shareToFollowers' => 'Comparteix amb els seguidors', - 'shareToOther' => 'Compartits per altres', - 'noLikes' => 'Cap m\'agrada encara', - 'uploading' => 'Carregant', + 'shareToFollowers' => 'Comparteix amb qui et segueix', + 'shareToOther' => 'Comparteix amb altri', + 'noLikes' => 'Cap m\'agrada', + 'uploading' => 'S\'està pujant', ], 'profile' => [ @@ -113,28 +119,28 @@ return [ 'admin' => 'Administrador', 'collections' => 'Col·leccions', 'follow' => 'Segueix', - 'unfollow' => 'Deixeu de seguir', - 'editProfile' => 'Edita el teu perfil', - 'followRequested' => 'Sol·licitud de seguidor', + 'unfollow' => 'Deixa de seguir', + 'editProfile' => 'Edita el perfil', + 'followRequested' => 'Sol·licituds de seguiment', 'joined' => 'S\'ha unit', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'No s\'ha trobat cap col·lecció', + 'emptyPosts' => 'No s\'ha trobat cap publicació', ], 'menu' => [ - 'viewPost' => 'Veure publicació', + 'viewPost' => 'Mostra la publicació', 'viewProfile' => 'Mostra el perfil', 'moderationTools' => 'Eines de moderació', - 'report' => 'Informe', - 'archive' => 'Arxiu', + 'report' => 'Denuncia', + 'archive' => 'Arxiva', 'unarchive' => 'Desarxiva', 'embed' => 'Incrusta', - 'selectOneOption' => 'Seleccioneu una de les opcions següents', + 'selectOneOption' => 'Selecciona una de les següents opcions', 'unlistFromTimelines' => 'Desllista de les línies de temps', - 'addCW' => 'Afegeix advertència de contingut', - 'removeCW' => 'Esborra advertència de contingut', + 'addCW' => 'Afegeix avís de contingut', + 'removeCW' => 'Elimina l\'avís de contingut', 'markAsSpammer' => 'Marca com a brossa', 'markAsSpammerText' => 'Desllista + CW publicacions existents i futures', 'spam' => 'Contingut brossa', @@ -142,45 +148,61 @@ return [ 'abusive' => 'Abusiu o nociu', 'underageAccount' => 'Compte de menors d\'edat', 'copyrightInfringement' => 'Infracció de drets d’autor', - 'impersonation' => 'Suplantacions', - 'scamOrFraud' => 'Estafa o Frau', - 'confirmReport' => 'Confirma l\'informe', - 'confirmReportText' => 'Esteu segur que voleu informar d\'aquesta publicació?', - 'reportSent' => 'Informe enviat!', - 'reportSentText' => 'Hem rebut correctament el vostre informe.', - 'reportSentError' => 'Hi ha hagut un problema en informar d\'aquesta publicació.', + 'impersonation' => 'Suplantació d\'identitat', + 'scamOrFraud' => 'Estafa o frau', + 'confirmReport' => 'Confirma la denúncia', + 'confirmReportText' => 'Segur que voleu denunciar aquesta publicació?', + 'reportSent' => 'S\'ha enviat la denúncia', + 'reportSentText' => 'Hem rebut correctament la teva denúncia.', + 'reportSentError' => 'Hi ha hagut un problema en denunciar aquesta publicació.', - 'modAddCWConfirm' => 'Confirmes que vols afegir un avís de contingut a aquesta publicació?', - 'modCWSuccess' => 'Avís de contingut afegit correctament', - 'modRemoveCWConfirm' => 'Confirmes que vols esborrar un avís de contingut d\'aquesta publicació?', + 'modAddCWConfirm' => 'Segur que voleu afegir un avís de contingut a aquesta publicació?', + 'modCWSuccess' => 'S\'ha afegit l\'avís de contingut correctament', + 'modRemoveCWConfirm' => 'Segur que voleu eliminar l\'avís de contingut d\'aquesta publicació?', 'modRemoveCWSuccess' => 'Avís de contingut esborrat correctament', 'modUnlistConfirm' => 'Esteu segur que voleu desllistar d\'aquesta publicació?', 'modUnlistSuccess' => 'Entrada desllistada amb èxit', - 'modMarkAsSpammerConfirm' => 'Esteu segur que voleu marcar aquest usuari com a brossa? Totes les publicacions existents i futures no apareixeran a les cronologies i s\'aplicarà un avís de contingut.', + 'modMarkAsSpammerConfirm' => 'Segur que voleu marcar aquest usuari com a brossa? Totes les publicacions existents i futures desapareixeran de les cronologies i s\'aplicarà un avís de contingut.', 'modMarkAsSpammerSuccess' => 'El compte s\'ha marcat correctament com a brossa', 'toFollowers' => 'els seguidors', - 'showCaption' => 'Mostra el subtítol', + 'showCaption' => 'Mostra la descripció', 'showLikes' => 'Mostra els m\'agrada', - 'compactMode' => 'Mode Compacte', + 'compactMode' => 'Mode compacte', 'embedConfirmText' => 'En utilitzar aquesta inserció, accepteu el nostre', - 'deletePostConfirm' => 'Esteu segur que voleu suprimir aquesta publicació?', - 'archivePostConfirm' => 'Segur que voleu arxivar aquesta publicació?', - 'unarchivePostConfirm' => 'Segur que voleu desarxivar aquesta publicació?', + 'deletePostConfirm' => 'Segur que voleu eliminar aquesta publicació?', + 'archivePostConfirm' => 'Segur que vols arxivar aquesta publicació?', + 'unarchivePostConfirm' => 'Segur que vols desarxivar aquesta publicació?', ], 'story' => [ - 'add' => 'Afegir història' + 'add' => 'Afegeix història' ], 'timeline' => [ - 'peopleYouMayKnow' => 'Gent que potser coneixes' + 'peopleYouMayKnow' => 'Gent que potser coneixeu', + + 'onboarding' => [ + 'welcome' => 'Us donem la benvinguda', + 'thisIsYourHomeFeed' => 'Aquesta és la vostra línia de temps principal que mostra cronològicament les publicacions de comptes que seguiu.', + 'letUsHelpYouFind' => 'Ens agradaria ajudar-vos a trobar gent interessant per seguir', + 'refreshFeed' => 'Actualitza la meva línia de temps', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'No hi ha cap publicació per a aquesta etiqueta' + ], + + 'report' => [ + 'report' => 'Denuncia', + 'selectReason' => 'Tria una raó', + 'reported' => 'Denunciat', + 'sendingReport' => 'S\'està enviant la denúncia', + 'thanksMsg' => 'Gràcies per la denúncia. Gent com vós fa que la nostra comunitat sigui segura!', + 'contactAdminMsg' => 'Si voleu contactar amb un o una administradora sobre aquesta publicació o denúncia', ], ]; diff --git a/resources/lang/cs/web.php b/resources/lang/cs/web.php index bf08f7ee4..15a5b0091 100644 --- a/resources/lang/cs/web.php +++ b/resources/lang/cs/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Sdíleno', 'shares' => 'Sdílení', 'unshare' => 'Zrušit sdílení', + 'bookmark' => 'Záložka', 'cancel' => 'Zrušit', 'copyLink' => 'Kopírovat odkaz', @@ -23,6 +24,10 @@ return [ 'other' => 'Další', 'readMore' => 'Číst více', 'success' => 'Úspěch', + 'proceed' => 'Pokračovat', + 'next' => 'Další', + 'close' => 'Zavřít', + 'clickHere' => 'klikněte zde', 'sensitive' => 'Citlivé', 'sensitiveContent' => 'Citlivý obsah', @@ -40,8 +45,8 @@ return [ // Timelines 'homeFeed' => 'Domovská časová osa', - 'localFeed' => 'Místní časová osa', - 'globalFeed' => 'Globalní časová osa', + 'localFeed' => 'Místní kanál', + 'globalFeed' => 'Globální časová osa', // Core features 'discover' => 'Objevovat', @@ -97,6 +102,7 @@ return [ 'modlog' => 'moderátorský záznam', 'post' => 'příspěvek', 'story' => 'příbeh', + 'noneFound' => 'Nebyla nalezena žádná oznámení', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Lidé, které možná znáte' + 'peopleYouMayKnow' => 'Lidé, které možná znáte', + + 'onboarding' => [ + 'welcome' => 'Vítejte', + 'thisIsYourHomeFeed' => 'Toto je váš domovský kanál, chronologický kanál příspěvků z účtů, které sledujete.', + 'letUsHelpYouFind' => 'Pomůžeme vám najít nějaké zajímavé lidi ke sledování', + 'refreshFeed' => 'Obnovit můj kanál', + ], ], 'hashtags' => [ 'emptyFeed' => 'Zdá se, že pro tento štítek nelze najít žádné příspěvky' ], + 'report' => [ + 'report' => 'Nahlásit', + 'selectReason' => 'Vyberte důvod', + 'reported' => 'Nahlášeno', + 'sendingReport' => 'Odesílání hlášení', + 'thanksMsg' => 'Díky za hlášení, lidé jako jste vy pomáhají udržet naši komunitu bezpečnou!', + 'contactAdminMsg' => 'Pokud chcete kontaktovat administrátora ohledně tohoto příspěvku nebo hlášení', + ], + ]; diff --git a/resources/lang/cy/web.php b/resources/lang/cy/web.php index 2f21f8d66..65abb201a 100644 --- a/resources/lang/cy/web.php +++ b/resources/lang/cy/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Rhannu', 'shares' => 'Rhannu', 'unshare' => 'Dad-rannu', + 'bookmark' => 'Tudalnodau', 'cancel' => 'Canslo', 'copyLink' => 'Copïo\'r ddolen', @@ -23,6 +24,10 @@ return [ 'other' => 'Arall', 'readMore' => 'Darllen mwy', 'success' => 'Llwyddiant', + 'proceed' => 'Parhau', + 'next' => 'Nesaf', + 'close' => 'Cau', + 'clickHere' => 'cliciwch yma', 'sensitive' => 'Sensitif', 'sensitiveContent' => 'Cynnwys sensitif', @@ -55,7 +60,7 @@ return [ 'drive' => 'Gyriant storio', 'settings' => 'Gosodiadau', 'compose' => 'Creu newydd', - 'logout' => 'Logout', + 'logout' => 'Allgofnodi', // Nav footer 'about' => 'Amdano', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'stori', + 'noneFound' => 'Dim hysbysiadau', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Pobl efallai eich bod chi\'n eu hadnabod' + 'peopleYouMayKnow' => 'Pobl efallai eich bod chi\'n eu hadnabod', + + 'onboarding' => [ + 'welcome' => 'Croeso', + 'thisIsYourHomeFeed' => 'Dyma\'ch porthiant cartref, porthiant cronolegol o bostiadau o gyfrifon rydych chi\'n eu dilyn.', + 'letUsHelpYouFind' => 'Gadewch inni eich helpu i ddod o hyd i rai pobl ddiddorol i\'w dilyn', + 'refreshFeed' => 'Adnewyddu fy mhorthiant', + ], ], 'hashtags' => [ 'emptyFeed' => 'Ni allwn dod o hyd i unrhyw bostiadau ar gyfer yr hashnod hwn' ], + 'report' => [ + 'report' => 'Adroddi', + 'selectReason' => 'Dewiswch reswm', + 'reported' => 'Adroddwyd', + 'sendingReport' => 'Anfon adroddiad', + 'thanksMsg' => 'Diolch am yr adroddiad, mae pobl fel chi yn helpu i gadw ein cymuned yn ddiogel!', + 'contactAdminMsg' => 'Os hoffech chi gysylltu â gweinyddwr am y post neu\'r adroddiad hwn', + ], + ]; diff --git a/resources/lang/da/web.php b/resources/lang/da/web.php index 3844f847a..35b61ae4c 100644 --- a/resources/lang/da/web.php +++ b/resources/lang/da/web.php @@ -4,183 +4,205 @@ return [ 'common' => [ 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'commented' => 'Kommenterede', + 'comments' => 'Kommentarer', + 'like' => 'Synes om', + 'liked' => 'Synes om', + 'likes' => 'Synes om', + 'share' => 'Del', + 'shared' => 'Delt', + 'shares' => 'Delinger', + 'unshare' => 'Fjern deling', + 'bookmark' => 'Bookmark', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'Annuller', + 'copyLink' => 'Kopier link', + 'delete' => 'Slet', + 'error' => 'Fejl', + 'errorMsg' => 'Noget gik galt. Prøv venligst igen senere.', + 'oops' => 'Hovsa!', + 'other' => 'Andet', + 'readMore' => 'Læs mere', + 'success' => 'Succes', + 'proceed' => 'Fortsæt', + 'next' => 'Næste', + 'close' => 'Luk', + 'clickHere' => 'klik her', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Følsomt', + 'sensitiveContent' => 'Følsomt indhold', + 'sensitiveContentWarning' => 'Dette opslag kan indeholde følsomt indhold', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Brugsvilkår', + 'privacy' => 'Privatlivspolitik', ], 'navmenu' => [ - 'search' => 'Search', + 'search' => 'Søg', 'admin' => 'Admin Dashboard', // Timelines 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'localFeed' => 'Lokalt feed', + 'globalFeed' => 'Globalt feed', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'Udforsk', + 'directMessages' => 'Direkte beskeder', + 'notifications' => 'Notifikationer', + 'groups' => 'Grupper', + 'stories' => 'Historier', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'Profil', + 'drive' => 'Drev', + 'settings' => 'Indstillinger', + 'compose' => 'Opret ny', + 'logout' => 'Log ud', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'Om', + 'help' => 'Hjælp', + 'language' => 'Sprog', + 'privacy' => 'Privatliv', + 'terms' => 'Betingelser', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Gå tilbage til forrige design' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'Indbakke', + 'sent' => 'Sendt', + 'requests' => 'Anmodninger' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'syntes godt om dit', + 'commented' => 'kommenterede på dit', + 'reacted' => 'reagerede på dit', + 'shared' => 'delte dit', + 'tagged' => 'taggede dig i et', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'opdaterede et', + 'sentA' => 'sendte en', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'følger', + 'mentioned' => 'nævnt', + 'you' => 'dig', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'Din ansøgning om at deltage', + 'applicationApproved' => 'blev godkendt!', + 'applicationRejected' => 'blev afvist. Du kan ansøge igen om 6 måneder.', 'dm' => 'dm', - 'groupPost' => 'group post', + 'groupPost' => 'gruppeopslag', 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'post' => 'opslag', + 'story' => 'historie', + 'noneFound' => 'Ingen notifikationer fundet', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'Del til følgere', + 'shareToOther' => 'Del til andre', + 'noLikes' => 'Ingen synes godt om endnu', + 'uploading' => 'Uploader', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', + 'posts' => 'Opslag', + 'followers' => 'Følgere', + 'following' => 'Følger', 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'collections' => 'Samlinger', + 'follow' => 'Følg', + 'unfollow' => 'Følg ikke længere', + 'editProfile' => 'Redigér profil', + 'followRequested' => 'Følg anmodet', + 'joined' => 'Blev medlem', 'emptyCollections' => 'We can\'t seem to find any collections', 'emptyPosts' => 'We can\'t seem to find any posts', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', + 'viewPost' => 'Se opslag', + 'viewProfile' => 'Se profil', + 'moderationTools' => 'Moderatorværktøjer', 'report' => 'Report', 'archive' => 'Archive', 'unarchive' => 'Unarchive', 'embed' => 'Embed', 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', + 'unlistFromTimelines' => 'Skjul fra tidslinje', + 'addCW' => 'Tilføj indholdsadvarsel', + 'removeCW' => 'Fjern indholdsadvarsel', + 'markAsSpammer' => 'Markér som spammer', 'markAsSpammerText' => 'Unlist + CW existing and future posts', 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', + 'sensitive' => 'Følsomt indhold', + 'abusive' => 'Krænkende eller skadelig', + 'underageAccount' => 'Mindreårig konto', + 'copyrightInfringement' => 'Krænkelse af ophavsret', 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', + 'scamOrFraud' => 'Scam eller svindel', + 'confirmReport' => 'Bekræft rapport', + 'confirmReportText' => 'Er du sikker på, at du vil rapportere dette opslag?', + 'reportSent' => 'Rapport sendt!', + 'reportSentText' => 'Vi har modtaget din rapport.', 'reportSentError' => 'There was an issue reporting this post.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', + 'modAddCWConfirm' => 'Er du sikker på, at du vil føje en indholdsadvarsel til dette indlæg?', + 'modCWSuccess' => 'Tilføjede succesfuldt advarsel om indhold', 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', + 'modRemoveCWSuccess' => 'Fjernede succesfuldt advarsel om indhold', 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', 'modUnlistSuccess' => 'Successfully unlisted post', 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modMarkAsSpammerSuccess' => 'Markerede succesfuldt konto som spammer', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'til følgere', - 'showCaption' => 'Show Caption', + 'showCaption' => 'Vis billedtekst', 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'compactMode' => 'Kompakt tilstand', + 'embedConfirmText' => 'Ved at bruge denne indlejring, accepterer du vores', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', + 'deletePostConfirm' => 'Er du sikker på, at du vil slette dette opslag?', + 'archivePostConfirm' => 'Er du sikker på, at du vil arkivere dette opslag?', 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => 'Tilføj historie' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'Folk du måske kender', + + 'onboarding' => [ + 'welcome' => 'Velkommen', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Lad os hjælpe dig med at finde nogle interessante mennesker du kan følge', + 'refreshFeed' => 'Opdatér mit feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Vælg en årsag', + 'reported' => 'Rapporteret', + 'sendingReport' => 'Sender rapport', + 'thanksMsg' => 'Tak for rapporten, folk som dig hjælper med at passe på vores fællesskab!', + 'contactAdminMsg' => 'Hvis du vil kontakte en administrator om dette indlæg eller rapport', + ], + ]; diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php new file mode 100644 index 000000000..c27129b9c --- /dev/null +++ b/resources/lang/de/settings.php @@ -0,0 +1,189 @@ + 'Konto', + 'accessibility' => 'Barrierefreiheit', + 'email' => 'E-Mail', + 'invites' => 'Einladungen', + 'media' => 'Medien', + 'notifications' => 'Benachrichtigungen', + 'password' => 'Passwort', + 'privacy' => 'Privatsphäre', + 'relationships' => 'Beziehungen', + 'security' => 'Sicherheit', + 'timelines' => 'Zeitleisten', + 'applications' => 'Anwendungen', + 'developers' => 'Entwicklung', + 'import' => 'Import', + 'export' => 'Export', + 'labs' => 'Labs', + 'parental_controls' => 'Elterliche Kontrolle', + + 'submit' => 'Absenden', + 'error' => 'Fehler', + 'cancel' => 'Abbrechen', + 'save' => 'Speichern', + 'download' => 'Herunterladen', + + 'home.account_settings' => 'Konto-Einstellungen', + 'home.change_profile_photo' => 'Profilfoto ändern', + 'home.select_a_profile_photo' => 'Wähle dein Profilfoto', + 'home.must_be_a_jpeg_or_png_max_avatar_size' => 'Muss jpeg oder png sein. Maximale Größe:', + 'home.upload' => 'Hochladen', + 'home.delete_profile_photo' => 'Profilfoto löschen', + 'home.name' => 'Name', + 'home.your_name' => 'Dein Name', + 'home.website' => 'Website', + 'home.bio' => 'Bio', + 'home.add_a_bio_here' => 'Deine Biografie', + 'home.language' => 'Sprache', + 'home.pronouns' => 'Pronomen', + 'home.select_pronouns' => 'Wähle Pronomen', + 'home.select_up_to_4_pronouns_that_will_appear_on_etc' => 'Wähle bis zu 4 Pronomen, die auf deinem Profil angezeigt werden.', + 'home.account_aliases' => 'Konto-Alias', + 'home.manage_account_alias' => 'Verwalte dein Aliaskonto', + 'home.to_move_from_another_account_to_this_one_first_etc' => 'Um von einem anderen Konto hierher zu migrieren, musst du zuerst einen Alias anlegen', + 'home.account_migrate' => 'Konto-Migration', + 'home.migrate_to_another_account' => 'Ziehe dein Konto um', + 'home.to_redirect_this_account_to_a_different_one_etc' => 'Um dieses Konto auf ein anderes umzuleiten (wo es unterstützt wird).', + 'home.storage_usage' => 'Speichernutzung', + 'home.storage_used' => 'Belegter Speicher', + 'home.are_you_sure_you_want_to_delete_your_profile_photo' => 'Bist du sicher, dass du dein Profilfoto löschen möchtest?', + 'home.an_error_occured_please_try_again_later' => 'Es ist ein Fehler aufgetreten, versuche es bitte später noch einmal', + + 'accessibility.reduce_motion' => 'Bewegung verringern', + 'accessibility.prevent_animation_effects' => 'Animationseffekte verhindern.', + 'accessibility.high_contrast_mode' => 'Hochkontrastmodus', + 'accessibility.high_contrast_mode_for_the_visually_impaired' => 'Hoher Kontrast für bessere Sichtbarkeit', + 'accessibility.disable_video_autoplay' => 'Automatisches Abspielen deaktivieren', + 'accessibility.prevent_videos_from_autoplaying' => 'Verhindert, dass Videos automatisch abgespielt werden.', + + 'email.email_settings' => 'Email-Einstellungen', + 'email.email_address' => 'Email-Adresse', + 'email.verified' => 'Verifiziert', + 'email.unverified' => 'Unverifiziert', + 'email.you_need_to' => 'Du musst', + 'email.verify_your_email' => 'deine E-Mail verifizieren', + + 'media.default_license' => 'Standardlizenz', + 'media.set_a_default_license_for_new_posts' => 'Lege eine Standardlizenz für neue Beiträge fest.', + 'media.sync_licenses' => 'Lizenzen synchronisieren', + 'media.update_existing_posts_with_your_new_default_etc' => 'Existierende Beiträge auf die neue Standardlizenz aktualisieren. Du kannst zweimal alle 24 Stunden synchronisieren.', + 'media.license_changes_may_not_be_reflected_on_remote_servers' => 'Lizenzänderungen werden unter Umständen nicht von anderen Server übernommen.', + 'media.require_media_descriptions' => 'Medienbeschreibungen erzwingen', + 'media.briefly_describe_your_media_to_improve_etc' => 'Beschreibe deine Medien für die Verwendung mit Screenreadern (z.B. für sehbehinderte Menschen)', + 'media.not_available_for_mobile_or_3rd_party_apps_etc' => 'Derzeit nicht berücksichtigt in mobilen Apps und Apps von Dritten.', + + 'password.update_password' => 'Passwort aktualisieren', + 'password.current' => 'Aktuell', + 'password.your_current_password' => 'Dein derzeitiges Passwort', + 'password.new' => 'Neu', + 'password.enter_new_password_here' => 'Gib hier dein neues Passwort ein', + 'password.confirm' => 'Bestätigung', + 'password.confirm_new_password' => 'Bestätige dein neues Passwort hier', + + 'privacy.privacy_settings' => 'Privatsphäre-Einstellungen', + 'privacy.private_account' => 'Privates Konto', + 'privacy.when_your_account_is_private_only_people_you_etc' => 'Wenn dein Konto privat ist, können nur Leute die du genehmigt hast deine Fotos und Videos auf Pixelfed sehen. Deine bestehenden Follower sind nicht betroffen.', + 'privacy.disable_search_engine_indexing' => 'Suchmaschinen-Indexierung deaktivieren', + 'privacy.when_your_account_is_visible_to_search_engines_etc' => 'Wenn dein Konto für Suchmaschinen sichtbar ist, können deine Informationen von Suchmaschinen besucht und gespeichert werden.', + 'privacy.not_available_when_your_account_is_private' => 'Nicht verfügbar bei privaten Konten', + 'privacy.include_public_posts_in_search_results' => 'Öffentliche Beiträge in Suchergebnisse aufnehmen', + 'privacy.your_public_posts_may_appear_in_search_results_etc' => 'Deine öffentlichen Beiträge können in den Suchergebnissen auf Pixelfed und Mastodon auftauchen. Unabhängig davon können Leute, die mit deinen Beiträgen interagiert haben, sie auf jeden Fall per Suche finden.', + 'privacy.show_on_directory' => 'Im Verzeichnis anzeigen', + 'privacy.when_this_option_is_enabled_your_profile_is_etc' => 'Wenn diese Option aktiv ist, wird dein Profil im Verzeichnis angezeigt. Nur öffentlichen Profile kommen dafür in Frage.', + 'privacy.receive_direct_messages_from_anyone' => 'Direktnachrichten von allen empfangen', + 'privacy.if_selected_you_will_be_able_to_receive_messages_etc' => 'Wenn diese Option aktiv ist, kannst du Direktnachrichten von allen empfangen, auch von Leuten, denen du nicht folgst.', + 'privacy.hide_sensitive_content_from_search_results' => 'Sensible Inhalte in Suchergebnissen ausblenden', + 'privacy.this_prevents_posts_with_potentially_sensitive_etc' => 'Dies verhindert, dass Beiträge mit möglicherweise sensiblem Inhalt in deinen Suchergebnissen angezeigt werden.', + 'privacy.remove_blocked_and_muted_accounts' => 'Entferne geblockte und stummgeschaltete Konten', + 'privacy.use_this_to_eliminate_search_results_from_accounts_etc' => 'Aktiviere, um Suchergebnisse von Konten, die du geblockt oder stummgeschaltet hast, zu entferen.', + 'privacy.display_media_that_may_contain_sensitive_content' => 'Medien mit sensiblen Inhalten anzeigen', + 'privacy.show_all_media_including_potentially_sensitive_content' => 'Alle Medien anzeigen, inklusive sensibler Inhalte.', + 'privacy.show_follower_count' => 'Anzahl von Followern anzeigen', + 'privacy.display_follower_count_on_profile' => 'Zeige die Anzahl von Followern im Profil', + 'privacy.show_following_count' => 'Anzahl Folgender anzeigen', + 'privacy.display_following_count_on_profile' => 'Zeige die Anzahl von Folgenden im Profil', + 'privacy.disable_embeds' => 'Einbettung deaktivieren', + 'privacy.disable_post_and_profile_embeds' => 'Deaktiviere die Einbettung von Beiträgen und Profilen', + 'privacy.enable_atom_feed' => 'Atom-Feed aktivieren', + 'privacy.enable_your_profile_atom_feed_only_public_profiles_etc' => 'Aktiviere deinen Atom-Feed. Nur öffentliche Profile kommen dafür in Frage', + 'privacy.confirm_this_action' => 'Diese Aktion bestätigen', + 'privacy.please_select_the_type_of_private_account_you_etc' => 'Bitte wähle die Art von privatem Account, die du möchtest:', + 'privacy.keep_existing_followers' => 'Alle bestehende Follower behalten', + 'privacy.only_keep_mutual_followers' => 'Nur gegenseitige Follower behalten', + 'privacy.only_followers_that_have_followed_you_for_atleast' => 'Nur Follower behalten, die dir folgen seit wenigstens', + 'privacy.hour' => 'Stunde', + 'privacy.day' => 'Tag', + 'privacy.weeks' => 'Wochen', + 'privacy.month' => 'Monat', + 'privacy.months' => 'Monate', + 'privacy.year' => 'Jahr', + 'privacy.remove_existing_followers' => 'Alle Follower entfernen', + 'privacy.allow_new_follow_requests' => 'Ermögliche neue Folgeanfragen', + 'privacy.block_notifications_from_accounts_i_dont_follow' => 'Blockiere Benachrichtigungen von Konten, denen ich nicht folge', + 'privacy.an_error_occured_please_try_again' => 'Es ist ein Fehler aufgetreten, versuche es bitte noch einmal', + + 'relationships' => 'Beziehungen', + 'relationships.followers' => 'Follower', + 'relationships.following' => 'Folge ich', + 'relationships.hashtags' => 'Hashtags', + 'relationships.hashtag' => 'Hashtag', + 'relationships.username' => 'Benutzername', + 'relationships.action' => 'Aktion', + 'relationships.unfollow' => 'Entfolgen', + 'relationships.mute' => 'Stummschalten', + 'relationships.block' => 'Blockieren', + 'relationships.mute_successful' => 'Stummschalten erfolgreich', + 'relationships.you_have_successfully_muted_that_user' => 'Du hast den Benutzer erfolgreich stummgeschaltet', + 'relationships.block_successful' => 'Blockieren erfolgreich', + 'relationships.you_have_successfully_blocked_that_user' => 'Du hast den Benutzer erfolgreich geblockt', + 'relationships.unfollow_successful' => 'Entfolgen erfolgreich', + 'relationships.you_have_successfully_unfollowed_that_user' => 'Du hast den Benutzer erfolgreich entfolgt', + 'relationships.an_error_occured_when_attempting_to_unfollow_this_user' => 'Beim Versuch den Benutzer zu entfolgen ist ein Fehler aufgetreten', + 'relationships.you_have_successfully_unfollowed_that_hashtag' => 'Du hast den Hashtag erfolgreich entfolgt', + + 'security.two_factor_authentication' => 'Zwei-Faktor-Authentifizierung', + 'security.enabled' => 'Aktiviert', + 'security.danger_zone' => 'Gefahrenbereich', + 'security.temporarily_disable_account' => 'Konto temporär deaktivieren', + 'security.disable_your_account_to_hide_your_posts_until_next_log_in' => 'Deaktiviere dein Konto um deine Beiträge bis zu deinem nächsten Einloggen zu verstecken', + 'security.disable' => 'Deaktiviert', + 'security.delete_this_account' => 'Dieses Konto löschen', + 'security.once_you_delete_your_account_there_is_no_going_back_etc' => 'Wenn dein Konto gelöscht wurde, gibt es kein zurück mehr. Bitte sei dir darin sicher.', + 'security.delete' => 'Löschen', + 'security.account_log' => 'Konto-Log', + 'security.no_activity_logs_found' => 'Kein Aktivitätenlog gefunden!', + 'security.ip_address' => 'IP-Adresse:', + 'security.user_agent' => 'User-Agent:', + 'security.devices' => 'Geräte', + 'security.ip' => 'IP:', + 'security.device' => 'Gerät:', + 'security.browser' => 'Browser:', + 'security.last_login' => 'Letzer Login:', + 'security.country' => 'Land:', + 'security.trust' => 'Vertrauen', + 'security.remove_device' => 'Gerät entfernen', + 'security.timeline_settings' => 'Zeitleisten-Einstellungen', + 'security.show_text_only_posts' => 'Nur-Text-Beiträge anzeigen', + 'security.show_text_only_posts_from_accounts_you_follow_home_etc' => 'Zeige Nur-Text-Beiträge von Konten, denen du folgst. (nur auf der Startseite)', + 'security.show_replies' => 'Antworten anzeigen', + 'security.show_replies_from_accounts_you_follow_home_timeline_only' => 'Zeige Antworten von Konten, denen du folgst. (nur auf der Startseite)', + 'security.show_reblogs' => 'Reblogs anzeigen', + 'security.see_reblogs_from_accounts_you_follow_in_your_home_etc' => 'Zeige Reblogs von Konten, denen du folgst. (nur auf der Startseite)', + 'security.photo_reblogs_only' => 'Ausschließlich Foto-Reblogs', + 'security.only_see_reblogs_of_photos_or_photo_albums_home_etc' => 'Nur Reblogs von Fotos oder Foto-Alben anzeigen. (nur auf der Startseite)', + + 'developers.oauth_has_not_been_enabled_on_this_instance' => 'OAuth ist auf dieser Instanz nicht aktiv.', + + 'import.import_from_instagram' => 'Importieren von Instagram', + + 'export.data_export' => 'Daten-Export', + 'export.we_generate_data_exports_once_per_hour_and_they_may_etc' => 'Datenexporte werden stündlich erzeugt und enthalten möglicherweise nicht die neusten Daten, wenn du vor kurzem bereits einmal einen Export angefordert hast.', + 'export.statuses' => 'Beiträge', + 'export.mute_block_lists' => 'Stumm/Block-Listen', + + 'labs' => 'Labs', + 'labs.experimental_features' => 'Experimentelle Funktionen', + 'labs.use_dark_mode_theme' => 'Das Dark Mode-Theme verwenden.', +]; \ No newline at end of file diff --git a/resources/lang/de/site.php b/resources/lang/de/site.php index 92f81e03b..c6392015f 100644 --- a/resources/lang/de/site.php +++ b/resources/lang/de/site.php @@ -16,4 +16,54 @@ return [ 'contact-us' => 'Kontaktiere uns', 'places' => 'Orte', 'profiles' => 'Profile', -]; + + // site/contact + 'you_can_contact_the_admins' => 'Du kannst die Administration kontaktieren, indem du', + 'by_using_the_form_below' => 'das folgende Formular verwendest', + 'or' => 'oder', + 'by_sending_an_email_to' => 'eine E-Mail sendest an', + 'the_admins_have_not_set_a_contact_email_address' => 'Die Administration hat keine Kontakt-Adresse angegeben', + 'Message' => 'Nachricht', + 'request_response_from_admins' => 'Um Antwort der Administration bitten', + 'Submit' => 'Absenden', + 'log_in_to_send_a_message' => 'melde dich an, um eine Nachricht zu senden', + 'Please' => 'Bitte', + + // site/about + 'photo_sharing_for_everyone' => 'Fotos teilen. Für Alle', + 'pixelfed_is_an_image_sharing_platform_etc' => 'Pixelfed ist eine Plattform zum Teilen von Bildern. Eine ethische Alternative zu zentralisierten Plattformen', // this is actually never used because it's a fallback for config_cache('app.description') and config_cache('app.short_description') which seem to be impossible to set to empty when saved via /admin/settings?t=branding + 'feature_packed' => 'Voller Funktionen.', + 'the_best_for_the_brightest' => 'Das Beste für die schönsten 📸', + 'albums' => 'Alben', + 'share_posts_with_up_to' => 'Teile Beiträge mit bis zu', + 'photos' => 'Fotos', + 'comments' => 'Kommentare', + 'comment_on_a_post_or_send_a_reply' => 'Kommentiere und beantworte Beiträge', + 'collections' => 'Sammlungen', + 'organize_and_share_collections_of_multiple_posts' => 'Organisiere und teile Sammlungen von mehreren Beiträgen', + 'discover' => 'Entdecken', + 'explore_categories_hashtags_and_topics' => 'Erkunde Kategorien, Hashtags und Themen', + 'photo_filters' => 'Foto-Filter', + 'add_a_special_touch_to_your_photos' => 'Verleih deinen Fotos das gewisse Etwas', + 'stories' => 'Stories', + 'share_moments_with_your_followers_that_disappear_etc' => 'Teile Momente mit deinen Followern für 24 Stunden', + 'people_have_shared' => 'Leute haben', + 'photos_and_videos_on' => 'Fotos und Videos geteilt auf', + 'sign_up_today' => 'Melde dich jetzt an', + 'and_join_our_community_of_photographers_from_etc' => 'und werde Teil unserer Community von Fotograf*innen auf der ganzen Welt.', + + //site/fediverse + 'is_a_portmanteau_of_federation_and_universe_etc' => 'ist ein Kofferwort aus “federation” (Föderation) und “universe” (Universum). Es ist ein gebräuchlicher, unverbindlicher Name für einen Zusammenschluss von Servern sozialer Netzwerke, die auf verschiedene Arten von Medien spezialisiert sind.', + 'supported_fediverse_projects' => 'Unterstützte Fediverse-Projekte', + 'some_of_the_better_known_fediverse_projects_include' => 'Einige der bekanntesten Fediverse-Projekte sind:', + 'a_federated_microblogging_alternative' => 'Eine föderierte Mikroblogging-Alternative', + + // site/opensource + 'the_software_that_powers_this_website_is_called' => 'Die Software, mit der diese Website läuft, heißt', + 'and_anyone_can' => 'und jede*r kann sie', + 'download' => 'herunter laden', + 'opensource.or' => 'oder ihren Quellcode', + 'view' => 'ansehen', + 'the_source_code_and_run_their_own_instance' => 'und eine eigene Instanz betreiben!', + 'open_source_in_pixelfed' => 'Open Source in Pixelfed', +]; \ No newline at end of file diff --git a/resources/lang/de/web.php b/resources/lang/de/web.php index 7c557d03d..8ab7adbfc 100644 --- a/resources/lang/de/web.php +++ b/resources/lang/de/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Geteilt', 'shares' => 'Geteilt', 'unshare' => 'Teilen rückgängig machen', + 'bookmark' => 'Lesezeichen', 'cancel' => 'Abbrechen', 'copyLink' => 'Link kopieren', @@ -22,7 +23,11 @@ return [ 'oops' => 'Hoppla!', 'other' => 'Anderes', 'readMore' => 'Weiterlesen', - 'success' => 'Erfolgreich', + 'success' => 'Erfolg', + 'proceed' => 'Fortfahren', + 'next' => 'Weiter', + 'close' => 'Schließen', + 'clickHere' => 'hier klicken', 'sensitive' => 'Sensibel', 'sensitiveContent' => 'Sensibler Inhalt', @@ -54,7 +59,7 @@ return [ 'profile' => 'Profil', 'drive' => 'Festplatte', 'settings' => 'Einstellungen', - 'compose' => 'Neu erstellen', + 'compose' => 'Neu erstellen:', 'logout' => 'Ausloggen', // Nav footer @@ -76,7 +81,7 @@ return [ 'notifications' => [ 'liked' => 'gefällt dein', - 'commented' => 'kommentierte dein', + 'commented' => 'kommentierte deinen', 'reacted' => 'reagierte auf dein', 'shared' => 'teilte deine', 'tagged' => 'markierte dich in einem', @@ -84,9 +89,9 @@ return [ 'updatedA' => 'aktualisierte ein', 'sentA' => 'sendete ein', - 'followed' => 'gefolgt', - 'mentioned' => 'erwähnt', - 'you' => 'du', + 'followed' => 'folgt', + 'mentioned' => 'erwähnte', + 'you' => 'dir', 'yourApplication' => 'Deine Bewerbung um beizutreten', 'applicationApproved' => 'wurde genehmigt!', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'Beitrag', 'story' => 'Story', + 'noneFound' => 'Keine Benachrichtigungen vorhanden', ], 'post' => [ @@ -147,15 +153,15 @@ return [ 'confirmReport' => 'Meldung bestätigen', 'confirmReportText' => 'Bist du sicher, dass du diesen Beitrag melden möchtest?', 'reportSent' => 'Meldung gesendet!', - 'reportSentText' => 'Wir haben deinen Bericht erfolgreich erhalten.', + 'reportSentText' => 'Wir haben deine Meldung erfolgreich erhalten.', 'reportSentError' => 'Es gab ein Problem beim Melden dieses Beitrags.', 'modAddCWConfirm' => 'Bist du sicher, dass du diesem Beitrag eine Inhaltswarnung hinzufügen möchtest?', 'modCWSuccess' => 'Inhaltswarnung erfolgreich hinzugefügt', - 'modRemoveCWConfirm' => 'Bist du sicher, dass die Inhaltswarnung auf diesem Beitrag entfernt werden soll?', + 'modRemoveCWConfirm' => 'Bist du sicher, dass die Inhaltswarnung für diesen Beitrag entfernt werden soll?', 'modRemoveCWSuccess' => 'Inhaltswarnung erfolgreich entfernt', 'modUnlistConfirm' => 'Bist du sicher, dass du diesen Beitrag nicht listen möchtest?', - 'modUnlistSuccess' => 'Beitrag erfolgreich nicht gelistet', + 'modUnlistSuccess' => 'Beitrag aus Timelines entfernt', 'modMarkAsSpammerConfirm' => 'Bist du sicher, dass du diesen Benutzer als Spam markieren möchtest? Alle existierenden und zukünftigen Beiträge werden nicht mehr in der Zeitleiste angezeigt und mit einer Inhaltswarnung versehen.', 'modMarkAsSpammerSuccess' => 'Konto erfolgreich als Spammer markiert', @@ -176,11 +182,36 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Leute, die du vielleicht kennst' + 'peopleYouMayKnow' => 'Leute, die du vielleicht kennst', + + 'onboarding' => [ + 'welcome' => 'Herzlich Willkommen', + 'thisIsYourHomeFeed' => 'Dies ist dein Heim-Feed, ein chronologischer Feed von Beiträgen aus den Konten, denen du folgst.', + 'letUsHelpYouFind' => 'Lass uns dir helfen, einige interessante Leute zu finden, denen du folgen kannst', + 'refreshFeed' => 'Feed aktualisieren', + ], ], 'hashtags' => [ 'emptyFeed' => 'Wir können keine Beiträge mit diesem Hashtag finden' ], + + 'report' => [ + 'report' => 'Melden', + 'selectReason' => 'Wähle einen Grund', + 'reported' => 'Gemeldet', + 'sendingReport' => 'Sende Meldung', + 'thanksMsg' => 'Danke für deine Meldung! Damit erhöhst du die Sicherheit der Community!', + 'contactAdminMsg' => 'Wenn du die Administration wegen diesem Beitrag oder dieser Meldung kontaktieren möchtest', + ], + + 'report' => [ + 'report' => 'Melden', + 'selectReason' => 'Einen Grund auswählen', + 'reported' => 'Gemeldet', + 'sendingReport' => 'Meldung wird gesendet', + 'thanksMsg' => 'Vielen Dank für die Meldung, Leute wie du helfen, unsere Community sicher zu halten!', + 'contactAdminMsg' => 'Wenn du einen Administrator zu diesem Beitrag oder dieser Meldung kontaktieren möchtest', + ], ]; diff --git a/resources/lang/el/web.php b/resources/lang/el/web.php index a92b7e6fa..c81092bfd 100644 --- a/resources/lang/el/web.php +++ b/resources/lang/el/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Κοινοποιήθηκε', 'shares' => 'Κοινοποιήσεις', 'unshare' => 'Αναίρεση κοινοποίησης', + 'bookmark' => 'Σελιδοδείκτης', 'cancel' => 'Ακύρωση', 'copyLink' => 'Αντιγραφή Συνδέσμου', @@ -23,6 +24,10 @@ return [ 'other' => 'Άλλο', 'readMore' => 'Διαβάστε περισσότερα', 'success' => 'Επιτυχής', + 'proceed' => 'Συνέχεια', + 'next' => 'Επόμενο', + 'close' => 'Κλείσιμο', + 'clickHere' => 'κλικ εδώ', 'sensitive' => 'Ευαίσθητο', 'sensitiveContent' => 'Ευαίσθητο περιεχόμενο', @@ -41,10 +46,10 @@ return [ // Timelines 'homeFeed' => 'Αρχική ροή', 'localFeed' => 'Τοπική Ροή', - 'globalFeed' => 'Ομοσπονδιακή Ροή', + 'globalFeed' => 'Καθολική Ροή', // Core features - 'discover' => 'Ανακαλύψτε', + 'discover' => 'Ανακάλυψη', 'directMessages' => 'Προσωπικά Μηνύματα', 'notifications' => 'Ειδοποιήσεις', 'groups' => 'Ομάδες', @@ -65,7 +70,7 @@ return [ 'terms' => 'Όροι', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Πηγαίνετε πίσω στο προηγούμενο σχεδιασμό' ], 'directMessages' => [ @@ -75,16 +80,16 @@ return [ ], 'notifications' => [ - 'liked' => 'επισήμανε ότι του αρέσει το', + 'liked' => 'του άρεσε', 'commented' => 'σχολίασε στο', - 'reacted' => 'αντέδρασε στο {item} σας', - 'shared' => 'κοινοποίησε το {item} σας', - 'tagged' => 'σας πρόσθεσε με ετικέτα σε μια δημοσίευση', + 'reacted' => 'αντέδρασε στο', + 'shared' => 'κοινοποίησε το', + 'tagged' => 'σας πρόσθεσε με ετικέτα σε', 'updatedA' => 'ενημέρωσε ένα', 'sentA' => 'έστειλε ένα', - 'followed' => 'followed', + 'followed' => 'ακολούθησε', 'mentioned' => 'αναφέρθηκε', 'you' => 'εσύ', @@ -97,13 +102,14 @@ return [ 'modlog' => 'modlog', 'post' => 'δημοσίευση', 'story' => 'ιστορία', + 'noneFound' => 'Δε βρέθηκαν ειδοποιήσεις', ], 'post' => [ 'shareToFollowers' => 'Μοιραστείτε με τους ακόλουθους', - 'shareToOther' => 'Share to other', + 'shareToOther' => 'Κοινή χρήση σε άλλο', 'noLikes' => 'Δεν υπάρχουν likes ακόμα', - 'uploading' => 'Μεταφόρτωση', + 'uploading' => 'Γίνεται μεταφόρτωση', ], 'profile' => [ @@ -113,10 +119,10 @@ return [ 'admin' => 'Διαχειριστής', 'collections' => 'Συλλογές', 'follow' => 'Ακολούθησε', - 'unfollow' => 'Διακοπή παρακολούθησης', + 'unfollow' => 'Άρση ακολούθησης', 'editProfile' => 'Επεξεργασία Προφίλ', 'followRequested' => 'Ακολουθήστε Το Αίτημα', - 'joined' => 'Joined', + 'joined' => 'Έγινε μέλος', 'emptyCollections' => 'Δεν μπορούμε να βρούμε συλλογές', 'emptyPosts' => 'Δεν μπορούμε να βρούμε δημοσιεύσεις', @@ -132,42 +138,42 @@ return [ 'embed' => 'Ενσωμάτωση', 'selectOneOption' => 'Επιλέξτε μία από τις ακόλουθες επιλογές', - 'unlistFromTimelines' => 'Unlist from Timelines', + 'unlistFromTimelines' => 'Κατάργηση από Χρονοδιαγράμματα', 'addCW' => 'Προσθήκη Προειδοποίησης Περιεχομένου', 'removeCW' => 'Αφαίρεση Προειδοποίησης Περιεχομένου', 'markAsSpammer' => 'Σήμανση ως Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'markAsSpammerText' => 'Κατάργηση από λίστα + ΠΠ σε υπάρχουσες και μελλοντικές δημοσιεύσεις', 'spam' => 'Ανεπιθύμητα', 'sensitive' => 'Ευαίσθητο περιεχόμενο', 'abusive' => 'Καταχρηστικό ή επιβλαβές', 'underageAccount' => 'Λογαριασμός ανηλίκου', 'copyrightInfringement' => 'Παραβίαση πνευματικών δικαιωμάτων', - 'impersonation' => 'Impersonation', + 'impersonation' => 'Απομίμηση', 'scamOrFraud' => 'Ανεπιθύμητο ή απάτη', 'confirmReport' => 'Επιβεβαίωση Αναφοράς', - 'confirmReportText' => 'Είστε βέβαιοι ότι θέλετε να αναφέρετε αυτή την ανάρτηση;', + 'confirmReportText' => 'Σίγουρα θέλετε να αναφέρετε αυτή την ανάρτηση;', 'reportSent' => 'Η Αναφορά Στάλθηκε!', 'reportSentText' => 'Έχουμε λάβει με επιτυχία την αναφορά σας.', 'reportSentError' => 'Παρουσιάστηκε ένα πρόβλημα κατά την αναφορά της ανάρτησης.', - 'modAddCWConfirm' => 'Είστε βέβαιοι ότι θέλετε να προσθέσετε μια προειδοποίηση περιεχομένου σε αυτή την ανάρτηση;', + 'modAddCWConfirm' => 'Σίγουρα θέλετε να προσθέσετε μια προειδοποίηση περιεχομένου σε αυτή την ανάρτηση;', 'modCWSuccess' => 'Επιτυχής προσθήκη προειδοποίησης περιεχομένου', - 'modRemoveCWConfirm' => 'Είστε βέβαιοι ότι θέλετε να αφαιρέσετε την προειδοποίηση περιεχομένου σε αυτή την ανάρτηση;', + 'modRemoveCWConfirm' => 'Σίγουρα θέλετε να αφαιρέσετε την προειδοποίηση περιεχομένου σε αυτή την ανάρτηση;', 'modRemoveCWSuccess' => 'Επιτυχής αφαίρεση προειδοποίησης περιεχομένου', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', + 'modUnlistConfirm' => 'Σίγουρα θέλετε να αφαιρέσετε από τη λίστα αυτή την ανάρτηση;', + 'modUnlistSuccess' => 'Επιτυχής κατάργηση δημοσίευσης από λίστα', 'modMarkAsSpammerConfirm' => 'Είστε βέβαιοι ότι θέλετε να επισημάνετε αυτόν τον χρήστη ως spammer? Όλες οι υπάρχουσες και μελλοντικές δημοσιεύσεις δεν θα καταχωρούνται στα χρονοδιαγράμματα και θα εφαρμόζεται προειδοποίηση περιεχομένου.', 'modMarkAsSpammerSuccess' => 'Επιτυχής σήμανση λογαριασμού ως spammer', 'toFollowers' => 'στους Ακόλουθους', - 'showCaption' => 'Show Caption', + 'showCaption' => 'Εμφάνιση Λεζάντας', 'showLikes' => 'Εμφάνιση "μου αρέσει"', 'compactMode' => 'Συμπαγής Λειτουργία', - 'embedConfirmText' => 'Χρησιμοποιώντας αυτό το ενσωματωμένο, συμφωνείτε με την', + 'embedConfirmText' => 'Χρησιμοποιώντας αυτή την ενσωμάτωση, συμφωνείτε με', - 'deletePostConfirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ανάρτηση;', - 'archivePostConfirm' => 'Είστε βέβαιοι ότι θέλετε να αρχειοθετήσετε αυτή την ανάρτηση;', + 'deletePostConfirm' => 'Σίγουρα θέλετε να διαγράψετε αυτήν την ανάρτηση;', + 'archivePostConfirm' => 'Σίγουρα θέλετε να αρχειοθετήσετε αυτή την ανάρτηση;', 'unarchivePostConfirm' => 'Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτήν την ανάρτηση απο την αρχειοθήκη;', ], @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Άτομα που μπορεί να ξέρετε' + 'peopleYouMayKnow' => 'Άτομα που μπορεί να ξέρετε', + + 'onboarding' => [ + 'welcome' => 'Καλώς ήρθατε', + 'thisIsYourHomeFeed' => 'Αυτή είναι η αρχική σου ροή, μια χρονολογική ροή των δημοσιεύσεων από λογαριασμούς που ακολουθείτε.', + 'letUsHelpYouFind' => 'Ας σας βοηθήσουμε να βρείτε μερικούς ενδιαφέροντες ανθρώπους να ακολουθήσετε', + 'refreshFeed' => 'Ανανέωση της ροής μου', + ], ], 'hashtags' => [ 'emptyFeed' => 'Δεν μπορούμε να βρούμε δημοσιεύσεις για αυτό το hashtag' ], + 'report' => [ + 'report' => 'Αναφορά', + 'selectReason' => 'Επιλέξτε μια αιτία', + 'reported' => 'Αναφέρθηκε', + 'sendingReport' => 'Αποστολή αναφοράς', + 'thanksMsg' => 'Ευχαριστούμε για την αναφορά, άνθρωποι σαν κι εσάς βοηθούν να κρατήσετε την κοινότητά μας ασφαλής!', + 'contactAdminMsg' => 'Αν θέλετε να επικοινωνήσετε με το διαχειριστή για αυτή τη δημοσίευση ή αναφορά', + ], + ]; diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php new file mode 100644 index 000000000..b084799be --- /dev/null +++ b/resources/lang/en/settings.php @@ -0,0 +1,195 @@ + 'Account', + 'accessibility' => 'Accessibility', + 'email' => 'Email', + 'invites' => 'Invites', + 'media' => 'Media', + 'notifications' => 'Notifications', + 'password' => 'Password', + 'privacy' => 'Privacy', + 'relationships' => 'Relationships', + 'security' => 'Security', + 'timelines' => 'Timelines', + 'applications' => 'Applications', + 'developers' => 'Developers', + 'import' => 'Import', + 'export' => 'Export', + 'labs' => 'Labs', + 'parental_controls' => 'Parental Controls', + + 'submit' => 'Submit', + 'error' => 'Error', + 'cancel' => 'Cancel', + 'save' => 'Save', + 'download' => 'Download', + + 'home.account_settings' => 'Account Settings', + 'home.change_profile_photo' => 'Change Profile Photo', + 'home.select_a_profile_photo' => 'Select a profile photo', + 'home.must_be_a_jpeg_or_png_max_avatar_size' => 'Must be a jpeg or png. Max avatar size:', + 'home.upload' => 'Upload', + 'home.delete_profile_photo' => 'Delete Profile Photo', + 'home.name' => 'Name', + 'home.your_name' => 'Your Name', + 'home.website' => 'Website', + 'home.bio' => 'Bio', + 'home.add_a_bio_here' => 'Add a bio here', + 'home.language' => 'Language', + 'home.pronouns' => 'Pronouns', + 'home.select_pronouns' => 'Select Pronoun(s)', + 'home.select_up_to_4_pronouns_that_will_appear_on_etc' => 'Select up to 4 pronouns that will appear on your profile.', + 'home.account_aliases' => 'Account Aliases', + 'home.manage_account_alias' => 'Manage account alias', + 'home.to_move_from_another_account_to_this_one_first_etc' => 'To move from another account to this one, first you need to create an alias.', + 'home.account_migrate' => 'Account Migrate', + 'home.migrate_to_another_account' => 'Migrate to another account', + 'home.to_redirect_this_account_to_a_different_one_etc' => 'To redirect this account to a different one (where supported).', + 'home.storage_usage' => 'Storage Usage', + 'home.storage_used' => 'Storage Used', + 'home.are_you_sure_you_want_to_delete_your_profile_photo' => 'Are you sure you want to delete your profile photo?', + 'home.an_error_occured_please_try_again_later' => 'An error occured, please try again later', + + 'accessibility.reduce_motion' => 'Reduce Motion', + 'accessibility.prevent_animation_effects' => 'Prevent animation effects.', + 'accessibility.high_contrast_mode' => 'High Contrast Mode', + 'accessibility.high_contrast_mode_for_the_visually_impaired' => 'High contrast mode for the visually impaired.', + 'accessibility.disable_video_autoplay' => 'Disable video autoplay', + 'accessibility.prevent_videos_from_autoplaying' => 'Prevent videos from autoplaying.', + + 'email.email_settings' => 'Email Settings', + 'email.email_address' => 'Email Address', + 'email.verified' => 'Verified', + 'email.unverified' => 'Unverified', + 'email.you_need_to' => 'You need to', + 'email.verify_your_email' => 'verify your email', + + 'media.default_license' => 'Default License', + 'media.set_a_default_license_for_new_posts' => 'Set a default license for new posts.', + 'media.sync_licenses' => 'Sync Licenses', + 'media.update_existing_posts_with_your_new_default_etc' => 'Update existing posts with your new default license. You can sync twice every 24 hours.', + 'media.license_changes_may_not_be_reflected_on_remote_servers' => 'License changes may not be reflected on remote servers.', + 'media.require_media_descriptions' => 'Require Media Descriptions', + 'media.briefly_describe_your_media_to_improve_etc' => 'Briefly describe your media to improve accessibility for vision impaired people.', + 'media.not_available_for_mobile_or_3rd_party_apps_etc' => 'Not available for mobile or 3rd party apps at this time.', + + 'password.update_password' => 'Update Password', + 'password.current' => 'Current', + 'password.your_current_password' => 'Your current password', + 'password.new' => 'New', + 'password.enter_new_password_here' => 'Enter new password here', + 'password.confirm' => 'Confirm', + 'password.confirm_new_password' => 'Confirm new password', + + 'privacy.privacy_settings' => 'Privacy Settings', + 'privacy.private_account' => 'Private Account', + 'privacy.when_your_account_is_private_only_people_you_etc' => 'When your account is private, only people you approve can see your photos and videos on pixelfed. Your existing followers won\'t be affected.', + 'privacy.disable_search_engine_indexing' => 'Disable Search Engine indexing', + 'privacy.when_your_account_is_visible_to_search_engines_etc' => 'When your account is visible to search engines, your information can be crawled and stored by search engines.', + 'privacy.not_available_when_your_account_is_private' => 'Not available when your account is private', + 'privacy.include_public_posts_in_search_results' => 'Include public posts in search results', + 'privacy.your_public_posts_may_appear_in_search_results_etc' => 'Your public posts may appear in search results on Pixelfed and Mastodon. People who have interacted with your posts may be able to search them regardless.', + 'privacy.show_on_directory' => 'Show on Directory', + 'privacy.when_this_option_is_enabled_your_profile_is_etc' => 'When this option is enabled, your profile is included in the Directory. Only public profiles are eligible.', + 'privacy.receive_direct_messages_from_anyone' => 'Receive Direct Messages from anyone', + 'privacy.if_selected_you_will_be_able_to_receive_messages_etc' => 'If selected, you will be able to receive messages and notifications from any user even if you do not follow them.', + 'privacy.hide_sensitive_content_from_search_results' => 'Hide sensitive content from search results', + 'privacy.this_prevents_posts_with_potentially_sensitive_etc' => 'This prevents posts with potentially sensitive content from displaying in your search results.', + 'privacy.remove_blocked_and_muted_accounts' => 'Remove blocked and muted accounts', + 'privacy.use_this_to_eliminate_search_results_from_accounts_etc' => 'Use this to eliminate search results from accounts you\'ve blocked or muted.', + 'privacy.display_media_that_may_contain_sensitive_content' => 'Display media that may contain sensitive content', + 'privacy.show_all_media_including_potentially_sensitive_content' => 'Show all media, including potentially sensitive content.', + 'privacy.show_follower_count' => 'Show Follower Count', + 'privacy.display_follower_count_on_profile' => 'Display follower count on profile', + 'privacy.show_following_count' => 'Show Following Count', + 'privacy.display_following_count_on_profile' => 'Display following count on profile', + 'privacy.disable_embeds' => 'Disable Embeds', + 'privacy.disable_post_and_profile_embeds' => 'Disable post and profile embeds', + 'privacy.enable_atom_feed' => 'Enable Atom Feed', + 'privacy.enable_your_profile_atom_feed_only_public_profiles_etc' => 'Enable your profile atom feed. Only public profiles are eligible.', + 'privacy.confirm_this_action' => 'Confirm this action', + 'privacy.please_select_the_type_of_private_account_you_etc' => 'Please select the type of private account you would like:', + 'privacy.keep_existing_followers' => 'Keep existing followers', + 'privacy.only_keep_mutual_followers' => 'Only keep mutual followers', + 'privacy.only_followers_that_have_followed_you_for_atleast' => 'Only followers that have followed you for atleast', + 'privacy.hour' => 'hour', + 'privacy.day' => 'day', + 'privacy.weeks' => 'weeks', + 'privacy.month' => 'month', + 'privacy.months' => 'months', + 'privacy.year' => 'year', + 'privacy.remove_existing_followers' => 'Remove existing followers', + 'privacy.allow_new_follow_requests' => 'Allow new follow requests', + 'privacy.block_notifications_from_accounts_i_dont_follow' => 'Block notifications from accounts I don\'t follow', + 'privacy.an_error_occured_please_try_again' => 'An error occured. Please try again.', + + 'relationships' => 'Relationships', + 'relationships.followers' => 'Followers', + 'relationships.following' => 'Following', + 'relationships.hashtags' => 'Hashtags', + 'relationships.hashtag' => 'Hashtag', + 'relationships.username' => 'Username', + 'relationships.action' => 'Action', + 'relationships.unfollow' => 'Unfollow', + 'relationships.mute' => 'Mute', + 'relationships.block' => 'Block', + 'relationships.mute_successful' => 'Mute Successful', + 'relationships.you_have_successfully_muted_that_user' => 'You have successfully muted that user', + 'relationships.block_successful' => 'Block Successful', + 'relationships.you_have_successfully_blocked_that_user' => 'You have successfully blocked that user', + 'relationships.unfollow_successful' => 'Unfollow Successful', + 'relationships.you_have_successfully_unfollowed_that_user' => 'You have successfully unfollowed that user', + 'relationships.an_error_occured_when_attempting_to_unfollow_this_user' => 'An error occured when attempting to unfollow this user', + 'relationships.you_have_successfully_unfollowed_that_hashtag' => 'You have successfully unfollowed that hashtag', + + 'security.two_factor_authentication' => 'Two-factor authentication', + 'security.enabled' => 'Enabled', + 'security.danger_zone' => 'Danger Zone', + 'security.temporarily_disable_account' => 'Temporarily Disable Account', + 'security.disable_your_account_to_hide_your_posts_until_next_log_in' => 'Disable your account to hide your posts until next log in.', + 'security.disable' => 'Disable', + 'security.delete_this_account' => 'Delete this Account', + 'security.once_you_delete_your_account_there_is_no_going_back_etc' => 'Once you delete your account, there is no going back. Please be certain.', + 'security.delete' => 'Delete', + 'security.account_log' => 'Account Log', + 'security.no_activity_logs_found' => 'No activity logs found!', + 'security.ip_address' => 'IP Address:', + 'security.user_agent' => 'User Agent:', + 'security.devices' => 'Devices', + 'security.ip' => 'IP:', + 'security.device' => 'Device:', + 'security.browser' => 'Browser:', + 'security.last_login' => 'Last Login:', + 'security.country' => 'Country:', + 'security.trust' => 'Trust', + 'security.remove_device' => 'Remove Device', + 'security.timeline_settings' => 'Timeline Settings', + 'security.show_text_only_posts' => 'Show text-only posts', + 'security.show_text_only_posts_from_accounts_you_follow_home_etc' => 'Show text-only posts from accounts you follow. (Home timeline only)', + 'security.show_replies' => 'Show replies', + 'security.show_replies_from_accounts_you_follow_home_timeline_only' => 'Show replies from accounts you follow. (Home timeline only)', + 'security.show_reblogs' => 'Show reblogs', + 'security.see_reblogs_from_accounts_you_follow_in_your_home_etc' => 'See reblogs from accounts you follow in your home feed. (Home timeline only)', + 'security.photo_reblogs_only' => 'Photo reblogs only', + 'security.only_see_reblogs_of_photos_or_photo_albums_home_etc' => 'Only see reblogs of photos or photo albums. (Home timeline only)', + + // incomplete + // the oauth panel is loaded from elsewhere + 'developers.oauth_has_not_been_enabled_on_this_instance' => 'OAuth has not been enabled on this instance.', + + // incomplete + // import/ig.blade.php seems not in use anymore + 'import.import_from_instagram' => 'Import from Instagram', + + 'export.data_export' => 'Data Export', + 'export.we_generate_data_exports_once_per_hour_and_they_may_etc' => 'We generate data exports once per hour, and they may not contain the latest data if you\'ve requested them recently.', + 'export.statuses' => 'Statuses', + 'export.mute_block_lists' => 'Mute/Block List', + + // incomplete + // some language outside the blades (in app/Http/Controllers/Settings/LabsSettings.php) + 'labs' => 'Labs', + 'labs.experimental_features' => 'Experimental features', + 'labs.use_dark_mode_theme' => 'Use dark mode theme.', +]; \ No newline at end of file diff --git a/resources/lang/en/site.php b/resources/lang/en/site.php index 44cd6da2a..82edea8cd 100644 --- a/resources/lang/en/site.php +++ b/resources/lang/en/site.php @@ -19,4 +19,53 @@ return [ 'places' => 'Places', 'profiles' => 'Profiles', -]; + // site/contact + 'you_can_contact_the_admins' => 'You can contact the admins', + 'by_using_the_form_below' => 'by using the form below', + 'or' => 'or', + 'by_sending_an_email_to' => 'by sending an email to', + 'the_admins_have_not_set_a_contact_email_address' => 'The admins have not set a contact email address', + 'Message' => 'Message', + 'request_response_from_admins' => 'Request response from admins', + 'Submit' => 'Submit', + 'log_in_to_send_a_message' => 'log in to send a message', + 'Please' => 'Please', + + // site/about + 'photo_sharing_for_everyone' => 'Photo Sharing. For Everyone', + 'pixelfed_is_an_image_sharing_platform_etc' => 'Pixelfed is an image sharing platform, an ethical alternative to centralized platforms.', // this is actually never used because it's a fallback for config_cache('app.description') and config_cache('app.short_description') which seem to be impossible to set to empty when saved via /admin/settings?t=branding + 'feature_packed' => 'Feature Packed.', + 'the_best_for_the_brightest' => 'The best for the brightest 📸', + 'albums' => 'Albums', + 'share_posts_with_up_to' => 'Share posts with up to', + 'photos' => 'photos', + 'comments' => 'Comments', + 'comment_on_a_post_or_send_a_reply' => 'Comment on a post, or send a reply', + 'collections' => 'Collections', + 'organize_and_share_collections_of_multiple_posts' => 'Organize and share collections of multiple posts', + 'discover' => 'Discover', + 'explore_categories_hashtags_and_topics' => 'Explore categories, hashtags and topics', + 'photo_filters' => 'Photo Filters', + 'add_a_special_touch_to_your_photos' => 'Add a special touch to your photos', + 'stories' => 'Stories', + 'share_moments_with_your_followers_that_disappear_etc' => 'Share moments with your followers that disappear after 24 hours', + 'people_have_shared' => 'people have shared', + 'photos_and_videos_on' => 'photos and videos on', + 'sign_up_today' => 'Sign up today', + 'and_join_our_community_of_photographers_from_etc' => 'and join our community of photographers from around the world.', + + // site/fediverse + 'is_a_portmanteau_of_federation_and_universe_etc' => 'is a portmanteau of “federation” and “universe”. It is a common, informal name for a federation of social network servers, specializing in different types of media.', + 'supported_fediverse_projects' => 'Supported Fediverse Projects', + 'some_of_the_better_known_fediverse_projects_include' => 'Some of the better known fediverse projects include:', + 'a_federated_microblogging_alternative' => 'A federated microblogging alternative.', + + // site/opensource + 'the_software_that_powers_this_website_is_called' => 'The software that powers this website is called', + 'and_anyone_can' => 'and anyone can', + 'download' => 'download', + 'opensource.or' => 'or', + 'view' => 'view', + 'the_source_code_and_run_their_own_instance' => 'the source code and run their own instance!', + 'open_source_in_pixelfed' => 'Open source in Pixelfed', +]; \ No newline at end of file diff --git a/resources/lang/es/web.php b/resources/lang/es/web.php index 8384d1a93..5bac1c9c9 100644 --- a/resources/lang/es/web.php +++ b/resources/lang/es/web.php @@ -3,30 +3,35 @@ return [ 'common' => [ - 'comment' => 'Comentario', + 'comment' => 'Comentar', 'commented' => 'Comentado', 'comments' => 'Comentarios', 'like' => 'Me gusta', 'liked' => 'Te gusta', - 'likes' => 'Me gustas', + 'likes' => 'Me gusta', 'share' => 'Compartir', 'shared' => 'Compartido', 'shares' => 'Compartidos', 'unshare' => 'No compartir', + 'bookmark' => 'Marcador', 'cancel' => 'Cancelar', 'copyLink' => 'Copiar Enlace', 'delete' => 'Eliminar', 'error' => 'Error', - 'errorMsg' => 'Algo fue mal. Por favor inténtelo de nuevo más tarde.', + 'errorMsg' => 'Algo salió mal. Por favor inténtalo de nuevo más tarde.', 'oops' => 'Upss!', 'other' => 'Otros', 'readMore' => 'Ver más', 'success' => 'Correcto', + 'proceed' => 'Proceder', + 'next' => 'Siguiente', + 'close' => 'Cerrar', + 'clickHere' => 'haz click aquí', 'sensitive' => 'Sensible', 'sensitiveContent' => 'Contenido Sensible', - 'sensitiveContentWarning' => 'Este post podría tener contenido sensible', + 'sensitiveContentWarning' => 'Esta publicación podría contener contenido sensible', ], 'site' => [ @@ -55,7 +60,7 @@ return [ 'drive' => 'Multimedia', 'settings' => 'Ajustes', 'compose' => 'Crear Nuevo', - 'logout' => 'Logout', + 'logout' => 'Cerrar sesión', // Nav footer 'about' => 'Acerca de', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'publicación', 'story' => 'historia', + 'noneFound' => 'No se han encontrado notificaciones', ], 'post' => [ @@ -118,8 +124,8 @@ return [ 'followRequested' => 'Seguimiento Solicitado', 'joined' => 'Se unió', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Parece que no podemos encontrar ninguna colección', + 'emptyPosts' => 'Parece que no podemos encontrar ningún post', ], 'menu' => [ @@ -141,8 +147,8 @@ return [ 'sensitive' => 'Contenido Sensible', 'abusive' => 'Abusivo o Dañino', 'underageAccount' => 'Cuenta de Menor de Edad', - 'copyrightInfringement' => 'Violación de Copyright', - 'impersonation' => 'Suplantación', + 'copyrightInfringement' => 'Infracción de derechos de autor', + 'impersonation' => 'Suplantación de identidad', 'scamOrFraud' => 'Scam o Fraude', 'confirmReport' => 'Confirmar Reporte', 'confirmReportText' => '¿Seguro que quieres reportar esta publicación?', @@ -166,8 +172,8 @@ return [ 'compactMode' => 'Modo Compacto', 'embedConfirmText' => 'Usando este incrustado, usted acepta', - 'deletePostConfirm' => '¿Seguro que desea eliminar esta publicación?', - 'archivePostConfirm' => '¿Seguro que desea archivar esta publicación?', + 'deletePostConfirm' => '¿Seguro que deseas eliminar esta publicación?', + 'archivePostConfirm' => '¿Seguro que deseas archivar esta publicación?', 'unarchivePostConfirm' => '¿Seguro que desea desarchivar esta publicación?', ], @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Gente que podrías conocer' + 'peopleYouMayKnow' => 'Personas que quizás conozcas', + + 'onboarding' => [ + 'welcome' => 'Bienvenido/a', + 'thisIsYourHomeFeed' => 'Este es tu cronología principal, que muestra de manera cronológica las publicaciones de cuentas que sigues.', + 'letUsHelpYouFind' => 'Déjanos ayudarte a encontrar algunas personas interesantes para seguir', + 'refreshFeed' => 'Actualizar mi cronología', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Parece que no podemos encontrar posts para este hashtag' + ], + + 'report' => [ + 'report' => 'Reportar', + 'selectReason' => 'Seleccionar un motivo', + 'reported' => 'Reportado', + 'sendingReport' => 'Enviando reporte', + 'thanksMsg' => 'Gracias por el reporte, ¡personas como tú ayudan a mantener nuestra comunidad segura!', + 'contactAdminMsg' => 'Si quieres contactar un administrador sobre esta publicación o reporte', ], ]; diff --git a/resources/lang/eu/web.php b/resources/lang/eu/web.php index 2d64ab425..7bb51ea48 100644 --- a/resources/lang/eu/web.php +++ b/resources/lang/eu/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Partekatuta', 'shares' => 'Partekatze', 'unshare' => 'Utzi partekatzeari', + 'bookmark' => 'Laster-marka', 'cancel' => 'Utzi', 'copyLink' => 'Kopiatu esteka', @@ -22,7 +23,11 @@ return [ 'oops' => 'Ene!', 'other' => 'Bestelakoa', 'readMore' => 'Irakurri gehiago', - 'success' => 'Burutu da', + 'success' => 'Arrakastaz burutu da', + 'proceed' => 'Jarraitu', + 'next' => 'Hurrengoa', + 'close' => 'Itxi', + 'clickHere' => 'klikatu hemen', 'sensitive' => 'Hunkigarria', 'sensitiveContent' => 'Eduki hunkigarria', @@ -39,7 +44,7 @@ return [ 'admin' => 'Adminaren panela', // Timelines - 'homeFeed' => 'Etxeko jarioa', + 'homeFeed' => 'Hasierako jarioa', 'localFeed' => 'Jario lokala', 'globalFeed' => 'Jario globala', @@ -55,7 +60,7 @@ return [ 'drive' => 'Unitatea', 'settings' => 'Ezarpenak', 'compose' => 'Sortu berria', - 'logout' => 'Saioa itxi', + 'logout' => 'Itxi saioa', // Nav footer 'about' => 'Honi buruz', @@ -76,7 +81,7 @@ return [ 'notifications' => [ 'liked' => 'datsegi zure', - 'commented' => 'iruzkindu du zure', + 'commented' => '-(e)k iruzkindu du zure', 'reacted' => '-(e)k erantzun egin du zure', 'shared' => 'partekatu du zure', 'tagged' => 'etiketatu zaitu hemen:', @@ -92,11 +97,12 @@ return [ 'applicationApproved' => 'onartu da!', 'applicationRejected' => 'ez da onartu. Berriz eska dezakezu 6 hilabete barru.', - 'dm' => 'mezu pribatua', + 'dm' => 'mezu zuzena', 'groupPost' => 'talde argitarapena', 'modlog' => 'modloga', 'post' => 'bidalketa', 'story' => 'istorioa', + 'noneFound' => 'Ez da jakinarazpenik aurkitu', ], 'post' => [ @@ -115,7 +121,7 @@ return [ 'follow' => 'Jarraitu', 'unfollow' => 'Utzi jarraitzeari', 'editProfile' => 'Editatu profila', - 'followRequested' => 'Jarraitzea eskatuta', + 'followRequested' => 'Jarraitzeko eskaera bidalita', 'joined' => 'Elkartu da', 'emptyCollections' => 'Ez dugu topatu bildumarik', @@ -127,28 +133,28 @@ return [ 'viewProfile' => 'Ikusi profila', 'moderationTools' => 'Moderazio tresnak', 'report' => 'Salatu', - 'archive' => 'Artxiboa', + 'archive' => 'Artxibatu', 'unarchive' => 'Desartxibatu', 'embed' => 'Kapsulatu', 'selectOneOption' => 'Hautatu aukera hauetako bat', - 'unlistFromTimelines' => 'Denbora-lerroetatik ezkutatu', + 'unlistFromTimelines' => 'Denbora-lerroetatik kendu', 'addCW' => 'Gehitu edukiaren abisua', 'removeCW' => 'Kendu edukiaren abisua', 'markAsSpammer' => 'Markatu zabor-bidaltzaile gisa', 'markAsSpammerText' => 'Ezkutatu + edukiaren abisua jarri etorkizuneko bidalketei', 'spam' => 'Zaborra', 'sensitive' => 'Eduki hunkigarria', - 'abusive' => 'Bortxazko edo Mingarria', + 'abusive' => 'Iraingarri edo mingarria', 'underageAccount' => 'Adin txikiko baten kontua', 'copyrightInfringement' => 'Copyrightaren urraketa', - 'impersonation' => 'Nortasunaren iruzurra', - 'scamOrFraud' => 'Iruzur edo lapurreta', + 'impersonation' => 'Inpersonazioa', + 'scamOrFraud' => 'Iruzur edo maula', 'confirmReport' => 'Berretsi salaketa', 'confirmReportText' => 'Ziur al zaude bidalketa hau salatu nahi duzula?', 'reportSent' => 'Salaketa bidali da', 'reportSentText' => 'Zure salaketa ondo jaso dugu.', - 'reportSentError' => 'Arazo bat egon da bidalketa hau salatzean.', + 'reportSentError' => 'Arazo bat egon da bidalketa hau salatzerakoan.', 'modAddCWConfirm' => 'Ziur al zaude edukiaren abisua jarri nahi duzula bidalketa honetan?', 'modCWSuccess' => 'Edukiaren abisua ondo gehitu da', @@ -164,7 +170,7 @@ return [ 'showCaption' => 'Irudiaren azalpena erakutsi', 'showLikes' => 'Erakutsi atsegiteak', 'compactMode' => 'Modu trinkoa', - 'embedConfirmText' => 'Kapsulatze hau erabiliz, onartzen dituzu gure', + 'embedConfirmText' => 'Txertaketa hau erabiliz, onartzen dituzu gure', 'deletePostConfirm' => 'Ziur al zaude bidalketa hau ezabatu nahi duzula?', 'archivePostConfirm' => 'Ziur al zaude bidalketa hau artxibatu nahi duzula?', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Ezagutu dezakezun jendea' + 'peopleYouMayKnow' => 'Ezagun dezakezun jendea', + + 'onboarding' => [ + 'welcome' => 'Ongi etorri', + 'thisIsYourHomeFeed' => 'Hau da zure hasierako jarioa, jarraitzen dituzun kontuen bidalketen jario kronologikoa.', + 'letUsHelpYouFind' => 'Utz iezaguzu laguntzen jarraitzeko moduko jende interesgarria bilatzen', + 'refreshFeed' => 'Nire jarioa eguneratu', + ], ], 'hashtags' => [ 'emptyFeed' => 'Ez dugu topatu traola hau duen bidalketarik' ], + 'report' => [ + 'report' => 'Salatu', + 'selectReason' => 'Hautatu arrazoia', + 'reported' => 'Salatuta', + 'sendingReport' => 'Salaketa bidaltzen', + 'thanksMsg' => 'Eskerrik asko salaketagatik, zu bezalako jendeak gure komunitatea seguruagoa mantentzen du!', + 'contactAdminMsg' => 'Administratzaile batekin harremanetan jarri nahi baduzu bidalketa edo salaketa honen harira', + ], + ]; diff --git a/resources/lang/fa/web.php b/resources/lang/fa/web.php index c552c04b4..0e467019f 100644 --- a/resources/lang/fa/web.php +++ b/resources/lang/fa/web.php @@ -3,26 +3,31 @@ return [ 'common' => [ - 'comment' => 'دیدگاه', - 'commented' => 'Commented', - 'comments' => 'دیدگاه‌ها', + 'comment' => 'نظر', + 'commented' => 'نظر داده شد', + 'comments' => 'نظر', 'like' => 'پسند', - 'liked' => 'Liked', + 'liked' => 'پسندیده شد', 'likes' => 'پسند', 'share' => 'هم‌رسانی', - 'shared' => 'Shared', + 'shared' => 'هم‌رسانی شد', 'shares' => 'هم‌رسانی', - 'unshare' => 'لغو هم‌رسانی', + 'unshare' => 'ناهم‌رسانی', + 'bookmark' => 'نشانک', 'cancel' => 'لغو', - 'copyLink' => 'روگرفت پیوند', + 'copyLink' => 'رونوشت از پیوند', 'delete' => 'حذف', 'error' => 'خطا', - 'errorMsg' => 'مشکلی رخ داده است. لطفا بعدا امتحان کنید.', + 'errorMsg' => 'چیزی اشتباه شد. لطفاً بعداً دوباره تلاش کنید.', 'oops' => 'اوه!', - 'other' => 'سایر', - 'readMore' => 'بیشتر بخوانید', + 'other' => 'دیگر', + 'readMore' => 'بیش‌تر بخوانید', 'success' => 'موفق', + 'proceed' => 'پیشروی', + 'next' => 'بعدی', + 'close' => 'بستن', + 'clickHere' => 'این‌جا را بزنید', 'sensitive' => 'حساس', 'sensitiveContent' => 'محتوای حساس', @@ -39,7 +44,7 @@ return [ 'admin' => 'پیشخوان مدیریتی', // Timelines - 'homeFeed' => 'خط زمانی خانگی', + 'homeFeed' => 'خوراک خانه', 'localFeed' => 'خط زمانی محلی', 'globalFeed' => 'خط زمانی سراسری', @@ -55,7 +60,7 @@ return [ 'drive' => 'Drive', 'settings' => 'تنظیمات', 'compose' => 'فرستهٔ جدید', - 'logout' => 'Logout', + 'logout' => 'خروج', // Nav footer 'about' => 'درباره', @@ -65,12 +70,12 @@ return [ 'terms' => 'شرایط', // Temporary links - 'backToPreviousDesign' => 'بازگشت به طراحی پیشین' + 'backToPreviousDesign' => 'بازگشت به طرّاحی پیشین' ], 'directMessages' => [ - 'inbox' => 'صندوق دریافت', - 'sent' => 'فرستاده شده', + 'inbox' => 'صندوق ورودی', + 'sent' => 'فرستاده', 'requests' => 'درخواست‌ها' ], @@ -84,19 +89,20 @@ return [ 'updatedA' => 'updated a', 'sentA' => 'sent a', - 'followed' => 'followed', - 'mentioned' => 'mentioned', + 'followed' => 'پی گرفت', + 'mentioned' => 'اشاره کرد', 'you' => 'شما', - 'yourApplication' => 'درخواست شما برای پیوستن', + 'yourApplication' => 'درخواست پیوستنتان', 'applicationApproved' => 'تایید شد!', - 'applicationRejected' => 'رد شد. ۶ ماه دیگر می‌توانید مجددا اقدام کنید.', + 'applicationRejected' => 'رد شد. ۶ ماه دیگر می‌توانید دوباره درخواست کنید.', 'dm' => 'dm', 'groupPost' => 'فرستهٔ گروهی', 'modlog' => 'modlog', 'post' => 'فرسته', 'story' => 'داستان', + 'noneFound' => 'هیچ آگاهی‌ای پیدا نشد', ], 'post' => [ @@ -143,7 +149,7 @@ return [ 'underageAccount' => 'حساب زیر سن قانونی', 'copyrightInfringement' => 'نقض قوانین حق تکثیر', 'impersonation' => 'جعل هویت', - 'scamOrFraud' => 'Scam or Fraud', + 'scamOrFraud' => 'هرزنامه یا کلاه‌برداری', 'confirmReport' => 'تایید گزارش', 'confirmReportText' => 'مطمئنید که می‌خواهید این فرسته را گزارش کنید؟', 'reportSent' => 'گزارش فرستاده شد!', @@ -157,7 +163,7 @@ return [ 'modUnlistConfirm' => 'مطمئنید که می‌خواهید این فرسته را برون‌فهرست کنید؟', 'modUnlistSuccess' => 'فرسته با موفقیت برون‌فهرست شد', 'modMarkAsSpammerConfirm' => 'مطمئنید که می‌خواهید این کاربر را به عنوان هرزنامه‌نویس نشانه‌گذاری کنید؟ تمام فرسته‌های موجود و آتی روی خط زمانی به صورت برون‌فهرست درآمده و هشدار محتوا بر آن‌ها اعمال خواهد شد.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modMarkAsSpammerSuccess' => 'حساب با موفقیت به عنوان هرزه‌پراکن علامت خورد', 'toFollowers' => 'به دنبال‌کنندگان', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'افرادی که ممکن است بشناسید' + 'peopleYouMayKnow' => 'افرادی که ممکن است بشناسید', + + 'onboarding' => [ + 'welcome' => 'خوش آمدید', + 'thisIsYourHomeFeed' => 'این خوراک خانه‌تان است. خوراکی زمان‌نگاشته از فرسته‌هایحساب‌هایی که پی می‌گیرید.', + 'letUsHelpYouFind' => 'بگذارید در یافتن افراد جالب برای پی‌گیری یاریتان کنیم', + 'refreshFeed' => 'تازه‌سازی خوراکم', + ], ], 'hashtags' => [ 'emptyFeed' => 'به نظر می‌رسد که نمی‌توانیم چیزی برای این هشتگ پیدا کنیم' ], + 'report' => [ + 'report' => 'گزارش', + 'selectReason' => 'گزینش یک دلیل', + 'reported' => 'گزارش شد', + 'sendingReport' => 'فرستادن گزارش', + 'thanksMsg' => 'ممنون از گزارش. افرادی چون شما اجتماعمان را امن نگه می‌دارند!', + 'contactAdminMsg' => 'اگر می‌خواهید در بارهخ‌ای این فرسته یا گزارش با مدیری در تماس باشید', + ], + ]; diff --git a/resources/lang/fi/web.php b/resources/lang/fi/web.php index 3844f847a..3b9062230 100644 --- a/resources/lang/fi/web.php +++ b/resources/lang/fi/web.php @@ -3,80 +3,85 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'Kommentti', + 'commented' => 'Kommentoitu', + 'comments' => 'Kommentit', + 'like' => 'Tykkää', + 'liked' => 'Tykätty', + 'likes' => 'Tykkäykset', + 'share' => 'Jaa', + 'shared' => 'Jaettu', + 'shares' => 'Jaot', + 'unshare' => 'Peru jakaminen', + 'bookmark' => 'Bookmark', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'Peruuta', + 'copyLink' => 'Kopioi linkki', + 'delete' => 'Poista', + 'error' => 'Virhe', + 'errorMsg' => 'Jokin meni pieleen. Yritä myöhemmin uudelleen.', + 'oops' => 'Oho!', + 'other' => 'Muu', + 'readMore' => 'Lue lisää', + 'success' => 'Onnistui', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Sensitiivinen', + 'sensitiveContent' => 'Sensitiivinen sisältö', + 'sensitiveContentWarning' => 'Tämä julkaisu saattaa sisältää sensitiivistä sisältöä', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Käyttöehdot', + 'privacy' => 'Tietosuojakäytäntö', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'Hae', + 'admin' => 'Ylläpitäjän hallintapaneeli', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'Kotisyöte', + 'localFeed' => 'Paikallinen syöte', + 'globalFeed' => 'Maailmanlaajuinen syöte', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'Tutustu', + 'directMessages' => 'Yksityisviestit', + 'notifications' => 'Ilmoitukset', + 'groups' => 'Ryhmät', + 'stories' => 'Tarinat', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'Profiili', + 'drive' => 'Asema', + 'settings' => 'Asetukset', + 'compose' => 'Luo uusi', + 'logout' => 'Kirjaudu ulos', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'Tietoja', + 'help' => 'Ohje', + 'language' => 'Kieli', + 'privacy' => 'Yksityisyys', + 'terms' => 'Ehdot', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Palaa aiempaan ulkoasuun' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'Saapuneet', + 'sent' => 'Lähetetty', + 'requests' => 'Pyynnöt' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', + 'liked' => 'tykkäsi sinun', + 'commented' => 'kommentoi sinun', 'reacted' => 'reacted to your', 'shared' => 'shared your', 'tagged' => 'tagged you in a', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -141,46 +147,62 @@ return [ 'sensitive' => 'Sensitive Content', 'abusive' => 'Abusive or Harmful', 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', + 'copyrightInfringement' => 'Tekijänoikeusloukkaus', + 'impersonation' => 'Väärennetty henkilöllisyys', + 'scamOrFraud' => 'Huijaus tai petos', + 'confirmReport' => 'Vahvista ilmianto', + 'confirmReportText' => 'Oletko varma, että haluat ilmiantaa tämän viestin?', + 'reportSent' => 'Ilmoitus lähetetty!', + 'reportSentText' => 'Saimme ilmoituksesi.', + 'reportSentError' => 'Julkaisun ilmianto epäonnistui.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modAddCWConfirm' => 'Haluatko varmasti lisätä sisältövaroituksen tähän julkaisuun?', + 'modCWSuccess' => 'Sisältövaroitus lisätty onnistuneesti', + 'modRemoveCWConfirm' => 'Haluatko varmasti poistaa julkaisun sisältövaroituksen?', + 'modRemoveCWSuccess' => 'Sisältövaroitus poistettu', + 'modUnlistConfirm' => 'Haluatko varmasti piilottaa julkaisun?', + 'modUnlistSuccess' => 'Julkaisu piilotettu onnistuneesti', + 'modMarkAsSpammerConfirm' => 'Haluatko varmasti merkitä käyttäjän roskapostittajaksi? Kaikki nykyiset ja tulevat julkaisut saavat sisältövaroituksen ja julkaisut piilotetaan julkisilta aikajanoilta.', + 'modMarkAsSpammerSuccess' => 'Tili merkitty roskapostittajaksi', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'seuraajille', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showCaption' => 'Näytä kuvaus', + 'showLikes' => 'Näytä tykkäykset', + 'compactMode' => 'Kompakti tila', + 'embedConfirmText' => 'Käyttämällä upotusta, hyväksyt', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'deletePostConfirm' => 'Haluatko varmasti poistaa julkaisun?', + 'archivePostConfirm' => 'Haluatko varmasti arkistoida julkaisun?', + 'unarchivePostConfirm' => 'Haluatko varmasti peruuttaa julkaisun arkistoinnin?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => 'Lisää tarina' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/fr/web.php b/resources/lang/fr/web.php index 874ca5cfc..8cd8cdd69 100644 --- a/resources/lang/fr/web.php +++ b/resources/lang/fr/web.php @@ -13,20 +13,25 @@ return [ 'shared' => 'Partagé', 'shares' => 'Partages', 'unshare' => 'Ne plus partager', + 'bookmark' => 'Marque-page', 'cancel' => 'Annuler', 'copyLink' => 'Copier le lien', 'delete' => 'Supprimer', 'error' => 'Erreur', 'errorMsg' => 'Une erreur est survenue. Veuillez réessayer plus tard.', - 'oops' => 'Zut !', + 'oops' => 'Oups !', 'other' => 'Autre', 'readMore' => 'En savoir plus', - 'success' => 'Opération réussie', + 'success' => 'Succès', + 'proceed' => 'Continuer', + 'next' => 'Suivant', + 'close' => 'Fermer', + 'clickHere' => 'cliquez ici', 'sensitive' => 'Sensible', 'sensitiveContent' => 'Contenu sensible', - 'sensitiveContentWarning' => 'Le contenu de ce message peut être sensible', + 'sensitiveContentWarning' => 'Le contenu de cette publication peut être sensible', ], 'site' => [ @@ -39,9 +44,9 @@ return [ 'admin' => 'Tableau de bord d\'administration', // Timelines - 'homeFeed' => 'Fil principal', - 'localFeed' => 'Fil local', - 'globalFeed' => 'Fil global', + 'homeFeed' => 'Flux principal', + 'localFeed' => 'Flux local', + 'globalFeed' => 'Flux global', // Core features 'discover' => 'Découvrir', @@ -55,7 +60,7 @@ return [ 'drive' => 'Médiathèque', 'settings' => 'Paramètres', 'compose' => 'Publier', - 'logout' => 'Logout', + 'logout' => 'Déconnexion', // Nav footer 'about' => 'À propos', @@ -97,6 +102,7 @@ return [ 'modlog' => 'journal de modération', 'post' => 'publication', 'story' => 'story', + 'noneFound' => 'Aucune notification trouvée', ], 'post' => [ @@ -115,11 +121,11 @@ return [ 'follow' => 'S\'abonner', 'unfollow' => 'Se désabonner', 'editProfile' => 'Modifier votre profil', - 'followRequested' => 'Demande d\'abonnement', + 'followRequested' => 'Demande d\'abonnement faite', 'joined' => 'A rejoint', 'emptyCollections' => 'Aucune collection ne semble exister', - 'emptyPosts' => 'Aucune publication ne semble exister', + 'emptyPosts' => 'Il semble n’y avoir aucune publication', ], 'menu' => [ @@ -136,7 +142,7 @@ return [ 'addCW' => 'Ajouter un avertissement de contenu', 'removeCW' => 'Enlever l’avertissement de contenu', 'markAsSpammer' => 'Marquer comme spammeur·euse', - 'markAsSpammerText' => 'Retirer + avertissements pour les contenus existants et futurs', + 'markAsSpammerText' => 'Retirer des flux + ajouter un avertissement de contenu pour les publications existantes et futures', 'spam' => 'Indésirable', 'sensitive' => 'Contenu sensible', 'abusive' => 'Abusif ou préjudiciable', @@ -155,7 +161,7 @@ return [ 'modRemoveCWConfirm' => 'Êtes-vous sûr·e de vouloir supprimer l\'avertissement de contenu sur cette publication ?', 'modRemoveCWSuccess' => 'Avertissement de contenu supprimé avec succès', 'modUnlistConfirm' => 'Êtes-vous sûr·e de vouloir retirer cette publication des flux ?', - 'modUnlistSuccess' => 'Publication retirée des fils avec succès', + 'modUnlistSuccess' => 'Publication retirée des flux avec succès', 'modMarkAsSpammerConfirm' => 'Êtes-vous sûr·e de vouloir marquer cet utilisateur·rice comme spammeur·euse ? Toutes les publications existantes et futures seront retirées des flux et un avertissement de contenu sera appliqué.', 'modMarkAsSpammerSuccess' => 'Compte marqué avec succès comme spammeur', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Connaissances possibles' + 'peopleYouMayKnow' => 'Connaissances possibles', + + 'onboarding' => [ + 'welcome' => 'Bienvenue', + 'thisIsYourHomeFeed' => 'Ceci est votre flux personnel, un flux chronologique des publications de comptes que vous suivez.', + 'letUsHelpYouFind' => 'Laissez-nous vous aider à trouver des personnes intéressantes à suivre', + 'refreshFeed' => 'Actualiser mon flux', + ], ], 'hashtags' => [ 'emptyFeed' => 'Aucune publication ne semble exister pour ce hashtag' ], + 'report' => [ + 'report' => 'Signaler', + 'selectReason' => 'Sélectionner un motif', + 'reported' => 'Signalé', + 'sendingReport' => 'Envoi du signalement', + 'thanksMsg' => 'Merci pour votre signalement, les gens comme vous aident à assurer la sécurité de notre communauté !', + 'contactAdminMsg' => 'Si vous souhaitez contacter un·e administrateur·trice à propos de cette publication ou de ce signalement', + ], + ]; diff --git a/resources/lang/gd/web.php b/resources/lang/gd/web.php index fd178e3e6..0b6d6908f 100644 --- a/resources/lang/gd/web.php +++ b/resources/lang/gd/web.php @@ -4,48 +4,53 @@ return [ 'common' => [ 'comment' => 'Beachd', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', + 'commented' => 'Beachd ris', + 'comments' => 'Beachdan', + 'like' => 'Cuir ris na h-annsachdan', + 'liked' => '’Na annsachd', + 'likes' => 'Na h-annsachdan', 'share' => 'Co-roinn', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'shared' => '’Ga cho-roinneadh', + 'shares' => '’Ga cho-roinneadh', + 'unshare' => 'Na co-roinn tuilleadh', + 'bookmark' => 'Comharra-lìn', 'cancel' => 'Sguir dheth', 'copyLink' => 'Dèan lethbhreac dhen cheangal', 'delete' => 'Sguab às', 'error' => 'Mearachd', - 'errorMsg' => 'Something went wrong. Please try again later.', + 'errorMsg' => 'Chaidh rudeigin ceàrr. Feuch ris a-rithist an ceann greis.', 'oops' => 'Ìoc!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'other' => 'Eile', + 'readMore' => 'Leugh an còrr', + 'success' => 'Chaidh leis', + 'proceed' => 'Lean air adhart', + 'next' => 'Air adhart', + 'close' => 'Dùin', + 'clickHere' => 'briog an-seo', 'sensitive' => 'Frionasach', 'sensitiveContent' => 'Susbaint fhrionasach', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitiveContentWarning' => 'Dh’fhaoidte gu bheil susbaint fhrionasach sa phost seo', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Teirmichean a’ chleachdaidh', + 'privacy' => 'Poileasaidh prìobhaideachd', ], 'navmenu' => [ 'search' => 'Lorg', - 'admin' => 'Admin Dashboard', + 'admin' => 'Deas-bhòrd na rianachd', // Timelines 'homeFeed' => 'Inbhir na dachaigh', 'localFeed' => 'Inbhir ionadail', - 'globalFeed' => 'Global Feed', + 'globalFeed' => 'Inbhir co-naisgte', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', + 'discover' => 'Fidir', + 'directMessages' => 'Teachdaireachdan dìreach', 'notifications' => 'Brathan', 'groups' => 'Buidhnean', 'stories' => 'Sgeulan', @@ -54,8 +59,8 @@ return [ 'profile' => 'Pròifil', 'drive' => 'Draibh', 'settings' => 'Roghainnean', - 'compose' => 'Cruthaich fear ùr', - 'logout' => 'Logout', + 'compose' => 'Cruthaich', + 'logout' => 'Clàraich a-mach', // Nav footer 'about' => 'Mu dhèidhinn', @@ -65,110 +70,111 @@ return [ 'terms' => 'Teirmichean', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Till dhan cho-dhealbhachd roimhpe' ], 'directMessages' => [ 'inbox' => 'Am bogsa a-steach', - 'sent' => 'Sent', + 'sent' => 'Air a chur', 'requests' => 'Iarrtasan' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => '– chuir iad seo uat ris na h-annsachdan aca:', + 'commented' => '– thug iad beachd air seo uat:', + 'reacted' => '– fhreagair iad ri seo uat:', + 'shared' => '– cho-roinn iad seo uat:', + 'tagged' => '– thug iad iomradh ort ann a sheo:', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => '– dh’ùraich iad', + 'sentA' => '– chuir iad', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => '– lean iad:', + 'mentioned' => '– thug iad iomradh air:', + 'you' => 'thusa', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'Tha an t-iarrtas agad air ballrachd air a', + 'applicationApproved' => 'ghabhail ris!', + 'applicationRejected' => 'dhiùltadh. ’S urrainn dhut iarrtas air ballrachd a chur a-steach a-rithist às dèidh 6 mìosan.', - 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', + 'dm' => 'teachdaireachd dhìreach', + 'groupPost' => 'post buidhinn', + 'modlog' => 'loga nam maor', 'post' => 'post', 'story' => 'sgeul', + 'noneFound' => 'Cha deach brath a lorg', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'Co-roinn leis an luchd-leantainn', + 'shareToOther' => 'Co-roinn le càch', + 'noLikes' => 'Chan eil seo ’na annsachd fhathast', + 'uploading' => '’Ga luchdadh suas', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', + 'posts' => 'Postaichean', + 'followers' => 'Luchd-leantainn', + 'following' => 'A’ leantainn', + 'admin' => 'Rianaire', 'collections' => 'Cruinneachaidhean', - 'follow' => 'Lean air', - 'unfollow' => 'Unfollow', + 'follow' => 'Lean', + 'unfollow' => 'Na lean tuilleadh', 'editProfile' => 'Deasaich a’ phròifil', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'followRequested' => 'Iarrar leantainn', + 'joined' => 'Air ballrachd fhaighinn', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Cha do lorg sinn cruinneachadh sam bith', + 'emptyPosts' => 'Cha do lorg sinn post sam bith', ], 'menu' => [ 'viewPost' => 'Seall am post', 'viewProfile' => 'Seall a’ phròifil', 'moderationTools' => 'Innealan na maorsainneachd', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', + 'report' => 'Dèan gearan', + 'archive' => 'Tasglannaich', + 'unarchive' => 'Thoir às an tasg-lann', 'embed' => 'Leabaich', 'selectOneOption' => 'Tagh tè dhe na roghainnean seo', - 'unlistFromTimelines' => 'Unlist from Timelines', + 'unlistFromTimelines' => 'Falaich o loidhnichean-ama', 'addCW' => 'Cuir rabhadh susbainte ris', 'removeCW' => 'Thoir air falbh an rabhadh susbainte', 'markAsSpammer' => 'Cuir comharra gur e spamair a th’ ann', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'markAsSpammerText' => 'Falaich o loidhnichean-ama ⁊ cuir comharra na frionasachd ri postaichean a tha ann ’s ri teachd', 'spam' => 'Spama', 'sensitive' => 'Susbaint fhrionasach', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', + 'abusive' => 'Droch-dhìolach no cronail', + 'underageAccount' => 'Cunntas fo-aoisich', + 'copyrightInfringement' => 'Briseadh a-steach air còir-lethbhreac', + 'impersonation' => 'Ann an riochd cuideigin eile', + 'scamOrFraud' => 'Cleas-meallaidh no foill', 'confirmReport' => 'Dearbh an gearan', - 'confirmReportText' => 'Are you sure you want to report this post?', + 'confirmReportText' => 'A bheil thu cinnteach gu bheil thu airson gearan a dhèanamh mun phost seo?', 'reportSent' => 'Chaidh an gearan a chur!', 'reportSentText' => 'Fhuair sinn do ghearan.', - 'reportSentError' => 'There was an issue reporting this post.', + 'reportSentError' => 'Thachair duilgheadas le gearan a dhèanamh mun phost seo.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modAddCWConfirm' => 'A bheil thu cinnteach gu bheil thu airson rabhadh susbainte a chur ris a’ phost seo?', + 'modCWSuccess' => 'Chaidh rabhadh susbainte a chur ris', + 'modRemoveCWConfirm' => 'A bheil thu cinnteach gu bheil thu airson an rabhadh susbainte a thoirt air falbh on phost seo?', + 'modRemoveCWSuccess' => 'Chaidh an rabhadh susbainte a thoirt air falbh', + 'modUnlistConfirm' => 'A bheil thu cinnteach gu bheil thu airson am post seo fhalach o liostaichean?', + 'modUnlistSuccess' => 'Chaidh am post fhalach o liostaichean', + 'modMarkAsSpammerConfirm' => 'A bheil tu cinnteach gu bheil thu comharra an spamair a chur ris a’ cleachdaiche seo? Thèid gach post a tha ann is postaichean ri teachd fhalach o loidhnichean-ama agus rabadh susbainte a chur riutha.', + 'modMarkAsSpammerSuccess' => 'Chaidh comharra an spamair a chur ris a’ chunntas', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'dhan luchd-leantainn', 'showCaption' => 'Seall am fo-thiotal', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showLikes' => 'Seal na h-annsachdan', + 'compactMode' => 'Am modh dùmhlaichte', + 'embedConfirmText' => 'Nuair a chleachdas tu an leabachadh seo, aontaichidh tu ri', 'deletePostConfirm' => 'A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?', 'archivePostConfirm' => 'A bheil thu cinnteach gu bheil thu airson am post seo a chur dhan tasg-lann?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'unarchivePostConfirm' => 'A bheil thu cinnteach gu bheil thu airson am post seo a thoirt às an tasg-lann?', ], 'story' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'Daoine as aithne dhut ’s dòcha', + + 'onboarding' => [ + 'welcome' => 'Fàilte ort', + 'thisIsYourHomeFeed' => 'Seo inbhir na dachaigh agad a sheallas na postaichean o na cunntasan a leanas tu dhut, a-rèir an ama.', + 'letUsHelpYouFind' => 'An cuidich sinn thu ach an lorg thu daoine inntinneach ri an leantainn?', + 'refreshFeed' => 'Ath-nuadhaich an t-inbhir agam', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Cha do lorg sinn post sam bith dhan taga hais seo' + ], + + 'report' => [ + 'report' => 'Dèan gearan', + 'selectReason' => 'Tagh adhbhar', + 'reported' => 'Chaidh gearan a dhèanamh', + 'sendingReport' => 'A’ cur a’ ghearain', + 'thanksMsg' => 'Mòran taing airson gearan a dhèanamh, cuidichidh daoine mar a tha thu fhèin ach an cumamaid ar coimhearsnachd sàbhailte!', + 'contactAdminMsg' => 'Nam bu toigh leat fios a chur gu rianaire mun post no ghearan seo', ], ]; diff --git a/resources/lang/gl/web.php b/resources/lang/gl/web.php index 71c597f09..4bc6d547e 100644 --- a/resources/lang/gl/web.php +++ b/resources/lang/gl/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Compartiu', 'shares' => 'Compartido', 'unshare' => 'Non compartir', + 'bookmark' => 'Marcar', 'cancel' => 'Cancelar', 'copyLink' => 'Copiar ligazón', @@ -23,6 +24,10 @@ return [ 'other' => 'Outro', 'readMore' => 'Ler máis', 'success' => 'Éxito', + 'proceed' => 'Proceder', + 'next' => 'Seguinte', + 'close' => 'Pechar', + 'clickHere' => 'preme aquí', 'sensitive' => 'Sensible', 'sensitiveContent' => 'Contido sensible', @@ -55,7 +60,7 @@ return [ 'drive' => 'Drive', 'settings' => 'Axustes', 'compose' => 'Crear Nova', - 'logout' => 'Logout', + 'logout' => 'Saír', // Nav footer 'about' => 'Acerca de', @@ -84,19 +89,20 @@ return [ 'updatedA' => 'actualizou unha', 'sentA' => 'enviou unha', - 'followed' => 'seguiu', - 'mentioned' => 'mencionou', - 'you' => 'you', + 'followed' => 'seguiute', + 'mentioned' => 'mencionoute', + 'you' => 'ti', 'yourApplication' => 'A túa solicitude para unirte', 'applicationApproved' => 'foi aprobada!', 'applicationRejected' => 'for rexeitada. Podes volver a solicitar unirte en 6 meses.', 'dm' => 'md', - 'groupPost' => 'group post', + 'groupPost' => 'publicación grupal', 'modlog' => 'modlog', 'post' => 'publicación', 'story' => 'historia', + 'noneFound' => 'Non hai notificacións', ], 'post' => [ @@ -118,8 +124,8 @@ return [ 'followRequested' => 'Seguimento pedido', 'joined' => 'Uniuse', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Non podemos atopar ningunha colección', + 'emptyPosts' => 'Non podemos atopar ningunha publicación', ], 'menu' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Xente que podes coñecer' + 'peopleYouMayKnow' => 'Xente que podes coñecer', + + 'onboarding' => [ + 'welcome' => 'Benvido/a', + 'thisIsYourHomeFeed' => 'Esta é a túa cronoloxía de inicio, formada por publicacións en orde cronolóxica das contas que segues.', + 'letUsHelpYouFind' => 'Deixa que che axudemos a atopar xente interesante que seguir', + 'refreshFeed' => 'Actualiza a cronoloxía', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Non podemos atopar ningunha publicación con este cancelo' + ], + + 'report' => [ + 'report' => 'Denunciar', + 'selectReason' => 'Elixe unha razón', + 'reported' => 'Denunciado', + 'sendingReport' => 'Enviando a denuncia', + 'thanksMsg' => 'Grazas pola denuncia e axudarnos a manter segura a comunidade!', + 'contactAdminMsg' => 'Se queres contactar coa administración acerca desta publicación ou denuncia', ], ]; diff --git a/resources/lang/he/web.php b/resources/lang/he/web.php index 12d18e168..213dd0b2a 100644 --- a/resources/lang/he/web.php +++ b/resources/lang/he/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'שיתפו', 'shares' => 'שיתופים', 'unshare' => 'ביטול-שיתוף', + 'bookmark' => 'שמירה', 'cancel' => 'ביטול', 'copyLink' => 'העתק קישור', @@ -23,6 +24,10 @@ return [ 'other' => 'אחר', 'readMore' => 'קרא עוד', 'success' => 'הצלחה', + 'proceed' => 'המשך', + 'next' => 'הבא', + 'close' => 'סגור', + 'clickHere' => 'לחץ כאן', 'sensitive' => 'רגיש', 'sensitiveContent' => 'תוכן רגיש', @@ -84,7 +89,7 @@ return [ 'updatedA' => 'עדכנו', 'sentA' => 'שלחו', - 'followed' => 'עוקבים', + 'followed' => 'עקבו', 'mentioned' => 'ציינו', 'you' => 'אתכם', @@ -97,6 +102,7 @@ return [ 'modlog' => 'לוג מנהלים', 'post' => 'פוסט', 'story' => 'סטורי', + 'noneFound' => 'לא נמצאו התראות', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'אנשים שאתם אולי מכירים' + 'peopleYouMayKnow' => 'אנשים שאתם אולי מכירים', + + 'onboarding' => [ + 'welcome' => 'ברוכים הבאים', + 'thisIsYourHomeFeed' => 'זהו פיד הבית, פיד כרונולוגי של פוסטים מחשבונות אחריהם אתם עוקבים.', + 'letUsHelpYouFind' => 'אפשרו לנו לעזור לך למצוא אנשים מעניינים לעקוב', + 'refreshFeed' => 'ריענון הפיד', + ], ], 'hashtags' => [ 'emptyFeed' => 'לא נמצאו פוסטים עבור תיוג זה' ], + 'report' => [ + 'report' => 'דווח', + 'selectReason' => 'בחרו סיבה', + 'reported' => 'דיווח נשלח', + 'sendingReport' => 'שולח דיווח', + 'thanksMsg' => 'תודה על הדיווח, אנשים כמוכם מסעיים לשמור על בטחון קהילתנו!', + 'contactAdminMsg' => 'אם ברצונכם ליצור קשר עם מנהל לגבי הפוסט או דיווח הזה', + ], + ]; diff --git a/resources/lang/hi/web.php b/resources/lang/hi/web.php index 3844f847a..79ab3ebe4 100644 --- a/resources/lang/hi/web.php +++ b/resources/lang/hi/web.php @@ -3,146 +3,152 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'टिप्पणी करें', + 'commented' => 'टिप्पणी', + 'comments' => 'टिप्पणियाँ', + 'like' => 'रुचि', + 'liked' => 'रुचि', + 'likes' => 'रुचि', + 'share' => 'साझा करें', + 'shared' => 'साझा', + 'shares' => 'साझा', + 'unshare' => 'साझा न करें', + 'bookmark' => 'बुकमार्क', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'रद्द', + 'copyLink' => 'लिंक प्रतिलिपि', + 'delete' => 'विलोपन', + 'error' => 'त्रुटि', + 'errorMsg' => 'कुछ दोष है। कृपया पुनः प्रयास करें।', + 'oops' => 'ओह!', + 'other' => 'अन्य', + 'readMore' => 'आगे पढ़ें', + 'success' => 'सफल हुआ', + 'proceed' => 'आगे बढ़ें', + 'next' => 'अगला', + 'close' => 'बंद करें', + 'clickHere' => 'यहाँ क्लिक करें', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'संवेदनशील', + 'sensitiveContent' => 'संवेदनशील विषय वस्तु', + 'sensitiveContentWarning' => 'इसमें प्रकाशित विषय-वस्तु संवेदनशील हो सकती है।', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'उपयोग के अनुबंध', + 'privacy' => 'गोपनीयता नीति', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'खोजें', + 'admin' => 'एडमिन डैशबोर्ड', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'होम फीड', + 'localFeed' => 'लोकल फ़ीड', + 'globalFeed' => 'ग्लोबल फ़ीड', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'अन्वेषण', + 'directMessages' => 'संदेश', + 'notifications' => 'सूचनाएँ', + 'groups' => 'समूह', + 'stories' => 'कथाएँ', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'प्रोफाइल', + 'drive' => 'ड्राइव', + 'settings' => 'समायोजन', + 'compose' => 'नया बनाएँ', + 'logout' => 'लॉगआउट', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'परिज्ञान', + 'help' => 'सहायता', + 'language' => 'भाषा', + 'privacy' => 'गोपनीयता', + 'terms' => 'अनुबंध', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'पिछले संपादक पे वापस जाएँ' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'सन्देश', + 'sent' => 'भेजे गए', + 'requests' => 'निवेदन' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'आपकी पसंद', + 'commented' => 'आपकी (पोस्ट) पे कमेंट किए', + 'reacted' => 'आपके लिए प्रतिक्रिया दिये', + 'shared' => 'आपका शेयर किये', + 'tagged' => 'आपके एक (पोस्ट) में टैग किया गया', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'अपडेट करें ....', + 'sentA' => 'भेजें....', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'अनुगमन किया', + 'mentioned' => 'उल्लेख किया', + 'you' => 'आप', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'जुड़ने हेतु आपका आवेदन', + 'applicationApproved' => 'स्वीकृत किया गया', + 'applicationRejected' => 'अस्वीकृत किया गया। आप ६ मास के उपरांत पुनः आवेदन कर सकते हैं।', - 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'dm' => 'संदेश', + 'groupPost' => 'सामूहिक प्रकाशन', + 'modlog' => 'मॉडलॉग', + 'post' => 'प्रकाशन', + 'story' => 'कथा', + 'noneFound' => 'कोई नोटीफिकेसन नहीं प्राप्त हुयी', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'अनुयायियों से साझा करें', + 'shareToOther' => 'अन्यों से साझा करें', + 'noLikes' => 'अभी तक कोई रुचि नहीं', + 'uploading' => 'अपलोड हो रहा है', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => 'प्रकाशन', + 'followers' => 'फोलोअर्स', + 'following' => 'फॉलोइंग', + 'admin' => 'एडमिन', + 'collections' => 'कलेक्शनस', + 'follow' => 'फॉलो', + 'unfollow' => 'अनफॉलो', + 'editProfile' => 'प्रोफाइल सम्पादित करें', + 'followRequested' => 'रिक्वेस्टएड को फॉलो करें', + 'joined' => 'ज्वाइनड', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'हमें किसी संग्रहों का पता नहीं लग सकता', + 'emptyPosts' => 'हम किसी पोस्ट का पता नहीं लग सकता है', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', + 'viewPost' => 'पोस्ट देखें', + 'viewProfile' => 'प्रोफाइल देखें', + 'moderationTools' => 'मॉडरेशन टूल्स', + 'report' => 'रिपोर्ट', 'archive' => 'Archive', 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'embed' => 'एम्बेड', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', - 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', + 'selectOneOption' => 'किसी एक विकल्प को चुने', + 'unlistFromTimelines' => 'टाइमलाइन्स से हटाएं', + 'addCW' => 'कंटेंट चेतावनी जोड़ें', + 'removeCW' => 'चेतावनी कंटेंट हटाएं', + 'markAsSpammer' => 'स्पैमर मार्क करें', + 'markAsSpammerText' => 'अनलिस्ट + सीडबल्यु मौजूदा और भविष्य पोस्ट', + 'spam' => 'स्पैम', + 'sensitive' => 'सेंसिटिव कंटेंट', + 'abusive' => 'अपमानजनक या हानिकारक', + 'underageAccount' => 'नाबालिग अकाउंट', + 'copyrightInfringement' => 'कॉपीराईट का उल्लंघन', + 'impersonation' => 'प्रतिरूपण', 'scamOrFraud' => 'Scam or Fraud', 'confirmReport' => 'Confirm Report', 'confirmReportText' => 'Are you sure you want to report this post?', @@ -150,10 +156,10 @@ return [ 'reportSentText' => 'We have successfully received your report.', 'reportSentError' => 'There was an issue reporting this post.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', + 'modAddCWConfirm' => 'क्या यह निश्चित है कि आप प्रकाशित सामग्री के साथ विषय-वस्तु सम्बंधित चेतावनी जोड़ना चाहते हैं?', + 'modCWSuccess' => 'विषय-वस्तु सम्बंधित चेतावनी सफलता से जोड़ी गयी', + 'modRemoveCWConfirm' => 'क्या यह निश्चित है कि आप प्रकाशित सामग्री से विषय-वस्तु सम्बंधित चेतावनी हटाना चाहते हैं?', + 'modRemoveCWSuccess' => 'विषय-वस्तु सम्बंधित चेतावनी सफलता से हटाई गयी', 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', 'modUnlistSuccess' => 'Successfully unlisted post', 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/hr/web.php b/resources/lang/hr/web.php index 3844f847a..2c6a7b418 100644 --- a/resources/lang/hr/web.php +++ b/resources/lang/hr/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Shared', 'shares' => 'Shares', 'unshare' => 'Unshare', + 'bookmark' => 'Bookmark', 'cancel' => 'Cancel', 'copyLink' => 'Copy Link', @@ -23,6 +24,10 @@ return [ 'other' => 'Other', 'readMore' => 'Read more', 'success' => 'Success', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', 'sensitive' => 'Sensitive', 'sensitiveContent' => 'Sensitive Content', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/hu/web.php b/resources/lang/hu/web.php index 65a3f2bcf..f3b8e8452 100644 --- a/resources/lang/hu/web.php +++ b/resources/lang/hu/web.php @@ -7,26 +7,31 @@ return [ 'commented' => 'Hozzászólva', 'comments' => 'Hozzászólások', 'like' => 'Tetszik', - 'liked' => 'Tetszik', + 'liked' => 'Kedvelve', 'likes' => 'Kedvelések', 'share' => 'Megosztás', 'shared' => 'Megosztva', 'shares' => 'Megosztások', 'unshare' => 'Megosztás visszavonása', + 'bookmark' => 'Könyvjelző', - 'cancel' => 'Mégsem', - 'copyLink' => 'Link másolása', + 'cancel' => 'Mégse', + 'copyLink' => 'Hivatkozás másolása', 'delete' => 'Törlés', 'error' => 'Hiba', - 'errorMsg' => 'Valami hiba történt. Próbáld újra később.', + 'errorMsg' => 'Hiba történt. Próbálja újra később.', 'oops' => 'Hoppá!', 'other' => 'Egyéb', 'readMore' => 'Tovább', - 'success' => 'Siker', + 'success' => 'Sikeres', + 'proceed' => 'Folytatás', + 'next' => 'Következő', + 'close' => 'Bezárás', + 'clickHere' => 'kattintson ide', 'sensitive' => 'Érzékeny', - 'sensitiveContent' => 'Kényes tartalom', - 'sensitiveContentWarning' => 'Ez a poszt kényes tartalmat tartalmazhat', + 'sensitiveContent' => 'Érzékeny tartalom', + 'sensitiveContentWarning' => 'Ez a bejegyzés érzékeny tartalmat tartalmazhat', ], 'site' => [ @@ -39,7 +44,7 @@ return [ 'admin' => 'Admin irányítópult', // Timelines - 'homeFeed' => 'Saját idővonal', + 'homeFeed' => 'Kezdőlap', 'localFeed' => 'Helyi idővonal', 'globalFeed' => 'Globális idővonal', @@ -52,15 +57,15 @@ return [ // Self links 'profile' => 'Profil', - 'drive' => 'Meghajtó', + 'drive' => 'Tárhely', 'settings' => 'Beállítások', 'compose' => 'Új létrehozása', - 'logout' => 'Logout', + 'logout' => 'Kijelentkezés', // Nav footer 'about' => 'Rólunk', 'help' => 'Súgó', - 'language' => 'Nyelvek', + 'language' => 'Nyelv', 'privacy' => 'Adatvédelem', 'terms' => 'Feltételek', @@ -71,32 +76,33 @@ return [ 'directMessages' => [ 'inbox' => 'Bejövő', 'sent' => 'Elküldött', - 'requests' => 'Kérelmek' + 'requests' => 'Kérések' ], 'notifications' => [ - 'liked' => 'kedvelte %-t', - 'commented' => 'hozzászólt a %-hez', - 'reacted' => 'reagált a %-re', - 'shared' => 'megosztotta a %-t', + 'liked' => 'kedvelte ezt:', + 'commented' => 'hozzászólt ehhez:', + 'reacted' => 'reagált erre:', + 'shared' => 'megosztotta ezt:', 'tagged' => 'megjelölt ebben', - 'updatedA' => 'frissítette a %-t', - 'sentA' => 'küldött egy %-t', + 'updatedA' => 'frissítette ezt:', + 'sentA' => 'ezt küldte:', - 'followed' => 'követés', - 'mentioned' => 'megemlített', - 'you' => 'te', + 'followed' => 'követi', + 'mentioned' => 'megemlítette', + 'you' => 'Önt', - 'yourApplication' => 'A csatlakozási kérelmed', - 'applicationApproved' => 'elfogadva!', - 'applicationRejected' => 'elutasítva. A csatlakozást 6 hónap múlva újra kérelmezheted.', + 'yourApplication' => 'A csatlakozási kérését', + 'applicationApproved' => 'elfogadták!', + 'applicationRejected' => 'elutasították. A csatlakozást 6 hónap múlva újra kérheti.', 'dm' => 'közvetlen üzenet', - 'groupPost' => 'csoportos poszt', + 'groupPost' => 'csoportos bejegyzés', 'modlog' => 'mod napló', 'post' => 'bejegyzés', 'story' => 'történet', + 'noneFound' => 'Nincsenek értesítések', ], 'post' => [ @@ -115,28 +121,28 @@ return [ 'follow' => 'Követés', 'unfollow' => 'Követés visszavonása', 'editProfile' => 'Profil szerkesztése', - 'followRequested' => 'Követési kérelmek', + 'followRequested' => 'Követési kérések', 'joined' => 'Csatlakozott', - 'emptyCollections' => 'Úgy fest, nem található egy kollekció se', - 'emptyPosts' => 'Úgy fest, nem található egy bejegyzés se', + 'emptyCollections' => 'Úgy tűnik, hogy egy gyűjtemény sem található', + 'emptyPosts' => 'Úgy tűnik, hogy egy bejegyzés sem található', ], 'menu' => [ 'viewPost' => 'Bejegyzés megtekintése', 'viewProfile' => 'Profil megtekintése', 'moderationTools' => 'Moderációs eszközök', - 'report' => 'Bejelentés', + 'report' => 'Jelentés', 'archive' => 'Archiválás', 'unarchive' => 'Visszaállítás archívumból', 'embed' => 'Beágyazás', - 'selectOneOption' => 'Kérjük, válassz egyet az alábbi lehetőségek közül', + 'selectOneOption' => 'Válasszon egyet az alábbi lehetőségek közül', 'unlistFromTimelines' => 'A bejegyzések ne jelenjenek meg az idővonalon', 'addCW' => 'Tartalmi figyelmeztetés hozzádása', - 'removeCW' => 'Tartalmi figyelmeztetés törlése', + 'removeCW' => 'Tartalmi figyelmeztetés eltávolítása', 'markAsSpammer' => 'Megjelölés spammerként', - 'markAsSpammerText' => 'Összes jelenlegi és jövőbeli bejegyzés elrejtése és tartalom figyelmeztetéssel ellátása', + 'markAsSpammerText' => 'Összes jelenlegi és jövőbeli bejegyzés elrejtése, és tartalmi figyelmeztetéssel ellátása', 'spam' => 'Spam', 'sensitive' => 'Érzékeny tartalom', 'abusive' => 'Bántalmazó vagy káros', @@ -144,31 +150,31 @@ return [ 'copyrightInfringement' => 'Szerzői jogok megsértése', 'impersonation' => 'Megszemélyesítés', 'scamOrFraud' => 'Átverés vagy visszaélés', - 'confirmReport' => 'Bejelentés megerősítése', - 'confirmReportText' => 'Biztosan jelenteni akarod ezt a bejegyzést?', + 'confirmReport' => 'Jelentés megerősítése', + 'confirmReportText' => 'Biztos, hogy jelenti ezt a bejegyzést?', 'reportSent' => 'Jelentés elküldve!', 'reportSentText' => 'A bejelentést sikeresen fogadtuk.', 'reportSentError' => 'Probléma lépett fel a bejegyzés jelentése közben.', - 'modAddCWConfirm' => 'Biztosan tartalom figyelmeztetést akarsz erre a bejegyzésre alkalmazni?', - 'modCWSuccess' => 'Tartalom figyelmeztetés alkalmazása sikeres', - 'modRemoveCWConfirm' => 'Biztosan eltávolítod a tartalom figyelmeztetést erről a bejegyzésről?', - 'modRemoveCWSuccess' => 'Tartalom figyelmeztetés eltávolítása sikeres', - 'modUnlistConfirm' => 'Biztosan el akarod rejteni ezt a bejegyzést?', + 'modAddCWConfirm' => 'Biztos, hogy tartalmi figyelmeztetést ad hozzá ehhez a bejegyzéshez?', + 'modCWSuccess' => 'Tartalmi figyelmeztetés hozzáadása sikeres', + 'modRemoveCWConfirm' => 'Biztos, hogy eltávolítja a tartalmi figyelmeztetést erről a bejegyzésről?', + 'modRemoveCWSuccess' => 'Tartalmi figyelmeztetés eltávolítása sikeres', + 'modUnlistConfirm' => 'Biztos, hogy elrejti ezt a bejegyzést?', 'modUnlistSuccess' => 'Bejegyzés elrejtése sikeres', 'modMarkAsSpammerConfirm' => 'Biztosan spammernek jelölöd ezt a felhasználót? Az összes jelenlegi és jövőbeli bejegyzése elrejtésre kerül az idővonalon és tartalom figyelmeztetés kerül alkalmazásra.', 'modMarkAsSpammerSuccess' => 'A fiók sikeresen spammerként jelölve', 'toFollowers' => 'követők', - 'showCaption' => 'Képaláírás mutatása', + 'showCaption' => 'Felirat megjelenítése', 'showLikes' => 'Lájkok mutatása', 'compactMode' => 'Kompakt mód', - 'embedConfirmText' => 'A beillesztés használatával hozzájárulsz a mi', + 'embedConfirmText' => 'A beágyazás használatával belegyezik a következőbe:', - 'deletePostConfirm' => 'Biztosan törölni akarod ezt a bejegyzést?', - 'archivePostConfirm' => 'Biztosan archiválni akarod ezt a bejegyzést?', - 'unarchivePostConfirm' => 'Biztosan vissza akarod vonni ennek a bejegyzésnek az archiválását?', + 'deletePostConfirm' => 'Biztos, hogy törli ezt a bejegyzést?', + 'archivePostConfirm' => 'Biztos, hogy archiválja ezt a bejegyzést?', + 'unarchivePostConfirm' => 'Biztos, hogy visszavonja a bejegyzés archiválását?', ], 'story' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Emberek akiket ismerhetsz' + 'peopleYouMayKnow' => 'Emberek, akiket ismerhet', + + 'onboarding' => [ + 'welcome' => 'Üdvözöljük', + 'thisIsYourHomeFeed' => 'Ez a kezdőlap, az Ön által követett fiókok bejegyzései időrendi sorrendben.', + 'letUsHelpYouFind' => 'Keressünk érdekes, követhető embereket', + 'refreshFeed' => 'Kezdőlap frissítése', + ], ], 'hashtags' => [ 'emptyFeed' => 'Úgy tűnik nem található egy bejegyzés sem ehhez a hashtag-hez' ], + 'report' => [ + 'report' => 'Jelentés', + 'selectReason' => 'Válasszon egy indokot', + 'reported' => 'Jelentve', + 'sendingReport' => 'Jelentés elküldése', + 'thanksMsg' => 'Köszönjük a jelentést, az Önhöz hasonló emberek teszik a közösségünket biztonságossá!', + 'contactAdminMsg' => 'Ha kapcsolatba akar lépni egy adminisztrátorral a bejegyzéssel vagy jelentéssel kapcsolatban', + ], + ]; diff --git a/resources/lang/id/web.php b/resources/lang/id/web.php index be72512e7..503311036 100644 --- a/resources/lang/id/web.php +++ b/resources/lang/id/web.php @@ -3,26 +3,31 @@ return [ 'common' => [ - 'comment' => 'Komentar', + 'comment' => 'Komentari', 'commented' => 'Dikomentari', 'comments' => 'Komentar', - 'like' => 'Menyukai', + 'like' => 'Sukai', 'liked' => 'Disukai', 'likes' => 'Suka', 'share' => 'Bagikan', 'shared' => 'Dibagikan', 'shares' => 'Dibagikan', 'unshare' => 'Batalkan berbagi', + 'bookmark' => 'Penanda Buku', 'cancel' => 'Batal', 'copyLink' => 'Salin tautan', 'delete' => 'Hapus', - 'error' => 'Kesalahan', - 'errorMsg' => 'Telah terjadi kesalahan. Silakan coba lagi nanti.', + 'error' => 'Galat', + 'errorMsg' => 'Terjadi kesalahan. Silakan coba lagi nanti.', 'oops' => 'Oops!', 'other' => 'Lainnya', 'readMore' => 'Baca selengkapnya', 'success' => 'Berhasil', + 'proceed' => 'Lanjut', + 'next' => 'Berikutnya', + 'close' => 'Tutup', + 'clickHere' => 'klik di sini', 'sensitive' => 'Sensitif', 'sensitiveContent' => 'Konten Sensitif', @@ -40,21 +45,21 @@ return [ // Timelines 'homeFeed' => 'Beranda', - 'localFeed' => 'Umpan lokal', - 'globalFeed' => 'Umpan global', + 'localFeed' => 'Beranda Setempat', + 'globalFeed' => 'Beranda Global', // Core features 'discover' => 'Jelajahi', 'directMessages' => 'Pesan Langsung', - 'notifications' => 'Notifikasi', + 'notifications' => 'Pemberitahuan', 'groups' => 'Grup', 'stories' => 'Cerita', // Self links 'profile' => 'Profil', - 'drive' => 'Perangkat Keras', + 'drive' => 'Kandar', 'settings' => 'Pengaturan', - 'compose' => 'Membuat baru', + 'compose' => 'Buat', 'logout' => 'Keluar', // Nav footer @@ -65,7 +70,7 @@ return [ 'terms' => 'Ketentuan', // Temporary links - 'backToPreviousDesign' => 'Kembali ke desain sebelumnya' + 'backToPreviousDesign' => 'Kembali ke rancangan sebelumnya' ], 'directMessages' => [ @@ -77,32 +82,33 @@ return [ 'notifications' => [ 'liked' => 'menyukai', 'commented' => 'mengomentari', - 'reacted' => 'bereaksi terhadap', + 'reacted' => 'bereaksi ke', 'shared' => 'membagikan', - 'tagged' => 'menandai Anda pada sebuah', + 'tagged' => 'menandai Anda di', - 'updatedA' => 'mengupdate sebuah', - 'sentA' => 'mengirim sebuah', + 'updatedA' => 'memperbarui', + 'sentA' => 'mengirim', 'followed' => 'diikuti', 'mentioned' => 'disebut', - 'you' => 'anda', + 'you' => 'Anda', - 'yourApplication' => 'Aplikasi anda untuk mengikuti', + 'yourApplication' => 'Aplikasi Anda untuk mengikuti', 'applicationApproved' => 'telah disetujui!', - 'applicationRejected' => 'telah ditolak. Anda dapat kembali mengajukan untuk bergabung dalam 6 bulan.', + 'applicationRejected' => 'ditolak. Anda dapat mengajukan lagi untuk bergabung dalam 6 bulan.', 'dm' => 'dm', 'groupPost' => 'postingan grup', 'modlog' => 'modlog', 'post' => 'postingan', 'story' => 'cerita', + 'noneFound' => 'Tidak ditemukan pemberitahuan', ], 'post' => [ - 'shareToFollowers' => 'Membagikan kepada pengikut', - 'shareToOther' => 'Membagikan ke orang lain', - 'noLikes' => 'Belum ada yang menyukai', + 'shareToFollowers' => 'Bagikan kepada pengikut', + 'shareToOther' => 'Bagikan ke orang lain', + 'noLikes' => 'Masih belum disukai', 'uploading' => 'Mengunggah', ], @@ -110,10 +116,10 @@ return [ 'posts' => 'Postingan', 'followers' => 'Pengikut', 'following' => 'Mengikuti', - 'admin' => 'Pengelola', + 'admin' => 'Pengurus', 'collections' => 'Koleksi', 'follow' => 'Ikuti', - 'unfollow' => 'Berhenti Ikuti', + 'unfollow' => 'Berhenti ikuti', 'editProfile' => 'Ubah Profil', 'followRequested' => 'Meminta Permintaan Mengikuti', 'joined' => 'Bergabung', @@ -128,7 +134,7 @@ return [ 'moderationTools' => 'Alat Moderasi', 'report' => 'Laporkan', 'archive' => 'Arsipkan', - 'unarchive' => 'Keluarkan dari arsip', + 'unarchive' => 'Lepas arsip', 'embed' => 'Penyemat', 'selectOneOption' => 'Pilih salah satu dari opsi berikut', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Orang yang mungkin Anda kenal' + 'peopleYouMayKnow' => 'Orang yang mungkin Anda kenal', + + 'onboarding' => [ + 'welcome' => 'Selamat Datang', + 'thisIsYourHomeFeed' => 'Ini merupakan tampilan beranda Anda, tampilan dari postingan akun yang Anda ikuti secara kronologis.', + 'letUsHelpYouFind' => 'Biarkan kami membantumu menemukan orang-orang yang menarik untuk diikuti', + 'refreshFeed' => 'Segarkan laman umpan', + ], ], 'hashtags' => [ 'emptyFeed' => 'Sepertinya kami tidak dapat menemukan postingan untuk tagar ini' ], + 'report' => [ + 'report' => 'Laporkan', + 'selectReason' => 'Pilih alasan', + 'reported' => 'Terlaporkan', + 'sendingReport' => 'Mengirim laporan', + 'thanksMsg' => 'Terima kasih atas laporannya, tindakan Anda amat membantu menjaga komunitas!', + 'contactAdminMsg' => 'Jika Anda berminat menghubungi seorang administrator mengenai postingan ini atau melaporkan', + ], + ]; diff --git a/resources/lang/it/web.php b/resources/lang/it/web.php index bb023c3ca..f8f809aeb 100644 --- a/resources/lang/it/web.php +++ b/resources/lang/it/web.php @@ -6,13 +6,14 @@ return [ 'comment' => 'Commenta', 'commented' => 'Commentato', 'comments' => 'Commenti', - 'like' => 'Like', + 'like' => 'Mi piace', 'liked' => 'Like aggiunto', 'likes' => 'Tutti i Like', 'share' => 'Condividi', 'shared' => 'Condiviso', 'shares' => 'Condivisioni', 'unshare' => 'Annulla condivisione', + 'bookmark' => 'Preferiti', 'cancel' => 'Annulla', 'copyLink' => 'Copia link', @@ -23,6 +24,10 @@ return [ 'other' => 'Altro', 'readMore' => 'Leggi di più', 'success' => 'Riuscito', + 'proceed' => 'Continua', + 'next' => 'Avanti', + 'close' => 'Chiudi', + 'clickHere' => 'clicca qui', 'sensitive' => 'Sensibile', 'sensitiveContent' => 'Contenuto Sensibile', @@ -76,17 +81,17 @@ return [ 'notifications' => [ 'liked' => 'ha messo like a', - 'commented' => 'ha commentato', + 'commented' => 'ha commentato il tuo', 'reacted' => 'ha reagito a', - 'shared' => 'ha condiviso', + 'shared' => 'ha condiviso il tuo', 'tagged' => 'ti ha taggato in', 'updatedA' => 'ha aggiornato un', 'sentA' => 'ha inviato un', - 'followed' => 'stai seguendo', + 'followed' => 'sta seguendo', 'mentioned' => 'menzionato', - 'you' => 'tu', + 'you' => 'te', 'yourApplication' => 'La tua candidatura per unirti', 'applicationApproved' => 'è stata approvata!', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'storia', + 'noneFound' => 'Non ci sono notifiche', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Persone che potresti conoscere' + 'peopleYouMayKnow' => 'Persone che potresti conoscere', + + 'onboarding' => [ + 'welcome' => 'Benvenuto', + 'thisIsYourHomeFeed' => 'Questo è il tuo feed principale, un feed in ordine cronologico dei post da account che segui.', + 'letUsHelpYouFind' => 'Ti aiutiamo a trovare delle persone interessanti da seguire', + 'refreshFeed' => 'Aggiorna il mio feed', + ], ], 'hashtags' => [ - 'emptyFeed' => 'Non riusciamo a trovare alcun post con questo hashtag' + 'emptyFeed' => 'Non riusciamo a trovare nessun post con questo hashtag' + ], + + 'report' => [ + 'report' => 'Segnala', + 'selectReason' => 'Seleziona un motivo', + 'reported' => 'Segnalato', + 'sendingReport' => 'Invio della segnalazione', + 'thanksMsg' => 'Grazie per la segnalazione, le persone come te aiutano a mantenere la comunità al sicuro!', + 'contactAdminMsg' => 'Se desideri contattare un amministratore per questo post o rapporto', ], ]; diff --git a/resources/lang/ja/web.php b/resources/lang/ja/web.php index 430ae1201..c440ebeb9 100644 --- a/resources/lang/ja/web.php +++ b/resources/lang/ja/web.php @@ -13,6 +13,7 @@ return [ 'shared' => '共有されました', 'shares' => '共有', 'unshare' => '共有解除', + 'bookmark' => 'ブックマーク', 'cancel' => 'キャンセル', 'copyLink' => 'リンクをコピー', @@ -23,6 +24,10 @@ return [ 'other' => 'その他', 'readMore' => 'もっと読む', 'success' => '成功しました', + 'proceed' => '続行', + 'next' => '次へ', + 'close' => '閉じる', + 'clickHere' => 'ここをクリック', 'sensitive' => 'センシティブ', 'sensitiveContent' => 'センシティブなコンテンツ', @@ -75,28 +80,29 @@ return [ ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'さんが次をいいねしました:', + 'commented' => 'さんが次にコメントしました:', + 'reacted' => 'さんが次に反応しました:', + 'shared' => 'さんが次を共有しました:', + 'tagged' => 'さんが次にあなたをタグ付けしました:', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'さんが次を更新しました:', + 'sentA' => 'さんが次を送信しました:', - 'followed' => 'followed', - 'mentioned' => 'mentioned', + 'followed' => 'さんがフォローしました:', + 'mentioned' => 'さんが返信しました:', 'you' => 'あなた', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => '参加するアプリケーション', + 'applicationApproved' => 'が承認されました!', + 'applicationRejected' => 'は拒否されました。6ヶ月後に再度参加を申請できます。', 'dm' => 'dm', 'groupPost' => 'グループの投稿', 'modlog' => 'モデレーションログ', 'post' => '投稿', 'story' => 'ストーリー', + 'noneFound' => '通知はありません', ], 'post' => [ @@ -159,12 +165,12 @@ return [ 'modMarkAsSpammerConfirm' => 'このユーザーをスパムとして登録していいですか?既存のまた、今後の投稿はすべてタイムラインに表示されず、コンテンツ警告が適用されます。', 'modMarkAsSpammerSuccess' => 'アカウントをスパムとしてマークしました', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'フォロワー向け', 'showCaption' => '説明を表示', 'showLikes' => 'いいねを表示', 'compactMode' => 'コンパクトモード', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'embedConfirmText' => 'この埋め込みを利用する事で、あなたは次に同意したとみなされます:', 'deletePostConfirm' => '本当にこの投稿を削除しますか?', 'archivePostConfirm' => '本当にこの投稿をアーカイブしますか?', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => '知り合いかも' + 'peopleYouMayKnow' => '知り合いかも', + + 'onboarding' => [ + 'welcome' => 'ようこそ', + 'thisIsYourHomeFeed' => 'これはあなたのフォームフィードです、フォローしているアカウントからの投稿が時系列で表示されます。', + 'letUsHelpYouFind' => '興味のある人をフォローするお手伝いをします', + 'refreshFeed' => 'フィードをリフレッシュ', + ], ], 'hashtags' => [ 'emptyFeed' => 'このハッシュタグの投稿が見つかりませんでした' ], + 'report' => [ + 'report' => '報告', + 'selectReason' => '理由を選択してください', + 'reported' => '報告済み', + 'sendingReport' => '報告を送信中', + 'thanksMsg' => '報告ありがとうございます、あなたのような人々が私達のコミュニティーを安全に保ちます!', + 'contactAdminMsg' => 'この投稿または報告について管理者に問い合わせたい場合', + ], + ]; diff --git a/resources/lang/ko/web.php b/resources/lang/ko/web.php index de0e4b2eb..af2451599 100644 --- a/resources/lang/ko/web.php +++ b/resources/lang/ko/web.php @@ -4,25 +4,30 @@ return [ 'common' => [ 'comment' => '댓글', - 'commented' => 'Commented', - 'comments' => 'Comments', + 'commented' => '댓글 씀', + 'comments' => '댓글', 'like' => '좋아요', - 'liked' => 'Liked', - 'likes' => 'Likes', + 'liked' => '좋아함', + 'likes' => '좋아요', 'share' => '공유', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'shared' => '공유함', + 'shares' => '공유하기', + 'unshare' => '공유 해제', + 'bookmark' => '북마크', 'cancel' => '취소', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', + 'copyLink' => '링크 복사', + 'delete' => '지우기', 'error' => '오류', 'errorMsg' => '문제가 발생했습니다. 나중에 다시 시도하세요.', 'oops' => '이런!', - 'other' => '기타', + 'other' => '등', 'readMore' => '더보기', 'success' => '성공', + 'proceed' => '진행', + 'next' => '다음', + 'close' => '닫기', + 'clickHere' => '여기를 클릭', 'sensitive' => '민감함 ', 'sensitiveContent' => '민감한 내용', @@ -44,18 +49,18 @@ return [ 'globalFeed' => '글로벌 피드', // Core features - 'discover' => '발견하기', + 'discover' => '발견', 'directMessages' => '쪽지', 'notifications' => '알림', 'groups' => '그룹', - 'stories' => '스토리', + 'stories' => '이야기', // Self links 'profile' => '프로필', 'drive' => '드라이브', 'settings' => '설정', 'compose' => '새로 만들기', - 'logout' => 'Logout', + 'logout' => '로그아웃', // Nav footer 'about' => '정보', @@ -65,122 +70,140 @@ return [ 'terms' => '약관', // Temporary links - 'backToPreviousDesign' => '이전 디자인으로 돌아가기' + 'backToPreviousDesign' => '이전 디자인으로 되돌리기' ], 'directMessages' => [ - 'inbox' => '받은 편지함', + 'inbox' => '받은쪽지함', 'sent' => '보냄', 'requests' => '요청 내역' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => '내가 좋아한', + 'commented' => '내 댓글', + 'reacted' => '내 반응', + 'shared' => '내가 공유함', + 'tagged' => '내가 태그됨', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => '업데이트', + 'sentA' => '보낸 이', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => '님이 팔로우', + 'mentioned' => ' 님으로부터의 멘션', + 'you' => '나', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => '가입 신청서 작성', + 'applicationApproved' => '승인되었습니다!', + 'applicationRejected' => '이 반려되었습니다. 6개월 후에 다시 재신청할 수 있습니다.', - 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'dm' => 'DM', + 'groupPost' => '묶어 발행', + 'modlog' => '모드로그', + 'post' => '발행', + 'story' => '이야기', + 'noneFound' => '알림을 찾을 수 없음', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => '팔로워에게 공유하기', + 'shareToOther' => '다른 곳에 공유하기', + 'noLikes' => '아직 좋아요 없음', + 'uploading' => '업로드 중', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => '발행물', + 'followers' => '팔로워', + 'following' => '팔로잉', + 'admin' => '관리자', + 'collections' => '컬렉션', + 'follow' => '팔로우', + 'unfollow' => '언팔로우', + 'editProfile' => '프로필 편집', + 'followRequested' => '팔로우 요청함', + 'joined' => '가입함', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => '아무 컬렉션도 보이지 않습니다.', + 'emptyPosts' => '아무 발행물도 보이지 않습니다.', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'viewPost' => '발행물 보기', + 'viewProfile' => '프로필 보기', + 'moderationTools' => '중재 도구', + 'report' => '신고', + 'archive' => '보관', + 'unarchive' => '보관 해제', + 'embed' => '임베드', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'selectOneOption' => '다음의 선택사항 중 하나를 고르세요.', + 'unlistFromTimelines' => '타임라인에서 제외', + 'addCW' => '내용 경고 붙이기', + 'removeCW' => '내용 경고 떼기', + 'markAsSpammer' => '스패머로 표시', + 'markAsSpammerText' => '현존 및 미래 발행물에 미등재 및 내용 경고', 'spam' => '스팸', 'sensitive' => '민감한 내용', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', + 'abusive' => '가학 또는 유해', + 'underageAccount' => '미성년 계정', + 'copyrightInfringement' => '저작권 위반', + 'impersonation' => '사칭', + 'scamOrFraud' => '스팸 또는 사기', + 'confirmReport' => '신고 확인', + 'confirmReportText' => '이 게시물을 제보할까요?', + 'reportSent' => '신고 발송!', + 'reportSentText' => '제보를 잘 수령하였습니다.', 'reportSentError' => 'There was an issue reporting this post.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', + 'modAddCWConfirm' => '이 게시물이 내용 경고를 붙일까요?', + 'modCWSuccess' => '내용경고를 붙임', 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', + 'modRemoveCWSuccess' => '내용경고를 뗌', 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modUnlistSuccess' => '발행물 미등재 처리를 마쳤습니다.', + 'modMarkAsSpammerConfirm' => '해당 이용자를 정말 스패머로 표시할까요? +내용 경고가 적용되며 이전과 이후의 모든 발행물이 타임라인에 미등재됩니다.', + 'modMarkAsSpammerSuccess' => '스패머 계정으로 표시함', - 'toFollowers' => 'to Followers', + 'toFollowers' => '팔로워', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', + 'showCaption' => '자막 보이기', + 'showLikes' => '좋아요 보기', + 'compactMode' => '콤팩트 모드', 'embedConfirmText' => 'By using this embed, you agree to our', 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'archivePostConfirm' => '이 발행물을 정말 보관할까요?', + 'unarchivePostConfirm' => '이 발행물을 정말 보관 취소할까요?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => '이야기 추가' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => '알 수도 있는 사람', + + 'onboarding' => [ + 'welcome' => '반가워요', + 'thisIsYourHomeFeed' => '이곳은 팔로우 한 게시물을 시간 순으로 보여주는 홈 피드예요.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => '내 피드 새로 고침', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => '신고', + 'selectReason' => '이유 고르기', + 'reported' => '신고 마침', + 'sendingReport' => '신고 보내는 중', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/me/web.php b/resources/lang/me/web.php new file mode 100644 index 000000000..2c6a7b418 --- /dev/null +++ b/resources/lang/me/web.php @@ -0,0 +1,208 @@ + [ + 'comment' => 'Comment', + 'commented' => 'Commented', + 'comments' => 'Comments', + 'like' => 'Like', + 'liked' => 'Liked', + 'likes' => 'Likes', + 'share' => 'Share', + 'shared' => 'Shared', + 'shares' => 'Shares', + 'unshare' => 'Unshare', + 'bookmark' => 'Bookmark', + + 'cancel' => 'Cancel', + 'copyLink' => 'Copy Link', + 'delete' => 'Delete', + 'error' => 'Error', + 'errorMsg' => 'Something went wrong. Please try again later.', + 'oops' => 'Oops!', + 'other' => 'Other', + 'readMore' => 'Read more', + 'success' => 'Success', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', + + 'sensitive' => 'Sensitive', + 'sensitiveContent' => 'Sensitive Content', + 'sensitiveContentWarning' => 'This post may contain sensitive content', + ], + + 'site' => [ + 'terms' => 'Terms of Use', + 'privacy' => 'Privacy Policy', + ], + + 'navmenu' => [ + 'search' => 'Search', + 'admin' => 'Admin Dashboard', + + // Timelines + 'homeFeed' => 'Home Feed', + 'localFeed' => 'Local Feed', + 'globalFeed' => 'Global Feed', + + // Core features + 'discover' => 'Discover', + 'directMessages' => 'Direct Messages', + 'notifications' => 'Notifications', + 'groups' => 'Groups', + 'stories' => 'Stories', + + // Self links + 'profile' => 'Profile', + 'drive' => 'Drive', + 'settings' => 'Settings', + 'compose' => 'Create New', + 'logout' => 'Logout', + + // Nav footer + 'about' => 'About', + 'help' => 'Help', + 'language' => 'Language', + 'privacy' => 'Privacy', + 'terms' => 'Terms', + + // Temporary links + 'backToPreviousDesign' => 'Go back to previous design' + ], + + 'directMessages' => [ + 'inbox' => 'Inbox', + 'sent' => 'Sent', + 'requests' => 'Requests' + ], + + 'notifications' => [ + 'liked' => 'liked your', + 'commented' => 'commented on your', + 'reacted' => 'reacted to your', + 'shared' => 'shared your', + 'tagged' => 'tagged you in a', + + 'updatedA' => 'updated a', + 'sentA' => 'sent a', + + 'followed' => 'followed', + 'mentioned' => 'mentioned', + 'you' => 'you', + + 'yourApplication' => 'Your application to join', + 'applicationApproved' => 'was approved!', + 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + + 'dm' => 'dm', + 'groupPost' => 'group post', + 'modlog' => 'modlog', + 'post' => 'post', + 'story' => 'story', + 'noneFound' => 'No notifications found', + ], + + 'post' => [ + 'shareToFollowers' => 'Share to followers', + 'shareToOther' => 'Share to other', + 'noLikes' => 'No likes yet', + 'uploading' => 'Uploading', + ], + + 'profile' => [ + 'posts' => 'Posts', + 'followers' => 'Followers', + 'following' => 'Following', + 'admin' => 'Admin', + 'collections' => 'Collections', + 'follow' => 'Follow', + 'unfollow' => 'Unfollow', + 'editProfile' => 'Edit Profile', + 'followRequested' => 'Follow Requested', + 'joined' => 'Joined', + + 'emptyCollections' => 'We can\'t seem to find any collections', + 'emptyPosts' => 'We can\'t seem to find any posts', + ], + + 'menu' => [ + 'viewPost' => 'View Post', + 'viewProfile' => 'View Profile', + 'moderationTools' => 'Moderation Tools', + 'report' => 'Report', + 'archive' => 'Archive', + 'unarchive' => 'Unarchive', + 'embed' => 'Embed', + + 'selectOneOption' => 'Select one of the following options', + 'unlistFromTimelines' => 'Unlist from Timelines', + 'addCW' => 'Add Content Warning', + 'removeCW' => 'Remove Content Warning', + 'markAsSpammer' => 'Mark as Spammer', + 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'spam' => 'Spam', + 'sensitive' => 'Sensitive Content', + 'abusive' => 'Abusive or Harmful', + 'underageAccount' => 'Underage Account', + 'copyrightInfringement' => 'Copyright Infringement', + 'impersonation' => 'Impersonation', + 'scamOrFraud' => 'Scam or Fraud', + 'confirmReport' => 'Confirm Report', + 'confirmReportText' => 'Are you sure you want to report this post?', + 'reportSent' => 'Report Sent!', + 'reportSentText' => 'We have successfully received your report.', + 'reportSentError' => 'There was an issue reporting this post.', + + 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', + 'modCWSuccess' => 'Successfully added content warning', + 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', + 'modRemoveCWSuccess' => 'Successfully removed content warning', + 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', + 'modUnlistSuccess' => 'Successfully unlisted post', + 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', + 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + + 'toFollowers' => 'to Followers', + + 'showCaption' => 'Show Caption', + 'showLikes' => 'Show Likes', + 'compactMode' => 'Compact Mode', + 'embedConfirmText' => 'By using this embed, you agree to our', + + 'deletePostConfirm' => 'Are you sure you want to delete this post?', + 'archivePostConfirm' => 'Are you sure you want to archive this post?', + 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + ], + + 'story' => [ + 'add' => 'Add Story' + ], + + 'timeline' => [ + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], + ], + + 'hashtags' => [ + 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + ], + + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + +]; diff --git a/resources/lang/mk/web.php b/resources/lang/mk/web.php index 3844f847a..2c6a7b418 100644 --- a/resources/lang/mk/web.php +++ b/resources/lang/mk/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Shared', 'shares' => 'Shares', 'unshare' => 'Unshare', + 'bookmark' => 'Bookmark', 'cancel' => 'Cancel', 'copyLink' => 'Copy Link', @@ -23,6 +24,10 @@ return [ 'other' => 'Other', 'readMore' => 'Read more', 'success' => 'Success', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', 'sensitive' => 'Sensitive', 'sensitiveContent' => 'Sensitive Content', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/nl/web.php b/resources/lang/nl/web.php index cdb48207e..ba0f34205 100644 --- a/resources/lang/nl/web.php +++ b/resources/lang/nl/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Gedeeld', 'shares' => 'Gedeeld door', 'unshare' => 'Niet meer delen', + 'bookmark' => 'Bladwijzer', 'cancel' => 'Annuleren', 'copyLink' => 'Link kopiëren', @@ -23,6 +24,10 @@ return [ 'other' => 'Anders', 'readMore' => 'Lees meer', 'success' => 'Geslaagd', + 'proceed' => 'Doorgaan', + 'next' => 'Volgende', + 'close' => 'Sluiten', + 'clickHere' => 'klik hier', 'sensitive' => 'Gevoelig', 'sensitiveContent' => 'Gevoelige inhoud', @@ -55,7 +60,7 @@ return [ 'drive' => 'Drive', 'settings' => 'Instellingen', 'compose' => 'Nieuwe aanmaken', - 'logout' => 'Logout', + 'logout' => 'Uitloggen', // Nav footer 'about' => 'Over', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlogboek', 'post' => 'post', 'story' => 'verhaal', + 'noneFound' => 'Geen notificaties gevonden', ], 'post' => [ @@ -118,8 +124,8 @@ return [ 'followRequested' => 'Volgen verzocht', 'joined' => 'Lid geworden', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'We kunnen geen collecties vinden', + 'emptyPosts' => 'We kunnen geen posts vinden', ], 'menu' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Mensen die u misschien kent' + 'peopleYouMayKnow' => 'Mensen die u misschien kent', + + 'onboarding' => [ + 'welcome' => 'Welkom', + 'thisIsYourHomeFeed' => 'Dit is je thuisfeed, een chronologische feed van accounts die je volgt.', + 'letUsHelpYouFind' => 'Laat ons u helpen interessante mensen te vinden om te volgen', + 'refreshFeed' => 'Mijn feed vernieuwen', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'We kunnen geen berichten voor deze hashtag vinden' + ], + + 'report' => [ + 'report' => 'Rapporteren', + 'selectReason' => 'Een reden selecteren', + 'reported' => 'Gerapporteerd', + 'sendingReport' => 'Rapport versturen', + 'thanksMsg' => 'Bedankt voor het rapport, mensen zoals u helpen onze gemeenschap veilig te houden!', + 'contactAdminMsg' => 'Als u over dit bericht of rapport contact wilt opnemen met een beheerder', ], ]; diff --git a/resources/lang/no/web.php b/resources/lang/no/web.php index 3844f847a..926e730c0 100644 --- a/resources/lang/no/web.php +++ b/resources/lang/no/web.php @@ -3,184 +3,206 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'Kommenter', + 'commented' => 'Kommenterte', + 'comments' => 'Kommentarer', + 'like' => 'Lik', + 'liked' => 'Likt', + 'likes' => 'Liker', + 'share' => 'Del', + 'shared' => 'Delt', + 'shares' => 'Delinger', + 'unshare' => 'Fjern deling', + 'bookmark' => 'Bookmerk', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'Avbryt', + 'copyLink' => 'Kopier lenke', + 'delete' => 'Slett', + 'error' => 'Feil', + 'errorMsg' => 'Noe gikk galt. Vennligst prøv igjen senere.', + 'oops' => 'Oi sann!', + 'other' => 'Annet', + 'readMore' => 'Les mer', + 'success' => 'Suksess', + 'proceed' => 'Fortsett', + 'next' => 'Neste', + 'close' => 'Lukk', + 'clickHere' => 'klikk her', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Sensitivt', + 'sensitiveContent' => 'Sensitivt innhold', + 'sensitiveContentWarning' => 'Dette innlegget kan inneholde sensitivt innhold', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Bruksvilkår', + 'privacy' => 'Retningslinjer for personvern', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'Søk', + 'admin' => 'Administrasjonspanel', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'Hjemstrøm', + 'localFeed' => 'Lokal strøm', + 'globalFeed' => 'Global strøm', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'Utforsk', + 'directMessages' => 'Direktemeldinger', + 'notifications' => 'Notifikasjoner', + 'groups' => 'Grupper', + 'stories' => 'Historier', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'Profil', + 'drive' => 'Drev', + 'settings' => 'Innstillinger', + 'compose' => 'Opprett ny', + 'logout' => 'Logg ut', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'Om', + 'help' => 'Hjelp', + 'language' => 'Språk', + 'privacy' => 'Personvern', + 'terms' => 'Vilkår', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Gå tilbake til forrige design' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'Innboks', + 'sent' => 'Sendt', + 'requests' => 'Forespørsler' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'likte din', + 'commented' => 'kommenterte din', + 'reacted' => 'reagerte på din', + 'shared' => 'delte din', + 'tagged' => 'tagget deg i en', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'oppdaterte en', + 'sentA' => 'sendte en', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'fulgte', + 'mentioned' => 'nevnte', + 'you' => 'deg', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'Din deltagelsessøknad', + 'applicationApproved' => 'ble godkjent!', + 'applicationRejected' => 'ble avvist. Du san søke på nytt om 6 måneder.', 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'groupPost' => 'gruppeinnlegg', + 'modlog' => 'modlogg', + 'post' => 'innlegg', + 'story' => 'historie', + 'noneFound' => 'Ingen nye varsler', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'Del med følgere', + 'shareToOther' => 'Del til andre', + 'noLikes' => 'Ingen liker ennå', + 'uploading' => 'Laster opp', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => 'Innlegg', + 'followers' => 'Følgere', + 'following' => 'Følger', + 'admin' => 'Administrer', + 'collections' => 'Samlinger', + 'follow' => 'Følg', + 'unfollow' => 'Slutt å følge', + 'editProfile' => 'Rediger profil', + 'followRequested' => 'Følgeforespørsler', + 'joined' => 'Ble med', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Vi kunne ikke finne noen samlinger', + 'emptyPosts' => 'Vi kunne ikke finne noen innlegg', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'viewPost' => 'Vis innlegg', + 'viewProfile' => 'Vis profil', + 'moderationTools' => 'Modereringsverktøy', + 'report' => 'Rapporter', + 'archive' => 'Arkiver', + 'unarchive' => 'Fjern fra arkiv', + 'embed' => 'Bygg inn', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'selectOneOption' => 'Velg ett av følgende alternativer', + 'unlistFromTimelines' => 'Fjern fra tidslinjer', + 'addCW' => 'Legg til innholdsvarsel', + 'removeCW' => 'Fjern innholdsvarsel', + 'markAsSpammer' => 'Marker som spammer', + 'markAsSpammerText' => 'Avlisting + innholdsvarsel på eksisterende og fremtidige innlegg', 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', + 'sensitive' => 'Sensitivt innhold', + 'abusive' => 'Krenkende eller skadelig', + 'underageAccount' => 'Mindreårig konto', + 'copyrightInfringement' => 'Brudd på opphavsrett', + 'impersonation' => 'Imitering', + 'scamOrFraud' => 'Søppelpost eller svindel', + 'confirmReport' => 'Bekreft rapport', + 'confirmReportText' => 'Er du sikker på at du vil rapportere dette innlegget?', + 'reportSent' => 'Rapporten er sendt!', + 'reportSentText' => 'Vi har mottatt din rapport.', + 'reportSentError' => 'Der var et problem med å rapportere dette innlegget.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modAddCWConfirm' => 'Er du sikker på at du vil legge til et innholdsvarsel på dette innlegget?', + 'modCWSuccess' => 'Innholdsvarsel ble lagt til', + 'modRemoveCWConfirm' => 'Er du sikker på at du vil fjerne innholdsvarselet for dette innlegget?', + 'modRemoveCWSuccess' => 'Innholdsvarsel ble fjernet', + 'modUnlistConfirm' => 'Er du sikker på at du vil avliste dette innlegget?', + 'modUnlistSuccess' => 'Avlistet innlegget', + 'modMarkAsSpammerConfirm' => 'Er du sikker på at du vil markere denne brukeren som en spammer? Alle eksisterende og fremtidige innlegg vil bli avlistet på tidslinjer og et innholdsvarsel vil bli lagt til.', + 'modMarkAsSpammerSuccess' => 'Vellykket markering av konto som spammer', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'til følgere', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showCaption' => 'Vis bildetekst', + 'showLikes' => 'Vis liker', + 'compactMode' => 'Kompaktmodus', + 'embedConfirmText' => 'Ved å bruke denne innbakingen, godtar du vår', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'deletePostConfirm' => 'Er du sikker på at du vil slette dette innlegget?', + 'archivePostConfirm' => 'Er du sikker på at du vil arkiveren dette innlegget?', + 'unarchivePostConfirm' => 'Er du sikker på at vil hente dette innlegget tilbake fra arkivet?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => 'Legg til historie' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'Folk du kanskje kjenner', + + 'onboarding' => [ + 'welcome' => 'Velkommen', + 'thisIsYourHomeFeed' => 'Dette er din hjemstrøm, en kronologisk strøm av innlegg fra konti du følger.', + 'letUsHelpYouFind' => 'La oss hjelpe deg å finne noen interessante folk å følge', + 'refreshFeed' => 'Oppdater strømmen min', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Vi kunne ikke finne noen innlegg for denne emneknaggen' + ], + + 'report' => [ + 'report' => 'Rapporter', + 'selectReason' => 'Velg en årsak', + 'reported' => 'Rapportert', + 'sendingReport' => 'Sender rapport', + 'thanksMsg' => 'Takk for at du rapporte, folk som deg hjelper med å holde fellesskapet trygt!', + 'contactAdminMsg' => 'Om du ønsker å kontakte en administrator for dette innlegget eller denne rapporten', ], ]; diff --git a/resources/lang/oc/web.php b/resources/lang/oc/web.php index 68f0d6cb7..4256f7d7f 100644 --- a/resources/lang/oc/web.php +++ b/resources/lang/oc/web.php @@ -4,73 +4,78 @@ return [ 'common' => [ 'comment' => 'Comentar', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'commented' => 'Comentat', + 'comments' => 'Comentaris', + 'like' => 'Agradar', + 'liked' => 'Agradat', + 'likes' => 'Aquò m\'agrada', + 'share' => 'Partejar', + 'shared' => 'Partejat', + 'shares' => 'Partages', + 'unshare' => 'Partejar pas mai', + 'bookmark' => 'Marcapaginas', 'cancel' => 'Anullar', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', + 'copyLink' => 'Copiar lo ligam', + 'delete' => 'Suprimir', 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'errorMsg' => 'Una error es subrevenguda. Volgatz tornar ensajar mai tard.', + 'oops' => 'Ops!', + 'other' => 'Autre', + 'readMore' => 'Ne legir mai', + 'success' => 'Capitada', + 'proceed' => 'Contunhar', + 'next' => 'Seguent', + 'close' => 'Tampar', + 'clickHere' => 'clicatz aicí', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Sensible', + 'sensitiveContent' => 'Contengut sensible', + 'sensitiveContentWarning' => 'Lo contengut d\'aquela publicacion poiriá èsser sensibla', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Condicions d\'utilizacion', + 'privacy' => 'Politica de confidencialitat', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'Cercar', + 'admin' => 'Tablèu de mandas d\'administracion', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', + 'homeFeed' => 'Flux principal', + 'localFeed' => 'Flux local', 'globalFeed' => 'Global Feed', // Core features - 'discover' => 'Discover', + 'discover' => 'Descobrir', 'directMessages' => 'Direct Messages', 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'groups' => 'Grops', + 'stories' => 'Contes', // Self links - 'profile' => 'Profile', + 'profile' => 'Perfil', 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'settings' => 'Paramètres', + 'compose' => 'Ajustar una novèla', + 'logout' => '', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'A prepaus', + 'help' => 'Ajuda', + 'language' => 'Lenga', + 'privacy' => 'Confidencialitat', + 'terms' => 'Condicions d’utilizacion', // Temporary links 'backToPreviousDesign' => 'Go back to previous design' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', + 'inbox' => 'Dintrant', + 'sent' => 'Mandats', 'requests' => 'Requests' ], @@ -81,22 +86,23 @@ return [ 'shared' => 'shared your', 'tagged' => 'tagged you in a', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'actualizat un', + 'sentA' => 'a enviat un', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 's\'es abonat a', + 'mentioned' => 'a mencionat', + 'you' => 'vos', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'Vòstra candidatura a rejónher', + 'applicationApproved' => 'es estada aprovada!', + 'applicationRejected' => 'es estada regetada.', - 'dm' => 'dm', + 'dm' => 'messatge privat', 'groupPost' => 'group post', 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -134,7 +140,7 @@ return [ 'selectOneOption' => 'Select one of the following options', 'unlistFromTimelines' => 'Unlist from Timelines', 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', + 'removeCW' => 'Lo tèxte es rescondut jos l’avertiment', 'markAsSpammer' => 'Mark as Spammer', 'markAsSpammerText' => 'Unlist + CW existing and future posts', 'spam' => 'Spam', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Personas que coneissètz benlèu' + 'peopleYouMayKnow' => 'Personas que coneissètz benlèu', + + 'onboarding' => [ + 'welcome' => 'Benvengut', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/pl/web.php b/resources/lang/pl/web.php index 0d4a914b2..300759103 100644 --- a/resources/lang/pl/web.php +++ b/resources/lang/pl/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Udostępnione', 'shares' => 'Udostępnione', 'unshare' => 'Anuluj udostępnianie', + 'bookmark' => 'Zakładka', 'cancel' => 'Anuluj', 'copyLink' => 'Kopiuj Link', @@ -23,6 +24,10 @@ return [ 'other' => 'Inne', 'readMore' => 'Czytaj więcej', 'success' => 'Sukces', + 'proceed' => 'Kontynuuj', + 'next' => 'Następny', + 'close' => 'Zamknij', + 'clickHere' => 'kliknij tutaj', 'sensitive' => 'Wrażliwe', 'sensitiveContent' => 'Treść wrażliwa', @@ -55,7 +60,7 @@ return [ 'drive' => 'Dysk', 'settings' => 'Ustawienia', 'compose' => 'Utwórz nowy', - 'logout' => 'Logout', + 'logout' => 'Wyloguj się', // Nav footer 'about' => 'O nas', @@ -97,6 +102,7 @@ return [ 'modlog' => 'logi', 'post' => 'post', 'story' => 'opowieść', + 'noneFound' => 'Brak powiadomień', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Ludzie, których możesz znać' + 'peopleYouMayKnow' => 'Ludzie, których możesz znać', + + 'onboarding' => [ + 'welcome' => 'Witaj', + 'thisIsYourHomeFeed' => 'To jest Twój kanał główny, chronologiczny kanał wpisów z kont, które śledzisz.', + 'letUsHelpYouFind' => 'Pomożemy Ci znaleźć ciekawych ludzi do obserwowania', + 'refreshFeed' => 'Odśwież mój kanał', + ], ], 'hashtags' => [ 'emptyFeed' => 'Nie możemy znaleźć żadnych postów dla tego hasztaga' ], + 'report' => [ + 'report' => 'Zgłoś', + 'selectReason' => 'Wybierz przyczynę', + 'reported' => 'Zgłoszono', + 'sendingReport' => 'Wysyłanie zgłoszenia', + 'thanksMsg' => 'Dziękujemy za zgłoszenie, ludzie tacy jak ty pomagają chronić naszą społeczność!', + 'contactAdminMsg' => 'Jeśli chcesz skontaktować się z administratorem w sprawie tego wpisu lub go zgłosić', + ], + ]; diff --git a/resources/lang/pt/web.php b/resources/lang/pt/web.php index 67e7bd45f..bd8f275ef 100644 --- a/resources/lang/pt/web.php +++ b/resources/lang/pt/web.php @@ -6,27 +6,32 @@ return [ 'comment' => 'Comentar', 'commented' => 'Comentado', 'comments' => 'Comentários', - 'like' => 'Curtir', - 'liked' => 'Curtiu', - 'likes' => 'Curtidas', - 'share' => 'Compartilhar', - 'shared' => 'Compartilhado', - 'shares' => 'Compartilhamentos', - 'unshare' => 'Desfazer compartilhamento', + 'like' => 'Gosto', + 'liked' => 'Gostei', + 'likes' => 'Gostos', + 'share' => 'Partilhar', + 'shared' => 'Partilhado', + 'shares' => 'Partilhas', + 'unshare' => 'Despartilhar', + 'bookmark' => 'Favorito', 'cancel' => 'Cancelar', 'copyLink' => 'Copiar link', - 'delete' => 'Apagar', + 'delete' => 'Eliminar', 'error' => 'Erro', - 'errorMsg' => 'Algo deu errado. Por favor, tente novamente mais tarde.', - 'oops' => 'Opa!', + 'errorMsg' => 'Algo correu mal. Por favor, tente novamente mais tarde.', + 'oops' => 'Oops!', 'other' => 'Outro', - 'readMore' => 'Leia mais', + 'readMore' => 'Ler mais', 'success' => 'Sucesso', + 'proceed' => 'Continuar', + 'next' => 'Seguinte', + 'close' => 'Fechar', + 'clickHere' => 'clique aqui', 'sensitive' => 'Sensível', 'sensitiveContent' => 'Conteúdo sensível', - 'sensitiveContentWarning' => 'Esta publicação pode conter conteúdo inapropriado', + 'sensitiveContentWarning' => 'Este post pode conter conteúdo sensível', ], 'site' => [ @@ -35,27 +40,27 @@ return [ ], 'navmenu' => [ - 'search' => 'Pesquisar', - 'admin' => 'Painel do Administrador', + 'search' => 'Pesquisa', + 'admin' => 'Painel de Administração', // Timelines - 'homeFeed' => 'Página inicial', + 'homeFeed' => 'Inicio', 'localFeed' => 'Feed local', 'globalFeed' => 'Feed global', // Core features - 'discover' => 'Explorar', - 'directMessages' => 'Mensagens privadas', + 'discover' => 'Descobrir', + 'directMessages' => 'Mensagens Diretas', 'notifications' => 'Notificações', 'groups' => 'Grupos', - 'stories' => 'Histórias', + 'stories' => 'Stories', // Self links 'profile' => 'Perfil', - 'drive' => 'Mídias', - 'settings' => 'Configurações', + 'drive' => 'Disco', + 'settings' => 'Definições', 'compose' => 'Criar novo', - 'logout' => 'Sair', + 'logout' => 'Terminar Sessão', // Nav footer 'about' => 'Sobre', @@ -65,122 +70,139 @@ return [ 'terms' => 'Termos', // Temporary links - 'backToPreviousDesign' => 'Voltar ao design anterior' + 'backToPreviousDesign' => 'Voltar ao design antigo' ], 'directMessages' => [ - 'inbox' => 'Caixa de entrada', + 'inbox' => 'Caixa de Entrada', 'sent' => 'Enviadas', - 'requests' => 'Solicitações' + 'requests' => 'Pedidos' ], 'notifications' => [ - 'liked' => 'curtiu seu', - 'commented' => 'comentou em seu', + 'liked' => 'gostou do seu', + 'commented' => 'comentou no seu', 'reacted' => 'reagiu ao seu', - 'shared' => 'compartilhou seu', - 'tagged' => 'marcou você em um', + 'shared' => 'Partilhou o seu', + 'tagged' => 'marcou você numa publicação', - 'updatedA' => 'atualizou um(a)', + 'updatedA' => 'atualizou', 'sentA' => 'enviou um', 'followed' => 'seguiu', - 'mentioned' => 'mencionado', + 'mentioned' => 'mencionou', 'you' => 'você', - 'yourApplication' => 'Sua inscrição para participar', + 'yourApplication' => 'A sua candidatura para se juntar', 'applicationApproved' => 'foi aprovado!', - 'applicationRejected' => 'foi rejeitado. Você pode se inscrever novamente para participar em 6 meses.', + 'applicationRejected' => 'foi rejeitado. Você pode inscrever-se novamente em 6 meses.', - 'dm' => 'mensagem direta', - 'groupPost' => 'postagem do grupo', + 'dm' => 'dm', + 'groupPost' => 'publicação de grupo', 'modlog' => 'histórico de moderação', 'post' => 'publicação', - 'story' => 'história', + 'story' => 'story', + 'noneFound' => 'Nenhuma notificação encontrada', ], 'post' => [ - 'shareToFollowers' => 'Compartilhar com os seguidores', - 'shareToOther' => 'Compartilhar com outros', - 'noLikes' => 'Ainda sem curtidas', - 'uploading' => 'Enviando', + 'shareToFollowers' => 'Partilhar com os seguidores', + 'shareToOther' => 'Partilhar com outros', + 'noLikes' => 'Ainda sem gostos', + 'uploading' => 'A enviar', ], 'profile' => [ 'posts' => 'Publicações', 'followers' => 'Seguidores', - 'following' => 'Seguindo', - 'admin' => 'Administrador', + 'following' => 'A seguir', + 'admin' => 'Admin', 'collections' => 'Coleções', 'follow' => 'Seguir', 'unfollow' => 'Deixar de seguir', 'editProfile' => 'Editar Perfil', - 'followRequested' => 'Solicitação de seguir enviada', - 'joined' => 'Entrou', + 'followRequested' => 'Pedido para seguir enviado', + 'joined' => 'Juntou-se', 'emptyCollections' => 'Não conseguimos encontrar nenhuma coleção', - 'emptyPosts' => 'Não encontramos nenhuma publicação', + 'emptyPosts' => 'Não conseguimos encontrar nenhuma publicação', ], 'menu' => [ 'viewPost' => 'Ver publicação', - 'viewProfile' => 'Ver Perfil', + 'viewProfile' => 'Ver perfil', 'moderationTools' => 'Ferramentas de moderação', 'report' => 'Denunciar', - 'archive' => 'Arquivo', - 'unarchive' => 'Desarquivar', + 'archive' => 'Arquivar', + 'unarchive' => 'Retirar do arquivo', 'embed' => 'Incorporar', - 'selectOneOption' => 'Selecione uma das opções a seguir', - 'unlistFromTimelines' => 'Retirar das linhas do tempo', + 'selectOneOption' => 'Selecione uma das seguintes opções', + 'unlistFromTimelines' => 'Remover das cronologias', 'addCW' => 'Adicionar aviso de conteúdo', 'removeCW' => 'Remover aviso de conteúdo', - 'markAsSpammer' => 'Marcar como Spammer', - 'markAsSpammerText' => 'Retirar das linhas do tempo + adicionar aviso de conteúdo às publicações antigas e futuras', - 'spam' => 'Lixo Eletrônico', - 'sensitive' => 'Conteúdo sensível', - 'abusive' => 'Abusivo ou Prejudicial', + 'markAsSpammer' => 'Marcar como spammer', + 'markAsSpammerText' => 'Remover das cronologias e adicionar um aviso de conteúdo às publicações existentes e futuras', + 'spam' => 'Spam', + 'sensitive' => 'Conteúdo Sensível', + 'abusive' => 'Abusivo ou prejudicial', 'underageAccount' => 'Conta de menor de idade', - 'copyrightInfringement' => 'Violação de direitos autorais', - 'impersonation' => 'Roubo de identidade', - 'scamOrFraud' => 'Golpe ou Fraude', + 'copyrightInfringement' => 'Violação de direitos de autor', + 'impersonation' => 'Roubo de Identidade', + 'scamOrFraud' => 'Esquema ou fraude', 'confirmReport' => 'Confirmar denúncia', - 'confirmReportText' => 'Você realmente quer denunciar esta publicação?', + 'confirmReportText' => 'Tem a certeza que deseja denunciar esta mensagem?', 'reportSent' => 'Denúncia enviada!', - 'reportSentText' => 'Nós recebemos sua denúncia com sucesso.', - 'reportSentError' => 'Houve um problema ao denunciar esta publicação.', + 'reportSentText' => 'Recebemos com sucesso a sua denúncia.', + 'reportSentError' => 'Ocorreu um erro ao denunciar este conteúdo.', - 'modAddCWConfirm' => 'Você realmente quer adicionar um aviso de conteúdo a esta publicação?', - 'modCWSuccess' => 'Aviso de conteúdo sensível adicionado com sucesso', - 'modRemoveCWConfirm' => 'Você realmente quer remover o aviso de conteúdo desta publicação?', - 'modRemoveCWSuccess' => 'Aviso de conteúdo sensível removido com sucesso', - 'modUnlistConfirm' => 'Você realmente quer definir esta publicação como não listada?', - 'modUnlistSuccess' => 'A publicação foi definida como não listada com sucesso', - 'modMarkAsSpammerConfirm' => 'Você realmente quer denunciar este usuário por spam? Todas as suas publicações anteriores e futuras serão marcadas com um aviso de conteúdo e removidas das linhas do tempo.', - 'modMarkAsSpammerSuccess' => 'Perfil denunciado com sucesso', + 'modAddCWConfirm' => 'Tem a certeza que pretende adicionar um aviso de conteúdo à publicação?', + 'modCWSuccess' => 'Adicionou com sucesso um aviso de conteúdo', + 'modRemoveCWConfirm' => 'Tem a certeza que pretende remover o aviso de conteúdo desta publicação?', + 'modRemoveCWSuccess' => 'Removeu com sucesso o aviso de conteúdo', + 'modUnlistConfirm' => 'Tem a certeza que pretende deslistar este post?', + 'modUnlistSuccess' => 'Deslistou com sucesso este post', + 'modMarkAsSpammerConfirm' => 'Tem a certeza que deseja marcar este utilizador como spammer? Todos os posts existentes e futuros serão deslistados da timeline e o alerta de conteúdo será aplicado.', + 'modMarkAsSpammerSuccess' => 'Marcou com sucesso esta conta como spammer', - 'toFollowers' => 'para seguidores', + 'toFollowers' => 'para Seguidores', - 'showCaption' => 'Mostrar legenda', - 'showLikes' => 'Mostrar curtidas', + 'showCaption' => 'Mostar legenda', + 'showLikes' => 'Mostrar Gostos', 'compactMode' => 'Modo compacto', - 'embedConfirmText' => 'Ao usar de forma “embed”, você concorda com nossas', + 'embedConfirmText' => 'Ao utilizar este conteúdo, aceita os nossos', - 'deletePostConfirm' => 'Você tem certeza que deseja excluir esta publicação?', - 'archivePostConfirm' => 'Tem certeza que deseja arquivar esta publicação?', - 'unarchivePostConfirm' => 'Tem certeza que deseja desarquivar esta publicação?', + 'deletePostConfirm' => 'Tem a certeza que pretende apagar esta publicação?', + 'archivePostConfirm' => 'Tem a certeza que pretende arquivar esta publicação?', + 'unarchivePostConfirm' => 'Tem a certeza que pretende desarquivar este post?', ], 'story' => [ - 'add' => 'Adicionar Story' + 'add' => 'Adicionar Storie' ], 'timeline' => [ - 'peopleYouMayKnow' => 'Pessoas que você talvez conheça' + 'peopleYouMayKnow' => 'Pessoas que talvez conheça', + + 'onboarding' => [ + 'welcome' => 'Bem-vindo', + 'thisIsYourHomeFeed' => 'Este é o seu feed pessoal, com publicações em ordem cronológica das contas que segue.', + 'letUsHelpYouFind' => 'Deixe-nos ajudar a encontrar algumas pessoas interessantes para seguir', + 'refreshFeed' => 'Atualizar o meu feed', + ], ], 'hashtags' => [ - 'emptyFeed' => 'Não encontramos nenhuma publicação com esta hashtag' + 'emptyFeed' => 'Não conseguimos encontrar publicações com essa hashtag' + ], + + 'report' => [ + 'report' => 'Denunciar', + 'selectReason' => 'Selecione uma razão', + 'reported' => 'Denunciado', + 'sendingReport' => 'A enviar denúncia', + 'thanksMsg' => 'Obrigado pela denúncia, pessoas como você ajudam a manter a nossa comunidade segura!', + 'contactAdminMsg' => 'Se quiser entrar em contato com um administrador acerca desta publicação ou denúncia', ], ]; diff --git a/resources/lang/ro/web.php b/resources/lang/ro/web.php index 3844f847a..92e54c5ca 100644 --- a/resources/lang/ro/web.php +++ b/resources/lang/ro/web.php @@ -3,184 +3,206 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'Comentariu', + 'commented' => 'Comentariu', + 'comments' => 'Comentarii', + 'like' => 'Îmi place', + 'liked' => 'Apreciate', + 'likes' => 'Aprecieri', + 'share' => 'Partajează', + 'shared' => 'Partajat', + 'shares' => 'Partajează', + 'unshare' => 'Anularea partajării', + 'bookmark' => 'Bookmark', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'Anulează', + 'copyLink' => 'Copiere legătură', + 'delete' => 'Șterge', + 'error' => 'Eroare', + 'errorMsg' => 'A apărut o problemă. Te rugăm să încerci din nou mai târziu.', + 'oops' => 'Ups!', + 'other' => 'Altele', + 'readMore' => 'Citește mai mult', + 'success' => 'Succes', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Sensibil', + 'sensitiveContent' => 'Conținut sensibil', + 'sensitiveContentWarning' => 'Această postare poate conține conținut sensibil', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Condiții de utilizare', + 'privacy' => 'Politica de confidenţialitate', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'Caută', + 'admin' => 'Panou de administrare', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'Flux Acasă', + 'localFeed' => 'Flux local', + 'globalFeed' => 'Flux Global', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'Descoperă', + 'directMessages' => 'Mesaje directe', + 'notifications' => 'Notificări', + 'groups' => 'Grupuri', + 'stories' => 'Poveşti', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'profile' => 'Profil', + 'drive' => 'Unitate', + 'settings' => 'Setări', + 'compose' => 'Crează nou', + 'logout' => 'Deconectare', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => 'Despre', + 'help' => 'Ajutor', + 'language' => 'Limbă', + 'privacy' => 'Confidențialitate', + 'terms' => 'Termeni', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'Înapoi la design-ul anterior' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'Mesaje', + 'sent' => 'Trimis', + 'requests' => 'Cereri' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'ți-a plăcut', + 'commented' => 'a comentat la', + 'reacted' => 'a reacționat la', + 'shared' => 'ți-a distribuit', + 'tagged' => 'te-a etichetat într-un', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'a actualizat o', + 'sentA' => 'a trimis o', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'urmărit', + 'mentioned' => 'menționat', + 'you' => 'tu', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'Cererea ta de a te alătura', + 'applicationApproved' => 'a fost aprobată!', + 'applicationRejected' => 'a fost respins. Puteţi aplica din nou pentru a vă alătura în 6 luni.', 'dm' => 'dm', - 'groupPost' => 'group post', + 'groupPost' => 'postare grup', 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'post' => 'postare', + 'story' => 'poveste', + 'noneFound' => 'No notifications found', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'Distribuie către urmăritori', + 'shareToOther' => 'Distribuiți altora', + 'noLikes' => 'Încă nu sunt aprecieri', + 'uploading' => 'Se încarcă', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => 'Postări', + 'followers' => 'Urmăritori', + 'following' => 'Urmăriți', + 'admin' => 'Administrator', + 'collections' => 'Colecții', + 'follow' => 'Urmărește', + 'unfollow' => 'Nu mai urmări', + 'editProfile' => 'Editare profil', + 'followRequested' => 'Urmărește cererea', + 'joined' => 'S-a alăturat', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Se pare că nu putem găsi colecții', + 'emptyPosts' => 'Se pare că nu putem găsi niciun post', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'viewPost' => 'Vizualizați postul', + 'viewProfile' => 'Vezi Profilul', + 'moderationTools' => 'Instrumente de moderare', + 'report' => 'Raportează', + 'archive' => 'Arhivă', + 'unarchive' => 'Dezarhivează', + 'embed' => 'Încorporează', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'selectOneOption' => 'Selectaţi una dintre următoarele opţiuni', + 'unlistFromTimelines' => 'Dezlistare din Timelines', + 'addCW' => 'Adaugă un avertisment privind conținutul', + 'removeCW' => 'Elimină avertismentul privind conținutul', + 'markAsSpammer' => 'Marchează ca Spammer', + 'markAsSpammerText' => 'Anulare listă + postări CW existente și viitoare', 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', + 'sensitive' => 'Conținut sensibil', + 'abusive' => 'Abusiv sau dăunător', + 'underageAccount' => 'Cont Minor', + 'copyrightInfringement' => 'Încălcarea drepturilor de autor', + 'impersonation' => 'Furt de identitate', + 'scamOrFraud' => 'Înșelătorie sau fraudă', + 'confirmReport' => 'Confirmați raportul', + 'confirmReportText' => 'Ești sigur că vrei să raportezi această postare?', + 'reportSent' => 'Raport trimis!', + 'reportSentText' => 'Am primit cu succes raportul dvs.', + 'reportSentError' => 'A existat o problemă la raportarea acestei postări.', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modAddCWConfirm' => 'Sunteţi sigur că doriţi să adăugaţi un avertisment cu privire la conţinut la acest post?', + 'modCWSuccess' => 'Avertizare conținut adăugat cu succes', + 'modRemoveCWConfirm' => 'Sigur doriți să eliminați avertizarea conținutului pe acest post?', + 'modRemoveCWSuccess' => 'Avertisment conținut șters cu succes', + 'modUnlistConfirm' => 'Ești sigur că vrei să elimini această postare?', + 'modUnlistSuccess' => 'Mesaj nelistat cu succes', + 'modMarkAsSpammerConfirm' => 'Sunteţi sigur că doriţi să marcaţi acest utilizator ca un spammer? Toate postările existente și viitoare vor fi nelistate pe calendare și se va aplica un avertisment privind conținutul.', + 'modMarkAsSpammerSuccess' => 'Contul marcat cu succes ca spammer', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'la Urmăritori', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showCaption' => 'Afișați legenda', + 'showLikes' => 'Arată like-urile', + 'compactMode' => 'Modul compact', + 'embedConfirmText' => 'Folosind acest lucru încorporat, sunteți de acord cu', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'deletePostConfirm' => 'Sunteţi sigur că doriţi să ştergeţi acest post?', + 'archivePostConfirm' => 'Sunteți sigur că doriți să arhivați acest post?', + 'unarchivePostConfirm' => 'Sunteți sigur că doriți să dezarhivați acest post?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => 'Adăugați poveste' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'Persoane pe care i-ai putea cunoaște', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Nu putem găsi postări pentru acest hashtag' + ], + + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', ], ]; diff --git a/resources/lang/ru/web.php b/resources/lang/ru/web.php index acae889a3..ab469fc12 100644 --- a/resources/lang/ru/web.php +++ b/resources/lang/ru/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Поделились', 'shares' => 'Поделились', 'unshare' => 'Не делиться', + 'bookmark' => 'Закладка', 'cancel' => 'Отмена', 'copyLink' => 'Скопировать ссылку', @@ -23,6 +24,10 @@ return [ 'other' => 'Прочее', 'readMore' => 'Читать далее', 'success' => 'Успешно', + 'proceed' => 'Продолжить', + 'next' => 'Далее', + 'close' => 'Закрыть', + 'clickHere' => 'нажмите здесь', 'sensitive' => 'Чувствительный', 'sensitiveContent' => 'Чувствительный контент', @@ -54,8 +59,8 @@ return [ 'profile' => 'Профиль', 'drive' => 'Диск', 'settings' => 'Настройки', - 'compose' => 'Создать новый пост', - 'logout' => 'Logout', + 'compose' => 'Создать новый', + 'logout' => 'Выйти', // Nav footer 'about' => 'О нас', @@ -81,11 +86,11 @@ return [ 'shared' => 'поделился вашим', 'tagged' => 'отметил вас в публикации', - 'updatedA' => 'updated a', + 'updatedA' => 'обновил(а)', 'sentA' => 'отправил', 'followed' => 'подписался', - 'mentioned' => 'mentioned', + 'mentioned' => 'упомянул(а)', 'you' => 'вы', 'yourApplication' => 'Ваше заявка на вступление', @@ -93,10 +98,11 @@ return [ 'applicationRejected' => 'было отклонено. Вы можете повторно подать заявку на регистрацию в течение 6 месяцев.', 'dm' => 'сообщение', - 'groupPost' => 'сообщения группы', - 'modlog' => 'modlog', + 'groupPost' => 'пост в группе', + 'modlog' => 'журнал модерации', 'post' => 'пост', 'story' => 'история', + 'noneFound' => 'Уведомления не найдены', ], 'post' => [ @@ -136,7 +142,7 @@ return [ 'addCW' => 'Добавить предупреждение о контенте', 'removeCW' => 'Удалить предупреждение о контенте', 'markAsSpammer' => 'Пометить как спамера', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', + 'markAsSpammerText' => 'Скрыть из лент и пометить предупреждениями существующие и будущие публикации', 'spam' => 'Спам', 'sensitive' => 'Деликатный контент', 'abusive' => 'Жестокое обращение или причинение вреда', @@ -155,16 +161,16 @@ return [ 'modRemoveCWConfirm' => 'Вы действительно хотите удалить предупреждение о контенте с этого поста?', 'modRemoveCWSuccess' => 'Предупреждение о контенте успешно удалено', 'modUnlistConfirm' => 'Вы действительно хотите скрыть этот пост из лент?', - 'modUnlistSuccess' => 'Successfully unlisted post', + 'modUnlistSuccess' => 'Пост удален', 'modMarkAsSpammerConfirm' => 'Вы уверены, что хотите отметить этого пользователя спамом? Все существующие и будущие сообщения будут исключены из списка в сроки, и будет применяться предупреждение о содержании.', 'modMarkAsSpammerSuccess' => 'Аккаунт успешно помечен как спаммер', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'подписчикам', 'showCaption' => 'Показать подпись', 'showLikes' => 'Показать отметки "мне нравится"', 'compactMode' => 'Компактный режим', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'embedConfirmText' => 'Используя этот инстант, вы соглашаетесь с нашими', 'deletePostConfirm' => 'Вы действительно хотите удалить этот пост?', 'archivePostConfirm' => 'Вы действительно хотите архивировать этот пост?', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Возможные друзья' + 'peopleYouMayKnow' => 'Возможные друзья', + + 'onboarding' => [ + 'welcome' => 'Добро пожаловать', + 'thisIsYourHomeFeed' => 'Это ваша домашняя лента, где хронологически собраны посты с аккаунтов, на которые вы подписаны.', + 'letUsHelpYouFind' => 'Давайте мы поможем вам найти интересных людей, на которых можно подписаться', + 'refreshFeed' => 'Обновить мою ленту', + ], ], 'hashtags' => [ 'emptyFeed' => 'Похоже, мы не можем найти записи для этого хэштега' ], + 'report' => [ + 'report' => 'Пожаловаться', + 'selectReason' => 'Выберите причину', + 'reported' => 'Жалоба отправлена', + 'sendingReport' => 'Отправка жалобы', + 'thanksMsg' => 'Спасибо за обращение! Такие, как вы, помогают сделать сообщество безопаснее!', + 'contactAdminMsg' => 'Хотите ли вы связаться с администратором по поводу этой публикации или жалобы', + ], + ]; diff --git a/resources/lang/sk/web.php b/resources/lang/sk/web.php index dc37b94b0..b8362e05e 100644 --- a/resources/lang/sk/web.php +++ b/resources/lang/sk/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Zdieľané', 'shares' => 'Zdiaľané', 'unshare' => 'Zrušiť zdieľanie', + 'bookmark' => 'Uložiť', 'cancel' => 'Zrušiť', 'copyLink' => 'Skopírovať odkaz', @@ -23,6 +24,10 @@ return [ 'other' => 'Iné', 'readMore' => 'Zobraziť viac', 'success' => 'Hotovo', + 'proceed' => 'Pokračovať', + 'next' => 'Ďalej', + 'close' => 'Zavrieť', + 'clickHere' => 'klikni tu', 'sensitive' => 'Citlivý', 'sensitiveContent' => 'Citlivý obsah', @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'príspevok', 'story' => 'story', + 'noneFound' => 'Žiadne nájdené notifikácie', ], 'post' => [ @@ -157,7 +163,7 @@ return [ 'modUnlistConfirm' => 'Naozaj chcete odstrániť zo zoznamu tento príspevok?', 'modUnlistSuccess' => 'Príspevok bol úspešne odstránený zo zoznamu', 'modMarkAsSpammerConfirm' => 'Naozaj chcete označiť tohto používateľa ako odosielateľa spamu? Všetky existujúce a budúce príspevky budú odstránené z timelines a bude pridané upozornenie o obsahu.', - 'modMarkAsSpammerSuccess' => 'Účet bol úspešne označený ako odosielateľa spamu', + 'modMarkAsSpammerSuccess' => 'Účet bol úspešne označený ako spammer', 'toFollowers' => 'pre Sledujúcich', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Ľudia ktorých možno poznáte' + 'peopleYouMayKnow' => 'Ľudia ktorých možno poznáte', + + 'onboarding' => [ + 'welcome' => 'Vitajte', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Nechajte nás pomôcť vám nájsť zaujímavých ľudí ktorých môžete sledovať', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'Zdá sa, že nemôžeme nájsť žiadne príspevky pre tento hashtag' ], + 'report' => [ + 'report' => 'Nahlásiť', + 'selectReason' => 'Vyberte dôvod', + 'reported' => 'Nahlásené', + 'sendingReport' => 'Odosielanie hlásenia', + 'thanksMsg' => 'Ďakujeme za hlásenie, ľudia ako vy pomáhajú udržiavať našu komunitu v bezpečí!', + 'contactAdminMsg' => 'Ak chcete kontaktovať administrátora ohľadom tohto príspevku alebo ho nahlásiť', + ], + ]; diff --git a/resources/lang/sr/web.php b/resources/lang/sr/web.php index 3844f847a..9e27e010a 100644 --- a/resources/lang/sr/web.php +++ b/resources/lang/sr/web.php @@ -3,39 +3,44 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'Komentar', + 'commented' => 'Komentarisao', + 'comments' => 'Komentari', + 'like' => 'Sviđa mi se', + 'liked' => 'Sviđa mi se', + 'likes' => 'Sviđanja', + 'share' => 'Podeli', + 'shared' => 'Podeljeno', + 'shares' => 'Deljenja', + 'unshare' => 'Nemoj deliti', + 'bookmark' => 'Bookmark', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'Otkaži', + 'copyLink' => 'Kopiraj vezu', + 'delete' => 'Obriši', + 'error' => 'Grеška', + 'errorMsg' => 'Nešto nije u redu. Pokušaj ponovo kasnije.', + 'oops' => 'Ups!', + 'other' => 'Ostalo', + 'readMore' => 'Pročitaj više', + 'success' => 'Uspeh', + 'proceed' => 'Proceed', + 'next' => 'Next', + 'close' => 'Close', + 'clickHere' => 'click here', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'Osetljivo', + 'sensitiveContent' => 'Osetljivi sadržaj', + 'sensitiveContentWarning' => 'Ovaj post može sadržati osetljivi sadržaj', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'Uslovi korišćenja', + 'privacy' => 'Politika privatnosti', ], 'navmenu' => [ - 'search' => 'Search', + 'search' => 'Pretraga', 'admin' => 'Admin Dashboard', // Timelines @@ -97,6 +102,7 @@ return [ 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => 'People you may know', + + 'onboarding' => [ + 'welcome' => 'Welcome', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => 'Refresh my feed', + ], ], 'hashtags' => [ 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' ], + 'report' => [ + 'report' => 'Report', + 'selectReason' => 'Select a reason', + 'reported' => 'Reported', + 'sendingReport' => 'Sending report', + 'thanksMsg' => 'Thanks for the report, people like you help keep our community safe!', + 'contactAdminMsg' => 'If you\'d like to contact an administrator about this post or report', + ], + ]; diff --git a/resources/lang/sv/web.php b/resources/lang/sv/web.php index 03b9891d9..9a7e28ce6 100644 --- a/resources/lang/sv/web.php +++ b/resources/lang/sv/web.php @@ -3,58 +3,63 @@ return [ 'common' => [ - 'comment' => 'Kommentera', + 'comment' => 'Kommentar', 'commented' => 'Kommenterade', 'comments' => 'Kommentarer', 'like' => 'Gilla', - 'liked' => 'Gillade', - 'likes' => 'Gillar-markeringar', + 'liked' => 'Gillad', + 'likes' => 'Gillanden', 'share' => 'Dela', - 'shared' => 'Delade', - 'shares' => 'Delningar', - 'unshare' => 'Sluta dela', + 'shared' => 'Utdelad', + 'shares' => 'Utdelade', + 'unshare' => 'Sluta dela ut', + 'bookmark' => 'Bokmärk', 'cancel' => 'Avbryt', 'copyLink' => 'Kopiera länk', 'delete' => 'Ta bort', 'error' => 'Fel', - 'errorMsg' => 'Något gick fel. Försök igen senare', - 'oops' => 'Oops!', + 'errorMsg' => 'Något gick fel. Vänligen försök igen senare.', + 'oops' => 'Hoppsan!', 'other' => 'Andra', 'readMore' => 'Läs mer', 'success' => 'Lyckades', + 'proceed' => 'Fortsätt', + 'next' => 'Nästa', + 'close' => 'Stäng', + 'clickHere' => 'klicka här', 'sensitive' => 'Känsligt', 'sensitiveContent' => 'Känsligt innehåll', - 'sensitiveContentWarning' => 'TDet här inlägget kan innehålla känsligt innehåll', + 'sensitiveContentWarning' => 'Det här inlägget kan innehålla känsligt innehåll', ], 'site' => [ - 'terms' => 'Villkor', + 'terms' => 'Användarvillkor', 'privacy' => 'Integritetspolicy', ], 'navmenu' => [ 'search' => 'Sök', - 'admin' => 'Admin Panel', + 'admin' => 'Kontrollpanel för administratör', // Timelines - 'homeFeed' => 'Hemflödet', - 'localFeed' => 'Lokala flödet', - 'globalFeed' => 'Globala flödet', + 'homeFeed' => 'Hemflöde', + 'localFeed' => 'Lokalt flöde', + 'globalFeed' => 'Globalt flöde', // Core features - 'discover' => 'Utforska', + 'discover' => 'Upptäck', 'directMessages' => 'Direktmeddelanden', 'notifications' => 'Notifikationer', 'groups' => 'Grupper', - 'stories' => 'Stories', + 'stories' => 'Historier', // Self links 'profile' => 'Profil', - 'drive' => 'Drive', + 'drive' => 'Enhet', 'settings' => 'Inställningar', - 'compose' => 'Skapa nytt', + 'compose' => 'Skapa ny', 'logout' => 'Logga ut', // Nav footer @@ -62,10 +67,10 @@ return [ 'help' => 'Hjälp', 'language' => 'Språk', 'privacy' => 'Integritet', - 'terms' => 'Vilkor', + 'terms' => 'Villkor', // Temporary links - 'backToPreviousDesign' => 'Gå tillbaka till den gamla designen' + 'backToPreviousDesign' => 'Gå tillbaka till föregående design' ], 'directMessages' => [ @@ -76,27 +81,28 @@ return [ 'notifications' => [ 'liked' => 'gillade ditt', - 'commented' => 'kommenterade på ditt', - 'reacted' => 'reagerade på ditt', - 'shared' => 'delade ditt', - 'tagged' => 'taggade dig i en', + 'commented' => 'kommenterade på din', + 'reacted' => 'reagerade på din', + 'shared' => 'delade din', + 'tagged' => 'taggade dig i ett', 'updatedA' => 'uppdaterade en', 'sentA' => 'skickade en', - 'followed' => 'följer', + 'followed' => 'följde', 'mentioned' => 'nämnde', - 'you' => 'dig', + 'you' => 'du', - 'yourApplication' => 'Din ansökan att gå med', + 'yourApplication' => 'Din ansökan för att gå med', 'applicationApproved' => 'blev godkänd!', - 'applicationRejected' => 'blev nekad. Du kan ansöka igen om 6 månader.', + 'applicationRejected' => 'nekades. Du kan söka för att gå med igen om 6 månader.', 'dm' => 'dm', - 'groupPost' => 'grupp inlägg', + 'groupPost' => 'gruppinlägg', 'modlog' => 'modlog', 'post' => 'inlägg', - 'story' => 'story', + 'story' => 'historik', + 'noneFound' => 'Inga aviseringar hittades', ], 'post' => [ @@ -110,7 +116,7 @@ return [ 'posts' => 'Inlägg', 'followers' => 'Följare', 'following' => 'Följer', - 'admin' => 'Admin', + 'admin' => 'Administratör', 'collections' => 'Kollektioner', 'follow' => 'Följ', 'unfollow' => 'Sluta följa', @@ -128,16 +134,16 @@ return [ 'moderationTools' => 'Modereringsverktyg', 'report' => 'Rapportera', 'archive' => 'Arkivera', - 'unarchive' => 'avarkivera', + 'unarchive' => 'Avarkivera', 'embed' => 'Bädda in', 'selectOneOption' => 'Välj ett av följande alternativ', 'unlistFromTimelines' => 'Avlista från tidslinjer', - 'addCW' => 'Lägg till känslighetsvarning', + 'addCW' => 'Lägg till innehållsvarning', 'removeCW' => 'Ta bort känslighetsvarning', 'markAsSpammer' => 'Markera som spammare', 'markAsSpammerText' => 'Avlista + känslighetsmarkera nuvarande och framtida inlägg', - 'spam' => 'Spam', + 'spam' => 'Skräppost', 'sensitive' => 'Känsligt innehåll', 'abusive' => 'Missbruk eller skadligt', 'underageAccount' => 'Minderårigt konto', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Personer du kanske känner' + 'peopleYouMayKnow' => 'Personer du kanske känner', + + 'onboarding' => [ + 'welcome' => 'Välkommen', + 'thisIsYourHomeFeed' => 'Detta är ditt hem foder, ett kronologiskt flöde av inlägg från konton du följer.', + 'letUsHelpYouFind' => 'Låt oss hjälpa dig att hitta några intressanta människor att följa', + 'refreshFeed' => 'Uppdatera mitt flöde', + ], ], 'hashtags' => [ 'emptyFeed' => 'Vi kan inte hitta några inlägg med den hashtagen' ], + 'report' => [ + 'report' => 'Rapportera', + 'selectReason' => 'Välj en anledning', + 'reported' => 'Rapporterad', + 'sendingReport' => 'Skickar rapport', + 'thanksMsg' => 'Tack för rapporten, personer som gillar att du hjälper till att skydda vår gemenskap!', + 'contactAdminMsg' => 'Om du vill kontakta en administratör om detta inlägg eller rapport', + ], + ]; diff --git a/resources/lang/th/web.php b/resources/lang/th/web.php index ad46ea3c4..1e424e863 100644 --- a/resources/lang/th/web.php +++ b/resources/lang/th/web.php @@ -3,169 +3,206 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => 'ความคิดเห็น', + 'commented' => 'แสดงความคิดเห็นนี้แล้ว', + 'comments' => 'ความคิดเห็น', + 'like' => 'ถูกใจ', + 'liked' => 'ถูกใจแล้ว', + 'likes' => 'ถูกใจ', + 'share' => 'แชร์', + 'shared' => 'แชร์แล้ว', + 'shares' => 'แชร์', + 'unshare' => 'เลิกแชร์', + 'bookmark' => 'บุ๊คมาร์ก', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => 'ยกเลิก', + 'copyLink' => 'คัดลอกลิงค์', + 'delete' => 'ลบ', + 'error' => 'เกิดข้อผิดพลาด', + 'errorMsg' => 'มีบางอย่างผิดพลาด กรุณาลองอีกครั้งในภายหลัง', + 'oops' => 'โอ๊ะ!', + 'other' => 'อื่นๆ', + 'readMore' => 'อ่านเพิ่มเติม', + 'success' => 'สำเร็จ', + 'proceed' => 'ดำเนินการ', + 'next' => 'ถัดไป', + 'close' => 'ปิด', + 'clickHere' => 'คลิกที่นี่', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => 'ละเอียดอ่อน', + 'sensitiveContent' => 'เนื้อหาที่ละเอียดอ่อน', + 'sensitiveContentWarning' => 'โพสต์นี้อาจจะมีเนื้อหาที่ละเอียดอ่อนหรืออ่อนไว', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => 'ข้อตกลงการใช้งาน', + 'privacy' => 'นโยบายความเป็นส่วนตัว', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => 'ค้นหา', + 'admin' => 'แอดมินแดชบอร์ด', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => 'โฮมหน้าฟีด', + 'localFeed' => 'หน้าฟีดท้องถิ่น', + 'globalFeed' => 'หน้าฟีดทั่วโลก', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => 'สำรวจ', + 'directMessages' => 'ข้อความส่วนตัว', + 'notifications' => 'การแจ้งเตือน', + 'groups' => 'กลุ่ม', + 'stories' => 'เรื่องราว', // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', + 'profile' => 'โปรไฟล์', + 'drive' => 'ไดรฟ์', + 'settings' => 'การตั้งค่า', + 'compose' => 'สร้างใหม่', + 'logout' => 'ออกจากระบบ', + + // Nav footer + 'about' => 'เกี่ยวกับ', + 'help' => 'ความช่วยเหลือ', + 'language' => 'ภาษา', + 'privacy' => 'ส่วนตัว', + 'terms' => 'ข้อตกลง', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => 'กลับไปยังขั้นตอนก่อนหน้าออกแบบ' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => 'กล่องข้อความ', + 'sent' => 'ส่ง', + 'requests' => 'คำขอ' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'ถูกใจคุณแล้ว', + 'commented' => 'แสดงความคิดเห็นคุณแล้ว', + 'reacted' => 'ตอบสนองถึงคุณ', + 'shared' => 'คุณแชร์แล้ว', + 'tagged' => 'มีคนได้กล่าวถึงคุณใน', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'อัปเดตแล้วเมื่อ', + 'sentA' => 'ส่งเมื่อ', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => 'ติดตามแล้ว', + 'mentioned' => 'กล่าวถึงแล้ว', + 'you' => 'คุณ', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => 'ยื่นใบสมัครของคุณเพื่อเข้าร่วม', + 'applicationApproved' => 'ได้อนุมัติแล้ว!', + 'applicationRejected' => 'ถูกปฏิเสธแล้ว คุณสามารถสมัครใหม่เพื่อเข้าร่วมได้ภายใน 6 เดือนนะ', 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', + 'groupPost' => 'โพสต์กลุ่ม', + 'modlog' => 'ม็อดล็อก', + 'post' => 'โพสต์', + 'story' => 'เรื่องราว', + 'noneFound' => 'ไม่พบการแจ้งเตือน', ], 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'shareToFollowers' => 'แชร์ให้ผู้ติดตาม', + 'shareToOther' => 'แชร์ให้อื่นๆ', + 'noLikes' => 'ยังไม่ถูกใจ', + 'uploading' => 'กำลังอัพโหลด', ], 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', + 'posts' => 'โพสต์', + 'followers' => 'ผู้ติดตาม', + 'following' => 'กำลังติดตาม', + 'admin' => 'ผู้ดูแลระบบ', + 'collections' => 'คอลเลกชัน', + 'follow' => 'ติดตาม', + 'unfollow' => 'เลิกติดตาม', + 'editProfile' => 'แก้ไขโปร์ไฟล์', + 'followRequested' => 'คำขอติดตาม', + 'joined' => 'เข้าร่วมแล้ว', + + 'emptyCollections' => 'ดูเหมือนว่าเราจะไม่พบคอลเลกชันใดๆ', + 'emptyPosts' => 'ดูเหมือนว่าเราจะไม่พบโพสต์ใดๆ', ], 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'viewPost' => 'ดูโพสต์', + 'viewProfile' => 'ดูโปรไฟล์', + 'moderationTools' => 'เครื่องมือการกลั่นกรอง', + 'report' => 'รายงาน', + 'archive' => 'เอกสารสำคัญ', + 'unarchive' => 'ยกเลิกการเก็บถาวร', + 'embed' => 'ฝัง', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', - 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', + 'selectOneOption' => 'เลือกหนึ่งในตัวเลือกที่กำลังติดตามดังต่อไปนี้', + 'unlistFromTimelines' => 'ไม่แสดงจากไทม์ไลน์', + 'addCW' => 'เพิ่มคำเตือนเนื้อหา', + 'removeCW' => 'ลบคำเตือนเนื้อหาออก', + 'markAsSpammer' => 'ทำเครื่องหมายบอกว่าสแปมเกอร์', + 'markAsSpammerText' => 'ไม่แสดง + CW โพสต์ที่มีอยู่แล้วและในอนาคต', + 'spam' => 'สแปม', + 'sensitive' => 'เนื้อหาที่ละเอียดอ่อน', + 'abusive' => 'ไม่เหมาะสมหรืออาจเป็นอันตราย', + 'underageAccount' => 'บัญชีที่ยังไม่รู้บรรลุนิติภาวะ', + 'copyrightInfringement' => 'การละเมิดลิขสิทธิ์', + 'impersonation' => 'แอบอ้างบุคคลอื่น', + 'scamOrFraud' => 'หลอกลวงหรือฉ้อโกง', + 'confirmReport' => 'ยืนยันการรายงาน', + 'confirmReportText' => 'คุณแน่ใจหรือไม่ว่าต้องการรายงานโพสต์นี้?', + 'reportSent' => 'ส่งรายงานแล้ว!', + 'reportSentText' => 'เราได้รับรายงานของคุณสำเร็จแล้วนะ', + 'reportSentError' => 'เกิดปัญหากำลังรายงานโพสต์นี้', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modAddCWConfirm' => 'คุณแน่ใจหรือไม่ว่าต้องการที่จะเพิ่มคำเตือนในเนื้อหาโพสต์นี้?', + 'modCWSuccess' => 'สำเร็จแล้วได้เพิ่มคำเตือนเนื้อหา', + 'modRemoveCWConfirm' => 'คุณแน่ใจหรือไม่ว่าต้องการที่จะลบคำเตือนเนื้อหาในโพสต์นี้?', + 'modRemoveCWSuccess' => 'สำเร็จแล้วได้ลบคำเตือนเนื้อหา', + 'modUnlistConfirm' => 'คุณแน่ใจหรือไม่ว่าต้องการที่จะไม่แสดงในโพสต์นี้?', + 'modUnlistSuccess' => 'ไม่แสดงโพสต์สำเร็จแล้ว', + 'modMarkAsSpammerConfirm' => 'คุณแน่ใจว่าจะทำเครื่องหมายผู้ใช้รายนี้ว่าเป็นสแปม? โพสต์ที่มีอยู่และในอนาคตจะถูกนำออกจากไทม์ไลน์และใส่คำเตือนเนื้อหา', + 'modMarkAsSpammerSuccess' => 'ทำเครื่องหมายบัญชีบอกว่าเป็นสแปมเมอร์สำเร็จแล้ว', - 'toFollowers' => 'to Followers', + 'toFollowers' => 'ถึงผู้ติดตาม', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showCaption' => 'แสดงคำบรรยายภาพ', + 'showLikes' => 'แสดงไลค์', + 'compactMode' => 'โหมดกะทัดรัด', + 'embedConfirmText' => 'การใช้ตัวฝังนี้แสดงว่าคุณยอมรับของเรา', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'deletePostConfirm' => 'คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?', + 'archivePostConfirm' => 'คุณแน่ใจว่าจะเก็บโพสต์นี้ถาวร?', + 'unarchivePostConfirm' => 'คุณแน่ใจว่าจะเลิกเก็บโพสต์นี้ถาวร?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => 'เพิ่มเรื่องราว' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' - ] + 'peopleYouMayKnow' => 'คนที่คุณอาจรู้จัก', + + 'onboarding' => [ + 'welcome' => 'ยินดีต้อนรับ', + 'thisIsYourHomeFeed' => 'นี่คือโฮมฟีดของคุณ ซึ่งเป็นฟีดที่จะแสดงโพสต์ตามลำดับเวลาจากบัญชีที่คุณติดตาม', + 'letUsHelpYouFind' => 'ให้เราช่วยคุณค้นหาผู้คนที่น่าสนใจเพื่อติดตาม', + 'refreshFeed' => 'รีเฟรชฟีดของฉัน', + ], + ], + + 'hashtags' => [ + 'emptyFeed' => 'ไม่พบโพสต์สำหรับแฮชแท็กนี้' + ], + + 'report' => [ + 'report' => 'รายงาน', + 'selectReason' => 'เลือกเหตุผล', + 'reported' => 'รายงานแล้ว', + 'sendingReport' => 'กำลังส่งรายงาน', + 'thanksMsg' => 'ขอบคุณสำหรับรายงานของคุณ เพื่อช่วยให้ชุมชนและผู้คนของเราปลอดภัย!', + 'contactAdminMsg' => 'หากคุณต้องการติดต่อผู้ดูแลระบบเกี่ยวกับโพสต์หรือรายงาน', + ], ]; diff --git a/resources/lang/tr/web.php b/resources/lang/tr/web.php index 032c9d828..7c7d55090 100644 --- a/resources/lang/tr/web.php +++ b/resources/lang/tr/web.php @@ -4,15 +4,16 @@ return [ 'common' => [ 'comment' => 'Yorum', - 'commented' => 'Yorumlar', + 'commented' => 'Yorumladı', 'comments' => 'Yorumlar', 'like' => 'Beğen', 'liked' => 'Beğenildi', - 'likes' => 'Beğeniler', + 'likes' => 'Beğenenler', 'share' => 'Paylaş', - 'shared' => 'Paylaşılan', + 'shared' => 'Paylaşıldı', 'shares' => 'Paylaşılanlar', 'unshare' => 'Paylaşımı kaldır', + 'bookmark' => 'Yerimi', 'cancel' => 'İptal', 'copyLink' => 'Bağlantıyı Kopyala', @@ -21,10 +22,14 @@ return [ 'errorMsg' => 'Bir şeyler yanlış gitti. Lütfen daha sonra tekrar deneyiniz.', 'oops' => 'Hay aksi!', 'other' => 'Diğer', - 'readMore' => 'Daha fazlasını oku', + 'readMore' => 'Daha fazlası', 'success' => 'Başarılı', + 'proceed' => 'İlerleyiniz', + 'next' => 'İleri', + 'close' => 'Kapat', + 'clickHere' => 'buraya tıklayın', - 'sensitive' => 'Hassasiyet', + 'sensitive' => 'Hassas', 'sensitiveContent' => 'Hassas içerik', 'sensitiveContentWarning' => 'Bu ileti hassas içerik içeriyor olabilir', ], @@ -35,17 +40,17 @@ return [ ], 'navmenu' => [ - 'search' => 'Arama', + 'search' => 'Ara', 'admin' => 'Yönetici Paneli', // Timelines - 'homeFeed' => 'Home Feed', + 'homeFeed' => 'Anasayfa', 'localFeed' => 'Yerel Akış', 'globalFeed' => 'Evrensel Akış', // Core features 'discover' => 'Keşfet', - 'directMessages' => 'Direkt Mesajlar', + 'directMessages' => 'Doğrudan Mesajlar', 'notifications' => 'Bildirimler', 'groups' => 'Gruplar', 'stories' => 'Hikayeler', @@ -55,7 +60,7 @@ return [ 'drive' => 'Depolama', 'settings' => 'Ayarlar', 'compose' => 'Yeni oluştur', - 'logout' => 'Logout', + 'logout' => 'Oturumu kapat', // Nav footer 'about' => 'Hakkında', @@ -75,35 +80,36 @@ return [ ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', + 'liked' => 'beğendim', + 'commented' => 'yorum yazdı', + 'reacted' => 'tepki verdi', + 'shared' => 'paylaştı', + 'tagged' => 'sizi etiketledi', - 'updatedA' => 'updated a', - 'sentA' => 'sent a', + 'updatedA' => 'güncel bir', + 'sentA' => 'gönderdi', - 'followed' => 'followed', - 'mentioned' => 'mentioned', + 'followed' => 'takip etti', + 'mentioned' => 'bahsetti', 'you' => 'sen', 'yourApplication' => 'Katılma isteğiniz', 'applicationApproved' => 'onaylandı!', 'applicationRejected' => 'reddedildi. 6 ay sonra, tekrar katılma isteğinde bulunabilirsiniz.', - 'dm' => 'özel mesaj', - 'groupPost' => 'group post', + 'dm' => 'dm', + 'groupPost' => 'grup gönderisi', 'modlog' => 'modlog', - 'post' => 'post', + 'post' => 'gönderi', 'story' => 'hikaye', + 'noneFound' => 'Bildirim bulunamadı', ], 'post' => [ - 'shareToFollowers' => 'Takipçileri paylaş', - 'shareToOther' => 'Share to other', + 'shareToFollowers' => 'Takipçilerle paylaş', + 'shareToOther' => 'Diğerleriyle paylaş', 'noLikes' => 'Henüz beğenilmedi', - 'uploading' => 'Yükleniyor', + 'uploading' => 'Karşıya Yükleniyor', ], 'profile' => [ @@ -111,43 +117,43 @@ return [ 'followers' => 'Takipçiler', 'following' => 'Takip ediliyor', 'admin' => 'Yönetici', - 'collections' => 'Koleksiyonlar', + 'collections' => 'Derlemeler', 'follow' => 'Takip et', 'unfollow' => 'Takibi bırak', 'editProfile' => 'Profili Düzenle', 'followRequested' => 'Takip İsteği', 'joined' => 'Katıldı', - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', + 'emptyCollections' => 'Herhangi bir koleksiyon bulunmuyor', + 'emptyPosts' => 'Herhangi bir gönderi bulunmuyor', ], 'menu' => [ 'viewPost' => 'Gönderiyi görüntüle', 'viewProfile' => 'Profili Görüntüle', - 'moderationTools' => 'Denetim Ayarları', + 'moderationTools' => 'Denetim Araçları', 'report' => 'Bildir', - 'archive' => 'Archive', + 'archive' => 'Arşiv', 'unarchive' => 'Arşivden çıkar', - 'embed' => 'Embed', + 'embed' => 'Yerleştir', 'selectOneOption' => 'Aşağıdaki seçeneklerden birini seçin', 'unlistFromTimelines' => 'Akışlardan kaldır', 'addCW' => 'İçerik Uyarısını Ekle', 'removeCW' => 'İçerik Uyarısını Kaldır', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', - 'spam' => 'İstenmeyen', + 'markAsSpammer' => 'İstenmeyen İleti Göndericisi Olarak İşaretle', + 'markAsSpammerText' => 'Mevcut ve gelecekteki gönderileri + CW listesini kaldırın', + 'spam' => 'İstenmeyen posta', 'sensitive' => 'Hassas içerik', 'abusive' => 'İstismarcı veya Zararlı', - 'underageAccount' => 'Underage Account', + 'underageAccount' => 'Yaşı Tutmayan Hesap', 'copyrightInfringement' => 'Telif hakkı ihlali', 'impersonation' => 'Taklit Hesap', 'scamOrFraud' => 'Dolandırıcılık', 'confirmReport' => 'Bildirimi onayla', 'confirmReportText' => 'Bu paylaşımı bildirmek istediğinizden emin misiniz?', 'reportSent' => 'Rapor Gönderildi!', - 'reportSentText' => 'Raporunuzu başarıyla aldık.', + 'reportSentText' => 'Raporunuzu başarılı bir şekilde aldık.', 'reportSentError' => 'Bu gönderi bildirilirken bir sorun oluştu.', 'modAddCWConfirm' => 'Bu gönderiye bir içerik uyarısı eklemek istediğinizden emin misiniz?', @@ -164,7 +170,7 @@ return [ 'showCaption' => 'Açıklamayı göster', 'showLikes' => 'Beğenileri Göster', 'compactMode' => 'Kompakt Mod', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'embedConfirmText' => 'Bu gömüyü kullanarak,', 'deletePostConfirm' => 'Bu gönderiyi silmek istediğinizden emin misiniz?', 'archivePostConfirm' => 'Bu gönderiyi arşivlemek istediğinizden emin misiniz?', @@ -176,11 +182,27 @@ return [ ], 'timeline' => [ - 'peopleYouMayKnow' => 'Tanıyor olabileceğin kişiler' + 'peopleYouMayKnow' => 'Tanıyor olabileceğin kişiler', + + 'onboarding' => [ + 'welcome' => 'Hoş Geldiniz', + 'thisIsYourHomeFeed' => 'Burası sizin akış sayfanız, takip ettiğiniz hesapların paylaşımları kronolojik gösterilir.', + 'letUsHelpYouFind' => 'Takip etmek için size bazı ilginç kişileri bulmanızda yardımcı olalım', + 'refreshFeed' => 'Akışımı yenile', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => 'Bu etiket ile ilgili bir gönderi bulamıyoruz' + ], + + 'report' => [ + 'report' => 'Bildir', + 'selectReason' => 'Bir sebep seçin', + 'reported' => 'Bildirildi', + 'sendingReport' => 'Bildiri gönderiliyor', + 'thanksMsg' => 'Bildirdiğiniz için teşekkürler, sizin gibi insanlar sayesinde topluluğumuz güvende kalıyor!', + 'contactAdminMsg' => 'Eğer bu gönderi veya bildirim hakkında bir yönetici ile irtibata geçmek istiyorsanız', ], ]; diff --git a/resources/lang/vendor/backup/ja/notifications.php b/resources/lang/vendor/backup/ja/notifications.php index b8fff4a2b..911fa4ab2 100644 --- a/resources/lang/vendor/backup/ja/notifications.php +++ b/resources/lang/vendor/backup/ja/notifications.php @@ -31,5 +31,5 @@ return [ 'unhealthy_backup_found_empty' => 'このアプリケーションのバックアップはありません。', 'unhealthy_backup_found_old' => ':date に作成されたバックアップは古すぎます。', 'unhealthy_backup_found_unknown' => '正確な原因が特定できませんでした。', - 'unhealthy_backup_found_full' => 'バックアップが使用できる容量(:disk_limit)を超えています。(現在の使用量 :disk_usage)', + 'unhealthy_backup_found_full' => 'バックアップが使用できる容量(:disk_limit)を超えています。(現在の使用量 :disk_usage), ]; diff --git a/resources/lang/vi/web.php b/resources/lang/vi/web.php index 5e116d800..79a309f01 100644 --- a/resources/lang/vi/web.php +++ b/resources/lang/vi/web.php @@ -13,6 +13,7 @@ return [ 'shared' => 'Đã chia sẻ', 'shares' => 'Lượt chia sẻ', 'unshare' => 'Hủy chia sẻ', + 'bookmark' => 'Lưu', 'cancel' => 'Hủy', 'copyLink' => 'Chép link', @@ -23,6 +24,10 @@ return [ 'other' => 'Khác', 'readMore' => 'Xem thêm', 'success' => 'Hoàn tất', + 'proceed' => 'Tiếp tục', + 'next' => 'Tiếp theo', + 'close' => 'Đóng', + 'clickHere' => 'nhấn vào đây', 'sensitive' => 'Nhạy cảm', 'sensitiveContent' => 'Nội dung nhạy cảm', @@ -78,7 +83,7 @@ return [ 'liked' => 'đã thích ảnh', 'commented' => 'bình luận về ảnh', 'reacted' => 'xem ảnh', - 'shared' => 'chia sẻ ảnh', + 'shared' => 'đã chia sẻ', 'tagged' => 'nhắc đến bạn trong', 'updatedA' => 'đã cập nhật', @@ -97,6 +102,7 @@ return [ 'modlog' => 'nhật ký kiểm duyệt', 'post' => 'bài đăng', 'story' => 'khoảnh khắc', + 'noneFound' => 'Không có thông báo mới', ], 'post' => [ @@ -172,15 +178,31 @@ return [ ], 'story' => [ - 'add' => 'Thêm khoảnh khắc' + 'add' => 'Khoảnh khắc' ], 'timeline' => [ - 'peopleYouMayKnow' => 'Những người bạn có thể biết' + 'peopleYouMayKnow' => 'Những người bạn có thể biết', + + 'onboarding' => [ + 'welcome' => 'Chào mừng', + 'thisIsYourHomeFeed' => 'Đây là bảng tin của bạn, được xếp theo thứ tự thời gian với những tài khoản mà bạn theo dõi.', + 'letUsHelpYouFind' => 'Đây là vài người thú vị mà bạn nên theo dõi', + 'refreshFeed' => 'Làm tươi bảng tin', + ], ], 'hashtags' => [ 'emptyFeed' => 'Không tìm thấy ảnh nào với hashtag này' ], + 'report' => [ + 'report' => 'Báo cáo', + 'selectReason' => 'Chọn một lý do', + 'reported' => 'Bị báo cáo', + 'sendingReport' => 'Đang gửi báo cáo...', + 'thanksMsg' => 'Cảm ơn đã gửi báo cáo, bạn đã giúp cộng đồng sạch hơn!', + 'contactAdminMsg' => 'Nếu cần thiết, hãy liên hệ quản trị viên về ảnh này hoặc báo cáo', + ], + ]; diff --git a/resources/lang/zh/web.php b/resources/lang/zh/web.php index 3844f847a..e7e76f845 100644 --- a/resources/lang/zh/web.php +++ b/resources/lang/zh/web.php @@ -3,119 +3,125 @@ return [ 'common' => [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', + 'comment' => '評論', + 'commented' => '已評論', + 'comments' => '條意見評論', + 'like' => '按讚', + 'liked' => '已按讚', + 'likes' => '個人已按讚', + 'share' => '分享', + 'shared' => '已分享', + 'shares' => '次分享', + 'unshare' => '取消分享', + 'bookmark' => '書籤', - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', + 'cancel' => '取消', + 'copyLink' => '複製連結', + 'delete' => '删除', + 'error' => '錯誤', + 'errorMsg' => '出了點小問題,請稍後重試。', + 'oops' => '呃…', + 'other' => '其他', + 'readMore' => '繼續讀下去', + 'success' => '成功', + 'proceed' => '繼續', + 'next' => '下一個', + 'close' => '關閉', + 'clickHere' => '點擊此處', - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', + 'sensitive' => '敏感內容', + 'sensitiveContent' => '敏感內容', + 'sensitiveContentWarning' => '這篇文可能包含敏感內容', ], 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', + 'terms' => '使用條款', + 'privacy' => '隱私權政策', ], 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', + 'search' => '搜尋', + 'admin' => '管理儀表板', // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', + 'homeFeed' => '首頁動態', + 'localFeed' => '站內動態', + 'globalFeed' => '聯邦動態', // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', + 'discover' => '探索', + 'directMessages' => '私人訊息', + 'notifications' => '通知', + 'groups' => '群組', + 'stories' => '限時動態', // Self links - 'profile' => 'Profile', + 'profile' => '個人檔案', 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', + 'settings' => '設定', + 'compose' => '新增', + 'logout' => '登出', // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', + 'about' => '關於', + 'help' => '説明', + 'language' => '語言', + 'privacy' => '隱私權', + 'terms' => '條款', // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' + 'backToPreviousDesign' => '回到先前的設計' ], 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' + 'inbox' => '收件夾', + 'sent' => '寄件夾', + 'requests' => '請求' ], 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', + 'liked' => '喜歡你的', + 'commented' => '評論了你的', + 'reacted' => '反應了你的', + 'shared' => '分享了你的', 'tagged' => 'tagged you in a', 'updatedA' => 'updated a', 'sentA' => 'sent a', - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', + 'followed' => '已關注', + 'mentioned' => '被提及', + 'you' => '你', - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', + 'yourApplication' => '您的加入申請', + 'applicationApproved' => '被批准了!', + 'applicationRejected' => '被拒絕。您可以在 6 個月後再次申請加入。', - 'dm' => 'dm', + 'dm' => '直接訊息', 'groupPost' => 'group post', 'modlog' => 'modlog', 'post' => 'post', 'story' => 'story', + 'noneFound' => 'No notifications found', ], 'post' => [ 'shareToFollowers' => 'Share to followers', 'shareToOther' => 'Share to other', 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', + 'uploading' => '上傳中', ], 'profile' => [ 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', + 'followers' => '跟隨者', + 'following' => '追蹤中', + 'admin' => '管理員', 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', + 'follow' => '追蹤', + 'unfollow' => '取消追蹤', + 'editProfile' => '編輯個人檔案', + 'followRequested' => '追蹤請求', 'joined' => 'Joined', 'emptyCollections' => 'We can\'t seem to find any collections', @@ -126,61 +132,77 @@ return [ 'viewPost' => 'View Post', 'viewProfile' => 'View Profile', 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', + 'report' => '檢舉', + 'archive' => '封存', + 'unarchive' => '取消封存', + 'embed' => '嵌入', - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', - 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', + 'selectOneOption' => '選擇以下選項之一', + 'unlistFromTimelines' => '不在時間軸中上顯示', + 'addCW' => '增加內容警告', + 'removeCW' => '移除內容警告', + 'markAsSpammer' => '標記為垃圾訊息來源者', + 'markAsSpammerText' => '對計有及未來貼文設定成不列出和增加內容警告', + 'spam' => '垃圾訊息', + 'sensitive' => '敏感內容', + 'abusive' => '辱罵或有害', + 'underageAccount' => '未成年帳號', + 'copyrightInfringement' => '侵犯版權', + 'impersonation' => '假冒帳號', + 'scamOrFraud' => '詐騙內容', + 'confirmReport' => '確認檢舉', + 'confirmReportText' => '你確定要檢舉這篇貼文?', + 'reportSent' => '檢舉已送出!', + 'reportSentText' => '我們已經收到你的檢舉。', + 'reportSentError' => '檢舉此貼文時出現問題。', - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', + 'modAddCWConfirm' => '您確定要為此貼文添加內容警告嗎?', + 'modCWSuccess' => '成功添加內容警告', + 'modRemoveCWConfirm' => '您確定要刪除此貼文上的內容警告嗎?', + 'modRemoveCWSuccess' => '已成功刪除內容警告', 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', + 'modMarkAsSpammerConfirm' => '您確定要將此使用者標記為垃圾訊息發送者嗎?所有現有和未來的貼文將改為非公開,並將加上內容警告。', + 'modMarkAsSpammerSuccess' => '已成功將帳戶標記為垃圾訊息發送者', - 'toFollowers' => 'to Followers', + 'toFollowers' => '給關注者', - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', + 'showCaption' => '顯示文字說明', + 'showLikes' => '顯示喜歡', + 'compactMode' => '緊湊模式', + 'embedConfirmText' => '使用此嵌入式內容即表示您同意我們的', - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', + 'deletePostConfirm' => '你確定要刪除此貼文?', + 'archivePostConfirm' => '您確定要封存此貼文嗎?', + 'unarchivePostConfirm' => '您確定要解除封存此貼文嗎?', ], 'story' => [ - 'add' => 'Add Story' + 'add' => '新增故事' ], 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' + 'peopleYouMayKnow' => '你可能認識', + + 'onboarding' => [ + 'welcome' => '歡迎', + 'thisIsYourHomeFeed' => 'This is your home feed, a chronological feed of posts from accounts you follow.', + 'letUsHelpYouFind' => 'Let us help you find some interesting people to follow', + 'refreshFeed' => '更新我的源', + ], ], 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' + 'emptyFeed' => '我們似乎找不到此主題標籤的任何貼文' + ], + + 'report' => [ + 'report' => '檢舉', + 'selectReason' => '選擇一個理由', + 'reported' => '已檢舉', + 'sendingReport' => '送出檢舉', + 'thanksMsg' => '感謝你的檢舉讓世界更美好!', + 'contactAdminMsg' => '如果你想要提供更多有關本次檢舉的內容給管理員', ], ]; diff --git a/resources/views/atom/user.blade.php b/resources/views/atom/user.blade.php index b0c2ee073..badb1f8de 100644 --- a/resources/views/atom/user.blade.php +++ b/resources/views/atom/user.blade.php @@ -1,46 +1,52 @@ -` won't get parsed as short tags */ -'' . PHP_EOL -?> +' . PHP_EOL ?> - {{$permalink}} - {{$profile['username']}} on Pixelfed - {{$profile['note']}} - @if($items && count($items)) -{{$items[0]['created_at']}} - @endif + {{$permalink}} + {{$profile['username']}} on {{config('pixelfed.domain.app', 'Pixelfed')}} + {{strip_tags($profile['note'])}} + @if($items && count($items)) + {{$items[0]['created_at']}} + @endif - - {{$profile['username']}} - {{$profile['url']}} - + + {{$profile['username']}} + {{$profile['url']}} + - - - @if($items && count($items)) - @foreach($items as $item) - - {{ $item['url'] }} - {{ $item['content_text'] ? $item['content_text'] : "No caption" }} - {{ $item['created_at'] }} - - {{$profile['username']}} - {{$profile['url']}} - - - -

{!! $item['content'] !!}

- ]]> -
- - @if($item['content'] && strlen($item['content'])) - {{ $item['content'] }} - @endif - -
- @endforeach - -@endif + + + @if($items && count($items)) + @foreach($items as $item) + + {{ $item['url'] }} + {{ $item['content_text'] ? $item['content_text'] : "No caption" }} + {{ $item['created_at'] }} + + {{$profile['username']}} + {{$profile['url']}} + + + + @foreach($item['media_attachments'] as $media) + {{ $media['description'] ?? '' }} + @endforeach +
+

{!! $item['content'] !!}

+ ]]> + + + @if($item['content'] && strlen($item['content'])) + {{ $item['content'] }} + @endif + @foreach($item['media_attachments'] as $media) + + @endforeach + + @endforeach + @endif diff --git a/resources/views/emails/confirm_email.blade.php b/resources/views/emails/confirm_email.blade.php index ee8dcd2db..17b5e8318 100644 --- a/resources/views/emails/confirm_email.blade.php +++ b/resources/views/emails/confirm_email.blade.php @@ -11,6 +11,12 @@ Confirm Email

This link expires after 24 hours.


+ + If the link above is not working, please copy the following address into your web browser: +

+ {{ $verify->url() }} +
+

Thanks,
{{ config('pixelfed.domain.app') }} diff --git a/resources/views/settings/accessibility.blade.php b/resources/views/settings/accessibility.blade.php index 92c8b671d..b93544b2d 100644 --- a/resources/views/settings/accessibility.blade.php +++ b/resources/views/settings/accessibility.blade.php @@ -3,7 +3,7 @@ @section('section')
-

Accessibility

+

{{__('settings.accessibility')}}


@@ -25,9 +25,9 @@
reduce_motion ? 'checked=""':''}}> -

Prevent animation effects.

+

{{__('settings.accessibility.prevent_animation_effects')}}

{{--
optimize_screen_reader ? 'checked=""':''}}> @@ -39,21 +39,21 @@
high_contrast_mode ? 'checked=""':''}}> -

High contrast mode for the visually impaired.

+

{{__('settings.accessibility.high_contrast_mode_for_the_visually_impaired')}}

video_autoplay ? 'checked=""':''}}> -

Prevent videos from autoplaying.

+

{{__('settings.accessibility.prevent_videos_from_autoplaying')}}


- +
diff --git a/resources/views/settings/dataexport.blade.php b/resources/views/settings/dataexport.blade.php index 8351a7c9b..72580b003 100644 --- a/resources/views/settings/dataexport.blade.php +++ b/resources/views/settings/dataexport.blade.php @@ -3,42 +3,42 @@ @section('section')
-

Data Export

+

{{__('settings.export.data_export')}}


-
We generate data exports once per hour, and they may not contain the latest data if you've requested them recently.
+
{{__('settings.export.we_generate_data_exports_once_per_hour_and_they_may_etc')}}
  • - Following + {{__('settings.relationships.following')}}
    @csrf - +
  • - Followers + {{__('settings.relationships.followers')}}
    @csrf - +
  • - Statuses + {{__('settings.export.statuses')}}
    @csrf - +
    {{--
    @csrf @@ -49,23 +49,23 @@
  • - Mute/Block List + {{__('settings.export.mute_block_lists')}}
    @csrf - +
  • - Account + {{__('settings.account')}}
    @csrf - +
  • diff --git a/resources/views/settings/developers.blade.php b/resources/views/settings/developers.blade.php index 22d869580..d46ce6d9c 100644 --- a/resources/views/settings/developers.blade.php +++ b/resources/views/settings/developers.blade.php @@ -3,13 +3,13 @@ @section('section')
    -

    Developers

    +

    {{__('settings.developers')}}


    @if((bool) config_cache('pixelfed.oauth_enabled') == true) @else -

    OAuth has not been enabled on this instance.

    +

    {{__('settings.developers.oauth_has_not_been_enabled_on_this_instance')}}

    @endif @endsection diff --git a/resources/views/settings/email.blade.php b/resources/views/settings/email.blade.php index 4b7ddd677..d748bc827 100644 --- a/resources/views/settings/email.blade.php +++ b/resources/views/settings/email.blade.php @@ -5,7 +5,7 @@

    -

    Email Settings

    +

    {{__('settings.email.email_settings')}}

    @@ -17,19 +17,19 @@
    - +

    @if(Auth::user()->email_verified_at) - Verified {{Auth::user()->email_verified_at->diffForHumans()}} + {{__('settings.email.verified')}} {{Auth::user()->email_verified_at->diffForHumans()}} @else - Unverified You need to verify your email. + {{__('settings.email.unverified')}} {{__('settings.email.you_need_to')}} {{__('settings.email.verify_your_email')}}. @endif

    - +
    diff --git a/resources/views/settings/home.blade.php b/resources/views/settings/home.blade.php index 1ecd6bca8..42dea74bd 100644 --- a/resources/views/settings/home.blade.php +++ b/resources/views/settings/home.blade.php @@ -3,7 +3,7 @@ @section('section')
    -

    Account Settings

    +

    {{__('settings.home.account_settings')}}


    @@ -13,7 +13,7 @@

    {{Auth::user()->username}}

    - +

    @@ -21,41 +21,41 @@
    - +
    -

    Must be a jpeg or png. Max avatar size:

    +

    {{__('settings.home.must_be_a_jpeg_or_png_max_avatar_size')}}

    -

    +

    - Delete Profile Photo + {{__('settings.home.delete_profile_photo')}}

    @csrf
    - +
    - +
    - +
    - +
    - +
    0/500
    - +
    - + @endif @else

    @if(config('instance.email') && config('instance.contact.enabled')) - You can contact the admins by sending an email to {{config('instance.email')}} or log in to send a message. + {{__('site.you_can_contact_the_admins')}} {{__('site.by_sending_an_email_to')}} {{config('instance.email')}} {{__('site.or')}} {{__('site.log_in_to_send_a_message')}}. @elseif (!config('instance.email') && config('instance.contact.enabled')) - The admins have not set a contact email address. Please log in to send a message. + {{__('the_admins_have_not_set_a_contact_email_address')}}. {{__('site.Please')}} {{__('site.log_in_to_send_a_message')}}. @elseif (config('instance.email') && !config('instance.contact.enabled')) - You can contact the admins by sending an email to {{config('instance.email')}}. + {{__('site.you_can_contact_the_admins')}} {{__('site.by_sending_an_email_to')}} {{config('instance.email')}}. @endif

    @endauth diff --git a/resources/views/site/fediverse.blade.php b/resources/views/site/fediverse.blade.php index 3a1ea6738..89818e243 100644 --- a/resources/views/site/fediverse.blade.php +++ b/resources/views/site/fediverse.blade.php @@ -12,5 +12,5 @@ @endsection @push('meta') - + @endpush diff --git a/resources/views/site/opensource.blade.php b/resources/views/site/opensource.blade.php index cb2e7c771..b764f2015 100644 --- a/resources/views/site/opensource.blade.php +++ b/resources/views/site/opensource.blade.php @@ -7,10 +7,10 @@

    -

    The software that powers this website is called Pixelfed and anyone can download or view the source code and run their own instance!

    +

    {{__('site.the_software_that_powers_this_website_is_called')}} Pixelfed {{__('site.and_anyone_can')}} {{__('site.download')}} {{__('site.opensource.or')}} {{__('site.view')}} {{__('site.the_source_code_and_run_their_own_instance')}}

    @endsection @push('meta') - + @endpush diff --git a/resources/views/vendor/pulse/dashboard.blade.php b/resources/views/vendor/pulse/dashboard.blade.php new file mode 100644 index 000000000..6a95bb19e --- /dev/null +++ b/resources/views/vendor/pulse/dashboard.blade.php @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/routes/web.php b/routes/web.php index de2143d87..b9fbad7d9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,6 +45,93 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('auth/forgot/email', 'UserEmailForgotController@index')->name('email.forgot'); Route::post('auth/forgot/email', 'UserEmailForgotController@store')->middleware('throttle:10,900,forgotEmail'); + Route::group([ + 'as' => 'passport.', + 'prefix' => config('passport.path', 'oauth'), + ], function () { + Route::post('/token', [ + 'uses' => '\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken', + 'as' => 'token', + 'middleware' => 'throttle', + ]); + + Route::get('/authorize', [ + 'uses' => '\Laravel\Passport\Http\Controllers\AuthorizationController@authorize', + 'as' => 'authorizations.authorize', + 'middleware' => 'web', + ]); + + $guard = config('passport.guard', null); + + Route::middleware(['web', $guard ? 'auth:'.$guard : 'auth'])->group(function () { + Route::post('/token/refresh', [ + 'uses' => '\Laravel\Passport\Http\Controllers\TransientTokenController@refresh', + 'as' => 'token.refresh', + ]); + + Route::post('/authorize', [ + 'uses' => '\App\Http\Controllers\OAuth\OobAuthorizationController@approve', + 'as' => 'authorizations.approve', + ]); + + Route::delete('/authorize', [ + 'uses' => '\Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny', + 'as' => 'authorizations.deny', + ]); + + Route::get('/tokens', [ + 'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser', + 'as' => 'tokens.index', + ]); + + Route::delete('/tokens/{token_id}', [ + 'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy', + 'as' => 'tokens.destroy', + ]); + + Route::get('/clients', [ + 'uses' => '\Laravel\Passport\Http\Controllers\ClientController@forUser', + 'as' => 'clients.index', + ]); + + Route::post('/clients', [ + 'uses' => '\Laravel\Passport\Http\Controllers\ClientController@store', + 'as' => 'clients.store', + ]); + + Route::put('/clients/{client_id}', [ + 'uses' => '\Laravel\Passport\Http\Controllers\ClientController@update', + 'as' => 'clients.update', + ]); + + Route::delete('/clients/{client_id}', [ + 'uses' => '\Laravel\Passport\Http\Controllers\ClientController@destroy', + 'as' => 'clients.destroy', + ]); + + Route::get('/scopes', [ + 'uses' => '\Laravel\Passport\Http\Controllers\ScopeController@all', + 'as' => 'scopes.index', + ]); + + Route::get('/personal-access-tokens', [ + 'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser', + 'as' => 'personal.tokens.index', + ]); + + Route::post('/personal-access-tokens', [ + 'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store', + 'as' => 'personal.tokens.store', + ]); + + Route::delete('/personal-access-tokens/{token_id}', [ + 'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy', + 'as' => 'personal.tokens.destroy', + ]); + }); + + }); + Route::get('discover', 'DiscoverController@home')->name('discover'); Route::get('discover/tags/{hashtag}', 'DiscoverController@showTags');