From 8c1923f8264b19b44230ca4a3fb236975c67fb28 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Mon, 24 Nov 2025 00:38:37 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Add=20Nostr=20profile=20job,=20H?= =?UTF-8?q?ungarian=20translations,=20and=20Horizon=20integration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Introduced `FetchNostrProfileJob` for retrieving and updating user Nostr profiles. - Added Hungarian translations (`auth.php`, `passwords.php`, `validation.php`, and others) for improved localization. - Integrated Laravel Horizon for enhanced queue management (`HorizonServiceProvider` added, `composer.json` updated). - Updated German and Spanish language files to fix duplicate keys. - Minor route addition for testing Nostr profile job dispatch. --- app/Jobs/FetchNostrProfileJob.php | 203 +++++ app/Providers/HorizonServiceProvider.php | 36 + bootstrap/providers.php | 1 + composer.json | 2 + composer.lock | 724 +++++++++++++++- config/horizon.php | 230 +++++ lang/de.json | 4 +- lang/en.json | 4 +- lang/es.json | 4 +- lang/hu.json | 783 ++++++++++-------- lang/hu/auth.php | 9 + lang/hu/pagination.php | 8 + lang/hu/passwords.php | 11 + lang/hu/validation.php | 158 ++++ lang/nl.json | 4 +- lang/pt.json | 4 +- resources/views/livewire/auth/login.blade.php | 31 +- routes/web.php | 4 + 18 files changed, 1836 insertions(+), 384 deletions(-) create mode 100644 app/Jobs/FetchNostrProfileJob.php create mode 100644 app/Providers/HorizonServiceProvider.php create mode 100644 config/horizon.php create mode 100644 lang/hu/auth.php create mode 100644 lang/hu/pagination.php create mode 100644 lang/hu/passwords.php create mode 100644 lang/hu/validation.php diff --git a/app/Jobs/FetchNostrProfileJob.php b/app/Jobs/FetchNostrProfileJob.php new file mode 100644 index 0000000..907572e --- /dev/null +++ b/app/Jobs/FetchNostrProfileJob.php @@ -0,0 +1,203 @@ +user) { + if (!$this->user->nostr) { + \Log::info('No nostr profile for user', ['user_id' => $this->user->id]); + return; + } + $users = collect([$this->user]); + } else { + $users = User::query()->whereNotNull('nostr')->get(); + \Log::info('Fetching nostr profiles for multiple users', ['count' => $users->count()]); + } + + // Filter valid npub authors + $authors = $users + ->pluck('nostr') + ->map(fn($nostr) => trim($nostr)) + ->filter(fn($nostr) => str_starts_with($nostr, 'npub1')) + ->unique() + ->values() + ->toArray(); + + if (empty($authors)) { + \Log::warning('No valid nostr authors found'); + return; + } + + // Setup filter for kind 0 (profile metadata) + $subscription = new Subscription(); + $filter = new Filter(); + $filter->setAuthors($authors); + $filter->setKinds([0]); + $requestMessage = new RequestMessage($subscription->getId(), [$filter]); + + // Setup relay set + $relays = [ + new Relay('wss://nos.lol'), + new Relay('wss://relay.nostr.band'), + ]; + $relaySet = new RelaySet(); + $relaySet->setRelays($relays); + + // Send request + $request = new Request($relaySet, $requestMessage); + + try { + \Log::info('Fetching from relays', ['relay_count' => count($relays), 'author_count' => count($authors)]); + $response = $request->send(); + + $updated = 0; + $totalMessages = 0; + + foreach ($response as $relayUrl => $relayResponses) { + $messageCount = count($relayResponses); + $totalMessages += $messageCount; + + \Log::info('Received messages from relay', ['url' => $relayUrl, 'count' => $messageCount]); + + foreach ($relayResponses as $message) { + if (!isset($message->event)) { + continue; + } + + try { + $profile = json_decode($message->event->content, true, 512, JSON_THROW_ON_ERROR); + + if (isset($profile['picture'])) { + $npub = (new Key)->convertPublicKeyToBech32($message->event->pubkey); + $user = User::query()->where('nostr', $npub)->first(); + if (isset($profile['name'])) { + $user->name = $profile['name']; + $user->save(); + } + + if ($user) { + $this->downloadAndSaveProfilePhoto($user, $profile['picture']); + $updated++; + } + } + } catch (\JsonException $e) { + \Log::error('Failed to decode profile', [ + 'error' => $e->getMessage(), + 'relay' => $relayUrl, + 'pubkey' => $message->event->pubkey, + ]); + } catch (\Exception $e) { + \Log::error('Failed to download profile photo', [ + 'error' => $e->getMessage(), + 'relay' => $relayUrl, + 'pubkey' => $message->event->pubkey, + ]); + } + } + } + + \Log::info('Finished updating nostr profiles', [ + 'total_messages' => $totalMessages, + 'updated_count' => $updated, + ]); + } catch (\Exception $e) { + \Log::error('Failed to fetch from relays', ['error' => $e->getMessage()]); + } + } + + private function downloadAndSaveProfilePhoto(User $user, string $photoUrl): void + { + try { + // Download the image from the URL + $response = Http::timeout(10)->get($photoUrl); + + if (!$response->successful()) { + \Log::warning('Failed to download profile photo', [ + 'user_id' => $user->id, + 'url' => $photoUrl, + 'status' => $response->status(), + ]); + return; + } + + // Store the file and update the user + tap($user->profile_photo_path, function ($previous) use ($user, $response, $photoUrl) { + $extension = $this->getImageExtension($response->header('Content-Type'), $photoUrl); + $path = 'profile-photos/'.Uuid::uuid1().$extension; + Storage::disk('public') + ->put( + $path, + $response->body(), + ); + + $user->forceFill([ + 'profile_photo_path' => $path, + ])->save(); + + if ($previous) { + Storage::disk('public')->delete($previous); + } + }); + + \Log::info('Profile photo updated from Nostr', [ + 'user_id' => $user->id, + 'url' => $photoUrl, + ]); + } catch (\Exception $e) { + \Log::error('Failed to save profile photo', [ + 'user_id' => $user->id, + 'url' => $photoUrl, + 'error' => $e->getMessage(), + ]); + } + } + + private function getImageExtension(?string $contentType, string $url): string + { + // Try to get extension from content type + if ($contentType) { + $mimeMap = [ + 'image/jpeg' => 'jpg', + 'image/jpg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/webp' => 'webp', + ]; + + if (isset($mimeMap[$contentType])) { + return $mimeMap[$contentType]; + } + } + + // Fallback to URL extension + $pathInfo = pathinfo(parse_url($url, PHP_URL_PATH)); + return $pathInfo['extension'] ?? 'jpg'; + } +} diff --git a/app/Providers/HorizonServiceProvider.php b/app/Providers/HorizonServiceProvider.php new file mode 100644 index 0000000..59599dc --- /dev/null +++ b/app/Providers/HorizonServiceProvider.php @@ -0,0 +1,36 @@ +email, [ + // + ]); + }); + } +} diff --git a/bootstrap/providers.php b/bootstrap/providers.php index 7d50f93..e150abd 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -2,5 +2,6 @@ return [ App\Providers\AppServiceProvider::class, + App\Providers\HorizonServiceProvider::class, App\Providers\VoltServiceProvider::class, ]; diff --git a/composer.json b/composer.json index 4cd576e..758b0f2 100644 --- a/composer.json +++ b/composer.json @@ -14,6 +14,7 @@ "druc/laravel-langscanner": "^2.3", "ezadr/lnurl-php": "^1.0", "laravel/framework": "^12.0", + "laravel/horizon": "^5.40", "laravel/nightwatch": "^1.18", "laravel/sanctum": "^4.0", "laravel/tinker": "^2.10.1", @@ -36,6 +37,7 @@ "spatie/laravel-tags": "^4.10", "staudenmeir/eloquent-has-many-deep": "^1.21", "stefro/laravel-lang-country": "^4.1", + "swentel/nostr-php": "^1.9", "woodsandwalker/laravel-countries": "^1.5" }, "require-dev": { diff --git a/composer.lock b/composer.lock index bdfc3bb..20cab2b 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": "5250639a903d48341be5195e9d652432", + "content-hash": "24839b4dce28e55155e9d485831b812c", "packages": [ { "name": "akuechler/laravel-geoly", @@ -1202,6 +1202,86 @@ ], "time": "2023-10-12T05:21:21+00:00" }, + { + "name": "genkgo/php-asn1", + "version": "v2.8.0", + "source": { + "type": "git", + "url": "https://github.com/genkgo/php-asn1.git", + "reference": "4de712c68bbf51c00551cb45f55642e30fed1fdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/genkgo/php-asn1/zipball/4de712c68bbf51c00551cb45f55642e30fed1fdb", + "reference": "4de712c68bbf51c00551cb45f55642e30fed1fdb", + "shasum": "" + }, + "require": { + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "~2.0", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-bcmath": "BCmath is the fallback extension for big integer calculations", + "ext-curl": "For loading OID information from the web if they have not bee defined statically", + "ext-gmp": "GMP is the preferred extension for big integer calculations", + "phpseclib/bcmath_compat": "BCmath polyfill for servers where neither GMP nor BCmath is available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "FG\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frederik Bosch", + "email": "f.bosch@genkgo.nl", + "role": "Author" + }, + { + "name": "Friedrich Große", + "email": "friedrich.grosse@gmail.com", + "homepage": "https://github.com/FGrosse", + "role": "Author" + }, + { + "name": "All contributors", + "homepage": "https://github.com/genkgo/php-asn1/contributors" + } + ], + "description": "A PHP Framework that allows you to encode and decode arbitrary ASN.1 structures using the ITU-T X.690 Encoding Rules.", + "homepage": "https://github.com/FGrosse/PHPASN1", + "keywords": [ + "DER", + "asn.1", + "asn1", + "ber", + "binary", + "decoding", + "encoding", + "x.509", + "x.690", + "x509", + "x690" + ], + "support": { + "issues": "https://github.com/genkgo/php-asn1/issues", + "source": "https://github.com/genkgo/php-asn1/tree/v2.8.0" + }, + "time": "2025-02-12T20:20:53+00:00" + }, { "name": "graham-campbell/result-type", "version": "v1.1.3", @@ -2038,6 +2118,86 @@ }, "time": "2025-11-18T15:16:10+00:00" }, + { + "name": "laravel/horizon", + "version": "v5.40.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/horizon.git", + "reference": "bc15081bd94a150ca5f299e6b3a5217a05708f97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/horizon/zipball/bc15081bd94a150ca5f299e6b3a5217a05708f97", + "reference": "bc15081bd94a150ca5f299e6b3a5217a05708f97", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcntl": "*", + "ext-posix": "*", + "illuminate/contracts": "^9.21|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.17|^3.0", + "php": "^8.0", + "ramsey/uuid": "^4.0", + "symfony/console": "^6.0|^7.0", + "symfony/error-handler": "^6.0|^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^1.10|^2.0", + "phpunit/phpunit": "^9.0|^10.4|^11.5|^12.0", + "predis/predis": "^1.1|^2.0|^3.0" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0|^3.0)." + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Horizon": "Laravel\\Horizon\\Horizon" + }, + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Horizon\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Dashboard and code-driven configuration for Laravel queues.", + "keywords": [ + "laravel", + "queue" + ], + "support": { + "issues": "https://github.com/laravel/horizon/issues", + "source": "https://github.com/laravel/horizon/tree/v5.40.0" + }, + "time": "2025-11-11T22:41:12+00:00" + }, { "name": "laravel/nightwatch", "version": "v1.18.1", @@ -3004,6 +3164,60 @@ ], "time": "2025-11-18T12:17:23+00:00" }, + { + "name": "leigh/chacha20", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/lt/PHP-ChaCha20.git", + "reference": "7aeffd53228be384b4a8986c9a8d9578acb171a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lt/PHP-ChaCha20/zipball/7aeffd53228be384b4a8986c9a8d9578acb171a4", + "reference": "7aeffd53228be384b4a8986c9a8d9578acb171a4", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.0" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "ChaCha20\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leigh", + "homepage": "https://github.com/lt" + } + ], + "description": "Pure PHP implementation of the ChaCha20 encryption algorithm.", + "homepage": "https://github.com/lt/PHP-ChaCha20", + "keywords": [ + "cipher", + "encryption", + "security", + "stream" + ], + "support": { + "issues": "https://github.com/lt/PHP-ChaCha20/issues", + "source": "https://github.com/lt/PHP-ChaCha20/tree/0.2.0" + }, + "abandoned": true, + "time": "2016-01-14T11:24:17+00:00" + }, { "name": "livewire/flux", "version": "v2.6.1", @@ -4179,6 +4393,96 @@ }, "time": "2025-09-24T15:06:41+00:00" }, + { + "name": "paragonie/ecc", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/phpecc.git", + "reference": "d25bd2aab9b1205db1cf3aa3e83531d4549377bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/phpecc/zipball/d25bd2aab9b1205db1cf3aa3e83531d4549377bf", + "reference": "d25bd2aab9b1205db1cf3aa3e83531d4549377bf", + "shasum": "" + }, + "require": { + "ext-gmp": "*", + "genkgo/php-asn1": "^2", + "paragonie/sodium_compat": "^1|^2", + "php": "^7.1||^8.0" + }, + "require-dev": { + "bitcoin/bips": "dev-master", + "c2sp/wycheproof": "dev-master", + "ext-json": "*", + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^2|^3", + "symfony/yaml": "^2.6|^3.0|^4|^5|^6|^7", + "vimeo/psalm": "^2|^3|^4|^5|^6" + }, + "suggest": { + "ext-openssl": "(PHP 8.1, OpenSSL 3+) Improved performance, less worries about side-channels" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mdanter\\Ecc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "New Maintainer" + }, + { + "name": "Matyas Danter", + "homepage": "http://matejdanter.com/", + "role": "Previous Author" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io", + "homepage": "http://aztech.io", + "role": "Previous Maintainer" + }, + { + "name": "Thomas Kerin", + "email": "afk11@users.noreply.github.com", + "role": "Previous Maintainer" + } + ], + "description": "PHP Elliptic Curve Cryptography library", + "homepage": "https://github.com/phpecc/phpecc", + "keywords": [ + "Diffie", + "ECDSA", + "Hellman", + "curve", + "ecdh", + "elliptic", + "nistp192", + "nistp224", + "nistp256", + "nistp384", + "nistp521", + "phpecc", + "secp256k1", + "secp256r1" + ], + "support": { + "issues": "https://github.com/paragonie/phpecc/issues", + "source": "https://github.com/paragonie/phpecc/tree/v2.5.0" + }, + "time": "2025-07-19T01:25:49+00:00" + }, { "name": "paragonie/sodium_compat", "version": "v2.4.0", @@ -4350,6 +4654,359 @@ ], "time": "2025-08-21T11:53:16+00:00" }, + { + "name": "phrity/comparison", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-comparison.git", + "reference": "aedd44d59db08de7d6c31812d1490c22aab35c92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-comparison/zipball/aedd44d59db08de7d6c31812d1490c22aab35c92", + "reference": "aedd44d59db08de7d6c31812d1490c22aab35c92", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Comparison\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "Interfaces and helper trait for comparing objects. Comparator for sort and filter applications.", + "homepage": "https://phrity.sirn.se/comparison", + "keywords": [ + "comparable", + "comparator", + "comparison", + "equalable", + "filter", + "sort" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-comparison/issues", + "source": "https://github.com/sirn-se/phrity-comparison/tree/1.4.0" + }, + "time": "2025-05-26T20:12:39+00:00" + }, + { + "name": "phrity/http", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-http.git", + "reference": "536e3e46e6220d171a59599ed1f4da9f6b6244fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-http/zipball/536e3e46e6220d171a59599ed1f4da9f6b6244fc", + "reference": "536e3e46e6220d171a59599ed1f4da9f6b6244fc", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 | ^2.0" + }, + "require-dev": { + "guzzlehttp/psr7": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "robiningelbrecht/phpunit-coverage-tools": "^1.9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "Utilities and interfaces for handling HTTP.", + "homepage": "https://phrity.sirn.se/http", + "keywords": [ + "HTTP Factories", + "http", + "psr-17" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-http/issues", + "source": "https://github.com/sirn-se/phrity-http/tree/1.0.0" + }, + "time": "2025-09-07T17:04:26+00:00" + }, + { + "name": "phrity/net-stream", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-net-stream.git", + "reference": "c621bb3108a5a02bba64df2e5f0cd7ada02665b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/c621bb3108a5a02bba64df2e5f0cd7ada02665b5", + "reference": "c621bb3108a5a02bba64df2e5f0cd7ada02665b5", + "shasum": "" + }, + "require": { + "php": "^8.1", + "phrity/util-errorhandler": "^1.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 | ^2.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "phrity/net-uri": "^2.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Net\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "Socket stream classes implementing PSR-7 Stream and PSR-17 StreamFactory", + "homepage": "https://phrity.sirn.se/net-stream", + "keywords": [ + "Socket", + "client", + "psr-17", + "psr-7", + "server", + "stream", + "stream factory" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-net-stream/issues", + "source": "https://github.com/sirn-se/phrity-net-stream/tree/2.3.1" + }, + "time": "2025-08-08T09:51:04+00:00" + }, + { + "name": "phrity/net-uri", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-net-uri.git", + "reference": "08de4cf07e439c4708f572249659f09198ac99f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-net-uri/zipball/08de4cf07e439c4708f572249659f09198ac99f0", + "reference": "08de4cf07e439c4708f572249659f09198ac99f0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "phrity/comparison": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 | ^2.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "phrity/util-errorhandler": "^1.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-intl": "Enables IDN conversion for non-ASCII domains" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Net\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "PSR-7 Uri and PSR-17 UriFactory implementation", + "homepage": "https://phrity.sirn.se/net-uri", + "keywords": [ + "psr-17", + "psr-7", + "uri", + "uri factory" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-net-uri/issues", + "source": "https://github.com/sirn-se/phrity-net-uri/tree/2.2.0" + }, + "time": "2025-05-25T13:05:13+00:00" + }, + { + "name": "phrity/util-errorhandler", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-util-errorhandler.git", + "reference": "9825f15ef9b4a93252ce53ca8962278832d834da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-util-errorhandler/zipball/9825f15ef9b4a93252ce53ca8962278832d834da", + "reference": "9825f15ef9b4a93252ce53ca8962278832d834da", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Util\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "Inline error handler; catch and resolve errors for code block.", + "homepage": "https://phrity.sirn.se/util-errorhandler", + "keywords": [ + "error", + "warning" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-util-errorhandler/issues", + "source": "https://github.com/sirn-se/phrity-util-errorhandler/tree/1.2.1" + }, + "time": "2025-08-08T09:48:45+00:00" + }, + { + "name": "phrity/websocket", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/websocket-php.git", + "reference": "3f16b2564a230bbce716cccaff2f6156a60a8798" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/3f16b2564a230bbce716cccaff2f6156a60a8798", + "reference": "3f16b2564a230bbce716cccaff2f6156a60a8798", + "shasum": "" + }, + "require": { + "php": "^8.1", + "phrity/http": "^1.0", + "phrity/net-stream": "^2.3", + "phrity/net-uri": "^2.1", + "psr/http-message": "^1.1 | ^2.0", + "psr/log": "^1.0 | ^2.0 | ^3.0" + }, + "require-dev": { + "guzzlehttp/psr7": "^2.0", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0", + "phrity/logger-console": "^1.0", + "phrity/net-mock": "^2.3", + "phrity/util-errorhandler": "^1.1", + "robiningelbrecht/phpunit-coverage-tools": "^1.9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "WebSocket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Fredrik Liljegren" + }, + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "WebSocket client and server", + "homepage": "https://phrity.sirn.se/websocket", + "keywords": [ + "client", + "server", + "websocket" + ], + "support": { + "issues": "https://github.com/sirn-se/websocket-php/issues", + "source": "https://github.com/sirn-se/websocket-php/tree/3.6.0" + }, + "time": "2025-09-08T16:21:41+00:00" + }, { "name": "psr/clock", "version": "1.0.0", @@ -6800,6 +7457,71 @@ }, "time": "2025-11-13T06:15:42+00:00" }, + { + "name": "swentel/nostr-php", + "version": "1.9.2", + "source": { + "type": "git", + "url": "https://github.com/nostrver-se/nostr-php.git", + "reference": "8fb8337354b2e9d48a901276c7814d7fa7b25653" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nostrver-se/nostr-php/zipball/8fb8337354b2e9d48a901276c7814d7fa7b25653", + "reference": "8fb8337354b2e9d48a901276c7814d7fa7b25653", + "shasum": "" + }, + "require": { + "bitwasp/bech32": "^0.0.1", + "ext-gmp": "*", + "ext-xml": "*", + "leigh/chacha20": "^0.2.0", + "paragonie/ecc": "^2.4", + "php": ">=8.1 <8.5", + "phrity/websocket": "^3.0", + "simplito/elliptic-php": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.51", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "swentel\\nostr\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Hagens", + "email": "info@sebastix.nl", + "homepage": "https://sebastix.nl", + "role": "Developer & maintainer" + }, + { + "name": "Kristof De Jaeger", + "homepage": "https://realize.be", + "role": "Original author" + } + ], + "description": "Nostr helper library for PHP", + "homepage": "https://nostr-php.dev", + "keywords": [ + "library", + "nostr" + ], + "support": { + "chat": "https://t.me/nostr_php", + "issue": "https://github.com/swentel/nostr-php/issues", + "issues": "https://github.com/nostrver-se/nostr-php/issues", + "source": "https://github.com/nostrver-se/nostr-php/tree/1.9.2" + }, + "time": "2025-06-04T14:51:06+00:00" + }, { "name": "symfony/clock", "version": "v7.3.0", diff --git a/config/horizon.php b/config/horizon.php new file mode 100644 index 0000000..1153f9d --- /dev/null +++ b/config/horizon.php @@ -0,0 +1,230 @@ + env('HORIZON_NAME'), + + /* + |-------------------------------------------------------------------------- + | Horizon Domain + |-------------------------------------------------------------------------- + | + | This is the subdomain where Horizon will be accessible from. If this + | setting is null, Horizon will reside under the same domain as the + | application. Otherwise, this value will serve as the subdomain. + | + */ + + 'domain' => env('HORIZON_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | Horizon Path + |-------------------------------------------------------------------------- + | + | This is the URI path where Horizon will be accessible from. Feel free + | to change this path to anything you like. Note that the URI will not + | affect the paths of its internal API that aren't exposed to users. + | + */ + + 'path' => env('HORIZON_PATH', 'horizon'), + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Connection + |-------------------------------------------------------------------------- + | + | This is the name of the Redis connection where Horizon will store the + | meta information required for it to function. It includes the list + | of supervisors, failed jobs, job metrics, and other information. + | + */ + + 'use' => 'default', + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Prefix + |-------------------------------------------------------------------------- + | + | This prefix will be used when storing all Horizon data in Redis. You + | may modify the prefix when you are running multiple installations + | of Horizon on the same server so that they don't have problems. + | + */ + + 'prefix' => env( + 'HORIZON_PREFIX', + Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:' + ), + + /* + |-------------------------------------------------------------------------- + | Horizon Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will get attached onto each Horizon route, giving you + | the chance to add your own middleware to this list or change any of + | the existing middleware. Or, you can simply stick with this list. + | + */ + + 'middleware' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Queue Wait Time Thresholds + |-------------------------------------------------------------------------- + | + | This option allows you to configure when the LongWaitDetected event + | will be fired. Every connection / queue combination may have its + | own, unique threshold (in seconds) before this event is fired. + | + */ + + 'waits' => [ + 'redis:default' => 60, + ], + + /* + |-------------------------------------------------------------------------- + | Job Trimming Times + |-------------------------------------------------------------------------- + | + | Here you can configure for how long (in minutes) you desire Horizon to + | persist the recent and failed jobs. Typically, recent jobs are kept + | for one hour while all failed jobs are stored for an entire week. + | + */ + + 'trim' => [ + 'recent' => 60, + 'pending' => 60, + 'completed' => 60, + 'recent_failed' => 10080, + 'failed' => 10080, + 'monitored' => 10080, + ], + + /* + |-------------------------------------------------------------------------- + | Silenced Jobs + |-------------------------------------------------------------------------- + | + | Silencing a job will instruct Horizon to not place the job in the list + | of completed jobs within the Horizon dashboard. This setting may be + | used to fully remove any noisy jobs from the completed jobs list. + | + */ + + 'silenced' => [ + // App\Jobs\ExampleJob::class, + ], + + 'silenced_tags' => [ + // 'notifications', + ], + + /* + |-------------------------------------------------------------------------- + | Metrics + |-------------------------------------------------------------------------- + | + | Here you can configure how many snapshots should be kept to display in + | the metrics graph. This will get used in combination with Horizon's + | `horizon:snapshot` schedule to define how long to retain metrics. + | + */ + + 'metrics' => [ + 'trim_snapshots' => [ + 'job' => 24, + 'queue' => 24, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Fast Termination + |-------------------------------------------------------------------------- + | + | When this option is enabled, Horizon's "terminate" command will not + | wait on all of the workers to terminate unless the --wait option + | is provided. Fast termination can shorten deployment delay by + | allowing a new instance of Horizon to start while the last + | instance will continue to terminate each of its workers. + | + */ + + 'fast_termination' => false, + + /* + |-------------------------------------------------------------------------- + | Memory Limit (MB) + |-------------------------------------------------------------------------- + | + | This value describes the maximum amount of memory the Horizon master + | supervisor may consume before it is terminated and restarted. For + | configuring these limits on your workers, see the next section. + | + */ + + 'memory_limit' => 64, + + /* + |-------------------------------------------------------------------------- + | Queue Worker Configuration + |-------------------------------------------------------------------------- + | + | Here you may define the queue worker settings used by your application + | in all environments. These supervisors and settings handle all your + | queued jobs and will be provisioned by Horizon during deployment. + | + */ + + 'defaults' => [ + 'supervisor-1' => [ + 'connection' => 'redis', + 'queue' => ['default'], + 'balance' => 'auto', + 'autoScalingStrategy' => 'time', + 'maxProcesses' => 1, + 'maxTime' => 0, + 'maxJobs' => 0, + 'memory' => 128, + 'tries' => 1, + 'timeout' => 60, + 'nice' => 0, + ], + ], + + 'environments' => [ + 'production' => [ + 'supervisor-1' => [ + 'maxProcesses' => 10, + 'balanceMaxShift' => 1, + 'balanceCooldown' => 3, + ], + ], + + 'local' => [ + 'supervisor-1' => [ + 'maxProcesses' => 3, + ], + ], + ], +]; diff --git a/lang/de.json b/lang/de.json index 5da6e71..deaa620 100644 --- a/lang/de.json +++ b/lang/de.json @@ -115,6 +115,7 @@ "Edit City": "", "Edit Venue": "", "Einführung": "", + "Einundzwanzig Portal": "", "Email": "E-Mail", "Email Address": "E-Mail-Adresse", "Email address": "E-Mail-Adresse", @@ -457,6 +458,5 @@ "Öffnen/RSVP": "", "Über den Dozenten": "", "Über den Kurs": "", - "Über uns": "", - "Einundzwanzig Portal": "" + "Über uns": "" } \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 6731e67..4ae221a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -115,6 +115,7 @@ "Edit City": "Edit City", "Edit Venue": "Edit Venue", "Einführung": "Introduction", + "Einundzwanzig Portal": "Twenty One Portal", "Email": "Email", "Email Address": "Email Address", "Email address": "Email address", @@ -457,6 +458,5 @@ "Öffnen/RSVP": "Open/RSVP", "Über den Dozenten": "About the lecturer", "Über den Kurs": "About the course", - "Über uns": "About us", - "Einundzwanzig Portal": "Twenty One Portal" + "Über uns": "About us" } \ No newline at end of file diff --git a/lang/es.json b/lang/es.json index 34c6409..46837c9 100644 --- a/lang/es.json +++ b/lang/es.json @@ -115,6 +115,7 @@ "Edit City": "Editar ciudad", "Edit Venue": "Editar lugar", "Einführung": "Introducción", + "Einundzwanzig Portal": "Portal Veintiuno", "Email": "Correo electrónico", "Email Address": "Correo electrónico", "Email address": "Correo electrónico", @@ -456,6 +457,5 @@ "Öffnen/RSVP": "Abrir/RSVP", "Über den Dozenten": "Sobre el profesor", "Über den Kurs": "Sobre el curso", - "Über uns": "Sobre nosotros", - "Einundzwanzig Portal": "Portal Veintiuno" + "Über uns": "Sobre nosotros" } \ No newline at end of file diff --git a/lang/hu.json b/lang/hu.json index 50a38f6..2fddf00 100644 --- a/lang/hu.json +++ b/lang/hu.json @@ -1,379 +1,456 @@ { - "Login - Bitcoin Meetups": "Bejelentkezés - Bitcoin Meetupok", - "Logge dich ein, um auf dein Bitcoin Meetup Konto zuzugreifen und an der Community teilzunehmen.": "Jelentkezz be a Bitcoin Meetup fiókodba, és csatlakozz a közösséghez.", - "Dashboard - Bitcoin Meetups": "Irányítópult - Bitcoin Meetupok", - "Verwalte deine Bitcoin Meetups, Events und Einstellungen in deinem persönlichen Dashboard.": "Kezeld Bitcoin meetupjaidat, eseményeidet és beállításaidat személyes irányítópultodon.", - "Willkommen bei Bitcoin Meetups": "Üdvözlünk a Bitcoin Meetupoknál", - "Entdecke die Bitcoin Community in deiner Nähe. Finde lokale Meetups und vernetze dich mit Gleichgesinnten.": "Fedezd fel a Bitcoin közösséget a közeledben. Találj helyi meetupokat és kapcsolódj hasonló gondolkodásúakhoz.", - "Follow the Rabbit - Bitcoin Journey": "Kövesd a Nyulat - Bitcoin Utazás", - "Starte deine Bitcoin-Reise und entdecke spannende Inhalte rund um Bitcoin und Blockchain.": "Kezdd el Bitcoin utazásodat és fedezz fel izgalmas tartalmakat a Bitcoinról és a blockchainről.", - "Neue Stadt hinzufügen - Bitcoin Meetups": "Új város hozzáadása - Bitcoin Meetupok", - "Füge eine neue Stadt hinzu, um Bitcoin Meetups in deiner Region zu organisieren.": "Adj hozzá egy új várost, hogy Bitcoin meetupokat szervezhess a régiódban.", - "Stadt bearbeiten - Bitcoin Meetups": "Város szerkesztése - Bitcoin Meetupok", - "Aktualisiere die Informationen für Bitcoin Meetup Standorte in deiner Stadt.": "Frissítsd a Bitcoin meetup helyszínek információit a városodban.", - "Städteübersicht - Bitcoin Meetups": "Városok áttekintése - Bitcoin Meetupok", - "Durchsuche alle Städte mit aktiven Bitcoin Meetups und finde Events in deiner Nähe.": "Böngészd az összes várost aktív Bitcoin meetupokkal és találj eseményeket a közeledben.", - "Neuen Kurs erstellen - Bitcoin Education": "Új kurzus létrehozása - Bitcoin Oktatás", - "Erstelle einen neuen Bitcoin-Bildungskurs und teile dein Wissen mit der Community.": "Hozz létre egy új Bitcoin oktatási kurzust és oszd meg tudásodat a közösséggel.", - "Kursevents bearbeiten - Bitcoin Education": "Kurzusesemények szerkesztése - Bitcoin Oktatás", - "Verwalte die Termine und Details deiner Bitcoin-Bildungsveranstaltungen.": "Kezeld Bitcoin oktatási rendezvényeid időpontjait és részleteit.", - "Kurs bearbeiten - Bitcoin Education": "Kurzus szerkesztése - Bitcoin Oktatás", - "Aktualisiere die Inhalte und Informationen deines Bitcoin-Bildungskurses.": "Frissítsd Bitcoin oktatási kurzusod tartalmát és információit.", - "Bitcoin Kurse - Übersicht": "Bitcoin Kurzusok - Áttekintés", - "Entdecke unsere vielfältigen Bitcoin-Bildungsangebote und Workshops.": "Fedezd fel változatos Bitcoin oktatási kínálatunkat és workshopjainkat.", - "Bitcoin Bildung & Kurse": "Bitcoin Oktatás & Kurzusok", - "Lerne alles über Bitcoin - von den Grundlagen bis zu fortgeschrittenen Themen.": "Tanulj mindent a Bitcoinról - az alapoktól a haladó témákig.", - "Dozent werden - Bitcoin Education": "Oktató leszek - Bitcoin Oktatás", - "Werde Bitcoin-Dozent und teile dein Expertenwissen mit der Community.": "Válj Bitcoin oktatóvá és oszd meg szakértői tudásodat a közösséggel.", - "Dozentenprofil bearbeiten": "Oktatói profil szerkesztése", - "Aktualisiere dein Profil als Bitcoin-Dozent und deine Kursangebote.": "Frissítsd Bitcoin oktatói profilodat és kurzuskínálatodat.", - "Bitcoin Dozenten - Übersicht": "Bitcoin Oktatók - Áttekintés", - "Lerne unsere erfahrenen Bitcoin-Dozenten und ihre Expertise kennen.": "Ismerd meg tapasztalt Bitcoin oktatóinkat és szakértelmüket.", - "Bitcoin Meetup Events verwalten": "Bitcoin Meetup események kezelése", - "Erstelle und bearbeite Bitcoin Meetup Events für deine Community.": "Hozz létre és szerkessz Bitcoin meetup eseményeket a közösséged számára.", - "Meetup bearbeiten - Bitcoin Events": "Meetup szerkesztése - Bitcoin Események", - "Aktualisiere die Details und Informationen deines Bitcoin Meetups.": "Frissítsd Bitcoin meetupod részleteit és információit.", - "Bitcoin Meetups - Alle Events": "Bitcoin Meetupok - Minden esemény", - "Finde alle aktuellen Bitcoin Meetups und Events in deiner Region.": "Találd meg az összes aktuális Bitcoin meetupot és eseményt a régiódban.", - "Bitcoin Meetups - Community Events": "Bitcoin Meetupok - Közösségi események", - "Entdecke Bitcoin Community Events und vernetze dich mit Gleichgesinnten.": "Fedezd fel a Bitcoin közösségi eseményeket és kapcsolódj hasonló gondolkodásúakhoz.", - "Bitcoin Event Details": "Bitcoin esemény részletei", - "Alle Informationen zum ausgewählten Bitcoin Meetup Event.": "Minden információ a kiválasztott Bitcoin meetup eseményről.", - "Bitcoin Meetups Karte": "Bitcoin Meetupok térkép", - "Finde Bitcoin Meetups in deiner Nähe mit unserer interaktiven Karte.": "Találj Bitcoin meetupokat a közeledben interaktív térképünkkel.", - "Erscheinungsbild - Einstellungen": "Megjelenés - Beállítások", - "Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Szabd testre Bitcoin meetup profilod megjelenését.", - "Konto löschen - Bitcoin Meetups": "Fiók törlése - Bitcoin Meetupok", - "Informationen zum Löschen deines Bitcoin Meetup Kontos.": "Információk Bitcoin meetup fiókod törléséről.", - "Passwort ändern - Bitcoin Meetups": "Jelszó módosítása - Bitcoin Meetupok", - "Ändere dein Passwort für mehr Sicherheit deines Bitcoin Meetup Kontos.": "Változtasd meg jelszavadat Bitcoin meetup fiókod nagyobb biztonsága érdekében.", - "Profil bearbeiten - Bitcoin Meetups": "Profil szerkesztése - Bitcoin Meetupok", - "Aktualisiere deine persönlichen Informationen und Profileinstellungen.": "Frissítsd személyes adataidat és profilbeállításaidat.", - "Neuen Veranstaltungsort erstellen": "Új helyszín létrehozása", - "Füge einen neuen Ort für Bitcoin Meetups und Events hinzu.": "Adj hozzá új helyszínt Bitcoin meetupokhoz és eseményekhez.", - "Veranstaltungsort bearbeiten": "Helyszín szerkesztése", - "Aktualisiere die Details eines Bitcoin Meetup Veranstaltungsortes.": "Frissítsd egy Bitcoin meetup helyszín részleteit.", - "Veranstaltungsorte - Übersicht": "Helyszínek - Áttekintés", - "Finde alle Veranstaltungsorte für Bitcoin Meetups und Events.": "Találd meg az összes helyszínt Bitcoin meetupokhoz és eseményekhez.", - "Willkommen": "Üdvözlünk", - "Toximalistisches Infotainment für bullische Bitcoiner.": "Toximalista infotainment bullish bitcoinerek számára.", - "no location set": "nincs helyszín beállítva", - "BooksForPlebs": "KönyvekPlebseknek", - "Lokale Buchausleihe für Bitcoin-Meetups.": "Helyi könyvkölcsönzés Bitcoin meetupokhoz.", - "Bitcoin - Rabbit Hole": "Bitcoin - Nyúlüreg", - "Dies ist ein großartiger Überblick über die Bitcoin-Kaninchenhöhle mit Zugängen zu Bereichen, die Bitcoin umfasst. Jedes Thema hat seine eigene Kaninchenhöhle, die durch Infografiken auf einfache und verständliche Weise visualisiert wird, mit QR-Codes, die zu erklärenden Videos und Artikeln führen. Viel Spaß auf Ihrer Entdeckungsreise!": "Ez egy nagyszerű áttekintés a Bitcoin nyúlüregről, hozzáféréssel a Bitcoin által érintett területekhez. Minden témának saját nyúlürege van, amely infografikákkal egyszerű és érthető módon van megjelenítve, QR-kódokkal, amelyek magyarázó videókhoz és cikkekhez vezetnek. Jó szórakozást a felfedező utadon!", - "Saved.": "Mentve.", - "Einundzwanzig Portal": "Huszonegy Portál", - "Sprache wählen": "Nyelv választása", - "Dashboard": "Irányítópult", - "Search": "Keresés", - "Repository": "Adattár", - "Documentation": "Dokumentáció", - "Settings": "Beállítások", - "Log Out": "Kijelentkezés", - "Platform": "Platform", - "Success!": "Sikeres!", - "Copied into clipboard": "Vágólapra másolva", - "App": "Alkalmazás", - "Meetups": "Meetupok", - "Karte": "Térkép", - "Kurse": "Kurzusok", - "Dozenten": "Oktatók", - "Diverses": "Egyebek", - "Orte/Gebiete": "Helyek/Területek", - "Städte/Gebiete": "Városok/Területek", - "Veranstaltungsorte": "Helyszínek", - "Sprache wechseln": "Nyelv váltása", - "Nächster Termin": "Következő időpont", - "Zusagen": "Részvétel", - "Vielleicht": "Talán", - "Telegram": "Telegram", - "Website": "Weboldal", - "Twitter": "Twitter", - "Matrix": "Matrix", - "Nostr": "Nostr", - "Simplex": "Simplex", - "Signal": "Signal", - "Details": "Részletek", - "Profile": "Profil", - "Password": "Jelszó", - "Appearance": "Megjelenés", - "Unauthorized": "Jogosulatlan", - "Payment Required": "Fizetés szükséges", - "Forbidden": "Tiltott", - "Not Found": "Nem található", - "Page Expired": "Oldal lejárt", - "Too Many Requests": "Túl sok kérés", - "Server Error": "Szerverhiba", - "Service Unavailable": "Szolgáltatás nem érhető el", - "Confirm password": "Jelszó megerősítése", - "This is a secure area of the application. Please confirm your password before continuing.": "Ez az alkalmazás biztonságos területe. Kérjük, erősítsd meg jelszavadat a folytatás előtt.", - "Confirm": "Megerősítés", - "A reset link will be sent if the account exists.": "Visszaállítási linket küldünk, ha a fiók létezik.", - "Forgot password": "Elfelejtett jelszó", - "Enter your email to receive a password reset link": "Add meg email címedet, hogy jelszó-visszaállítási linket kapj", - "Email Address": "Email cím", - "Email password reset link": "Jelszó-visszaállítási link emailben", - "Or, return to": "Vagy térj vissza", - "log in": "bejelentkezés", - "Willkommen zurück": "Üdv újra", - "Log in mit Nostr": "Bejelentkezés Nostrral", - "Copy": "Másolás", - "Click to connect": "Kattints a kapcsolódáshoz", - "Create an account": "Fiók létrehozása", - "Enter your details below to create your account": "Add meg adataidat alább fiókod létrehozásához", - "Name": "Név", - "Full name": "Teljes név", - "Email address": "Email cím", - "Create account": "Fiók létrehozása", - "Already have an account?": "Már van fiókod?", - "Log in": "Bejelentkezés", - "Reset password": "Jelszó visszaállítása", - "Please enter your new password below": "Kérjük, add meg új jelszavadat alább", - "Email": "Email", - "Please verify your email address by clicking on the link we just emailed to you.": "Kérjük, erősítsd meg email címedet az általunk küldött linkre kattintva.", - "A new verification link has been sent to the email address you provided during registration.": "Új megerősítő linket küldtünk a regisztráció során megadott email címre.", - "Resend verification email": "Megerősítő email újraküldése", - "Log out": "Kijelentkezés", - "City successfully created!": "Város sikeresen létrehozva!", - "Create City": "Város létrehozása", - "Basic Information": "Alapinformációk", - "Country": "Ország", - "Select a country": "Válassz országot", - "Coordinates": "Koordináták", - "Latitude": "Szélesség", - "Longitude": "Hosszúság", - "Demographics": "Demográfia", - "Population": "Népesség", - "Population Date": "Népesség dátuma", - "Cancel": "Mégse", - "City successfully updated!": "Város sikeresen frissítve!", - "Edit City": "Város szerkesztése", - "Update City": "Város frissítése", - "Cities": "Városok", - "Search cities...": "Városok keresése...", - "Created By": "Létrehozta", + "(and :count more error)": "(és még :count hiba)", + "(and :count more errors)": "(és még :count hiba)|(és még :count hiba)|(és még :count hiba)", + "2FA Recovery Codes": "2FA helyreállítási kódok", + "A decryption key is required.": "Dekódoló kulcs szükséges.", + "A new verification link has been sent to the email address you provided during registration.": "Egy új ellenőrző linket küldtek a regisztráció során megadott e-mail címre.", + "A new verification link has been sent to your email address.": "Új ellenőrző linket küldtünk az e-mail címére.", + "A reset link will be sent if the account exists.": "Ha a fiók létezik, akkor visszaállítást küldünk.", + "Abbrechen": "Mégse", + "Absagen": "Lemondás", "Actions": "Műveletek", - "Edit": "Szerkesztés", - "Wähle dein Land...": "Válaszd ki országod...", - "Land": "Ország", - "Suche dein Land...": "Keresd országod...", + "Aktionen": "Műveletek", + "Aktiv": "Aktív", + "Aktualisiere dein Profil als Bitcoin-Dozent und deine Kursangebote.": "Frissítsd Bitcoin oktatói profilodat és kurzuskínálatodat.", + "Aktualisiere deine persönlichen Informationen und Profileinstellungen.": "Frissítsd személyes adataidat és profilbeállításaidat.", + "Aktualisiere die Details eines Bitcoin Meetup Veranstaltungsortes.": "Frissítsd egy Bitcoin meetup helyszín részleteit.", + "Aktualisiere die Details und Informationen deines Bitcoin Meetups.": "Frissítsd Bitcoin meetupod részleteit és információit.", + "Aktualisiere die Informationen für Bitcoin Meetup Standorte in deiner Stadt.": "Frissítsd a Bitcoin meetup helyszínek információit a városodban.", + "Aktualisiere die Inhalte und Informationen deines Bitcoin-Bildungskurses.": "Frissítsd Bitcoin oktatási kurzusod tartalmát és információit.", + "Aktualisiert am": "Frissítve", + "All rights reserved.": "Minden jog fenntartva.", + "Alle Informationen zum ausgewählten Bitcoin Meetup Event.": "Minden információ a kiválasztott Bitcoin meetup eseményről.", + "Alle Meetups anzeigen": "Minden meetup megjelenítése", + "Already have an account?": "Már van fiókja?", + "An welchem Tag beginnt das Event?": "Melyik napon kezdődik az esemény?", + "An welchem Tag endet das Event?": "Melyik napon ér véget az esemény?", + "An welchem Tag findet das Event statt?": "Melyik napon lesz az esemény?", + "Anmeldungen": "Regisztrációk", + "App": "Alkalmazás", + "Appearance": "Megjelenés", + "Are you sure you want to delete your account?": "Biztos benne, hogy törölni akarja fiókját?", + "Auf Karte sichtbar": "Látható a térképen", + "aus deinen Meetups entfernen?": "eltávolítani meetupjaid közül?", + "Ausführliche Beschreibung des Kurses": "A kurzus részletes leírása", + "Ausführliche Beschreibung und Biografie": "Részletes leírás és életrajz", + "Authentication Code": "Hitelesítési kód", + "Back": "Vissza", + "Basic Information": "Alapinformációk", + "Bearbeiten": "Szerkesztés", + "Beschreibe das Event...": "Írd le az eseményt...", + "Beschreibung": "Leírás", + "Bist du sicher, dass du dieses Event löschen möchtest?": "Biztos vagy benne, hogy törölni szeretnéd ezt az eseményt?", + "Bitcoin - Rabbit Hole": "Bitcoin - Nyúlüreg", + "Bitcoin Bildung & Kurse": "Bitcoin Oktatás & Kurzusok", + "Bitcoin Dozenten - Übersicht": "Bitcoin Oktatók - Áttekintés", + "Bitcoin Event Details": "Bitcoin esemény részletei", + "Bitcoin Kurse - Übersicht": "Bitcoin Kurzusok - Áttekintés", + "Bitcoin Meetup Events verwalten": "Bitcoin Meetup események kezelése", + "Bitcoin Meetups": "Bitcoin Meetupok", + "Bitcoin Meetups - Alle Events": "Bitcoin Meetupok - Minden esemény", + "Bitcoin Meetups - Community Events": "Bitcoin Meetupok - Közösségi események", + "Bitcoin Meetups Karte": "Bitcoin Meetupok térkép", + "BooksForPlebs": "KönyvekPlebseknek", + "Breitengrad": "Szélesség", + "Cancel": "Mégsem", + "Cities": "Városok", + "City": "Város", + "City successfully created!": "Város sikeresen létrehozva!", + "City successfully updated!": "Város sikeresen frissítve!", + "Click here to re-send the verification email.": "Kattintson ide az ellenőrző e-mail újbóli elküldéséhez.", + "Click to connect": "Kattints a kapcsolódáshoz", + "Close": "Közeli", + "Confirm": "Megerősítés", + "Confirm password": "Erősítse meg a jelszót", + "Confirm Password": "Jelszó megerősítése", + "Continue": "Folytatódik", + "Coordinates": "Koordináták", + "Copied into clipboard": "Vágólapra másolva", + "Copy": "Másolás", + "Country": "Ország", + "Create account": "Hozzon létre fiókot", + "Create an account": "Hozzon létre egy fiókot", + "Create City": "Város létrehozása", + "Create Venue": "Helyszín létrehozása", + "Created By": "Létrehozta", + "Current password": "Jelenlegi jelszó", + "Dark": "Sötét", + "Dashboard": "Műszerfal", + "Dashboard - Bitcoin Meetups": "Irányítópult - Bitcoin Meetupok", + "Datum": "Dátum", + "Dein Name": "Neved", + "Delete account": "Fiók törlése", + "Delete your account and all of its resources": "Törölje fiókját és minden erőforrását", + "Demographics": "Demográfia", + "Der Anzeigename für diesen Kurs": "A kurzus megjelenítendő neve", + "Der Anzeigename für dieses Meetup": "A meetup megjelenítendő neve", + "Der Dozent, der diesen Kurs leitet": "Az oktató, aki ezt a kurzust vezeti", + "Details": "Részletek", + "Details über das Event": "Az esemény részletei", + "Details/Anmelden": "Részletek/Regisztráció", "Die Endzeit muss nach der Startzeit liegen.": "A befejezési időnek a kezdési idő után kell lennie.", + "Die nächstgrößte Stadt oder Ort": "A legközelebbi nagyobb város vagy hely", + "Dies ist ein großartiger Überblick über die Bitcoin-Kaninchenhöhle mit Zugängen zu Bereichen, die Bitcoin umfasst. Jedes Thema hat seine eigene Kaninchenhöhle, die durch Infografiken auf einfache und verständliche Weise visualisiert wird, mit QR-Codes, die zu erklärenden Videos und Artikeln führen. Viel Spaß auf Ihrer Entdeckungsreise!": "Ez egy nagyszerű áttekintés a Bitcoin nyúlüregről, hozzáféréssel a Bitcoin által érintett területekhez. Minden témának saját nyúlürege van, amely infografikákkal egyszerű és érthető módon van megjelenítve, QR-kódokkal, amelyek magyarázó videókhoz és cikkekhez vezetnek. Jó szórakozást a felfedező utadon!", + "Disable 2FA": "Tiltsa le a 2FA -t", + "Disabled": "Fogyatékkal élők", + "Diverses": "Egyebek", + "Documentation": "Dokumentáció", + "Don't have an account?": "Nincs fiókja?", + "Dozent": "Oktató", + "Dozent aktualisieren": "Oktató frissítése", + "Dozent auswählen": "Oktató kiválasztása", + "Dozent bearbeiten": "Oktató szerkesztése", + "Dozent erfolgreich aktualisiert!": "Oktató sikeresen frissítve!", + "Dozent erfolgreich erstellt!": "Oktató sikeresen létrehozva!", + "Dozent werden - Bitcoin Education": "Oktató leszek - Bitcoin Oktatás", + "Dozenten": "Oktatók", + "Dozenten anlegen": "Oktató létrehozása", + "Dozenten erstellen": "Oktató létrehozása", + "Dozentenprofil bearbeiten": "Oktatói profil szerkesztése", + "Du bist nicht eingloggt und musst deshalb den Namen selbst eintippen.": "Nem vagy bejelentkezve, ezért be kell írnod a nevedet.", + "Du kannst es jederzeit wieder hinzufügen.": "Bármikor újra hozzáadhatod.", + "Durchsuche alle Städte mit aktiven Bitcoin Meetups und finde Events in deiner Nähe.": "Böngészd az összes várost aktív Bitcoin meetupokkal és találj eseményeket a közeledben.", + "Each recovery code can be used once to access your account and will be removed after use. If you need more, click Regenerate Codes above.": "Minden helyreállítási kód egyszer használható a fiókjához való hozzáféréshez, és használat után eltávolítható. Ha még többre van szüksége, kattintson a fenti Regenerate kódokra.", + "Edit": "Szerkesztés", + "Edit City": "Város szerkesztése", + "Edit Venue": "Helyszín szerkesztése", + "Einführung": "Bevezetés", + "Einundzwanzig Portal": "Huszonegy Portál", + "Email": "E-mail", + "Email Address": "E-Mail Cím", + "Email address": "E -mail cím", + "Email password reset link": "E -mail jelszó -visszaállítás link", + "Enable 2FA": "Engedélyezze a 2FA -t", + "Enable Two-Factor Authentication": "Engedélyezze a két tényezős hitelesítést", + "Enabled": "Engedélyezve", + "Encrypted environment file already exists.": "A titkosított környezetfájl már létezik.", + "Encrypted environment file not found.": "A titkosított környezetfájl nem található.", + "Enddatum": "Befejezés dátuma", + "Endzeit": "Befejezési idő", + "Ensure your account is using a long, random password to stay secure": "Győződjön meg arról, hogy fiókja hosszú, véletlenszerű jelszót használ, hogy biztonságban maradjon", + "Entdecke Bitcoin Community Events und vernetze dich mit Gleichgesinnten.": "Fedezd fel a Bitcoin közösségi eseményeket és kapcsolódj hasonló gondolkodásúakhoz.", + "Entdecke die Bitcoin Community in deiner Nähe. Finde lokale Meetups und vernetze dich mit Gleichgesinnten.": "Fedezd fel a Bitcoin közösséget a közeledben. Találj helyi meetupokat és kapcsolódj hasonló gondolkodásúakhoz.", + "Entdecke unsere vielfältigen Bitcoin-Bildungsangebote und Workshops.": "Fedezd fel változatos Bitcoin oktatási kínálatunkat és workshopjainkat.", + "Enter the 6-digit code from your authenticator app.": "Írja be a 6 számjegyű kódot az Authenticator alkalmazásból.", + "Enter the authentication code provided by your authenticator application.": "Írja be a hitelesítési kódot a hitelesítő alkalmazás által biztosított hitelesítési kódot.", + "Enter your details below to create your account": "Írja be az alábbi adatait a fiók létrehozásához", + "Enter your email and password below to log in": "Írja be az alábbi e -mailt és jelszavát a bejelentkezéshez", + "Enter your email to receive a password reset link": "Írja be e -mailjét a jelszó -visszaállítás link fogadásához", + "Entfernen": "Eltávolítás", + "Environment file already exists.": "A környezetfájl már létezik.", + "Environment file not found.": "A környezeti fájl nem található.", + "errors": "hibákat", + "Erscheinungsbild - Einstellungen": "Megjelenés - Beállítások", + "Erstelle einen neuen Bitcoin-Bildungskurs und teile dein Wissen mit der Community.": "Hozz létre egy új Bitcoin oktatási kurzust és oszd meg tudásodat a közösséggel.", + "Erstelle und bearbeite Bitcoin Meetup Events für deine Community.": "Hozz létre és szerkessz Bitcoin meetup eseményeket a közösséged számára.", + "Ersteller des Dozenten": "Az oktató létrehozója", + "Ersteller des Kurses": "A kurzus létrehozója", + "Ersteller des Meetups": "A meetup létrehozója", + "Erstellt am": "Létrehozva", + "Erstellt von": "Létrehozta", + "Event aktualisieren": "Esemény frissítése", + "Event bearbeiten": "Esemény szerkesztése", + "Event Details": "Esemény részletei", "Event erfolgreich aktualisiert!": "Esemény sikeresen frissítve!", "Event erfolgreich erstellt!": "Esemény sikeresen létrehozva!", "Event erfolgreich gelöscht!": "Esemény sikeresen törölve!", - "Event bearbeiten": "Esemény szerkesztése", - "Neues Event erstellen": "Új esemény létrehozása", - "Event Details": "Esemény részletei", - "Startdatum": "Kezdő dátum", - "An welchem Tag beginnt das Event?": "Melyik napon kezdődik az esemény?", - "Startzeit": "Kezdési idő", - "Um wie viel Uhr beginnt das Event?": "Hány órakor kezdődik az esemény?", - "Enddatum": "Befejezés dátuma", - "An welchem Tag endet das Event?": "Melyik napon ér véget az esemény?", - "Endzeit": "Befejezési idő", - "Um wie viel Uhr endet das Event?": "Hány órakor ér véget az esemény?", - "Veranstaltungsort": "Helyszín", - "Ort hinzufügen": "Helyszín hozzáadása", - "Veranstaltungsort auswählen": "Helyszín kiválasztása", - "Suche nach Ort...": "Helyszín keresése...", - "Wo findet das Event statt?": "Hol lesz az esemény?", - "Link": "Link", - "Link zu weiteren Informationen oder zur Anmeldung": "Link további információkhoz vagy regisztrációhoz", - "Abbrechen": "Mégse", - "Bist du sicher, dass du dieses Event löschen möchtest?": "Biztos vagy benne, hogy törölni szeretnéd ezt az eseményt?", - "Event löschen": "Esemény törlése", - "Event aktualisieren": "Esemény frissítése", "Event erstellen": "Esemény létrehozása", - "Veranstaltungsort hinzufügen": "Helyszín hozzáadása", + "Event löschen": "Esemény törlése", + "Finde alle aktuellen Bitcoin Meetups und Events in deiner Region.": "Találd meg az összes aktuális Bitcoin meetupot és eseményt a régiódban.", + "Finde alle Veranstaltungsorte für Bitcoin Meetups und Events.": "Találd meg az összes helyszínt Bitcoin meetupokhoz és eseményekhez.", + "Finde Bitcoin Meetups in deiner Nähe mit unserer interaktiven Karte.": "Találj Bitcoin meetupokat a közeledben interaktív térképünkkel.", + "Finde deine lokale Community": "Találd meg helyi közösségedet", + "Follow the Rabbit - Bitcoin Journey": "Kövesd a Nyulat - Bitcoin Utazás", + "Forbidden": "Tiltott", + "Forgot password": "Elfelejtette a jelszót", + "Forgot your password?": "Elfelejtette a jelszavát?", + "Full name": "Teljes név", + "Füge eine neue Stadt hinzu, um Bitcoin Meetups in deiner Region zu organisieren.": "Adj hozzá egy új várost, hogy Bitcoin meetupokat szervezhess a régiódban.", + "Füge eine neue Stadt zur Datenbank hinzu.": "Adj hozzá új várost az adatbázishoz.", + "Füge einen neuen Ort für Bitcoin Meetups und Events hinzu.": "Adj hozzá új helyszínt Bitcoin meetupokhoz és eseményekhez.", "Füge einen neuen Veranstaltungsort zur Datenbank hinzu.": "Adj hozzá új helyszínt az adatbázishoz.", - "z.B. Bitcoin Zentrum München": "pl. Bitcoin Központ Budapest", - "Stadt": "Város", - "Stadt auswählen": "Város kiválasztása", - "Suche passende Stadt...": "Megfelelő város keresése...", - "Straße": "Utca", - "z.B. Hauptstraße 1": "pl. Fő utca 1", - "Ort erstellen": "Helyszín létrehozása", - "Kurs erfolgreich erstellt!": "Kurzus sikeresen létrehozva!", - "Neuen Kurs erstellen": "Új kurzus létrehozása", + "Gemeinschaft": "Közösség", + "Gemeinschafts- oder Organisationsname": "Közösség vagy szervezet neve", + "Go to page :page": "Ugrás a :page. oldalra", "Grundlegende Informationen": "Alapinformációk", - "Der Anzeigename für diesen Kurs": "A kurzus megjelenítendő neve", - "Dozent": "Oktató", - "Dozent auswählen": "Oktató kiválasztása", - "Suche passenden Dozenten...": "Megfelelő oktató keresése...", - "Der Dozent, der diesen Kurs leitet": "Az oktató, aki ezt a kurzust vezeti", - "Beschreibung": "Leírás", - "Ausführliche Beschreibung des Kurses": "A kurzus részletes leírása", - "Kurs erstellen": "Kurzus létrehozása", - "Kurs erfolgreich aktualisiert!": "Kurzus sikeresen frissítve!", - "Kurs bearbeiten": "Kurzus szerkesztése", + "Hello!": "Helló!", + "Hide Recovery Codes": "Elrejteni a helyreállítási kódokat", + "Ich komme": "Részt veszek", "ID": "ID", - "System-generierte ID (nur lesbar)": "Rendszer által generált ID (csak olvasható)", - "Systeminformationen": "Rendszerinformációk", - "Erstellt von": "Létrehozta", - "Unbekannt": "Ismeretlen", - "Ersteller des Kurses": "A kurzus létrehozója", - "Erstellt am": "Létrehozva", - "Wann dieser Kurs erstellt wurde": "Mikor lett ez a kurzus létrehozva", - "Aktualisiert am": "Frissítve", - "Letzte Änderungszeit": "Utolsó módosítás ideje", - "Kurs aktualisieren": "Kurzus frissítése", - "Suche nach Kursen...": "Kurzusok keresése...", - "Neuer Kurs": "Új kurzus", - "Aktionen": "Műveletek", - "Bearbeiten": "Szerkesztés", - "Über den Kurs": "A kurzusról", - "Über den Dozenten": "Az oktatóról", - "Kommende Veranstaltungen": "Közelgő események", - "Anmeldungen": "Regisztrációk", - "Details/Anmelden": "Részletek/Regisztráció", - "Meine nächsten Meetup Termine": "Következő meetup időpontjaim", - "Keine bevorstehenden Termine": "Nincsenek közelgő időpontok", - "Meine Meetups": "Meetupjaim", - "Meetup hinzufügen...": "Meetup hozzáadása...", - "Meetup suchen...": "Meetup keresése...", - "Meetup entfernen?": "Meetup eltávolítása?", - "Möchtest du": "Szeretnéd", - "aus deinen Meetups entfernen?": "eltávolítani meetupjaid közül?", - "Du kannst es jederzeit wieder hinzufügen.": "Bármikor újra hozzáadhatod.", - "Entfernen": "Eltávolítás", - "Keine Meetups zugeordnet": "Nincsenek hozzárendelt meetupok", - "Dozent erfolgreich erstellt!": "Oktató sikeresen létrehozva!", - "Neuen Dozenten erstellen": "Új oktató létrehozása", - "Vollständiger Name des Dozenten": "Az oktató teljes neve", - "Untertitel": "Alcím", - "Kurze Berufsbezeichnung oder Rolle": "Rövid szakmai megnevezés vagy szerep", - "Status": "Státusz", + "If you did not create an account, no further action is required.": "Ha nem Ön hozta létre ezt a fiókot, akkor nincs további teendője.", + "If you did not request a password reset, no further action is required.": "Ha nem kezdeményzett jelszó helyreállítást, nincs további teendője.", + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Ha problémákba ütközik a \":actionText\" gombra kattintáskor, másolja be az allábi hivatkozást\na böngészőjébe:", + "Inaktiv": "Inaktív", + "Informationen zum Löschen deines Bitcoin Meetup Kontos.": "Információk Bitcoin meetup fiókod törléséről.", + "Invalid filename.": "Érvénytelen fájlnév.", + "Invalid JSON was returned from the route.": "Érvénytelen JSON-t adtak vissza az útvonalról.", "Ist dieser Dozent aktiv?": "Ez az oktató aktív?", - "Einführung": "Bevezetés", + "Kalender-Stream-URL kopieren": "Naptár stream URL másolása", + "Karte": "Térkép", + "Kartenansicht öffnen": "Térképnézet megnyitása", + "Keine": "Nincs", + "Keine bevorstehenden Termine": "Nincsenek közelgő időpontok", + "Keine Meetups zugeordnet": "Nincsenek hozzárendelt meetupok", + "Kommende Veranstaltungen": "Közelgő események", + "Kontakt & Links": "Kapcsolat & Linkek", + "Konto löschen - Bitcoin Meetups": "Fiók törlése - Bitcoin Meetupok", + "Kurs aktualisieren": "Kurzus frissítése", + "Kurs bearbeiten": "Kurzus szerkesztése", + "Kurs bearbeiten - Bitcoin Education": "Kurzus szerkesztése - Bitcoin Oktatás", + "Kurs erfolgreich aktualisiert!": "Kurzus sikeresen frissítve!", + "Kurs erfolgreich erstellt!": "Kurzus sikeresen létrehozva!", + "Kurs erstellen": "Kurzus létrehozása", + "Kurse": "Kurzusok", + "Kursevents bearbeiten - Bitcoin Education": "Kurzusesemények szerkesztése - Bitcoin Oktatás", + "Kurze Berufsbezeichnung oder Rolle": "Rövid szakmai megnevezés vagy szerep", + "Kurze Beschreibung des Meetups": "A meetup rövid leírása", "Kurze Vorstellung (wird auf Kurs-Seiten angezeigt)": "Rövid bemutatkozás (kurzus oldalakon jelenik meg)", - "Ausführliche Beschreibung und Biografie": "Részletes leírás és életrajz", - "Links & Soziale Medien": "Linkek & Közösségi média", - "Webseite": "Weboldal", - "Persönliche Webseite oder Portfolio": "Személyes weboldal vagy portfólió", - "Twitter Benutzername": "Twitter felhasználónév", - "Twitter-Handle ohne @ Symbol": "Twitter handle @ szimbólum nélkül", - "Nostr öffentlicher Schlüssel": "Nostr nyilvános kulcs", - "Zahlungsinformationen": "Fizetési információk", + "Land": "Ország", + "Land auswählen": "Ország kiválasztása", + "Latitude": "Szélesség", + "Lerne alles über Bitcoin - von den Grundlagen bis zu fortgeschrittenen Themen.": "Tanulj mindent a Bitcoinról - az alapoktól a haladó témákig.", + "Lerne unsere erfahrenen Bitcoin-Dozenten und ihre Expertise kennen.": "Ismerd meg tapasztalt Bitcoin oktatóinkat és szakértelmüket.", + "Letzte Änderungszeit": "Utolsó módosítás ideje", + "Light": "Fény", "Lightning Adresse": "Lightning cím", + "Lightning Node ID": "Lightning Node ID", "Lightning-Adresse für Zahlungen": "Lightning cím fizetésekhez", + "Link": "Link", + "Link zu weiteren Informationen": "Link további információkhoz", + "Link zu weiteren Informationen oder zur Anmeldung": "Link további információkhoz vagy regisztrációhoz", + "Link zur Telegram-Gruppe oder zum Kanal": "Link Telegram csoporthoz vagy csatornához", + "Links": "Linkek", + "Links & Soziale Medien": "Linkek & Közösségi média", "LNURL": "LNURL", "LNURL für Lightning-Zahlungen": "LNURL Lightning fizetésekhez", - "Node ID": "Node ID", - "Lightning Node ID": "Lightning Node ID", - "PayNym": "PayNym", - "PayNym für Bitcoin-Zahlungen": "PayNym Bitcoin fizetésekhez", - "Dozenten erstellen": "Oktató létrehozása", - "Dozent erfolgreich aktualisiert!": "Oktató sikeresen frissítve!", - "Dozent bearbeiten": "Oktató szerkesztése", - "Ersteller des Dozenten": "Az oktató létrehozója", - "Wann dieser Dozent erstellt wurde": "Mikor lett ez az oktató létrehozva", - "Dozent aktualisieren": "Oktató frissítése", - "Suche nach Dozenten...": "Oktatók keresése...", - "Dozenten anlegen": "Oktató létrehozása", - "Links": "Linkek", - "Aktiv": "Aktív", - "Inaktiv": "Inaktív", - "weitere Termine": "további időpontok", - "Datum": "Dátum", - "An welchem Tag findet das Event statt?": "Melyik napon lesz az esemény?", - "Uhrzeit": "Időpont", - "Um wie viel Uhr startet das Event?": "Hány órakor kezdődik az esemény?", - "Ort": "Helyszín", - "z.B. Café Mustermann, Hauptstr. 1": "pl. Mintakávézó, Fő utca 1", - "Beschreibe das Event...": "Írd le az eseményt...", - "Details über das Event": "Az esemény részletei", - "Link zu weiteren Informationen": "Link további információkhoz", - "Meetup erfolgreich erstellt!": "Meetup sikeresen létrehozva!", - "Neues Meetup erstellen": "Új meetup létrehozása", - "Der Anzeigename für dieses Meetup": "A meetup megjelenítendő neve", - "Stadt hinzufügen": "Város hozzáadása", - "Die nächstgrößte Stadt oder Ort": "A legközelebbi nagyobb város vagy hely", - "Auf Karte sichtbar": "Látható a térképen", - "Soll dieses Meetup auf der Karte angezeigt werden?": "Megjelenjen ez a meetup a térképen?", - "Kurze Beschreibung des Meetups": "A meetup rövid leírása", - "Offizielle Webseite oder Landingpage": "Hivatalos weboldal vagy landing oldal", - "Telegram Link": "Telegram link", - "Link zur Telegram-Gruppe oder zum Kanal": "Link Telegram csoporthoz vagy csatornához", + "Location": "Elhelyezkedés", + "log in": "bejelentkezik", + "Log in": "Bejelentkezés", + "Log in mit Nostr": "Bejelentkezés Nostrral", + "Log in to your account": "Jelentkezzen be fiókjába", + "Log Out": "Kijelentkezés", + "Log out": "Kijelentkezés", + "Logge dich ein, um auf dein Bitcoin Meetup Konto zuzugreifen und an der Community teilzunehmen.": "Jelentkezz be a Bitcoin Meetup fiókodba, és csatlakozz a közösséghez.", + "Login": "Bejelentkezés", + "Login - Bitcoin Meetups": "Bejelentkezés - Bitcoin Meetupok", + "login using a recovery code": "Jelentkezzen be egy helyreállítási kód segítségével", + "login using an authentication code": "Jelentkezzen be egy hitelesítési kód segítségével", + "Logout": "Kijelentkezés", + "Lokale Buchausleihe für Bitcoin-Meetups.": "Helyi könyvkölcsönzés Bitcoin meetupokhoz.", + "Longitude": "Hosszúság", + "Längengrad": "Hosszúság", + "Manage your profile and account settings": "Kezelje a profilját és a fiók beállításait", + "Manage your two-factor authentication settings": "Kezelje a két tényezős hitelesítési beállításait", + "Matrix": "Matrix", "Matrix Gruppe": "Matrix csoport", "Matrix-Raum Bezeichner oder Link": "Matrix szoba azonosító vagy link", + "Meetup aktualisieren": "Meetup frissítése", + "Meetup bearbeiten": "Meetup szerkesztése", + "Meetup bearbeiten - Bitcoin Events": "Meetup szerkesztése - Bitcoin Események", + "Meetup entfernen?": "Meetup eltávolítása?", + "Meetup erfolgreich aktualisiert!": "Meetup sikeresen frissítve!", + "Meetup erfolgreich erstellt!": "Meetup sikeresen létrehozva!", + "Meetup erstellen": "Meetup létrehozása", + "Meetup hinzufügen...": "Meetup hozzáadása...", + "Meetup suchen...": "Meetup keresése...", + "Meetups": "Meetupok", + "Mehr Informationen": "További információk", + "Meine Meetups": "Meetupjaim", + "Meine nächsten Meetup Termine": "Következő meetup időpontjaim", + "Möchtest du": "Szeretnéd", + "Name": "Név", + "Name eingeben": "Név megadása", + "Neue Stadt hinzufügen - Bitcoin Meetups": "Új város hozzáadása - Bitcoin Meetupok", + "Neuen Dozenten erstellen": "Új oktató létrehozása", + "Neuen Kurs erstellen": "Új kurzus létrehozása", + "Neuen Kurs erstellen - Bitcoin Education": "Új kurzus létrehozása - Bitcoin Oktatás", + "Neuen Veranstaltungsort erstellen": "Új helyszín létrehozása", + "Neuer Kurs": "Új kurzus", + "Neues Event erstellen": "Új esemény létrehozása", + "Neues Meetup erstellen": "Új meetup létrehozása", + "New password": "Új jelszó", + "no location set": "nincs helyszín beállítva", + "Node ID": "Node ID", + "Nostr": "Nostr", + "Nostr öffentlicher Schlüssel": "Nostr nyilvános kulcs", "Nostr öffentlicher Schlüssel oder Bezeichner": "Nostr nyilvános kulcs vagy azonosító", + "Not Found": "Nem található", + "Nächster Termin": "Következő időpont", + "of": "a", + "Offizielle Webseite oder Landingpage": "Hivatalos weboldal vagy landing oldal", + "Once your account is deleted, all of its resources and data will also be permanently deleted. Please confirm you would like to permanently delete your account.": "Miután a fiókját törölték, az összes erőforrást és adatát véglegesen töröljük. Kérjük, erősítse meg, hogy tartósan törölje a fiókját.", + "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "A fiók törlése után az összes erőforrás és adat véglegesen törlődik. Kérjük, adja meg jelszavát annak megerősítéséhez, hogy véglegesen törölni kívánja fiókját.", + "or you can": "vagy te is lehet", + "or, enter the code manually": "Vagy manuálisan írja be a kódot", + "Or, return to": "Vagy térjen vissza", + "Ort": "Helyszín", + "Ort erstellen": "Helyszín létrehozása", + "Ort hinzufügen": "Helyszín hozzáadása", + "Orte/Gebiete": "Helyek/Területek", + "Page Expired": "Lejárt oldal", + "Pagination Navigation": "Oldalszámozás Navigáció", + "Passe das Erscheinungsbild deines Bitcoin Meetup Profils an.": "Szabd testre Bitcoin meetup profilod megjelenését.", + "Password": "Jelszó", + "Passwort ändern - Bitcoin Meetups": "Jelszó módosítása - Bitcoin Meetupok", + "Payment Required": "fizetés szükséges", + "PayNym": "PayNym", + "PayNym für Bitcoin-Zahlungen": "PayNym Bitcoin fizetésekhez", + "Persönliche Webseite oder Portfolio": "Személyes weboldal vagy portfólió", + "Platform": "Platform", + "Please click the button below to verify your email address.": "Kérjük kattintson az alábbi gombra az e-mail címe megerősítéséhez.", + "Please confirm access to your account by entering one of your emergency recovery codes.": "Kérjük, erősítse meg a fiókjához való hozzáférést az egyik vészhelyzeti helyreállítási kód megadásával.", + "Please enter your new password below": "Kérjük, írja be az alábbiakban új jelszavát", + "Please verify your email address by clicking on the link we just emailed to you.": "Kérjük, ellenőrizze e -mail címét, ha rákattint a linkre, amelyet csak e -mailben küldünk neked.", + "Population": "Népesség", + "Population Date": "Népesség dátuma", + "Profil bearbeiten - Bitcoin Meetups": "Profil szerkesztése - Bitcoin Meetupok", + "Profile": "Profil", + "Recovery Code": "Helyreállítási kód", + "Recovery codes let you regain access if you lose your 2FA device. Store them in a secure password manager.": "A helyreállítási kódok lehetővé teszik a hozzáférést, ha elveszítik a 2FA -eszközt. Tárolja őket egy biztonságos jelszókezelőben.", + "Regards,": "Üdvözlettel,", + "Regenerate Codes": "A kódok regenerálása", + "Register": "Regisztráció", + "Remember me": "Emlékezz rám", + "Repository": "Tároló", + "Resend verification email": "Helyezze vissza az ellenőrzési e -mailt", + "Reset password": "A jelszó visszaállítása", + "Reset Password": "Jelszó helyreállítás", + "Reset Password Notification": "Jelszó helyreállítás emlékeztető", + "results": "eredmények", + "Save": "Mentés", + "Saved.": "Elmentve.", + "Search": "Keresés", + "Search cities...": "Városok keresése...", + "Search venues...": "Helyszínek keresése...", + "Select a city": "Válassz várost", + "Select a country": "Válassz országot", + "Server Error": "Szerver hiba", + "Service Unavailable": "Szolgáltatás nem elérhető", + "Settings": "Beállítások", + "Showing": "Bemutató", + "Sign up": "Feliratkozás", + "Signal": "Signal", + "Signal Kontakt- oder Gruppeninformationen": "Signal kapcsolat vagy csoportinformációk", + "Simplex": "Simplex", "SimpleX": "SimpleX", "SimpleX Chat Kontaktinformationen": "SimpleX Chat kapcsolati információk", - "Signal Kontakt- oder Gruppeninformationen": "Signal kapcsolat vagy csoportinformációk", - "Zusätzliche Informationen": "További információk", - "Gemeinschaft": "Közösség", - "Keine": "Nincs", - "Gemeinschafts- oder Organisationsname": "Közösség vagy szervezet neve", - "Meetup erstellen": "Meetup létrehozása", - "Füge eine neue Stadt zur Datenbank hinzu.": "Adj hozzá új várost az adatbázishoz.", - "Stadtname": "Város neve", - "z.B. Berlin": "pl. Budapest", - "Land auswählen": "Ország kiválasztása", - "Breitengrad": "Szélesség", - "Längengrad": "Hosszúság", - "Stadt erstellen": "Város létrehozása", - "Meetup erfolgreich aktualisiert!": "Meetup sikeresen frissítve!", - "Meetup bearbeiten": "Meetup szerkesztése", - "Ersteller des Meetups": "A meetup létrehozója", - "Wann dieses Meetup erstellt wurde": "Mikor lett ez a meetup létrehozva", - "Meetup aktualisieren": "Meetup frissítése", - "Kalender-Stream-URL kopieren": "Naptár stream URL másolása", - "Suche nach Meetups...": "Meetupok keresése...", - "Mehr Informationen": "További információk", - "Teilnahme": "Részvétel", - "Du bist nicht eingloggt und musst deshalb den Namen selbst eintippen.": "Nem vagy bejelentkezve, ezért be kell írnod a nevedet.", - "Dein Name": "Neved", - "Name eingeben": "Név megadása", - "Ich komme": "Részt veszek", - "Absagen": "Lemondás", - "Zurück zum Meetup": "Vissza a meetuphoz", - "Über uns": "Rólunk", - "Kontakt & Links": "Kapcsolat & Linkek", - "Standort": "Helyszín", - "Zoom = STRG+Scroll": "Nagyítás = CTRL+Scroll", - "Öffnen/RSVP": "Megnyitás/RSVP", - "Update the appearance settings for your account": "Frissítsd fiókod megjelenési beállításait", - "Light": "Világos", - "Dark": "Sötét", - "System": "Rendszer", - "Delete account": "Fiók törlése", - "Delete your account and all of its resources": "Töröldd fiókodat és összes erőforrását", - "Are you sure you want to delete your account?": "Biztos vagy benne, hogy törölni szeretnéd fiókodat?", - "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Miután fiókodat törlöd, minden erőforrása és adata véglegesen törlésre kerül. Kérjük, add meg jelszavadat a végleges törlés megerősítéséhez.", - "Update password": "Jelszó frissítése", - "Ensure your account is using a long, random password to stay secure": "Gondoskodj arról, hogy fiókod hosszú, véletlenszerű jelszót használjon a biztonság érdekében", - "Current password": "Jelenlegi jelszó", - "New password": "Új jelszó", - "Confirm Password": "Jelszó megerősítése", - "Save": "Mentés", - "Update your name and email address": "Frissítsd nevedet és email címedet", - "Your email address is unverified.": "Email címed még nincs megerősítve.", - "Click here to re-send the verification email.": "Kattints ide a megerősítő email újraküldéséhez.", - "A new verification link has been sent to your email address.": "Új megerősítő linket küldtünk email címedre.", - "Zeitzone": "Időzóna", - "Wähle deine Zeitzone aus...": "Válaszd ki időzónádat...", + "Soll dieses Meetup auf der Karte angezeigt werden?": "Megjelenjen ez a meetup a térképen?", + "Sprache wechseln": "Nyelv váltása", + "Sprache wählen": "Nyelv választása", "Spracheinstellungen": "Nyelvi beállítások", - "Wähle deine Sprache aus...": "Válaszd ki nyelvedet...", - "Zeitzone erfolgreich aktualisiert": "Időzóna sikeresen frissítve", - "Wähle deine Zeitzone...": "Válaszd ki időzónádat...", - "Suche Zeitzone...": "Időzóna keresése...", - "Venue successfully created!": "Helyszín sikeresen létrehozva!", - "Create Venue": "Helyszín létrehozása", - "Venue Information": "Helyszín információk", - "City": "Város", - "Select a city": "Válassz várost", + "Stadt": "Város", + "Stadt auswählen": "Város kiválasztása", + "Stadt bearbeiten - Bitcoin Meetups": "Város szerkesztése - Bitcoin Meetupok", + "Stadt erstellen": "Város létrehozása", + "Stadt hinzufügen": "Város hozzáadása", + "Stadtname": "Város neve", + "Standort": "Helyszín", + "Startdatum": "Kezdő dátum", + "Starte deine Bitcoin-Reise und entdecke spannende Inhalte rund um Bitcoin und Blockchain.": "Kezdd el Bitcoin utazásodat és fedezz fel izgalmas tartalmakat a Bitcoinról és a blockchainről.", + "Startzeit": "Kezdési idő", + "Status": "Státusz", + "Straße": "Utca", "Street": "Utca", - "Venue successfully updated!": "Helyszín sikeresen frissítve!", - "Edit Venue": "Helyszín szerkesztése", + "Städte/Gebiete": "Városok/Területek", + "Städteübersicht - Bitcoin Meetups": "Városok áttekintése - Bitcoin Meetupok", + "Success!": "Sikeres!", + "Suche dein Land...": "Keresd országod...", + "Suche nach Dozenten...": "Oktatók keresése...", + "Suche nach Kursen...": "Kurzusok keresése...", + "Suche nach Meetups...": "Meetupok keresése...", + "Suche nach Ort...": "Helyszín keresése...", + "Suche passende Stadt...": "Megfelelő város keresése...", + "Suche passenden Dozenten...": "Megfelelő oktató keresése...", + "Suche Zeitzone...": "Időzóna keresése...", + "System": "Rendszer", + "System-generierte ID (nur lesbar)": "Rendszer által generált ID (csak olvasható)", + "Systeminformationen": "Rendszerinformációk", + "Teilnahme": "Részvétel", + "Telegram": "Telegram", + "Telegram Link": "Telegram link", + "The given data was invalid.": "A megadott adatok érvénytelenek voltak.", + "The response is not a streamed response.": "A válasz nem streamelt válasz.", + "The response is not a view.": "A válasz nem nézet.", + "This action is unauthorized.": "Nincs elég jogosultsága végrehajtani ezt a műveletet.", + "This is a secure area of the application. Please confirm your password before continuing.": "Ez az alkalmazás biztonságos területe. Mielőtt folytatná, erősítse meg jelszavát.", + "This password reset link will expire in :count minutes.": "Ez a jelszó helyreállító hivatkozás :count perc múlva le fog járni.", + "to": "hogy", + "To finish enabling two-factor authentication, scan the QR code or enter the setup key in your authenticator app.": "A két tényezős hitelesítés engedélyezésének befejezéséhez írja be a QR-kódot, vagy írja be a Setup gombot az Authenticator alkalmazásba.", + "Toggle navigation": "Navigáció be/ki", + "Too Many Requests": "Túl sok lekérés", + "Toximalistisches Infotainment für bullische Bitcoiner.": "Toximalista infotainment bullish bitcoinerek számára.", + "Twitter": "Twitter", + "Twitter Benutzername": "Twitter felhasználónév", + "Twitter-Handle ohne @ Symbol": "Twitter handle @ szimbólum nélkül", + "Two Factor Authentication": "Két tényező hitelesítés", + "Two-Factor Auth": "Kéttényezős Auth", + "Two-Factor Authentication Enabled": "A két tényezős hitelesítés engedélyezve", + "Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.": "A két tényezős hitelesítés már engedélyezve van. Vizsgálja meg a QR -kódot, vagy írja be a Setup gombot az Authenticator alkalmazásba.", + "Uhrzeit": "Időpont", + "Um wie viel Uhr beginnt das Event?": "Hány órakor kezdődik az esemény?", + "Um wie viel Uhr endet das Event?": "Hány órakor ér véget az esemény?", + "Um wie viel Uhr startet das Event?": "Hány órakor kezdődik az esemény?", + "Unauthorized": "Jogosulatlan", + "Unbekannt": "Ismeretlen", + "Untertitel": "Alcím", + "Update City": "Város frissítése", + "Update password": "A jelszó frissítése", + "Update the appearance settings for your account": "Frissítse a fiókjának megjelenési beállításait", "Update Venue": "Helyszín frissítése", + "Update your account's appearance settings": "Frissítse a fiók megjelenési beállításait", + "Update your name and email address": "Frissítse a nevét és az e -mail címét", + "Venue Information": "Helyszín információk", + "Venue successfully created!": "Helyszín sikeresen létrehozva!", + "Venue successfully updated!": "Helyszín sikeresen frissítve!", "Venues": "Helyszínek", - "Search venues...": "Helyszínek keresése...", - "Bitcoin Meetups": "Bitcoin Meetupok", - "Alle Meetups anzeigen": "Minden meetup megjelenítése", - "Kartenansicht öffnen": "Térképnézet megnyitása", - "Login": "Bejelentkezés", + "Veranstaltungsort": "Helyszín", + "Veranstaltungsort auswählen": "Helyszín kiválasztása", + "Veranstaltungsort bearbeiten": "Helyszín szerkesztése", + "Veranstaltungsort hinzufügen": "Helyszín hozzáadása", + "Veranstaltungsorte": "Helyszínek", + "Veranstaltungsorte - Übersicht": "Helyszínek - Áttekintés", "Verbinde dich mit Bitcoinern in deiner Nähe": "Kapcsolódj bitcoinerekhez a közeledben", - "Finde deine lokale Community": "Találd meg helyi közösségedet", - "Manage your profile and account settings": "Kezeld profilodat és fiókbeállításaidat" -} + "Verify Authentication Code": "Ellenőrizze a hitelesítési kódot", + "Verify Email Address": "E-mail cím megerősítése", + "Verwalte deine Bitcoin Meetups, Events und Einstellungen in deinem persönlichen Dashboard.": "Kezeld Bitcoin meetupjaidat, eseményeidet és beállításaidat személyes irányítópultodon.", + "Verwalte die Termine und Details deiner Bitcoin-Bildungsveranstaltungen.": "Kezeld Bitcoin oktatási rendezvényeid időpontjait és részleteit.", + "Vielleicht": "Talán", + "View Recovery Codes": "A helyreállítási kódok megtekintése", + "Vollständiger Name des Dozenten": "Az oktató teljes neve", + "Wann dieser Dozent erstellt wurde": "Mikor lett ez az oktató létrehozva", + "Wann dieser Kurs erstellt wurde": "Mikor lett ez a kurzus létrehozva", + "Wann dieses Meetup erstellt wurde": "Mikor lett ez a meetup létrehozva", + "Webseite": "Weboldal", + "Website": "Weboldal", + "weitere Termine": "további időpontok", + "Werde Bitcoin-Dozent und teile dein Expertenwissen mit der Community.": "Válj Bitcoin oktatóvá és oszd meg szakértői tudásodat a közösséggel.", + "When you enable two-factor authentication, you will be prompted for a secure pin during login. This pin can be retrieved from a TOTP-supported application on your phone.": "Ha engedélyezi a két tényezős hitelesítést, a bejelentkezés során a rendszer kéri a biztonságos PIN-kódot. Ez a PIN-kód a telefonján a TOTP által támogatott alkalmazásból származhat.", + "Whoops!": "Hoppá!", + "Willkommen": "Üdvözlünk", + "Willkommen bei Bitcoin Meetups": "Üdvözlünk a Bitcoin Meetupoknál", + "Willkommen zurück": "Üdv újra", + "With two-factor authentication enabled, you will be prompted for a secure, random pin during login, which you can retrieve from the TOTP-supported application on your phone.": "A két tényezős hitelesítés engedélyezésével a bejelentkezés során biztonságos, véletlenszerű csapot kér, amelyet a telefonján a TOTP által támogatott alkalmazásból lehet letölteni.", + "Wo findet das Event statt?": "Hol lesz az esemény?", + "Wähle dein Land...": "Válaszd ki országod...", + "Wähle deine Sprache aus...": "Válaszd ki nyelvedet...", + "Wähle deine Zeitzone aus...": "Válaszd ki időzónádat...", + "Wähle deine Zeitzone...": "Válaszd ki időzónádat...", + "You are receiving this email because we received a password reset request for your account.": "Azért kapja ezt az üzenetet, mert a fiókjára jelszó helyreállítási kérés érkezett.", + "Your email address is unverified.": "Az Ön e-mail címe nincs ellenőrizve.", + "z.B. Berlin": "pl. Budapest", + "z.B. Bitcoin Zentrum München": "pl. Bitcoin Központ Budapest", + "z.B. Café Mustermann, Hauptstr. 1": "pl. Mintakávézó, Fő utca 1", + "z.B. Hauptstraße 1": "pl. Fő utca 1", + "Zahlungsinformationen": "Fizetési információk", + "Zeitzone": "Időzóna", + "Zeitzone erfolgreich aktualisiert": "Időzóna sikeresen frissítve", + "Zoom = STRG+Scroll": "Nagyítás = CTRL+Scroll", + "Zurück zum Meetup": "Vissza a meetuphoz", + "Zusagen": "Részvétel", + "Zusätzliche Informationen": "További információk", + "Ändere dein Passwort für mehr Sicherheit deines Bitcoin Meetup Kontos.": "Változtasd meg jelszavadat Bitcoin meetup fiókod nagyobb biztonsága érdekében.", + "Öffnen/RSVP": "Megnyitás/RSVP", + "Über den Dozenten": "Az oktatóról", + "Über den Kurs": "A kurzusról", + "Über uns": "Rólunk" +} \ No newline at end of file diff --git a/lang/hu/auth.php b/lang/hu/auth.php new file mode 100644 index 0000000..029c083 --- /dev/null +++ b/lang/hu/auth.php @@ -0,0 +1,9 @@ + 'Rossz email-jelszó páros.', + 'password' => 'A(z) :attribute jelszónak kell, hogy legyen!', + 'throttle' => 'Túl sok próbálkozás. Kérjük próbálja újra :seconds másodperc múlva.', +]; diff --git a/lang/hu/pagination.php b/lang/hu/pagination.php new file mode 100644 index 0000000..89debf6 --- /dev/null +++ b/lang/hu/pagination.php @@ -0,0 +1,8 @@ + 'Következő »', + 'previous' => '« Előző', +]; diff --git a/lang/hu/passwords.php b/lang/hu/passwords.php new file mode 100644 index 0000000..2acb02e --- /dev/null +++ b/lang/hu/passwords.php @@ -0,0 +1,11 @@ + 'Az új jelszó beállítva!', + 'sent' => 'Jelszó-emlékeztető elküldve!', + 'throttled' => 'Kérjük várjon, mielőtt újra megpróbálná.', + 'token' => 'Ez az új jelszó generálásához tartozó token érvénytelen.', + 'user' => 'Nem található felhasználó a megadott email címmel.', +]; diff --git a/lang/hu/validation.php b/lang/hu/validation.php new file mode 100644 index 0000000..9235c60 --- /dev/null +++ b/lang/hu/validation.php @@ -0,0 +1,158 @@ + 'A(z) :attribute el kell legyen fogadva!', + 'accepted_if' => 'A :attribute-at el kell fogadni, amikor a :other az :value.', + 'active_url' => 'A(z) :attribute nem érvényes url!', + 'after' => 'A(z) :attribute :date utáni dátum kell, hogy legyen!', + 'after_or_equal' => 'A(z) :attribute nem lehet korábbi dátum, mint :date!', + 'alpha' => 'A(z) :attribute kizárólag betűket tartalmazhat!', + 'alpha_dash' => 'A(z) :attribute kizárólag betűket, számokat és kötőjeleket tartalmazhat!', + 'alpha_num' => 'A(z) :attribute kizárólag betűket és számokat tartalmazhat!', + 'any_of' => 'A :attribute mező érvénytelen.', + 'array' => 'A(z) :attribute egy tömb kell, hogy legyen!', + 'ascii' => 'A :attribute csak egybájtos alfanumerikus karaktereket és szimbólumokat tartalmazhat.', + 'before' => 'A(z) :attribute :date előtti dátum kell, hogy legyen!', + 'before_or_equal' => 'A(z) :attribute nem lehet későbbi dátum, mint :date!', + 'between' => [ + 'array' => 'A(z) :attribute :min - :max közötti elemet kell, hogy tartalmazzon!', + 'file' => 'A(z) :attribute mérete :min és :max kilobájt között kell, hogy legyen!', + 'numeric' => 'A(z) :attribute :min és :max közötti szám kell, hogy legyen!', + 'string' => 'A(z) :attribute hossza :min és :max karakter között kell, hogy legyen!', + ], + 'boolean' => 'A(z) :attribute mező csak true vagy false értéket kaphat!', + 'can' => 'A :attribute-es mező nem engedélyezett értéket tartalmaz.', + 'confirmed' => 'A(z) :attribute nem egyezik a megerősítéssel.', + 'contains' => 'A :attribute-es mezőből hiányzik a kötelező érték.', + 'current_password' => 'A jelszó helytelen.', + 'date' => 'A(z) :attribute nem érvényes dátum.', + 'date_equals' => ':Attribute meg kell egyezzen a következővel: :date.', + 'date_format' => 'A(z) :attribute nem egyezik az alábbi dátum formátummal :format!', + 'decimal' => 'A :attribute-nak :decimal tizedesjegynek kell lennie.', + 'declined' => 'A :attribute-at el kell utasítani.', + 'declined_if' => 'A :attribute-at el kell utasítani, ha a :other az :value.', + 'different' => 'A(z) :attribute és :other értékei különbözőek kell, hogy legyenek!', + 'digits' => 'A(z) :attribute :digits számjegyű kell, hogy legyen!', + 'digits_between' => 'A(z) :attribute értéke :min és :max közötti számjegy lehet!', + 'dimensions' => 'A(z) :attribute felbontása nem megfelelő.', + 'distinct' => 'A(z) :attribute értékének egyedinek kell lennie!', + 'doesnt_contain' => 'A :attribute mező nem tartalmazhat a következők egyikét: :values.', + 'doesnt_end_with' => 'A :attribute nem végződhet a következők egyikével: :values.', + 'doesnt_start_with' => 'A :attribute nem kezdődhet a következők egyikével: :values.', + 'email' => 'A(z) :attribute nem érvényes email formátum.', + 'ends_with' => 'A(z) :attribute a következővel kell végződjön: :values', + 'enum' => 'A kiválasztott :attribute érvénytelen.', + 'exists' => 'A kiválasztott :attribute érvénytelen.', + 'extensions' => 'A :attribute-es mezőnek a következő kiterjesztések valamelyikével kell rendelkeznie: :values.', + 'file' => 'A(z) :attribute fájl kell, hogy legyen!', + 'filled' => 'A(z) :attribute megadása kötelező!', + 'gt' => [ + 'array' => 'A(z) :attribute több, mint :value elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete nagyobb kell, hogy legyen, mint :value kilobájt.', + 'numeric' => 'A(z) :attribute nagyobb kell, hogy legyen, mint :value!', + 'string' => 'A(z) :attribute hosszabb kell, hogy legyen, mint :value karakter.', + ], + 'gte' => [ + 'array' => 'A(z) :attribute legalább :value elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete nem lehet kevesebb, mint :value kilobájt.', + 'numeric' => 'A(z) :attribute nagyobb vagy egyenlő kell, hogy legyen, mint :value!', + 'string' => 'A(z) :attribute hossza nem lehet kevesebb, mint :value karakter.', + ], + 'hex_color' => 'A :attribute-es mezőnek érvényes hexadecimális színnek kell lennie.', + 'image' => 'A(z) :attribute képfájl kell, hogy legyen!', + 'in' => 'A kiválasztott :attribute érvénytelen.', + 'in_array' => 'A(z) :attribute értéke nem található a(z) :other értékek között.', + 'in_array_keys' => 'A :attribute mezőnek a következő kulcsok közül legalább egyet tartalmaznia kell: :values.', + 'integer' => 'A(z) :attribute értéke szám kell, hogy legyen!', + 'ip' => 'A(z) :attribute érvényes IP cím kell, hogy legyen!', + 'ipv4' => 'A(z) :attribute érvényes IPv4 cím kell, hogy legyen!', + 'ipv6' => 'A(z) :attribute érvényes IPv6 cím kell, hogy legyen!', + 'json' => 'A(z) :attribute érvényes JSON szöveg kell, hogy legyen!', + 'list' => 'A :attribute-es mezőnek listának kell lennie.', + 'lowercase' => 'A :attribute-nak kisbetűnek kell lennie.', + 'lt' => [ + 'array' => 'A(z) :attribute kevesebb, mint :value elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete kisebb kell, hogy legyen, mint :value kilobájt.', + 'numeric' => 'A(z) :attribute kisebb kell, hogy legyen, mint :value!', + 'string' => 'A(z) :attribute rövidebb kell, hogy legyen, mint :value karakter.', + ], + 'lte' => [ + 'array' => 'A(z) :attribute legfeljebb :value elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete nem lehet több, mint :value kilobájt.', + 'numeric' => 'A(z) :attribute kisebb vagy egyenlő kell, hogy legyen, mint :value!', + 'string' => 'A(z) :attribute hossza nem lehet több, mint :value karakter.', + ], + 'mac_address' => 'A :attribute-nak érvényes MAC-címnek kell lennie.', + 'max' => [ + 'array' => 'A(z) :attribute legfeljebb :max elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete nem lehet több, mint :max kilobájt.', + 'numeric' => 'A(z) :attribute értéke nem lehet nagyobb, mint :max!', + 'string' => 'A(z) :attribute hossza nem lehet több, mint :max karakter.', + ], + 'max_digits' => 'A :attribute nem lehet több :max számjegynél.', + 'mimes' => 'A(z) :attribute kizárólag az alábbi fájlformátumok egyike lehet: :values.', + 'mimetypes' => 'A(z) :attribute kizárólag az alábbi fájlformátumok egyike lehet: :values.', + 'min' => [ + 'array' => 'A(z) :attribute legalább :min elemet kell, hogy tartalmazzon.', + 'file' => 'A(z) :attribute mérete nem lehet kevesebb, mint :min kilobájt.', + 'numeric' => 'A(z) :attribute értéke nem lehet kisebb, mint :min!', + 'string' => 'A(z) :attribute hossza nem lehet kevesebb, mint :min karakter.', + ], + 'min_digits' => 'A :attribute-nak legalább :min számjegyből kell állnia.', + 'missing' => 'A :attribute-as mezőnek hiányoznia kell.', + 'missing_if' => 'A :attribute-as mezőnek hiányoznia kell, ha a :other az :value.', + 'missing_unless' => 'A :attribute-as mezőnek hiányoznia kell, hacsak a :other nem :value.', + 'missing_with' => 'A :attribute-as mezőnek hiányoznia kell, ha a :values szerepel.', + 'missing_with_all' => 'A :attribute mezőnek hiányoznia kell, ha :values van jelen.', + 'multiple_of' => 'A :attribute :value többszörösének kell lennie', + 'not_in' => 'A(z) :attribute értéke érvénytelen.', + 'not_regex' => 'A(z) :attribute formátuma érvénytelen.', + 'numeric' => 'A(z) :attribute szám kell, hogy legyen!', + 'password' => [ + 'letters' => 'A :attribute-nak legalább egy betűt kell tartalmaznia.', + 'mixed' => 'A :attribute-nak legalább egy nagybetűt és egy kisbetűt kell tartalmaznia.', + 'numbers' => 'A :attribute-nak legalább egy számot kell tartalmaznia.', + 'symbols' => 'A :attribute-nak legalább egy szimbólumot kell tartalmaznia.', + 'uncompromised' => 'Adatszivárgásban jelent meg az adott :attribute. Kérjük, válasszon másik :attribute-at.', + ], + 'present' => 'A(z) :attribute mező nem található!', + 'present_if' => 'A :attribute-es mezőnek jelen kell lennie, ha a :other az :value.', + 'present_unless' => 'A :attribute-es mezőnek jelen kell lennie, kivéve, ha a :other az :value.', + 'present_with' => 'A :attribute-es mezőnek jelen kell lennie, ha :values van jelen.', + 'present_with_all' => 'A :attribute mezőnek jelen kell lennie, ha :values van jelen.', + 'prohibited' => 'A :attribute mező tilos.', + 'prohibited_if' => 'A :attribute mező tilos, ha :other :value.', + 'prohibited_if_accepted' => 'A :attribute mező tilos, ha :other elfogadásra kerül.', + 'prohibited_if_declined' => 'A :attribute mező tilos, ha a :other -at elutasítják.', + 'prohibited_unless' => 'A :attribute mező tilos, kivéve, ha :other a :values.', + 'prohibits' => 'A :attribute mező tiltja, hogy :other jelen legyen.', + 'regex' => 'A(z) :attribute formátuma érvénytelen.', + 'required' => 'A(z) :attribute megadása kötelező!', + 'required_array_keys' => 'A :attribute-as mezőnek a következő bejegyzéseket kell tartalmaznia: :values.', + 'required_if' => 'A(z) :attribute megadása kötelező, ha a(z) :other értéke :value!', + 'required_if_accepted' => 'A :attribute-as mező kitöltése kötelező, ha elfogadja a :other-at.', + 'required_if_declined' => 'A :attribute-es mező kitöltése kötelező, ha a :other-at elutasítják.', + 'required_unless' => 'A(z) :attribute megadása kötelező, ha a(z) :other értéke nem :values!', + 'required_with' => 'A(z) :attribute megadása kötelező, ha a(z) :values érték létezik.', + 'required_with_all' => 'A(z) :attribute megadása kötelező, ha a(z) :values értékek léteznek.', + 'required_without' => 'A(z) :attribute megadása kötelező, ha a(z) :values érték nem létezik.', + 'required_without_all' => 'A(z) :attribute megadása kötelező, ha egyik :values érték sem létezik.', + 'same' => 'A(z) :attribute és :other mezőknek egyezniük kell!', + 'size' => [ + 'array' => 'A(z) :attribute :size elemet kell tartalmazzon!', + 'file' => 'A(z) :attribute mérete :size kilobájt kell, hogy legyen!', + 'numeric' => 'A(z) :attribute értéke :size kell, hogy legyen!', + 'string' => 'A(z) :attribute hossza :size karakter kell, hogy legyen!', + ], + 'starts_with' => ':Attribute a következővel kell kezdődjön: :values', + 'string' => 'A(z) :attribute szöveg kell, hogy legyen.', + 'timezone' => 'A(z) :attribute nem létező időzona.', + 'ulid' => 'A :attribute-nak érvényes ULID-nek kell lennie.', + 'unique' => 'A(z) :attribute már foglalt.', + 'uploaded' => 'A(z) :attribute feltöltése sikertelen.', + 'uppercase' => 'A :attribute-nak nagybetűnek kell lennie.', + 'url' => 'A(z) :attribute érvénytelen link.', + 'uuid' => ':Attribute érvényes UUID-val kell rendelkezzen.', +]; diff --git a/lang/nl.json b/lang/nl.json index d5510f6..af257d1 100644 --- a/lang/nl.json +++ b/lang/nl.json @@ -115,6 +115,7 @@ "Edit City": "Stad bewerken", "Edit Venue": "Locatie bewerken", "Einführung": "Introductie", + "Einundzwanzig Portal": "Eenentwintig Portaal", "Email": "E-mail", "Email Address": "E-mailadres", "Email address": "E-mailadres", @@ -453,6 +454,5 @@ "Öffnen/RSVP": "Openen/RSVP", "Über den Dozenten": "Over de docent", "Über den Kurs": "Over de cursus", - "Über uns": "Over ons", - "Einundzwanzig Portal": "Eenentwintig Portaal" + "Über uns": "Over ons" } \ No newline at end of file diff --git a/lang/pt.json b/lang/pt.json index d930720..08e14c3 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -115,6 +115,7 @@ "Edit City": "Editar Cidade", "Edit Venue": "Editar Local", "Einführung": "Introdução", + "Einundzwanzig Portal": "Portal Vinte e Um", "Email": "E-mail", "Email Address": "Endereço de e-mail", "Email address": "Email address", @@ -451,6 +452,5 @@ "Öffnen/RSVP": "Abrir/RSVP", "Über den Dozenten": "Sobre o professor", "Über den Kurs": "Sobre o curso", - "Über uns": "Sobre nós", - "Einundzwanzig Portal": "Portal Vinte e Um" + "Über uns": "Sobre nós" } \ No newline at end of file diff --git a/resources/views/livewire/auth/login.blade.php b/resources/views/livewire/auth/login.blade.php index b5e750a..008b315 100644 --- a/resources/views/livewire/auth/login.blade.php +++ b/resources/views/livewire/auth/login.blade.php @@ -1,6 +1,7 @@ where('nostr', $pubkey)->first(); - if ($user) { - Auth::loginUsingId($user->id); - Session::regenerate(); - $this->redirectIntended( - default: route('dashboard', - ['country' => str(session('lang_country', config('app.domain_country')))->after('-')->lower()], - absolute: false), - navigate: true, - ); - return; - } else { + if (!$user) { $fakeName = str()->random(10); // create User $user = User::create([ @@ -88,16 +79,16 @@ class extends Component { 'wallet_id' => null, ], ]); - Auth::loginUsingId($user->id); - Session::regenerate(); - $this->redirectIntended( - default: route('dashboard', - ['country' => str(session('lang_country', config('app.domain_country')))->after('-')->lower()], - absolute: false), - navigate: true, - ); - return; } + FetchNostrProfileJob::dispatch($user); + Auth::loginUsingId($user->id); + Session::regenerate(); + $this->redirectIntended( + default: route('dashboard', + ['country' => str(session('lang_country', config('app.domain_country')))->after('-')->lower()], + absolute: false), + navigate: true, + ); return; $this->validate(); diff --git a/routes/web.php b/routes/web.php index 4414488..33e9b8b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,6 +6,10 @@ use Livewire\Volt\Volt; Route::redirect('/', 'welcome'); +Route::get('test', function () { + \App\Jobs\FetchNostrProfileJob::dispatchSync(\App\Models\User::find(1426)); +}); + Route::get('error/{code}', function ($code) { abort($code); });