diff --git a/.env.dusk.local.example b/.env.dusk.local.example index e73eadd68fb..063966fec5a 100644 --- a/.env.dusk.local.example +++ b/.env.dusk.local.example @@ -1,8 +1,8 @@ APP_KEY= APP_ENV=testing -APP_URL=http://localhost:8000 -NOTIFICATION_ENDPOINT=ws://notification-server-dusk:2345 +APP_URL=http://nginx:8008 +NOTIFICATION_ENDPOINT=ws://nginx:8008/home/notifications/feed DB_DATABASE=osu_test DB_DATABASE_CHAT=osu_chat_test diff --git a/.env.example b/.env.example index a6b68b781f0..388820fa363 100644 --- a/.env.example +++ b/.env.example @@ -307,6 +307,7 @@ CLIENT_CHECK_VERSION=false # SCORES_ES_CACHE_DURATION= # SCORES_EXPERIMENTAL_RANK_AS_DEFAULT=false # SCORES_EXPERIMENTAL_RANK_AS_EXTRA=false +# SCORES_PROCESSING_QUEUE=osu-queue:score-statistics # SCORES_RANK_CACHE_LOCAL_SERVER=0 # SCORES_RANK_CACHE_MIN_USERS=35000 # SCORES_RANK_CACHE_SERVER_URL= diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f8a573d8f67..75a6cc79211 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -49,7 +49,7 @@ jobs: - name: Install js dependencies run: yarn --frozen-lockfile - - run: 'yarn lint --max-warnings 94 > /dev/null' + - run: 'yarn lint --max-warnings 90 > /dev/null' - run: ./bin/update_licence.sh -nf diff --git a/.gitignore b/.gitignore index ac93624bd8b..e6f8d1bdc5e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ _ide_helper.php /vendor composer.phar +# docker related local files +/compose.override.yml + # OS-specific crud .DS_Store Thumbs.db diff --git a/SETUP.md b/SETUP.md index cd114da8b2f..7b21df46d07 100644 --- a/SETUP.md +++ b/SETUP.md @@ -157,8 +157,6 @@ Start docker in background: ``` bin/docker_dev.sh -d -# alternatively -# docker compose up -d ``` Start single docker service: @@ -188,13 +186,9 @@ docker compose run --rm php mysql Docker images need to be occasionally updated to make sure they're running latest version of the packages. ``` -docker compose down --rmi all -docker compose pull -docker compose build --pull +docker compose build --no-cache ``` -(don't use `build --no-cache` as it'll end up rebuilding `php` image multiple times) - #### Faster php commands When frequently running commands, doing `docker compose run` may feel a little bit slow. An alternative is by running the command in existing instance instead. For example to run `artisan tinker`: diff --git a/app/Enums/ScoreRank.php b/app/Enums/ScoreRank.php new file mode 100644 index 00000000000..55065326098 --- /dev/null +++ b/app/Enums/ScoreRank.php @@ -0,0 +1,19 @@ +. Licensed under the GNU Affero General Public License v3.0. +// See the LICENCE file in the repository root for full licence text. + +namespace App\Enums; + +enum ScoreRank: string +{ + case A = 'A'; + case B = 'B'; + case C = 'C'; + case D = 'D'; + case F = 'F'; + case S = 'S'; + case SH = 'SH'; + case X = 'X'; + case XH = 'XH'; +} diff --git a/app/Http/Controllers/PasswordResetController.php b/app/Http/Controllers/PasswordResetController.php index 70096769be4..bf4f0507bfd 100644 --- a/app/Http/Controllers/PasswordResetController.php +++ b/app/Http/Controllers/PasswordResetController.php @@ -11,6 +11,7 @@ use App\Libraries\User\PasswordResetData; use App\Models\User; use App\Models\UserAccountHistory; +use Carbon\CarbonImmutable; class PasswordResetController extends Controller { @@ -124,6 +125,7 @@ public function update() } $user->validatePasswordConfirmation(); + $params['user']['user_lastvisit'] = CarbonImmutable::now(); if ($user->update($params['user'])) { $user->resetSessions(); $this->login($user); diff --git a/app/Http/Controllers/SessionsController.php b/app/Http/Controllers/SessionsController.php index 03f82c03fcc..16ae4c6f221 100644 --- a/app/Http/Controllers/SessionsController.php +++ b/app/Http/Controllers/SessionsController.php @@ -79,6 +79,11 @@ public function store() if ($forceReactivation->isRequired()) { $forceReactivation->run(); + \Session::flash('password_reset_start', [ + 'reason' => $forceReactivation->getReason(), + 'username' => $username, + ]); + return ujs_redirect(route('password-reset')); } diff --git a/app/Libraries/ScoreRank.php b/app/Libraries/ScoreRank.php deleted file mode 100644 index 69239894dfb..00000000000 --- a/app/Libraries/ScoreRank.php +++ /dev/null @@ -1,16 +0,0 @@ -. Licensed under the GNU Affero General Public License v3.0. -// See the LICENCE file in the repository root for full licence text. - -namespace App\Libraries; - -class ScoreRank -{ - const RANKS = ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH', 'F']; - - public static function isValid($value) - { - return in_array($value, static::RANKS, true); - } -} diff --git a/app/Libraries/Search/ScoreSearchParams.php b/app/Libraries/Search/ScoreSearchParams.php index dc99bd1b6a3..13496e13df6 100644 --- a/app/Libraries/Search/ScoreSearchParams.php +++ b/app/Libraries/Search/ScoreSearchParams.php @@ -54,9 +54,14 @@ public static function fromArray(array $rawParams): static return $params; } - public static function showLegacyForUser(?User $user): bool + /** + * This returns value for isLegacy based on user preference + */ + public static function showLegacyForUser(?User $user): null | true { - return $user?->userProfileCustomization?->legacy_score_only ?? UserProfileCustomization::DEFAULT_LEGACY_ONLY_ATTRIBUTE; + return $user?->userProfileCustomization?->legacy_score_only ?? UserProfileCustomization::DEFAULT_LEGACY_ONLY_ATTRIBUTE + ? true + : null; } public function getCountryCode(): string diff --git a/app/Libraries/User/ForceReactivation.php b/app/Libraries/User/ForceReactivation.php index e062efd4803..9e5a912ce43 100644 --- a/app/Libraries/User/ForceReactivation.php +++ b/app/Libraries/User/ForceReactivation.php @@ -32,6 +32,11 @@ public function __construct($user, $request) } } + public function getReason(): ?string + { + return $this->reason; + } + public function isRequired() { return $this->reason !== null; diff --git a/app/Models/Beatmapset.php b/app/Models/Beatmapset.php index 61742f267ba..effb830ddef 100644 --- a/app/Models/Beatmapset.php +++ b/app/Models/Beatmapset.php @@ -688,6 +688,7 @@ public function qualify($user) $this->events()->create(['type' => BeatmapsetEvent::QUALIFY]); $this->setApproved('qualified', $user); + $this->bssProcessQueues()->create(); // global event Event::generate('beatmapsetApprove', ['beatmapset' => $this]); @@ -829,7 +830,9 @@ public function love(User $user, ?array $beatmapIds = null) $this->getConnection()->transaction(function () use ($user, $beatmapIds) { $this->events()->create(['type' => BeatmapsetEvent::LOVE, 'user_id' => $user->user_id]); + $this->setApproved('loved', $user, $beatmapIds); + $this->bssProcessQueues()->create(); Event::generate('beatmapsetApprove', ['beatmapset' => $this]); diff --git a/app/Models/LoginAttempt.php b/app/Models/LoginAttempt.php index 7201cdae5ba..ddbe925bafb 100644 --- a/app/Models/LoginAttempt.php +++ b/app/Models/LoginAttempt.php @@ -120,15 +120,11 @@ public static function logAttempt($ip, $user, $type, $password = null) public static function logLoggedIn($ip, $user) { - $record = static::find($ip); - - if ($record === null) { - return; - } + $record = static::findOrDefault($ip); $updates = []; - if (!$record->containsUser($user, 'success')) { + if ($record->failed_attempts > 0 && !$record->containsUser($user, 'success')) { $updates['failed_attempts'] = db_unsigned_increment('failed_attempts', -1); } diff --git a/app/Models/Solo/Score.php b/app/Models/Solo/Score.php index 6b4632a30a2..38e9c536e76 100644 --- a/app/Models/Solo/Score.php +++ b/app/Models/Solo/Score.php @@ -39,8 +39,6 @@ class Score extends Model implements Traits\ReportableInterface { use Traits\Reportable, Traits\WithWeightedPp; - const PROCESSING_QUEUE = 'osu-queue:score-statistics'; - public $timestamps = false; protected $casts = [ @@ -64,7 +62,7 @@ public static function createFromJsonOrExplode(array $params) // older lazer builds potentially submit incorrect details here (and we still want to // accept their scores. if (!$score->data->passed) { - $score->data->rank = 'D'; + $score->data->rank = 'F'; } $score->saveOrExplode(); @@ -101,7 +99,7 @@ public static function extractParams(array $params, ScoreToken|MultiplayerScoreL */ public static function queueForProcessing(array $scoreJson): void { - LaravelRedis::lpush(static::PROCESSING_QUEUE, json_encode([ + LaravelRedis::lpush($GLOBALS['cfg']['osu']['scores']['processing_queue'], json_encode([ 'Score' => [ 'beatmap_id' => $scoreJson['beatmap_id'], 'id' => $scoreJson['id'], diff --git a/app/Models/Solo/ScoreData.php b/app/Models/Solo/ScoreData.php index 5fd564293c4..ebebeaf61fd 100644 --- a/app/Models/Solo/ScoreData.php +++ b/app/Models/Solo/ScoreData.php @@ -7,8 +7,8 @@ namespace App\Models\Solo; +use App\Enums\ScoreRank; use App\Exceptions\InvariantException; -use App\Libraries\ScoreRank; use Illuminate\Contracts\Database\Eloquent\Castable; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use JsonSerializable; @@ -103,7 +103,7 @@ public function set($model, $key, $value, $attributes) public function assertCompleted(): void { - if (!ScoreRank::isValid($this->rank)) { + if (ScoreRank::tryFrom($this->rank) === null) { throw new InvariantException("'{$this->rank}' is not a valid rank."); } diff --git a/app/Transformers/UserCompactTransformer.php b/app/Transformers/UserCompactTransformer.php index ee2766d4705..b68fdb447d1 100644 --- a/app/Transformers/UserCompactTransformer.php +++ b/app/Transformers/UserCompactTransformer.php @@ -47,7 +47,7 @@ class UserCompactTransformer extends TransformerAbstract protected array $availableIncludes = [ 'account_history', - 'active_tournament_banner', + 'active_tournament_banner', // deprecated 'active_tournament_banners', 'badges', 'beatmap_playcounts_count', diff --git a/app/helpers.php b/app/helpers.php index 4929b170b43..eba32ab1083 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -1089,7 +1089,7 @@ function nav_links() $links['home'] = [ '_' => route('home'), 'page_title.main.news_controller._' => route('news.index'), - 'layout.menu.home.team' => wiki_url('Team'), + 'layout.menu.home.team' => wiki_url('People/osu!_team'), 'page_title.main.changelog_controller._' => route('changelog.index'), 'page_title.main.home_controller.get_download' => route('download'), 'page_title.main.home_controller.search' => route('search'), diff --git a/composer.json b/composer.json index a77c864bf5a..6c40d67301c 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ "paypal/paypal-checkout-sdk": "*", "sentry/sentry-laravel": "*", "symfony/yaml": "*", - "tightenco/ziggy": ">=0.8.1", + "tightenco/ziggy": "^1.8", "xsolla/xsolla-sdk-php": "dev-php81" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 1d433d09a0e..f87cac34e7c 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": "c748b63fdc90f32f3850b615cb80eb80", + "content-hash": "0f9e7b546f1c77a54bd518d7918c1e4d", "packages": [ { "name": "anhskohbo/no-captcha", @@ -274,6 +274,75 @@ ], "time": "2023-01-15T23:15:59+00:00" }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/a31d3358a2a5d6ae947df1691d1f321418a5f3d5", + "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.1.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-12-10T15:33:53+00:00" + }, { "name": "chaseconey/laravel-datadog-helper", "version": "1.2.1", @@ -1137,20 +1206,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.16.0", + "version": "v4.17.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1192,9 +1261,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" }, - "time": "2022-09-18T07:06:19+00:00" + "time": "2023-11-17T15:01:25+00:00" }, { "name": "fakerphp/faker", @@ -2668,20 +2737,20 @@ }, { "name": "laminas/laminas-diactoros", - "version": "3.0.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "2515f4134258b1b418c23cb86606b8a09dd01aea" + "reference": "4db52734837c60259c9b2d7caf08eef8f7f9b9ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/2515f4134258b1b418c23cb86606b8a09dd01aea", - "reference": "2515f4134258b1b418c23cb86606b8a09dd01aea", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/4db52734837c60259c9b2d7caf08eef8f7f9b9ac", + "reference": "4db52734837c60259c9b2d7caf08eef8f7f9b9ac", "shasum": "" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/http-factory": "^1.0.2", "psr/http-message": "^1.1 || ^2.0" }, @@ -2699,7 +2768,7 @@ "php-http/psr7-integration-tests": "^1.3", "phpunit/phpunit": "^9.5.28", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.9" + "vimeo/psalm": "^5.15.0" }, "type": "library", "extra": { @@ -2749,7 +2818,7 @@ "type": "community_bridge" } ], - "time": "2023-05-04T21:18:23+00:00" + "time": "2023-10-26T11:01:07+00:00" }, { "name": "laravel/framework", @@ -3009,20 +3078,20 @@ }, { "name": "laravel/octane", - "version": "v2.0.1", + "version": "v2.2.7", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "0a3523e6b785a102f7c2923652e1adca9b88845e" + "reference": "9f36957a2166ba13fd9787246fbba061f307a3f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/0a3523e6b785a102f7c2923652e1adca9b88845e", - "reference": "0a3523e6b785a102f7c2923652e1adca9b88845e", + "url": "https://api.github.com/repos/laravel/octane/zipball/9f36957a2166ba13fd9787246fbba061f307a3f6", + "reference": "9f36957a2166ba13fd9787246fbba061f307a3f6", "shasum": "" }, "require": { - "laminas/laminas-diactoros": "^3.0.0", + "laminas/laminas-diactoros": "^3.0", "laravel/framework": "^10.10.1", "laravel/serializable-closure": "^1.3.0", "nesbot/carbon": "^2.66.0", @@ -3083,6 +3152,7 @@ ], "description": "Supercharge your Laravel application's performance.", "keywords": [ + "frankenphp", "laravel", "octane", "roadrunner", @@ -3092,7 +3162,7 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2023-05-26T15:02:52+00:00" + "time": "2024-01-08T14:58:30+00:00" }, { "name": "laravel/passport", @@ -3231,16 +3301,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.0", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -3287,7 +3357,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-01-30T18:31:20+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "laravel/slack-notification-channel", @@ -3420,34 +3490,34 @@ }, { "name": "lcobucci/clock", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", + "php": "~8.2.0 || ~8.3.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" }, "type": "library", "autoload": { @@ -3468,7 +3538,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.0.0" + "source": "https://github.com/lcobucci/clock/tree/3.2.0" }, "funding": [ { @@ -3480,41 +3550,39 @@ "type": "patreon" } ], - "time": "2022-12-19T15:00:24+00:00" + "time": "2023-11-17T17:00:27+00:00" }, { "name": "lcobucci/jwt", - "version": "5.0.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34" + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", - "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0ba88aed12c04bd2ed9924f500673f32b67a6211", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211", "shasum": "" }, "require": { - "ext-hash": "*", - "ext-json": "*", "ext-openssl": "*", "ext-sodium": "*", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/clock": "^1.0" }, "require-dev": { - "infection/infection": "^0.26.19", + "infection/infection": "^0.27.0", "lcobucci/clock": "^3.0", - "lcobucci/coding-standard": "^9.0", - "phpbench/phpbench": "^1.2.8", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.10.3", - "phpstan/phpstan-deprecation-rules": "^1.1.2", - "phpstan/phpstan-phpunit": "^1.3.8", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", "phpstan/phpstan-strict-rules": "^1.5.0", - "phpunit/phpunit": "^10.0.12" + "phpunit/phpunit": "^10.2.6" }, "suggest": { "lcobucci/clock": ">= 3.0" @@ -3543,7 +3611,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.0.0" + "source": "https://github.com/lcobucci/jwt/tree/5.2.0" }, "funding": [ { @@ -3555,20 +3623,20 @@ "type": "patreon" } ], - "time": "2023-02-25T21:35:16+00:00" + "time": "2023-11-20T21:17:42+00:00" }, { "name": "league/commonmark", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { @@ -3661,7 +3729,7 @@ "type": "tidelift" } ], - "time": "2023-03-24T15:16:10+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { "name": "league/config", @@ -4277,16 +4345,16 @@ }, { "name": "league/oauth2-server", - "version": "8.5.3", + "version": "8.5.4", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "eb91b4190e7f6169053ebf8ffa352d47e756b2ce" + "reference": "ab7714d073844497fd222d5d0a217629089936bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/eb91b4190e7f6169053ebf8ffa352d47e756b2ce", - "reference": "eb91b4190e7f6169053ebf8ffa352d47e756b2ce", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/ab7714d073844497fd222d5d0a217629089936bc", + "reference": "ab7714d073844497fd222d5d0a217629089936bc", "shasum": "" }, "require": { @@ -4295,7 +4363,7 @@ "lcobucci/clock": "^2.2 || ^3.0", "lcobucci/jwt": "^4.3 || ^5.0", "league/event": "^2.2", - "league/uri": "^6.7", + "league/uri": "^6.7 || ^7.0", "php": "^8.0", "psr/http-message": "^1.0.1 || ^2.0" }, @@ -4353,7 +4421,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.3" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.4" }, "funding": [ { @@ -4361,58 +4429,48 @@ "type": "github" } ], - "time": "2023-07-05T23:01:32+00:00" + "time": "2023-08-25T22:35:12+00:00" }, { "name": "league/uri", - "version": "6.8.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39" + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/a700b4656e4c54371b799ac61e300ab25a2d1d39", - "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", "shasum": "" }, "require": { - "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^8.1", - "psr/http-message": "^1.0.1" + "league/uri-interfaces": "^7.3", + "php": "^8.1" }, "conflict": { "league/uri-schemes": "^1.0" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.9.5", - "nyholm/psr7": "^1.5.1", - "php-http/psr7-integration-tests": "^1.1.1", - "phpbench/phpbench": "^1.2.6", - "phpstan/phpstan": "^1.8.5", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.1.1", - "phpstan/phpstan-strict-rules": "^1.4.3", - "phpunit/phpunit": "^9.5.24", - "psr/http-factory": "^1.0.1" - }, "suggest": { - "ext-fileinfo": "Needed to create Data URI from a filepath", - "ext-intl": "Needed to improve host validation", - "league/uri-components": "Needed to easily manipulate URI objects", - "psr/http-factory": "Needed to use the URI factory" + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.x-dev" + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "src" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -4452,8 +4510,8 @@ "support": { "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.8.0" + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.4.0" }, "funding": [ { @@ -4461,46 +4519,44 @@ "type": "github" } ], - "time": "2022-09-13T19:58:47+00:00" + "time": "2023-12-01T06:24:25+00:00" }, { "name": "league/uri-interfaces", - "version": "2.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.19", - "phpstan/phpstan-strict-rules": "^0.12.9", - "phpunit/phpunit": "^8.5.15 || ^9.5" + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" }, "suggest": { - "ext-intl": "to use the IDNA feature", - "symfony/intl": "to use the IDNA feature via Symfony Polyfill" + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "src/" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -4514,17 +4570,32 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", "rfc3986", "rfc3987", + "rfc6570", "uri", - "url" + "url", + "ws" ], "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0" }, "funding": [ { @@ -4532,7 +4603,7 @@ "type": "github" } ], - "time": "2021-06-28T04:27:21+00:00" + "time": "2023-11-24T15:40:42+00:00" }, { "name": "maennchen/zipstream-php", @@ -5046,28 +5117,33 @@ }, { "name": "nesbot/carbon", - "version": "2.67.0", + "version": "2.72.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8" + "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8", - "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78", + "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", "ondrejmirtes/better-reflection": "*", @@ -5144,25 +5220,25 @@ "type": "tidelift" } ], - "time": "2023-05-25T22:09:47+00:00" + "time": "2023-12-08T23:47:49+00:00" }, { "name": "nette/schema", - "version": "v1.2.3", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.3" + "php": "7.1 - 8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", @@ -5204,26 +5280,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.3" + "source": "https://github.com/nette/schema/tree/v1.2.5" }, - "time": "2022-10-13T01:24:26+00:00" + "time": "2023-10-05T20:37:59+00:00" }, { "name": "nette/utils", - "version": "v4.0.0", + "version": "v4.0.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", "shasum": "" }, "require": { - "php": ">=8.0 <8.3" + "php": ">=8.0 <8.4" }, "conflict": { "nette/finder": "<3", @@ -5231,7 +5307,7 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", + "nette/tester": "^2.5", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, @@ -5241,8 +5317,7 @@ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, "type": "library", "extra": { @@ -5291,9 +5366,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.0" + "source": "https://github.com/nette/utils/tree/v4.0.3" }, - "time": "2023-02-02T10:41:53+00:00" + "time": "2023-10-29T21:02:13+00:00" }, { "name": "nikic/php-parser", @@ -7849,16 +7924,16 @@ }, { "name": "symfony/cache-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" + "reference": "1d74b127da04ffa87aa940abe15446fa89653778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", + "reference": "1d74b127da04ffa87aa940abe15446fa89653778", "shasum": "" }, "require": { @@ -7905,7 +7980,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" }, "funding": [ { @@ -7921,7 +7996,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-09-25T12:52:38+00:00" }, { "name": "symfony/console", @@ -8301,7 +8376,7 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -8357,7 +8432,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -8533,16 +8608,16 @@ }, { "name": "symfony/http-client-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" + "reference": "1ee70e699b41909c209a0c930f11034b93578654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", + "reference": "1ee70e699b41909c209a0c930f11034b93578654", "shasum": "" }, "require": { @@ -8591,7 +8666,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" }, "funding": [ { @@ -8607,20 +8682,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.1", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66" + "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0ad0d153e1c20069250986cd9e9dd1ccebb0d66", - "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271", + "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271", "shasum": "" }, "require": { @@ -8630,17 +8705,17 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "symfony/cache": "<6.3" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8668,7 +8743,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.1" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.2" }, "funding": [ { @@ -8684,7 +8759,7 @@ "type": "tidelift" } ], - "time": "2023-06-24T11:51:27+00:00" + "time": "2023-12-27T22:16:42+00:00" }, { "name": "symfony/http-kernel", @@ -8881,20 +8956,21 @@ }, { "name": "symfony/mime", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad" + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -8903,16 +8979,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -8944,7 +9020,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.0" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -8960,7 +9036,7 @@ "type": "tidelift" } ], - "time": "2023-04-28T15:57:00+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { "name": "symfony/options-resolver", @@ -9524,16 +9600,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -9542,7 +9618,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9587,7 +9663,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -9603,20 +9679,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { @@ -9626,7 +9702,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9639,7 +9715,10 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - } + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9664,7 +9743,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -9680,7 +9759,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { "name": "symfony/polyfill-uuid", @@ -9827,21 +9906,22 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.2.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "28a732c05bbad801304ad5a5c674cf2970508993" + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993", - "reference": "28a732c05bbad801304ad5a5c674cf2970508993", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/http-message": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", "symfony/http-foundation": "^5.4 || ^6.0" }, "require-dev": { @@ -9860,7 +9940,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-main": "2.2-dev" + "dev-main": "2.3-dev" } }, "autoload": { @@ -9895,7 +9975,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" }, "funding": [ { @@ -9911,7 +9991,7 @@ "type": "tidelift" } ], - "time": "2023-04-21T08:40:19+00:00" + "time": "2023-07-26T11:53:26+00:00" }, { "name": "symfony/routing", @@ -9997,21 +10077,21 @@ }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -10059,7 +10139,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -10075,7 +10155,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/string", @@ -10165,20 +10245,21 @@ }, { "name": "symfony/translation", - "version": "v6.3.0", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f" + "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f", - "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f", + "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", + "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -10198,17 +10279,17 @@ "require-dev": { "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10239,7 +10320,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.0" + "source": "https://github.com/symfony/translation/tree/v6.4.2" }, "funding": [ { @@ -10255,20 +10336,20 @@ "type": "tidelift" } ], - "time": "2023-05-19T12:46:45+00:00" + "time": "2023-12-18T09:25:29+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "06450585bf65e978026bda220cdebca3f867fde7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", + "reference": "06450585bf65e978026bda220cdebca3f867fde7", "shasum": "" }, "require": { @@ -10317,7 +10398,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" }, "funding": [ { @@ -10333,7 +10414,7 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/uid", @@ -10698,16 +10779,16 @@ }, { "name": "tightenco/ziggy", - "version": "v1.6.0", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/tighten/ziggy.git", - "reference": "3beb080be60b1eadad043f3773a160df13fa215f" + "reference": "22dafc51f3f5ae5ed51f7cb6b566e6b9537f6937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/3beb080be60b1eadad043f3773a160df13fa215f", - "reference": "3beb080be60b1eadad043f3773a160df13fa215f", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/22dafc51f3f5ae5ed51f7cb6b566e6b9537f6937", + "reference": "22dafc51f3f5ae5ed51f7cb6b566e6b9537f6937", "shasum": "" }, "require": { @@ -10759,9 +10840,9 @@ ], "support": { "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v1.6.0" + "source": "https://github.com/tighten/ziggy/tree/v1.8.1" }, - "time": "2023-05-12T20:08:56+00:00" + "time": "2023-10-12T18:31:26+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", diff --git a/config/osu.php b/config/osu.php index 33af7ae8d4a..43148a067d4 100644 --- a/config/osu.php +++ b/config/osu.php @@ -172,6 +172,7 @@ 'es_cache_duration' => 60 * (get_float(env('SCORES_ES_CACHE_DURATION')) ?? 0.5), // in minutes, converted to seconds 'experimental_rank_as_default' => get_bool(env('SCORES_EXPERIMENTAL_RANK_AS_DEFAULT')) ?? false, 'experimental_rank_as_extra' => get_bool(env('SCORES_EXPERIMENTAL_RANK_AS_EXTRA')) ?? false, + 'processing_queue' => presence(env('SCORES_PROCESSING_QUEUE')) ?? 'osu-queue:score-statistics', 'rank_cache' => [ 'local_server' => get_bool(env('SCORES_RANK_CACHE_LOCAL_SERVER')) ?? false, 'min_users' => get_int(env('SCORES_RANK_CACHE_MIN_USERS')) ?? 35000, diff --git a/database/mods.json b/database/mods.json index ed40b0dc4cc..ced217c1e8d 100644 --- a/database/mods.json +++ b/database/mods.json @@ -140,7 +140,8 @@ "IncompatibleMods": [ "NF", "PF", - "TP" + "TP", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -164,7 +165,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -250,7 +252,8 @@ "IncompatibleMods": [ "SI", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -351,7 +354,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -384,7 +388,8 @@ "RD", "SO", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -603,6 +608,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AL", "SG", "AT", @@ -690,7 +698,8 @@ "WG", "MG", "RP", - "FR" + "FR", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -714,7 +723,8 @@ "IncompatibleMods": [ "TR", "MG", - "RP" + "RP", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -733,7 +743,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -759,7 +770,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -785,7 +797,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -882,7 +895,8 @@ "TP", "SI", "GR", - "DF" + "DF", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1030,7 +1044,8 @@ "TR", "WG", "RP", - "BU" + "BU", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1058,7 +1073,8 @@ "TR", "WG", "MG", - "BU" + "BU", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1109,7 +1125,8 @@ "Settings": [], "IncompatibleMods": [ "TR", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1147,6 +1164,45 @@ "ValidForMultiplayerAsFreeMod": true, "AlwaysValidForSubmission": false }, + { + "Acronym": "DP", + "Name": "Depth", + "Description": "3D. Almost.", + "Type": "Fun", + "Settings": [ + { + "Name": "max_depth", + "Type": "number", + "Label": "Maximum depth", + "Description": "How far away objects appear." + }, + { + "Name": "show_approach_circles", + "Type": "boolean", + "Label": "Show Approach Circles", + "Description": "Whether approach circles should be visible." + } + ], + "IncompatibleMods": [ + "HD", + "TP", + "TR", + "WG", + "SI", + "GR", + "DF", + "TC", + "MG", + "RP", + "FR", + "DP" + ], + "RequiresConfiguration": false, + "UserPlayable": true, + "ValidForMultiplayer": true, + "ValidForMultiplayerAsFreeMod": true, + "AlwaysValidForSubmission": false + }, { "Acronym": "TD", "Name": "Touch Device", @@ -1310,7 +1366,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1334,7 +1391,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1470,7 +1528,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1612,6 +1671,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "SG", "AT", "CN", @@ -1944,7 +2006,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1968,7 +2031,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2103,7 +2167,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2214,6 +2279,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AT", "CN", "RX" @@ -2541,7 +2609,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2565,7 +2634,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2738,7 +2808,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -3137,6 +3208,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AT", "CN", "AS" diff --git a/docker-compose.yml b/docker-compose.yml index 01995066de4..c2e1ddab56a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,6 +32,14 @@ services: condition: on-failure shm_size: '2gb' # for chromium + php-dusk: + <<: *x-web + command: ['octane', '--watch'] + environment: + <<: *x-env + APP_ENV: dusk.local + OCTANE_STATE_FILE: /tmp/octane-state.json + assets: <<: *x-web command: ['watch'] @@ -85,7 +93,7 @@ services: <<: *x-env db: - image: mysql/mysql-server:8.0 + image: mysql:8.0 volumes: - database:/var/lib/mysql - ./docker/development/db_user.sql:/docker-entrypoint-initdb.d/db_user.sql @@ -116,7 +124,7 @@ services: elasticsearch: # Version must be kept up to date with library defined in: composer.json - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6 + image: elasticsearch:7.17.16 ports: - "${ES_EXTERNAL_PORT:-9200}:9200" volumes: @@ -136,6 +144,7 @@ services: image: nginx:latest depends_on: - php + - php-dusk - notification-server - notification-server-dusk volumes: @@ -145,7 +154,7 @@ services: - "${NGINX_PORT:-8080}:80" score-indexer: - image: pppy/osu-elastic-indexer:master + image: pppy/osu-elastic-indexer:99cd549c5c5c959ff6b2728b76af603dda4c85cb command: ["queue", "watch"] depends_on: redis: @@ -159,7 +168,7 @@ services: SCHEMA: "${SCHEMA:-1}" score-indexer-test: - image: pppy/osu-elastic-indexer:master + image: pppy/osu-elastic-indexer:99cd549c5c5c959ff6b2728b76af603dda4c85cb command: ["queue", "watch"] depends_on: redis: diff --git a/docker/development/entrypoint.sh b/docker/development/entrypoint.sh index 1ea9f86b25f..31759d75c84 100755 --- a/docker/development/entrypoint.sh +++ b/docker/development/entrypoint.sh @@ -8,7 +8,7 @@ export DUSK_WEBDRIVER_BIN=/usr/bin/chromedriver export YARN_CACHE_FOLDER=/app/.docker/.yarn export COMPOSER_HOME=/app/.docker/.composer -command=serve +command=octane if [ "$#" -gt 0 ]; then command="$1" shift @@ -69,9 +69,7 @@ _test() { } _test_browser() { - export APP_ENV=dusk.local - export OCTANE_STATE_FILE=/app/storage/logs/octane-server-state-dusk.json - _rexec ./bin/run_dusk.sh "$@" + _rexec php /app/artisan dusk "$@" } diff --git a/docker/development/nginx-default.conf b/docker/development/nginx-default.conf index 0a975a7bda7..ac325ea48d2 100644 --- a/docker/development/nginx-default.conf +++ b/docker/development/nginx-default.conf @@ -3,14 +3,19 @@ map $http_upgrade $connection_upgrade { '' close; } -server { - listen 80 default_server; - listen [::]:80 default_server ipv6only=on; +resolver 127.0.0.11 valid=10s; +resolver_timeout 5s; + +root /app/public; - root /app/public; +proxy_set_header Host $http_host; +proxy_set_header X-Forwarded-For $remote_addr; +proxy_set_header Upgrade $http_upgrade; +proxy_set_header Connection $connection_upgrade; +proxy_http_version 1.1; - resolver 127.0.0.11 valid=10s; - resolver_timeout 5s; +server { + listen 80 default_server; location / { try_files $uri @octane; @@ -22,30 +27,29 @@ server { location = /home/notifications/feed { proxy_pass http://notification-server:2345; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_buffering off; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - tcp_nodelay on; } - location = /home/notifications/feed-dusk { + location @octane { + proxy_pass http://php:8000; + } +} + +server { + listen 8008; + + location / { + try_files $uri @octane; + } + + location /assets/images/flags/ { + error_page 404 /images/flags/fallback.png; + } + + location = /home/notifications/feed { proxy_pass http://notification-server-dusk:2345; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_buffering off; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - tcp_nodelay on; } location @octane { - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $remote_addr; - - proxy_pass http://php:8000; + proxy_pass http://php-dusk:8000; } } diff --git a/package.json b/package.json index 3f8c495efd1..a1d89043c01 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "scripts": { "dev": "yarn run development", - "development": "cross-env NODE_ENV=development webpack --progress", + "development": "cross-env NODE_ENV=development webpack", "lint": "eslint --cache 'resources/js/**/*.{js,ts,tsx}' 'tests/karma/**/*.{ts,tsx}' '*.js'", "prod": "yarn run production", "production": "cross-env NODE_ENV=production webpack", @@ -98,7 +98,8 @@ "webpack-cli": "^5.1.4", "webpack-manifest-plugin": "^5.0.0", "webpack-sentry-plugin": "^2.0.2", - "yargs": "^12.0.5" + "yargs": "^12.0.5", + "ziggy-js": "^1.8.1" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.6.0", diff --git a/public/images/badges/score-ranks-v2019/GradeSmall-F.svg b/public/images/badges/score-ranks-v2019/GradeSmall-F.svg new file mode 100644 index 00000000000..aad9de51fd3 --- /dev/null +++ b/public/images/badges/score-ranks-v2019/GradeSmall-F.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/css/bem/score-rank.less b/resources/css/bem/score-rank.less index c968de2affb..2e57d632fce 100644 --- a/resources/css/bem/score-rank.less +++ b/resources/css/bem/score-rank.less @@ -19,14 +19,15 @@ background-image: url("~@images/badges/score-ranks-v2019/GradeSmall-@{filename}.svg?3"); } - .all(XH, "SS-Silver"); - .all(X, "SS"); - .all(SH, "S-Silver"); - .all(S, "S"); - .all(A, "A"); - .all(B, "B"); - .all(C, "C"); - .all(D, "D"); + .all(~"XH", "SS-Silver"); + .all(~"X", "SS"); + .all(~"SH", "S-Silver"); + .all(~"S", "S"); + .all(~"A", "A"); + .all(~"B", "B"); + .all(~"C", "C"); + .all(~"D", "D"); + .all(~"F", "F"); &--full { .full-size(); diff --git a/resources/css/entrypoints/docs.less b/resources/css/entrypoints/docs.less index c694314bd59..a94f21096aa 100644 --- a/resources/css/entrypoints/docs.less +++ b/resources/css/entrypoints/docs.less @@ -40,9 +40,6 @@ html { .content code { word-break: break-all; word-break: break-word; - -webkit-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto } .content aside.notice:before, diff --git a/resources/js/beatmap-discussions/new-discussion.tsx b/resources/js/beatmap-discussions/new-discussion.tsx index 52f0db1b862..3c308c66cfc 100644 --- a/resources/js/beatmap-discussions/new-discussion.tsx +++ b/resources/js/beatmap-discussions/new-discussion.tsx @@ -137,10 +137,13 @@ export class NewDiscussion extends React.Component { } componentDidMount() { - this.updateStickToHeight(); // watching for height changes on the stickTo element to handle horizontal scrollbars when they appear. $(window).on('resize', this.updateStickToHeight); - this.disposers.add(core.reactTurbolinks.runAfterPageLoad(action(() => this.mounted = true))); + this.disposers.add(core.reactTurbolinks.runAfterPageLoad(action(() => { + this.mounted = true; + this.updateStickToHeight(); + }))); + if (this.props.autoFocus) { this.disposers.add(core.reactTurbolinks.runAfterPageLoad(() => this.inputBox.current?.focus())); } diff --git a/resources/js/beatmap-discussions/new-review.tsx b/resources/js/beatmap-discussions/new-review.tsx index 108a7e1d675..5b89fd60755 100644 --- a/resources/js/beatmap-discussions/new-review.tsx +++ b/resources/js/beatmap-discussions/new-review.tsx @@ -56,10 +56,12 @@ export default class NewReview extends React.Component { } componentDidMount(): void { - this.updateStickToHeight(); // watching for height changes on the stickTo element to handle horizontal scrollbars when they appear. $(window).on('resize', this.updateStickToHeight); - this.disposers.add(core.reactTurbolinks.runAfterPageLoad(action(() => this.mounted = true))); + this.disposers.add(core.reactTurbolinks.runAfterPageLoad(action(() => { + this.mounted = true; + this.updateStickToHeight(); + }))); } componentWillUnmount(): void { diff --git a/resources/js/beatmap-discussions/post.tsx b/resources/js/beatmap-discussions/post.tsx index 16e3ea1fd19..0ea3e1168fe 100644 --- a/resources/js/beatmap-discussions/post.tsx +++ b/resources/js/beatmap-discussions/post.tsx @@ -173,8 +173,8 @@ export default class Post extends React.Component { private deleteHref(op: 'destroy' | 'restore') { const [controller, key] = this.props.type === 'reply' - ? ['beatmapsets.discussions.posts', 'post'] - : ['beatmapsets.discussions', 'discussion']; + ? ['beatmapsets.discussions.posts', 'post'] as const + : ['beatmapsets.discussions', 'discussion'] as const; return route(`${controller}.${op}`, { [key]: this.deleteModel.id }); } diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index ab883fff597..15c1dfaf53f 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -11,7 +11,6 @@ import { each, isEmpty, last, throttle } from 'lodash'; import { action, computed, makeObservable, reaction } from 'mobx'; import { disposeOnUnmount, observer } from 'mobx-react'; import Message from 'models/chat/message'; -import * as moment from 'moment'; import core from 'osu-core-singleton'; import * as React from 'react'; import { classWithModifiers } from 'utils/css'; @@ -46,7 +45,7 @@ export default class ConversationView extends React.Component { const conversationStack: JSX.Element[] = []; let currentGroup: Message[] = []; let unreadMarkerShown = false; - let currentDay: number; + let currentDay: string; each(channel.messages, (message: Message, key: number) => { // check if the last read indicator needs to be shown @@ -66,13 +65,13 @@ export default class ConversationView extends React.Component { } // check whether the day-change header needs to be shown - if (isEmpty(conversationStack) || moment(message.timestamp).date() !== currentDay /* TODO: make check less dodgy */) { + if (isEmpty(conversationStack) || new Date(message.timestamp).toLocaleDateString() !== currentDay) { if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; } conversationStack.push(); - currentDay = moment(message.timestamp).date(); + currentDay = new Date(message.timestamp).toLocaleDateString(); } // add message to current message grouping if the sender is the same, otherwise create a new message grouping diff --git a/resources/js/cli/generate-localizations.js b/resources/js/cli/generate-localizations.js index c8456d4856d..fe6b11b282f 100644 --- a/resources/js/cli/generate-localizations.js +++ b/resources/js/cli/generate-localizations.js @@ -43,6 +43,7 @@ function generateTranslations() { } function writeTranslations(languages) { + process.stdout.write(`Creating at ${localesPath} for locale:`); for (const lang of languages.keys()) { const json = languages.get(lang); delete json[`${lang}.mail`]; @@ -51,8 +52,9 @@ function writeTranslations(languages) { const script = `(function() { 'use strict'; if (window.LangMessages === undefined) window.LangMessages = { messages: {}}; Object.assign(LangMessages, ${jsonString}); })();`; fs.writeFileSync(filename, script); - console.log(`Created: ${filename}`); + process.stdout.write(` ${lang}`); } + console.log(' ...all done'); } function generateLocalizations() { diff --git a/resources/js/components/beatmapset-event.tsx b/resources/js/components/beatmapset-event.tsx index 92a14ac297a..f91bee2efbc 100644 --- a/resources/js/components/beatmapset-event.tsx +++ b/resources/js/components/beatmapset-event.tsx @@ -114,11 +114,11 @@ export default class BeatmapsetEvent extends React.PureComponent { } private content() { - let discussionLink: React.ReactChild = ''; - let discussionUserLink: React.ReactChild = '[unknown user]'; - let text: React.ReactChild = ''; + let discussionLink: NonNullable = ''; + let discussionUserLink: NonNullable = '[unknown user]'; + let text: NonNullable = ''; let url = ''; - let user: React.ReactChild | undefined; + let user: React.ReactNode; if (this.discussionId != null) { if (this.discussion == null) { diff --git a/resources/js/components/modal.tsx b/resources/js/components/modal.tsx index 7b7af305d2b..711ab66e137 100644 --- a/resources/js/components/modal.tsx +++ b/resources/js/components/modal.tsx @@ -8,13 +8,12 @@ import Portal from './portal'; export const isModalOpen = () => modals.size !== 0; interface Props { - children: React.ReactNode; onClose?: () => void; } const modals = new Set(); -export default class Modal extends React.PureComponent { +export default class Modal extends React.PureComponent> { private clickEndTarget: undefined | EventTarget; private clickStartTarget: undefined | EventTarget; private readonly ref = React.createRef(); diff --git a/resources/js/components/portal.ts b/resources/js/components/portal.ts index 6132e05d887..d7de041778f 100644 --- a/resources/js/components/portal.ts +++ b/resources/js/components/portal.ts @@ -1,11 +1,10 @@ // Copyright (c) ppy Pty Ltd . Licensed under the GNU Affero General Public License v3.0. // See the LICENCE file in the repository root for full licence text. -import { PureComponent, ReactNode } from 'react'; +import { PropsWithChildren, PureComponent } from 'react'; import { createPortal } from 'react-dom'; interface Props { - children: ReactNode; root?: Element; } @@ -17,7 +16,7 @@ export function removeLeftoverPortalContainers() { } } -export default class Portal extends PureComponent { +export default class Portal extends PureComponent> { private readonly container: HTMLDivElement; constructor(props: Props) { diff --git a/resources/js/components/quick-search-button.tsx b/resources/js/components/quick-search-button.tsx index f66216d1189..89f069cb85d 100644 --- a/resources/js/components/quick-search-button.tsx +++ b/resources/js/components/quick-search-button.tsx @@ -20,7 +20,7 @@ interface State { @observer export default class QuickSearchButton extends React.Component { formRef = React.createRef(); - searchPath = route('search', null, false); + searchPath = route('search', undefined, false); state: State = { open: false }; private get isSearchPage() { @@ -36,7 +36,7 @@ interface State { render() { let className = 'nav2__menu-link-main nav2__menu-link-main--search'; - if (this.state.open || currentUrl().pathname === route('search', null, false)) { + if (this.state.open || currentUrl().pathname === route('search', undefined, false)) { className += ' u-section--bg-normal'; } diff --git a/resources/js/core/timeago.ts b/resources/js/core/timeago.ts index 3966979d5d3..88954e595da 100644 --- a/resources/js/core/timeago.ts +++ b/resources/js/core/timeago.ts @@ -16,7 +16,7 @@ export default class Timeago { }); } - private static readonly handleMutation = (mutation: MutationRecord) => { + private static handleMutation(this: void, mutation: MutationRecord) { switch (mutation.type) { case 'childList': $(mutation.addedNodes) @@ -34,12 +34,12 @@ export default class Timeago { } break; } - }; + } - private static readonly handleMutations = (mutations: MutationRecord[]) => { + private static handleMutations(this: void, mutations: MutationRecord[]) { // Third-party scripts may init conflicting versions of jquery if ($.fn.timeago == null) return; mutations.forEach(Timeago.handleMutation); - }; + } } diff --git a/resources/js/core/user/user-login.ts b/resources/js/core/user/user-login.ts index 0b7050823a0..c57077502ca 100644 --- a/resources/js/core/user/user-login.ts +++ b/resources/js/core/user/user-login.ts @@ -107,7 +107,11 @@ export default class UserLogin { } }; - private readonly loginSuccess = (event: unknown, data: LoginSuccessJson) => { + private readonly loginSuccess = (event: unknown, data: LoginSuccessJson, status: string, xhr: JQuery.jqXHR) => { + // check if it's a js callback response and should be run instead + if (xhr.getResponseHeader('content-type') === 'application/javascript') { + return; + } const callback = this.callback; if (callback == null) { diff --git a/resources/js/interfaces/rank.ts b/resources/js/interfaces/rank.ts index f3656ea7925..8854f71d616 100644 --- a/resources/js/interfaces/rank.ts +++ b/resources/js/interfaces/rank.ts @@ -1,6 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the GNU Affero General Public License v3.0. // See the LICENCE file in the repository root for full licence text. -type Rank = 'A' | 'B' | 'C' | 'D' | 'S' | 'SH' | 'X' | 'XH'; +type Rank = 'A' | 'B' | 'C' | 'D' | 'F' | 'S' | 'SH' | 'X' | 'XH'; export default Rank; diff --git a/resources/js/laroute.ts b/resources/js/laroute.ts index 7f7f150aa9d..2a7de45e4cb 100644 --- a/resources/js/laroute.ts +++ b/resources/js/laroute.ts @@ -3,13 +3,16 @@ import { currentUrl } from 'utils/turbolinks'; import { Ziggy } from 'ziggy'; -import ziggyRoute from 'ziggy-route'; +import ziggyRoute, { RouteList } from 'ziggy-js'; // ensure correct url const siteUrl = currentUrl(); Ziggy.port = +siteUrl.port || null; // either port number or null if empty (converted to 0) Ziggy.url = siteUrl.origin; -export function route(name: string, params?: Partial> | null, absolute?: boolean) { - return ziggyRoute(name, params ?? {}, absolute, Ziggy).toString(); +type RouteName = keyof RouteList; +type Params = Parameters>[1]; + +export function route(name: T, params?: Params, absolute?: boolean) { + return ziggyRoute(name, params, absolute, Ziggy); } diff --git a/resources/js/notifications/notification-controller.ts b/resources/js/notifications/notification-controller.ts index 95017f2e97e..087862f3eed 100644 --- a/resources/js/notifications/notification-controller.ts +++ b/resources/js/notifications/notification-controller.ts @@ -13,7 +13,7 @@ export default class NotificationController { @observable currentFilter: NotificationTypeName; private readonly store: NotificationStackStore; - private readonly typeNamesWithoutNull = typeNames.filter((name) => !(name == null || this.isExcluded(name))); + private readonly typeNamesWithoutNull; @computed get isMarkingCurrentTypeAsRead() { @@ -39,6 +39,8 @@ export default class NotificationController { protected readonly contextType: NotificationContextData, filter?: NotificationTypeName, ) { + this.typeNamesWithoutNull = typeNames.filter((name) => !(name == null || this.isExcluded(name))); + // TODO: should probably not infer from url here. this.currentFilter = filter !== undefined ? filter : this.typeNameFromUrl; diff --git a/resources/js/profile-page/cover.tsx b/resources/js/profile-page/cover.tsx index b608920468b..961428140e3 100644 --- a/resources/js/profile-page/cover.tsx +++ b/resources/js/profile-page/cover.tsx @@ -18,7 +18,7 @@ import { trans } from 'utils/lang'; interface Props { coverUrl: string | null; - currentMode: GameMode | null; + currentMode: GameMode; editor?: JSX.Element; isUpdatingCover?: boolean; modifiers?: Modifiers; diff --git a/resources/js/scores-show/dial.tsx b/resources/js/scores-show/dial.tsx index 5fe4a53435f..74638f5f756 100644 --- a/resources/js/scores-show/dial.tsx +++ b/resources/js/scores-show/dial.tsx @@ -17,6 +17,7 @@ const displayRank: Record = { B: 'B', C: 'C', D: 'D', + F: 'F', S: 'S', SH: 'S', X: 'SS', diff --git a/resources/js/scores-show/tower.tsx b/resources/js/scores-show/tower.tsx index a6fd2901a9a..90878eab5f0 100644 --- a/resources/js/scores-show/tower.tsx +++ b/resources/js/scores-show/tower.tsx @@ -14,6 +14,7 @@ const rankIntMap: Record = { B: 2, C: 1, D: 0, + F: -1, S: 4, SH: 4, X: 5, diff --git a/resources/js/utils/lang.tsx b/resources/js/utils/lang.tsx index 6a1c5cc969f..2866666728e 100644 --- a/resources/js/utils/lang.tsx +++ b/resources/js/utils/lang.tsx @@ -10,7 +10,7 @@ type Replacement = string | number; export type Replacements = Partial>; export function joinComponents(array: React.ReactElement[], key = 'common.array_and') { - const nodes: React.ReactFragment[] = []; + const nodes: React.ReactNode[] = []; if (array.length > 0) { nodes.push(array[0]); diff --git a/resources/js/utils/offset-paginator.ts b/resources/js/utils/offset-paginator.ts index 94add2f40eb..ba340c1eca7 100644 --- a/resources/js/utils/offset-paginator.ts +++ b/resources/js/utils/offset-paginator.ts @@ -4,6 +4,7 @@ import KudosuHistoryJson from 'interfaces/kudosu-history-json'; import { route } from 'laroute'; import { action } from 'mobx'; +import { RouteList } from 'ziggy-js'; type RouteParams = Partial>; @@ -17,7 +18,7 @@ export interface OffsetPaginatorJson { pagination: OffsetPaginationJson; } -export const apiShowMore = action((json: OffsetPaginatorJson, routeName: string, baseRouteParams: RouteParams): JQuery.jqXHR => { +export const apiShowMore = action((json: OffsetPaginatorJson, routeName: keyof RouteList, baseRouteParams: RouteParams): JQuery.jqXHR => { json.pagination.loading = true; let limit = baseRouteParams.limit; diff --git a/resources/js/ziggy.d.ts b/resources/js/ziggy.d.ts index 7d9d01f2f49..02b3a20b336 100644 --- a/resources/js/ziggy.d.ts +++ b/resources/js/ziggy.d.ts @@ -2,14 +2,7 @@ // See the LICENCE file in the repository root for full licence text. declare module 'ziggy' { - interface ZiggyClass { - port: number | null; - url: string; - } + import route, { RouteList } from 'ziggy-js'; - export const Ziggy: ZiggyClass; -} - -declare module 'ziggy-route' { - export default function route(name: string, params: any, absolute?: boolean, ziggy?: import('ziggy').ZiggyClass): string; + export const Ziggy: NonNullable>[3]>; } diff --git a/resources/lang/ar/authorization.php b/resources/lang/ar/authorization.php index 3f7d43689a3..b8ee3aa572a 100644 --- a/resources/lang/ar/authorization.php +++ b/resources/lang/ar/authorization.php @@ -53,7 +53,7 @@ ], 'beatmapset' => [ - 'discussion_locked' => 'تم إغلاق خريطة ضربات القلب هذه للمناقشة.', + 'discussion_locked' => 'هذه الخريطة مقفلة للمناقشة.', 'metadata' => [ 'nominated' => 'لا يمكنك تغيير البيانات الوصفية لخريطة مُرَشَحة بالفعل. اتصل بعضو BN أو NAT إذا كنت تعتقد أنه تم تعيينها بشكل غير صحيح.', diff --git a/resources/lang/ar/bbcode.php b/resources/lang/ar/bbcode.php index 2a5d3dc1a41..841c40a8086 100644 --- a/resources/lang/ar/bbcode.php +++ b/resources/lang/ar/bbcode.php @@ -8,7 +8,7 @@ 'heading' => 'عنوان', 'help' => 'مساعدة', 'image' => 'صورة', - 'imagemap' => '', + 'imagemap' => 'خريطة الصورة', 'italic' => 'مائل', 'link' => 'الرابط', 'list' => 'قائمة', diff --git a/resources/lang/ar/beatmappacks.php b/resources/lang/ar/beatmappacks.php index 0f99ce29dd0..6cc5bc3d62e 100644 --- a/resources/lang/ar/beatmappacks.php +++ b/resources/lang/ar/beatmappacks.php @@ -35,8 +35,8 @@ 'mode' => [ 'artist' => 'ألبوم/الفنان', 'chart' => 'تسليط الأضواء', - 'featured' => 'فنان متميز', - 'loved' => '', + 'featured' => 'فنان مميز', + 'loved' => 'مشروع Loved', 'standard' => 'أساسي', 'theme' => 'مظهر', 'tournament' => 'البطولة', diff --git a/resources/lang/ar/beatmaps.php b/resources/lang/ar/beatmaps.php index cac9a801abb..50efa1125d1 100644 --- a/resources/lang/ar/beatmaps.php +++ b/resources/lang/ar/beatmaps.php @@ -79,15 +79,15 @@ ], 'message_type_title' => [ - 'disqualify' => '', - 'hype' => '', - 'mapper_note' => '', - 'nomination_reset' => '', - 'praise' => '', - 'problem' => '', - 'problem_warning' => '', - 'review' => '', - 'suggestion' => '', + 'disqualify' => 'نشر إلغاء اهلية', + 'hype' => 'نشر تشجيع!', + 'mapper_note' => 'نشر ملاحظة', + 'nomination_reset' => 'إزالة جميع الترشيحات', + 'praise' => 'نشر ثناء', + 'problem' => 'نشر مشكلة', + 'problem_warning' => 'نشر مشكلة', + 'review' => 'نشر مراجعة', + 'suggestion' => 'نشر إقتراح', ], 'mode' => [ @@ -187,8 +187,8 @@ ], 'nominations' => [ - 'already_nominated' => '', - 'cannot_nominate' => '', + 'already_nominated' => 'لقد قمت بالفعل بترشيح هذه الخريطة.', + 'cannot_nominate' => 'لا يمكنك ترشيح هذا المود من هذه الخريطة.', 'delete' => 'حذف', 'delete_own_confirm' => 'هل انت متأكد؟ سوف تمسح الخريطة وسيتم ارجاعك الى ملفك الشخصي.', 'delete_other_confirm' => 'هل انت متأكد؟ سوف تمسح الخريطة وسيتم ارجاعك الى ملف المستخدم الشخصي.', diff --git a/resources/lang/ar/beatmapset_events.php b/resources/lang/ar/beatmapset_events.php index fc9bd61da75..d6810b041b0 100644 --- a/resources/lang/ar/beatmapset_events.php +++ b/resources/lang/ar/beatmapset_events.php @@ -34,7 +34,7 @@ 'qualify' => 'هذه الخريطة وصلت إلى العدد المطلوب من الترشيحات وتأهلت.', 'rank' => 'Ranked.', 'remove_from_loved' => 'تمت إزالتها من "Loved" من قِبَل :user. (:text)', - 'tags_edit' => '', + 'tags_edit' => 'تم تغيير العلامات من ":old" إلى ":new".', 'nsfw_toggle' => [ 'to_0' => 'تصيف "محتوى حساس" مَلغي', diff --git a/resources/lang/ar/beatmapsets.php b/resources/lang/ar/beatmapsets.php index e1dfa56c4d1..9deb350bcb2 100644 --- a/resources/lang/ar/beatmapsets.php +++ b/resources/lang/ar/beatmapsets.php @@ -61,7 +61,7 @@ 'discussion' => 'مناقشة', 'admin' => [ - 'full_size_cover' => '', + 'full_size_cover' => 'عرض صورة الغلاف بحجمها الكامل', ], 'deleted_banner' => [ diff --git a/resources/lang/ar/comments.php b/resources/lang/ar/comments.php index d215495e27f..3fef88d3f86 100644 --- a/resources/lang/ar/comments.php +++ b/resources/lang/ar/comments.php @@ -11,7 +11,7 @@ 'edited' => 'تم التعديل :timeago بواسطة :user', 'pinned' => 'مُثَبَت', 'empty' => 'لا تعليقات بعد.', - 'empty_other' => '', + 'empty_other' => 'لا تعليقات بعد.', 'load_replies' => 'تحميل الردود', 'replies_count' => ':count_delimited رد|:count_delimited ردود', 'title' => 'التعليقات', @@ -44,7 +44,7 @@ ], 'ogp' => [ - 'title' => '', + 'title' => 'تعليق بواسطة :user', ], 'placeholder' => [ diff --git a/resources/lang/ar/community.php b/resources/lang/ar/community.php index 43cd4290308..a855e917166 100644 --- a/resources/lang/ar/community.php +++ b/resources/lang/ar/community.php @@ -105,7 +105,7 @@ ], 'skinnables' => [ - 'title' => 'تجليد اكثر', + 'title' => 'سمات اكثر', 'description' => 'يمكنك تغيير شكل المزيد من الأغراض, مثل الخلفية في الصفحة الرئيسية للعبة.', ], diff --git a/resources/lang/ar/events.php b/resources/lang/ar/events.php index dafef57670f..b9c3c8d1841 100644 --- a/resources/lang/ar/events.php +++ b/resources/lang/ar/events.php @@ -27,6 +27,6 @@ ], 'value' => [ - 'rank' => '', + 'rank' => 'الرتبة #:rank', ], ]; diff --git a/resources/lang/ar/forum.php b/resources/lang/ar/forum.php index 33b7ad2b516..441b831927a 100644 --- a/resources/lang/ar/forum.php +++ b/resources/lang/ar/forum.php @@ -48,7 +48,7 @@ 'confirm_restore' => 'اتريد حقاََ اِسترجاع المنشور؟', 'edited' => 'التعديل الأخير تم بواسطة :user :when، عُدِلَ ::count_delimited مرة في المجموع.|التعديل الأخير تم بواسطة :user:when, عُدِلَ ::count_delimited مرات في المجموع.', 'posted_at' => 'نُشِر :when', - 'posted_by_in' => '', + 'posted_by_in' => 'تم النشر بواسطة :username في :forum', 'actions' => [ 'destroy' => 'منشور محذوف', diff --git a/resources/lang/ar/legacy_api_key.php b/resources/lang/ar/legacy_api_key.php index 93492d7e0c7..4c464fdcbcc 100644 --- a/resources/lang/ar/legacy_api_key.php +++ b/resources/lang/ar/legacy_api_key.php @@ -4,21 +4,21 @@ // See the LICENCE file in the repository root for full licence text. return [ - 'new' => '', - 'none' => '', + 'new' => 'مفتاح API كلاسيكي جديد', + 'none' => 'لا يوجد مفتاح.', 'docs' => [ - '_' => '', - 'github' => '', + '_' => 'الوثائق متاحة على :github.', + 'github' => 'GitHub', ], 'form' => [ - 'create' => '', + 'create' => 'أنشئ مفتاحًا', ], 'view' => [ - 'hide' => '', - 'show' => '', + 'hide' => 'إخفاء المفتاح', + 'show' => 'إظهار المفتاح', 'delete' => 'حذف', ], diff --git a/resources/lang/ar/legacy_irc_key.php b/resources/lang/ar/legacy_irc_key.php index 412fea986d8..8f3e1edf7a1 100644 --- a/resources/lang/ar/legacy_irc_key.php +++ b/resources/lang/ar/legacy_irc_key.php @@ -4,20 +4,20 @@ // See the LICENCE file in the repository root for full licence text. return [ - 'confirm_new' => '', - 'new' => '', - 'none' => '', + 'confirm_new' => 'إنشاء كلمة مرور IRC جديدة؟', + 'new' => 'كلمة مرور IRC كلاسيكية جديدة', + 'none' => 'لم يتم تعيين كلمة مرور IRC.', 'form' => [ - 'server_host' => '', - 'server_port' => '', - 'token' => '', - 'username' => '', + 'server_host' => 'الخادم', + 'server_port' => 'المنفذ', + 'token' => 'كلمة مرور الخادم', + 'username' => 'اسم المستخدم', ], 'view' => [ - 'hide' => '', - 'show' => '', - 'delete' => '', + 'hide' => 'إخفاء كلمة المرور', + 'show' => 'إظهار كلمة المرور', + 'delete' => 'حذف', ], ]; diff --git a/resources/lang/ar/model_validation.php b/resources/lang/ar/model_validation.php index 5d39c105ad8..e300bd64368 100644 --- a/resources/lang/ar/model_validation.php +++ b/resources/lang/ar/model_validation.php @@ -8,7 +8,7 @@ 'not_negative' => ':attribute لا يمكن ان يكون سلبياََ.', 'required' => ':attribute مطلوب.', 'too_long' => ':attribute تجاوز الحد المطلوب - يمكن ان يصل حد :limit حروف فقط.', - 'url' => '', + 'url' => 'المرجو إدخال عنوان URL صحيح.', 'wrong_confirmation' => 'التأكيد لا يتطابق.', 'beatmapset_discussion' => [ @@ -110,7 +110,7 @@ ], 'legacy_api_key' => [ - 'exists' => '', + 'exists' => 'يتم توفير مفتاح API واحد فقط لكل مستخدم في الوقت الحالي.', 'attributes' => [ 'api_key' => 'مفتاح واجهة برمجة التطبيقات', diff --git a/resources/lang/ar/notifications.php b/resources/lang/ar/notifications.php index 4ecbfe0184f..f1b47ff71d3 100644 --- a/resources/lang/ar/notifications.php +++ b/resources/lang/ar/notifications.php @@ -15,8 +15,8 @@ 'action_type' => [ '_' => 'الكل', - 'beatmapset' => 'خرائط الموسيقى', - 'build' => '', + 'beatmapset' => 'الخرائط', + 'build' => 'النُسَخ', 'channel' => 'المحادثة', 'forum_topic' => 'منتدى', 'news_post' => 'الأخبار', @@ -57,9 +57,9 @@ 'beatmapset_discussion_unlock_compact' => 'تم الغاء قفل المناقشة', 'review_count' => [ - 'praises' => '', - 'problems' => '', - 'suggestions' => '', + 'praises' => ':count_delimited إشادة|:count_delimited إشادات', + 'problems' => ':count_delimited مشكلة|:count_delimited مشاكل', + 'suggestions' => ':count_delimited إقتراح|:count_delimited مقترحات', ], ], diff --git a/resources/lang/ar/rankings.php b/resources/lang/ar/rankings.php index c79dc148ba5..1d8f50282b4 100644 --- a/resources/lang/ar/rankings.php +++ b/resources/lang/ar/rankings.php @@ -18,15 +18,15 @@ ], 'kudosu' => [ - 'total' => '', - 'available' => '', - 'used' => '', + 'total' => 'المُكتسب', + 'available' => 'متوفر', + 'used' => 'المُنفق', ], 'type' => [ 'charts' => 'منطقة ألأضواء', 'country' => 'الدولة', - 'kudosu' => '', + 'kudosu' => 'كودوسو', 'multiplayer' => 'متعدد اللاعبين', 'performance' => 'الأداء', 'score' => 'النقاط', diff --git a/resources/lang/ar/store.php b/resources/lang/ar/store.php index af57b39a1a4..0983794371c 100644 --- a/resources/lang/ar/store.php +++ b/resources/lang/ar/store.php @@ -6,7 +6,7 @@ return [ 'cart' => [ 'checkout' => 'إتمام الشراء', - 'empty_cart' => '', + 'empty_cart' => 'إزالة جميع العناصر من سلة التسوق', 'info' => ':count_delimited عنصر في السلة ($:subtotal)|:count_delimited عناصر في السلة ($:subtotal)', 'more_goodies' => 'أريد أن تحقق من المزيد من الأشياء قبل إتمام الأمر', 'shipping_fees' => 'رسوم الشحن', @@ -49,37 +49,37 @@ ], 'discount' => 'حفظ :percent%', - 'free' => '', + 'free' => 'مجاناً!', 'invoice' => [ - 'contact' => '', - 'date' => '', + 'contact' => 'جهة الإتصال:', + 'date' => 'التاريخ:', 'echeck_delay' => 'بما ان دفعتك كانت الكترونية، يرجى السماح لنا حتى 10 أيام إضافية لدفع للمرور عن طريق باي بال!', 'hide_from_activity' => 'إشارات osu!supporter لن تعرض بهذا الترتيب في نشاطك.', - 'sent_via' => '', - 'shipping_to' => '', - 'title' => '', + 'sent_via' => 'ارسلت بواسطة:', + 'shipping_to' => 'تُشحن إلى:', + 'title' => 'الفاتورة', 'title_compact' => 'الفاتورة', 'status' => [ 'cancelled' => [ - 'title' => '', + 'title' => 'تم إلغاء طلبك', 'line_1' => [ - '_' => "", - 'link_text' => '', + '_' => "إذا لم تطلب إلغاء، يرجى الاتصال بـ :link واقتبس رقم طلبك في الرسالة (#:order_number).", + 'link_text' => 'دعم متجر osu!', ], ], 'delivered' => [ - 'title' => '', + 'title' => 'لقد تم تسليم طلبك! نأمل أن تستمتع به!', 'line_1' => [ - '_' => '', - 'link_text' => '', + '_' => 'إذا كان لديك أي مشاكل في عملية الشراء الخاصة بك، يرجى الاتصال بـ :link.', + 'link_text' => 'دعم متجر osu!', ], ], 'prepared' => [ - 'title' => '', - 'line_1' => '', - 'line_2' => '', + 'title' => 'يتم إعداد طلبك!', + 'line_1' => 'الرجاء الانتظار لفترة أطول قليلاً حتى يتم شحنها. ستظهر معلومات التتبع هنا بمجرد معالجة الطلب وإرساله. هذا قد يستغرق 5 أيام (ولكن عادةً ما يكون أقل!) اعتماداً على مدى إنشغالنا.', + 'line_2' => 'نحن نرسل جميع الطلبات من اليابان باستخدام مجموعة متنوعة من خدمات الشحن حسب الوزن والقيمة. سيتم تحديث هذه المنطقة مع التفاصيل بمجرد شحن الطلب.', ], 'processing' => [ 'title' => 'لم يتم تأكيد الدفع الخاص بك بعد!', @@ -90,11 +90,11 @@ ], ], 'shipped' => [ - 'title' => '', - 'tracking_details' => '', + 'title' => 'تم شحن طلبك!', + 'tracking_details' => 'وفيما يلي تفاصيل التعقب:', 'no_tracking_details' => [ - '_' => "", - 'link_text' => '', + '_' => "ليس لدينا تفاصيل التتبع حيث أننا أرسلنا الحزمة الخاصة بك عبر البريد الجوي، ولكن يمكنك أن تتوقع تلقيها في غضون 1-3 أسابيع. وبالنسبة لأوروبا، يمكن للجمارك أحيانا أن تؤخر الأمر خارج نطاق سيطرتنا. إذا كان لديك أي مخاوف، يرجى الرد على بريد التأكيد الذي تلقيته :link.", + 'link_text' => 'أرسل لنا بريد إلكتروني', ], ], ], @@ -108,18 +108,18 @@ 'no_orders' => 'لا طلبات للعرض.', 'paid_on' => 'تم تعيين الطلب :date', 'resume' => 'استئناف الدفع', - 'shipping_and_handling' => '', + 'shipping_and_handling' => 'الشحن والتسليم', 'shopify_expired' => 'انتهت صلاحية رابط الدفع لهذه الطلبية.', - 'subtotal' => '', - 'total' => '', + 'subtotal' => 'حاصل الجمع', + 'total' => 'المجموع', 'details' => [ - 'order_number' => '', - 'payment_terms' => '', - 'salesperson' => '', - 'shipping_method' => '', - 'shipping_terms' => '', - 'title' => '', + 'order_number' => 'طلب الشراء #', + 'payment_terms' => 'شروط الدفع', + 'salesperson' => 'مندوب المبيعات', + 'shipping_method' => 'وسيلة الشحن', + 'shipping_terms' => 'شروط الشحن', + 'title' => 'تفاصيل الطلب', ], 'item' => [ @@ -151,14 +151,14 @@ 'paid' => 'دُفِعَت', 'processing' => 'بانتظار التأكيد', 'shipped' => 'تم الشحن', - 'title' => '', + 'title' => 'حالة الطلب', ], 'thanks' => [ - 'title' => '', + 'title' => 'شكرا على طلبك!', 'line_1' => [ - '_' => '', - 'link_text' => '', + '_' => 'سوف تتلقى رسالة تأكيد بالبريد الإلكتروني قريبا. إذا كان لديك أي استفسارات، يرجى :link!', + 'link_text' => 'اتصل بنا', ], ], ], @@ -193,9 +193,9 @@ 'username_change' => [ 'check' => 'أدخل اسم مستخدم للتحقق من توَفُرِه!', 'checking' => 'التحقق من توافر :username...', - 'placeholder' => '', - 'label' => '', - 'current' => '', + 'placeholder' => 'اسم المستخدم المطلوب', + 'label' => 'اسم مستخدم جديد', + 'current' => 'اسم المستخدم الحالي الخاص بك هو ":username".', 'require_login' => [ '_' => 'تحتاج إلى أن تكون :link لتغيير اسمك!', diff --git a/resources/lang/ar/users.php b/resources/lang/ar/users.php index ff6e2999728..0a29bc8f12c 100644 --- a/resources/lang/ar/users.php +++ b/resources/lang/ar/users.php @@ -37,7 +37,7 @@ 'blocked_count' => 'المستخدمون المحظورون (:count)', 'hide_profile' => 'إخفاء الملف الشخصي', 'hide_comment' => 'إخفاء', - 'forum_post_text' => '', + 'forum_post_text' => 'تم إخفاء هذه المشاركة.', 'not_blocked' => 'هذا المستخدم ليس محظوراََ.', 'show_profile' => 'عرض الملف الشخصي', 'show_comment' => 'إظهار', @@ -49,7 +49,7 @@ ], 'card' => [ - 'gift_supporter' => '', + 'gift_supporter' => 'إهداء علامة supporter ', 'loading' => 'جاري التحميل...', 'send_message' => 'إرسال رسالة', ], @@ -124,13 +124,13 @@ ], 'ogp' => [ - 'modding_description' => '', - 'modding_description_empty' => '', + 'modding_description' => 'الخرائط: :counts', + 'modding_description_empty' => 'ليس لدى المستخدم أي خرائط...', 'description' => [ - '_' => '', - 'country' => '', - 'global' => '', + '_' => 'الترتيب (:ruleset): :global | :country', + 'country' => 'الدولة :rank', + 'global' => 'عالمياََ :rank', ], ], @@ -397,7 +397,7 @@ 'date' => 'التاريخ', 'action' => 'النشاط', 'length' => 'الطول', - 'length_indefinite' => '', + 'length_indefinite' => 'غير محدد', 'description' => 'الوصف', 'actor' => 'بواسطة :username', diff --git a/resources/lang/ca/artist.php b/resources/lang/ca/artist.php index 0d71d279b19..2da2a6e4c44 100644 --- a/resources/lang/ca/artist.php +++ b/resources/lang/ca/artist.php @@ -30,7 +30,7 @@ 'songs' => [ '_' => 'Cançons', 'count' => ':count_delimited cançó|:count_delimited cançons', - 'original' => 'Original d\'osu!', + 'original' => 'osu! original', 'original_badge' => 'ORIGINAL', ], diff --git a/resources/lang/cs/accounts.php b/resources/lang/cs/accounts.php index 14ecdb88c40..bc37120fe08 100644 --- a/resources/lang/cs/accounts.php +++ b/resources/lang/cs/accounts.php @@ -63,15 +63,15 @@ ], 'github_user' => [ - 'info' => "", - 'link' => '', + 'info' => "Pokud jste přispěvatelem do repozitářů s otevřeným zdrojovým kódem osu!, propojením vašeho účtu GitHub zde budou vaše záznamy změn spojeny s vaším osu! profilem. Účty GitHub bez historie příspěvků s osu! nelze propojit.", + 'link' => 'Připojit GitHub účet', 'title' => 'GitHub', - 'unlink' => '', + 'unlink' => 'Odpojit GitHub účet', 'error' => [ - 'already_linked' => '', - 'no_contribution' => '', - 'unverified_email' => '', + 'already_linked' => 'Tento GitHub účet je již propojen s jiným uživatelem.', + 'no_contribution' => 'Nelze propojit GitHub účet bez historie příspěvků v osu! repozitářích.', + 'unverified_email' => 'Ověřte prosím svůj primární e-mail na GitHubu a pak zkuste znovu propojit svůj účet.', ], ], diff --git a/resources/lang/cs/beatmap_discussions.php b/resources/lang/cs/beatmap_discussions.php index 464707ae7ec..d7f67a3d63c 100644 --- a/resources/lang/cs/beatmap_discussions.php +++ b/resources/lang/cs/beatmap_discussions.php @@ -26,7 +26,7 @@ 'deleted' => 'Zahrnout smazané diskuze', 'mode' => 'Režim beatmapy', 'only_unresolved' => 'Ukaž pouze nerozluštěné diskuze', - 'show_review_embeds' => '', + 'show_review_embeds' => 'Zobrazit rencenze', 'types' => 'Typy zpráv', 'username' => 'Uživatelské jméno', diff --git a/resources/lang/cs/comments.php b/resources/lang/cs/comments.php index 3429c41f6f0..9c8953b8da1 100644 --- a/resources/lang/cs/comments.php +++ b/resources/lang/cs/comments.php @@ -44,7 +44,7 @@ ], 'ogp' => [ - 'title' => '', + 'title' => 'komentář od :user', ], 'placeholder' => [ diff --git a/resources/lang/cs/events.php b/resources/lang/cs/events.php index 2fec4e99d98..d58dcd76744 100644 --- a/resources/lang/cs/events.php +++ b/resources/lang/cs/events.php @@ -27,6 +27,6 @@ ], 'value' => [ - 'rank' => '', + 'rank' => 'hodnocení #:rank', ], ]; diff --git a/resources/lang/cs/store.php b/resources/lang/cs/store.php index 7e073c3aeec..294f6a7552b 100644 --- a/resources/lang/cs/store.php +++ b/resources/lang/cs/store.php @@ -56,8 +56,8 @@ 'date' => 'Datum:', 'echeck_delay' => 'Jelikož vaše platba byla prováděna službou eCheck, prosím, dejte nám až 10 dní na to, aby platba úspěšně prošla přes PayPal!', 'hide_from_activity' => 'osu!supporter tagy v této objednávce se nebudou zobrazovat v nedávných aktivitách.', - 'sent_via' => '', - 'shipping_to' => '', + 'sent_via' => 'Odesláno přes:', + 'shipping_to' => 'Místo doručení:', 'title' => 'Faktura', 'title_compact' => 'faktura', @@ -78,8 +78,8 @@ ], 'prepared' => [ 'title' => 'Vaše objednávka se připravuje!', - 'line_1' => '', - 'line_2' => '', + 'line_1' => 'Počkejte prosím o něco déle, než bude zásilka odeslána. Informace pro sledování se zobrazí zde, jakmile bude objednávka zpracována a odeslána. To může trvat až 5 dní (ale obvykle méně!) v závislosti na tom, jak jsme zaneprázdněni.', + 'line_2' => 'Všechny objednávky zasíláme z Japonska pomocí různých přepravních služeb v závislosti na váze a hodnotě. Tato oblast bude po odeslání objednávky specifikována.', ], 'processing' => [ 'title' => 'Vaše platba nebyla ještě potvrzena!', @@ -91,10 +91,10 @@ ], 'shipped' => [ 'title' => 'Vaše objednávka byla odeslána!', - 'tracking_details' => '', + 'tracking_details' => 'Detaily o sledování:', 'no_tracking_details' => [ - '_' => "", - 'link_text' => '', + '_' => "Vzhledem k tomu, že jsme vaší zásilku poslali přes Air Mail nemáme detaily o sledování, ale můžete zásilku očekávat během 1-3 týdnů. Pro Evropu někdy může celní správa zpozdit dopravu zásilky o něco déle. Pokud máte obavy, prosím odpovězte na email o potvrzení objednávky, který jste obdrželi :link.", + 'link_text' => 'napište nám email', ], ], ], @@ -108,17 +108,17 @@ 'no_orders' => 'Nejsou zde žádné objednávky k zobrazení.', 'paid_on' => 'Objednávka zadána :date', 'resume' => 'Obnovit objednávku', - 'shipping_and_handling' => '', + 'shipping_and_handling' => 'Přepravné a balné', 'shopify_expired' => 'Odkaz na objednávku pro tuto objednávku vypršel.', 'subtotal' => 'Mezisoučet', 'total' => 'Celkem', 'details' => [ 'order_number' => 'Objednávka č.', - 'payment_terms' => '', - 'salesperson' => '', - 'shipping_method' => '', - 'shipping_terms' => '', + 'payment_terms' => 'Platební podmínky', + 'salesperson' => 'Prodejce', + 'shipping_method' => 'Způsob dopravy', + 'shipping_terms' => 'Dodací podmínky', 'title' => 'Detail objednávky', ], diff --git a/resources/lang/de/accounts.php b/resources/lang/de/accounts.php index cc8758dd658..7206e93fac1 100644 --- a/resources/lang/de/accounts.php +++ b/resources/lang/de/accounts.php @@ -20,7 +20,7 @@ 'title' => 'E-Mail', 'locked' => [ '_' => 'Bitte kontaktiere das :accounts, wenn du deine E-Mail-Adresse aktualisieren möchtest.', - 'accounts' => 'Account Support Team', + 'accounts' => 'Account-Support-Team', ], ], diff --git a/resources/lang/de/users.php b/resources/lang/de/users.php index 4b4da619d8d..3e6a6ba2a5e 100644 --- a/resources/lang/de/users.php +++ b/resources/lang/de/users.php @@ -72,7 +72,7 @@ 'disabled' => [ 'title' => 'Uh, oh! Anscheinend wurde dein Konto deaktiviert.', - 'warning' => "Falls Du gegen eine Regel verstoßen hast, beachte bitte, dass es in der Regel eine Frist von einem Monat gibt, in der wir keine Anträge berücksichtigen. Nach diesem Zeitraum kannst Du uns jederzeit kontaktieren, falls Du dies für erforderlich hältst. Beachte, dass das Erstellen neuer Konten nach dem Deaktivieren eines Kontos zu einer Verlängerung dieser einmonatigen Frist führt. Bitte beachte auch, dass du für jedes Konto, das du erstellst, weitere Regeln verletzt. Wir empfehlen Dir dringend, diesen Weg nicht zu gehen!", + 'warning' => "Falls Du gegen eine Regel verstoßen hast, beachte bitte, dass es in der Regel eine Bedenkzeit von einem Monat gibt, in der wir keine Anträge berücksichtigen. Nach diesem Zeitraum kannst Du uns jederzeit kontaktieren, falls Du dies für erforderlich hältst. Beachte, dass das Erstellen neuer Konten nach dem Deaktivieren eines Kontos zu einer Verlängerung dieser einmonatigen Bedenkzeit führt. Bitte beachte auch, dass du für jedes Konto, das du erstellst, weitere Regeln verletzt. Wir raten Dir dringend davon ab, diesen Weg einzuschlagen!", 'if_mistake' => [ '_' => 'Wenn du der Meinung bist, dass dies ein Fehler ist, kannst du uns gerne kontaktieren (per :email oder durch Klicken auf das "?" in der rechten unteren Ecke dieser Seite). Bitte beachte, dass wir bei unseren Handlungen immer volles Vertrauen haben, da sie auf sehr soliden Daten beruhen. Wir behalten uns das Recht vor, deine Anfrage zu ignorieren, wenn wir das Gefühl haben, dass du absichtlich unehrlich bist.', diff --git a/resources/lang/en/password_reset.php b/resources/lang/en/password_reset.php index 7003798e034..7814b2e2406 100644 --- a/resources/lang/en/password_reset.php +++ b/resources/lang/en/password_reset.php @@ -36,6 +36,9 @@ 'starting' => [ 'username' => 'Enter email address or username', + 'reason' => [ + 'inactive_different_country' => "Your account hasn't been used in a long time. To ensure your account security please reset your password.", + ], 'support' => [ '_' => 'Need further assistance? Contact us via our :button.', 'button' => 'support system', diff --git a/resources/lang/en/store.php b/resources/lang/en/store.php index 0422017fc02..d8dbe247543 100644 --- a/resources/lang/en/store.php +++ b/resources/lang/en/store.php @@ -93,7 +93,7 @@ 'title' => 'Your order has been shipped!', 'tracking_details' => 'Tracking details follow:', 'no_tracking_details' => [ - '_' => "We don't have tracking details as we sent your package via Air Mail, but you can expect to receive it within 1-3 weeks. For Europe, sometimes customs can delay the order out of our control. If you have any concerns, please reply to the order confirmation email you received :link.", + '_' => "We don't have tracking details as we sent your package via Air Mail, but you can expect to receive it within 1-3 weeks. For Europe, sometimes customs can delay the order out of our control. If you have any concerns, please reply to the order confirmation email you received (or :link).", 'link_text' => 'send us an email', ], ], diff --git a/resources/lang/es/accounts.php b/resources/lang/es/accounts.php index 6ae15dc72f1..9bf414e7305 100644 --- a/resources/lang/es/accounts.php +++ b/resources/lang/es/accounts.php @@ -70,7 +70,7 @@ 'error' => [ 'already_linked' => 'Esta cuenta de GitHub ya está vinculada a un usuario diferente.', - 'no_contribution' => 'No se puede vincular la cuenta de GitHub sin ningún historial de contribuciones en los repositorios de osu!', + 'no_contribution' => 'No se puede vincular la cuenta de GitHub sin ningún historial de contribuciones en los repositorios de osu!.', 'unverified_email' => 'Por favor, verifica tu correo principal en GitHub, luego intenta vincular tu cuenta de nuevo.', ], ], diff --git a/resources/lang/es/artist.php b/resources/lang/es/artist.php index 7948caf4d5c..ba2a517085c 100644 --- a/resources/lang/es/artist.php +++ b/resources/lang/es/artist.php @@ -30,7 +30,7 @@ 'songs' => [ '_' => 'Canciones', 'count' => ':count_delimited canción|:count_delimited canciones', - 'original' => 'Original de osu!', + 'original' => 'osu! original', 'original_badge' => 'ORIGINAL', ], diff --git a/resources/lang/es/authorization.php b/resources/lang/es/authorization.php index 8098424c35b..d5f95ac0651 100644 --- a/resources/lang/es/authorization.php +++ b/resources/lang/es/authorization.php @@ -18,7 +18,7 @@ ], 'nominate' => [ 'exhausted' => 'Has alcanzado tu límite de nominaciones diarias, por favor inténtalo de nuevo mañana.', - 'incorrect_state' => 'Error al realizar esa acción, intente actualizar la página.', + 'incorrect_state' => 'Error al realizar esa acción, intenta actualizar la página.', 'owner' => "No puedes nominar tu propio mapa.", 'set_metadata' => 'Debes establecer el género y el idioma antes de nominar.', ], @@ -182,7 +182,7 @@ 'edit' => [ 'locked' => 'La página de usuario está bloqueada.', 'not_owner' => 'Solo puedes editar tu página de usuario.', - 'require_supporter_tag' => 'Se necesita la etiqueta osu!supporter.', + 'require_supporter_tag' => 'Necesitas una etiqueta de osu!supporter.', ], ], 'update_email' => [ diff --git a/resources/lang/es/beatmappacks.php b/resources/lang/es/beatmappacks.php index fda4c2bdf49..b69c72b0d15 100644 --- a/resources/lang/es/beatmappacks.php +++ b/resources/lang/es/beatmappacks.php @@ -8,11 +8,11 @@ 'description' => 'Colecciones preempaquetadas de mapas basadas en un tema común.', 'empty' => '¡Próximamente!', 'nav_title' => 'listado', - 'title' => 'Paquetes de Mapas', + 'title' => 'Paquetes de mapas', 'blurb' => [ 'important' => 'LEE ESTO ANTES DE DESCARGAR', - 'install_instruction' => 'Instalación: Una vez descargado un paquete, extraiga el contenido del mismo en su directorio Songs de osu! y este hará el resto.', + 'install_instruction' => 'Instalación: Una vez el paquete se haya descargado, extrae su contenido en tu directorio Songs de osu! y osu! hará el resto.', 'note' => [ '_' => 'También ten en cuenta que es muy recomendable :scary, ya que los mapas más antiguos son de mucha menor calidad que los mapas más recientes.', 'scary' => 'descargar los paquetes de los más recientes a los más antiguos', diff --git a/resources/lang/es/beatmaps.php b/resources/lang/es/beatmaps.php index 2921a6824ad..4a4f954d6a9 100644 --- a/resources/lang/es/beatmaps.php +++ b/resources/lang/es/beatmaps.php @@ -14,17 +14,17 @@ 'allow_kudosu' => 'permitir kudosu', 'beatmap_information' => 'Página del mapa', 'delete' => 'eliminar', - 'deleted' => 'Eliminado por :editor :delete_time', + 'deleted' => 'Eliminado por :editor :delete_time.', 'deny_kudosu' => 'negar kudosu', 'edit' => 'editar', - 'edited' => 'Última edición por :editor :update_time', + 'edited' => 'Última edición por :editor :update_time.', 'guest' => 'Dificultad de invitado por :user', 'kudosu_denied' => 'Negado de obtener kudosu.', 'message_placeholder_deleted_beatmap' => 'Esta dificultad ha sido eliminada, por lo que ya no puede ser discutida.', 'message_placeholder_locked' => 'La discusión para este mapa ha sido desactivada.', - 'message_placeholder_silenced' => "No puede publicar una discusión mientras esté silenciado.", + 'message_placeholder_silenced' => "No puedes publicar una discusión mientras estás silenciado.", 'message_type_select' => 'Seleccionar tipo de comentario', - 'reply_notice' => 'Presione enter para responder.', + 'reply_notice' => 'Presiona enter para responder.', 'reply_placeholder' => 'Escribe tu respuesta aquí', 'require-login' => 'Inicia sesión para publicar o responder', 'resolved' => 'Resuelto', @@ -50,7 +50,7 @@ 'prompt' => [ 'lock' => 'Motivo del bloqueo', - 'unlock' => '¿Seguro que desea desbloquearla?', + 'unlock' => '¿Seguro que quieres desbloquearla?', ], ], @@ -104,7 +104,7 @@ 'new' => [ 'pin' => 'Anclar', 'timestamp' => 'Marca de tiempo', - 'timestamp_missing' => '¡Usa Ctrl+C en el modo de edición y pega tu mensaje para agregar una marca de tiempo!', + 'timestamp_missing' => '¡usa ctrl-c en el modo de edición y pega tu mensaje para agregar una marca de tiempo!', 'title' => 'Nueva discusión', 'unpin' => 'Desanclar', ], @@ -117,7 +117,7 @@ 'unlink' => 'Desvincular', 'unsaved' => 'No guardado', 'timestamp' => [ - 'all-diff' => 'Las publicaciones en "Todas las dificultades" no pueden tener marcas de tiempo.', + 'all-diff' => 'Las publicaciones en «Todas las dificultades» no pueden tener marcas de tiempo.', 'diff' => 'Si esta publicación empieza con una marca de tiempo, se mostrará en la Línea de tiempo.', ], ], @@ -152,7 +152,7 @@ 'status-messages' => [ 'approved' => '¡Este mapa fue aprobado el :date!', 'graveyard' => "Este mapa no ha sido actualizado desde el :date por lo que fue abandonado...", - 'loved' => '¡Este mapa fue agregado a Amados el :date!', + 'loved' => '¡Este mapa se añadió a amados el :date!', 'ranked' => '¡Este mapa fue clasificado el :date!', 'wip' => 'Nota: Este mapa fue marcado como trabajo en proceso por el creador.', ], @@ -172,7 +172,7 @@ 'hype' => [ 'button' => '¡Hypear este mapa!', 'button_done' => '¡Hypeado!', - 'confirm' => "¿Está seguro? Esto usará uno de sus :n hype restantes y no puede deshacerse.", + 'confirm' => "¿Estás seguro? Esto usará uno de tus :n hypes restantes y no se puede deshacer.", 'explanation' => '¡Hypea este mapa para hacerlo más visible para la nominación y la clasificación!', 'explanation_guest' => '¡Inicia sesión y hypea este mapa para hacerlo más visible para la nominación y la clasificación!', 'new_time' => "Obtendrás otro hype :new_time.", @@ -190,22 +190,22 @@ 'already_nominated' => 'Ya has nominado este mapa.', 'cannot_nominate' => 'No puedes nominar este modo de juego del mapa.', 'delete' => 'Eliminar', - 'delete_own_confirm' => '¿Está seguro? El mapa será eliminado y serás redirigido de vuelta a tu perfil.', - 'delete_other_confirm' => '¿Está seguro? El mapa será eliminado y serás redirigido de vuelta al perfil de usuario.', + 'delete_own_confirm' => '¿Estás seguro? Este mapa será eliminado y se te redirigirá de vuelta a tu perfil.', + 'delete_other_confirm' => '¿Estás seguro? El mapa será eliminado y se te redirigirá de vuelta al perfil del usuario.', 'disqualification_prompt' => '¿Motivo de la descalificación?', 'disqualified_at' => 'Descalificado :time_ago (:reason).', 'disqualified_no_reason' => 'motivo no especificado', 'disqualify' => 'Descalificar', - 'incorrect_state' => 'Error al realizar esa acción, intente actualizar la página.', + 'incorrect_state' => 'Error al realizar esa acción, intenta actualizar la página.', 'love' => 'Amar', - 'love_choose' => 'Elegir dificultad para el amado', + 'love_choose' => 'Elegir dificultad para amados', 'love_confirm' => '¿Amar este mapa?', 'nominate' => 'Nominar', 'nominate_confirm' => '¿Nominar este mapa?', 'nominated_by' => 'nominado por :users', 'not_enough_hype' => "No hay suficiente hype.", - 'remove_from_loved' => 'Remover de Amados', - 'remove_from_loved_prompt' => 'Motivo para remover de Amados:', + 'remove_from_loved' => 'Eliminar de amados', + 'remove_from_loved_prompt' => 'Motivo para eliminarlo de amados:', 'required_text' => 'Nominaciones: :current/:required', 'reset_message_deleted' => 'eliminado', 'title' => 'Estado de nominación', @@ -224,18 +224,18 @@ ], 'reset_confirm' => [ - 'disqualify' => '¿Estás seguro? Esto eliminará el mapa de la calificación y restablecerá el proceso de nominación.', - 'nomination_reset' => '¿Está seguro? Publicar un nuevo problema restablecerá el proceso de nominación.', - 'problem_warning' => '¿Seguro que deseas reportar de un problema en este mapa? Esto alertará a los Beatmap Nominators.', + 'disqualify' => '¿Estás seguro? Esto sacará el mapa de la calificación y restablecerá el proceso de nominación.', + 'nomination_reset' => '¿Estás seguro? Publicar un nuevo problema reiniciará todas las nominaciones.', + 'problem_warning' => '¿Seguro que quieres reportar un problema en este mapa? Esto alertará a los Beatmap Nominators.', ], ], 'listing' => [ 'search' => [ 'prompt' => 'escribe en palabras clave...', - 'login_required' => 'Inicie sesión para buscar.', + 'login_required' => 'Inicia sesión para buscar.', 'options' => 'Más opciones de búsqueda', - 'supporter_filter' => 'Filtrar por :filters requiere una etiqueta osu!supporter activa', + 'supporter_filter' => 'Filtrar por :filters requiere una etiqueta de osu!supporter activa', 'not-found' => 'no hay resultados', 'not-found-quote' => '... nop, nada encontrado.', 'filters' => [ @@ -263,7 +263,7 @@ ], 'supporter_filter_quote' => [ '_' => 'Necesitas un :link activo para filtrar por :filters', - 'link_text' => 'etiqueta osu!supporter', + 'link_text' => 'etiqueta de osu!supporter', ], ], ], diff --git a/resources/lang/es/beatmapset_events.php b/resources/lang/es/beatmapset_events.php index 19ee449e5ae..c63b435576a 100644 --- a/resources/lang/es/beatmapset_events.php +++ b/resources/lang/es/beatmapset_events.php @@ -17,11 +17,11 @@ 'disqualify_legacy' => 'Descalificado por :user. Motivo: :text.', 'genre_edit' => 'El género cambió de :old a :new.', 'issue_reopen' => 'El problema resuelto :discussion por :discussion_user ha sido reabierto por :user.', - 'issue_resolve' => 'El problema :discussion ha sido marcado como resuelto.', + 'issue_resolve' => 'El problema :discussion por :discussion_user ha sido marcado como resuelto por :user.', 'kudosu_allow' => 'La negación de kudosu para la discusión :discussion ha sido eliminada.', 'kudosu_deny' => 'La discusión :discussion ha sido negada para kudosu.', 'kudosu_gain' => 'La discusión :discussion por :user ha obtenido suficientes votos para kudosu.', - 'kudosu_lost' => 'La discusión :discussion por :user ha perdido votos y su kudosu ganado ha sido removido.', + 'kudosu_lost' => 'La discusión :discussion por :user ha perdido votos y su kudosu ganado ha sido eliminado.', 'kudosu_recalculate' => 'A la discusión :discussion se le han recalculado los kudosu otorgados.', 'language_edit' => 'El lenguaje cambió de :old a :new.', 'love' => 'Amado por :user.', @@ -33,17 +33,17 @@ 'offset_edit' => 'La compensación en línea ha cambiado de :old a :new.', 'qualify' => 'Este mapa ha alcanzado el número requerido de nominaciones y ha sido calificado.', 'rank' => 'Clasificado.', - 'remove_from_loved' => 'Removido de Amados por :user. (:text)', + 'remove_from_loved' => 'Eliminado de amados por :user. (:text)', 'tags_edit' => 'Las etiquetas cambiaron de «:old» a «:new».', 'nsfw_toggle' => [ - 'to_0' => 'Marca explícita removida', + 'to_0' => 'Marca explícita quitada', 'to_1' => 'Marcado como explícito', ], ], 'index' => [ - 'title' => 'Eventos del set de mapas', + 'title' => 'Eventos del conjunto de mapas', 'form' => [ 'period' => 'Período', @@ -68,13 +68,13 @@ 'genre_edit' => 'Edición de género', 'issue_reopen' => 'Reapertura de discusión', 'issue_resolve' => 'Resolución de discusión', - 'kudosu_allow' => 'Permiso de Kudosu', - 'kudosu_deny' => 'Negación de Kudosu', - 'kudosu_gain' => 'Ganancia de Kudosu', - 'kudosu_lost' => 'Pérdida de Kudosu', - 'kudosu_recalculate' => 'Recalculación de Kudosu', + 'kudosu_allow' => 'Permiso de kudosu', + 'kudosu_deny' => 'Negación de kudosu', + 'kudosu_gain' => 'Ganancia de kudosu', + 'kudosu_lost' => 'Pérdida de kudosu', + 'kudosu_recalculate' => 'Recalculación de kudosu', 'language_edit' => 'Edición del idioma', - 'love' => 'Amor', + 'love' => 'Amados', 'nominate' => 'Nominación', 'nomination_reset' => 'Restablecimiento de nominación', 'nomination_reset_received' => 'Restablecimiento de nominación recibida', @@ -82,6 +82,6 @@ 'offset_edit' => 'Edición de compensación', 'qualify' => 'Calificación', 'rank' => 'Clasificación', - 'remove_from_loved' => 'Remoción de Amados', + 'remove_from_loved' => 'Eliminación de amados', ], ]; diff --git a/resources/lang/es/changelog.php b/resources/lang/es/changelog.php index ab923356dc4..477c8256cf5 100644 --- a/resources/lang/es/changelog.php +++ b/resources/lang/es/changelog.php @@ -4,7 +4,7 @@ // See the LICENCE file in the repository root for full licence text. return [ - 'generic' => 'Corrección de errores y mejoras menores.', + 'generic' => 'Corrección de errores y mejoras menores', 'build' => [ 'title' => 'cambios en :version', diff --git a/resources/lang/es/client_verifications.php b/resources/lang/es/client_verifications.php index 4a11d2b1281..ad82eb13595 100644 --- a/resources/lang/es/client_verifications.php +++ b/resources/lang/es/client_verifications.php @@ -7,12 +7,12 @@ 'completed' => [ 'home' => 'Ir al panel de control', 'logout' => 'Cerrar sesión', - 'text' => 'Ahora puede cerrar esta ventana', - 'title' => 'Verificación del cliente osu! completada', + 'text' => 'Ya puedes cerrar esta pestaña/ventana', + 'title' => 'Verificación del cliente de osu! completada', ], 'create' => [ 'confirm' => 'Haga clic en el botón de autorización de abajo para finalizar la verificación del cliente.', - 'title' => 'Verificación del cliente osu!', + 'title' => 'Verificación del cliente de osu!', ], ]; diff --git a/resources/lang/es/community.php b/resources/lang/es/community.php index 9583537c7b0..7f161961129 100644 --- a/resources/lang/es/community.php +++ b/resources/lang/es/community.php @@ -140,9 +140,9 @@ 'supporter_status' => [ 'contribution' => '¡Gracias por tu apoyo hasta ahora! ¡Has contribuido con :dollars con la compra de :tags etiquetas!', 'gifted' => "Has regalado :giftedTags de tus compras (eso es un valor de :giftedDollars), ¡qué generoso!", - 'not_yet' => "Nunca has tenido una etiqueta osu!supporter :(", - 'valid_until' => '¡Tu etiqueta osu!supporter actual es válida hasta el :date!', - 'was_valid_until' => 'Tu etiqueta osu!supporter fue válida hasta el :date.', + 'not_yet' => "Nunca has tenido una etiqueta de osu!supporter :(", + 'valid_until' => '¡Tu etiqueta de osu!supporter actual es válida hasta el :date!', + 'was_valid_until' => 'Tu etiqueta de osu!supporter fue válida hasta el :date.', ], ], ]; diff --git a/resources/lang/es/events.php b/resources/lang/es/events.php index d09eb14e8ff..9ee704c33c7 100644 --- a/resources/lang/es/events.php +++ b/resources/lang/es/events.php @@ -9,7 +9,7 @@ 'beatmapset_approve' => '¡:beatmapset por :user ha sido :approval!', 'beatmapset_delete' => ':beatmapset ha sido eliminado.', 'beatmapset_revive' => ':beatmapset ha sido revivido del sueño eterno por :user.', - 'beatmapset_update' => ':user ha actualizado el mapa ":beatmapset"', + 'beatmapset_update' => ':user ha actualizado el mapa «:beatmapset»', 'beatmapset_upload' => ':user ha enviado un nuevo mapa «:beatmapset»', 'empty' => "¡Este usuario no ha hecho nada notable recientemente!", 'rank' => ':user logró el :rank en :beatmap (:mode)', diff --git a/resources/lang/es/forum.php b/resources/lang/es/forum.php index 7579ae9ea1e..2460526dcf0 100644 --- a/resources/lang/es/forum.php +++ b/resources/lang/es/forum.php @@ -20,7 +20,7 @@ 'destroy' => [ '_' => 'Eliminar portada', - 'confirm' => '¿Seguro que desea eliminar la imagen de portada?', + 'confirm' => '¿Seguro que quieres eliminar la imagen de portada?', ], ], @@ -145,7 +145,7 @@ 'fork' => 'de :topic', 'pin' => 'tema anclado', 'post_operation' => 'publicado por :username', - 'remove_tag' => 'etiqueta removida ":tag"', + 'remove_tag' => 'etiqueta «:tag» eliminada', 'source_forum_operation' => 'de :forum', 'unpin' => 'tema sin fijar', ], @@ -231,7 +231,7 @@ 'hide_results_info' => 'Solo se mostrarán después de que finalice la encuesta.', 'length' => 'Duración de la encuesta', 'length_days_suffix' => 'días', - 'length_info' => 'Dejar en blanco para una encuesta sin fecha límite.', + 'length_info' => 'Dejar en blanco para una encuesta sin fecha límite', 'max_options' => 'Opciones por usuario', 'max_options_info' => 'Este es el número de opciones que un usuario puede seleccionar al votar.', 'options' => 'Opciones', @@ -260,37 +260,37 @@ ], 'issue_tag_assigned' => [ - 'to_0' => 'Eliminar etiqueta "asignado"', - 'to_0_done' => 'Etiqueta "asignado" eliminada', - 'to_1' => 'Agregar etiqueta "asignado"', + 'to_0' => 'Eliminar etiqueta «asignado»', + 'to_0_done' => 'Etiqueta «asignado» eliminada', + 'to_1' => 'Añadir etiqueta «asignado»', 'to_1_done' => 'Etiqueta «asignado» añadida', ], 'issue_tag_confirmed' => [ - 'to_0' => 'Eliminar etiqueta "confirmado"', - 'to_0_done' => 'Etiqueta "confirmado" eliminada', - 'to_1' => 'Agregar etiqueta "confirmado"', + 'to_0' => 'Eliminar etiqueta «confirmado»', + 'to_0_done' => 'Etiqueta «confirmado» eliminada', + 'to_1' => 'Añadir etiqueta «confirmado»', 'to_1_done' => 'Etiqueta «confirmado» añadida', ], 'issue_tag_duplicate' => [ - 'to_0' => 'Eliminar etiqueta "duplicado"', - 'to_0_done' => 'Etiqueta "duplicado" eliminada', - 'to_1' => 'Agregar etiqueta "duplicado"', + 'to_0' => 'Eliminar etiqueta «duplicado»', + 'to_0_done' => 'Etiqueta «duplicado» eliminada', + 'to_1' => 'Añadir etiqueta «duplicado»', 'to_1_done' => 'Etiqueta «duplicado» añadida', ], 'issue_tag_invalid' => [ - 'to_0' => 'Eliminar etiqueta "inválido"', - 'to_0_done' => 'Etiqueta "inválido" eliminada', - 'to_1' => 'Agregar etiqueta "inválido"', + 'to_0' => 'Eliminar etiqueta «inválido»', + 'to_0_done' => 'Etiqueta «inválido» eliminada', + 'to_1' => 'Añadir etiqueta «inválido»', 'to_1_done' => 'Etiqueta «inválido» añadida', ], 'issue_tag_resolved' => [ - 'to_0' => 'Eliminar etiqueta "resuelto"', - 'to_0_done' => 'Etiqueta "resuelto" eliminada', - 'to_1' => 'Agregar etiqueta "resuelto"', + 'to_0' => 'Eliminar etiqueta «resuelto»', + 'to_0_done' => 'Etiqueta «resuelto» eliminada', + 'to_1' => 'Añadir etiqueta «resuelto»', 'to_1_done' => 'Etiqueta «resuelto» añadida', ], diff --git a/resources/lang/es/friends.php b/resources/lang/es/friends.php index 2ba86d408d7..b02100f8398 100644 --- a/resources/lang/es/friends.php +++ b/resources/lang/es/friends.php @@ -5,10 +5,10 @@ return [ 'title_compact' => 'amigos', - 'too_many' => 'Límite de amigos alcanzado.', + 'too_many' => 'Límite de amigos alcanzado', 'buttons' => [ - 'add' => 'agregar amigo', + 'add' => 'añadir amigo', 'disabled' => 'seguidores', 'remove' => 'eliminar amigo', ], diff --git a/resources/lang/es/home.php b/resources/lang/es/home.php index 60da9db0c9c..ed034d4e213 100644 --- a/resources/lang/es/home.php +++ b/resources/lang/es/home.php @@ -27,7 +27,7 @@ 'title' => 'buscar', 'beatmapset' => [ - 'login_required' => 'Inicie sesión para buscar mapas', + 'login_required' => 'Inicia sesión para buscar mapas', 'more' => 'Hay :count mapas más en los resultados', 'more_simple' => 'Ver más resultados de mapas', 'title' => 'Mapas', @@ -36,7 +36,7 @@ 'forum_post' => [ 'all' => 'Todos los foros', 'link' => 'Busca en el foro', - 'login_required' => 'Inicie sesión para buscar en el foro', + 'login_required' => 'Inicia sesión para buscar en el foro', 'more_simple' => 'Ver más resultados de los foros', 'title' => 'Foro', @@ -58,10 +58,10 @@ ], 'user' => [ - 'login_required' => 'Inicie sesión para buscar usuarios', + 'login_required' => 'Inicia sesión para buscar usuarios', 'more' => ':count jugadores más coinciden con la búsqueda', 'more_simple' => 'Ver más resultados de jugadores', - 'more_hidden' => 'La búsqueda de jugadores está limitada a :max jugadores. Intenta refinando tus términos de búsqueda.', + 'more_hidden' => 'La búsqueda de jugadores está limitada a :max jugadores. Intenta refinar tus términos de búsqueda.', 'title' => 'Jugadores', ], @@ -77,10 +77,10 @@ 'action_lazer' => 'Descargar osu!(lazer)', 'action_lazer_description' => 'la próxima gran actualización de osu!', 'action_lazer_info' => 'revisa esta página para más información', - 'action_lazer_title' => 'prueba osu!(lazer)', - 'action_title' => 'descarga osu!', + 'action_lazer_title' => 'probar osu!(lazer)', + 'action_title' => 'descargar osu!', 'for_os' => 'para :os', - 'lazer_note' => 'nota: se aplican reinicios de la tabla de clasificación', + 'lazer_note' => 'nota: se aplican reinicios a la tabla de clasificación', 'macos-fallback' => 'usuarios de macOS', 'mirror' => 'link alternativo', 'or' => 'o', @@ -91,9 +91,9 @@ 'video-guide' => 'guía en vídeo', 'help' => [ - '_' => 'si tiene problemas para iniciar el juego o para obtener una cuenta, :help_forum_link o :support_button.', - 'help_forum_link' => 'consulte el foro de ayuda', - 'support_button' => 'contacte al soporte técnico', + '_' => 'si tienes problemas para iniciar el juego o para obtener una cuenta, :help_forum_link o :support_button.', + 'help_forum_link' => 'consulta el foro de ayuda', + 'support_button' => 'contacta con soporte', ], 'os' => [ @@ -107,7 +107,7 @@ 'description' => 'sigue las instrucciones cuando inicies el juego para iniciar sesión o crear una nueva cuenta', ], 'download' => [ - 'title' => 'descargar el juego', + 'title' => 'instalar el juego', 'description' => 'haz clic en el botón de arriba para descargar el instalador, luego ¡ejecútalo!', ], 'beatmaps' => [ @@ -124,7 +124,7 @@ 'title' => 'panel', 'news' => [ 'title' => 'Novedades', - 'error' => 'Error al cargar las novedades, ¿intente actualizar la página?...', + 'error' => 'Error al cargar las novedades, ¿prueba a actualizar la página?...', ], 'header' => [ 'stats' => [ diff --git a/resources/lang/es/livestreams.php b/resources/lang/es/livestreams.php index 5e904afc3b0..9c09fad1b5f 100644 --- a/resources/lang/es/livestreams.php +++ b/resources/lang/es/livestreams.php @@ -6,7 +6,7 @@ return [ 'promote' => [ 'pin' => '¿Seguro que desea promocionar esta transmisión en vivo?', - 'unpin' => "¿Seguro que desea quitar la promoción de esta transmisión en vivo?", + 'unpin' => "¿Seguro que quieres quitar la promoción de esta transmisión en vivo?", ], 'top-headers' => [ diff --git a/resources/lang/es/mail.php b/resources/lang/es/mail.php index 503715166a1..359081dc14e 100644 --- a/resources/lang/es/mail.php +++ b/resources/lang/es/mail.php @@ -66,9 +66,9 @@ 'anonymous_gift_maybe_not' => 'Pero es probable que ya sepas quién es ;).', 'duration' => 'Gracias a esa persona, tienes acceso a osu!direct y a otros beneficios de osu!supporter durante :duration.', 'features' => 'Puedes encontrar más detalles acerca de estas características aquí:', - 'gifted' => '¡Alguien te acaba de regalar una etiqueta osu!supporter!', + 'gifted' => '¡Alguien te acaba de regalar una etiqueta de osu!supporter!', 'gift_message' => 'La persona que te regaló esta etiqueta te dejó un mensaje:', - 'subject' => '¡Te han regalado una etiqueta osu!supporter!', + 'subject' => '¡Te han regalado una etiqueta de osu!supporter!', ], 'user_email_updated' => [ diff --git a/resources/lang/es/model_validation.php b/resources/lang/es/model_validation.php index d440a9361f2..1dff5392204 100644 --- a/resources/lang/es/model_validation.php +++ b/resources/lang/es/model_validation.php @@ -91,7 +91,7 @@ 'topic_poll' => [ 'duplicate_options' => 'Opciones duplicadas no permitidas.', - 'grace_period_expired' => 'No se puede editar una encuesta después de :limit horas', + 'grace_period_expired' => 'No se puede editar una encuesta después de :limit horas.', 'hiding_results_forever' => 'No se pueden ocultar los resultados de una encuesta que nunca finaliza.', 'invalid_max_options' => 'Las opciones por usuario no pueden exceder el número de opciones disponibles.', 'minimum_one_selection' => 'Se requiere un mínimo de una opción por usuario.', diff --git a/resources/lang/es/model_validation/fulfillments.php b/resources/lang/es/model_validation/fulfillments.php index 62e07e83916..20ef0d6f74e 100644 --- a/resources/lang/es/model_validation/fulfillments.php +++ b/resources/lang/es/model_validation/fulfillments.php @@ -10,6 +10,6 @@ 'reverting_username_mismatch' => '', ], 'supporter_tag' => [ - 'insufficient_paid' => 'La donación es menor a la mínima necesitada para la etiqueta osu!supporter (:actual > :expected)', + 'insufficient_paid' => 'La donación es menor a la mínima requerida para el regalo de la etiqueta de osu!supporter (:actual > :expected)', ], ]; diff --git a/resources/lang/es/notifications.php b/resources/lang/es/notifications.php index b04bb1a1730..922ffa433b4 100644 --- a/resources/lang/es/notifications.php +++ b/resources/lang/es/notifications.php @@ -11,7 +11,7 @@ 'none' => 'No hay notificaciones', 'see_all' => 'ver todas las notificaciones', 'see_channel' => 'ir al chat', - 'verifying' => 'Verifique la sesión para ver las notificaciones', + 'verifying' => 'Por favor, verifica la sesión para ver las notificaciones', 'action_type' => [ '_' => 'todas', @@ -39,21 +39,21 @@ 'beatmap_owner_change' => [ '_' => 'Dificultad de invitado', - 'beatmap_owner_change' => 'Ahora eres dueño de la dificultad ":beatmap" para el mapa ":title"', - 'beatmap_owner_change_compact' => 'Ahora eres dueño de la dificultad ":beatmap"', + 'beatmap_owner_change' => 'Ahora eres dueño de la dificultad «:beatmap» para el mapa «:title»', + 'beatmap_owner_change_compact' => 'Ahora eres dueño de la dificultad «:beatmap»', ], 'beatmapset_discussion' => [ - '_' => 'Discusión del mapa', - 'beatmapset_discussion_lock' => 'La discusión en ":title" se ha cerrado', + '_' => 'Discusión de mapas', + 'beatmapset_discussion_lock' => 'La discusión en «:title» se ha cerrado', 'beatmapset_discussion_lock_compact' => 'La discusión fue cerrada', - 'beatmapset_discussion_post_new' => 'Nueva publicación en ":title" por :username: ":content"', - 'beatmapset_discussion_post_new_empty' => 'Nueva publicación en ":title" por :username', - 'beatmapset_discussion_post_new_compact' => 'Nueva publicación por :username: ":content"', + 'beatmapset_discussion_post_new' => 'Nueva publicación en «:title» por :username: «:content»', + 'beatmapset_discussion_post_new_empty' => 'Nueva publicación en «:title» por :username', + 'beatmapset_discussion_post_new_compact' => 'Nueva publicación por :username: «:content»', 'beatmapset_discussion_post_new_compact_empty' => 'Nueva publicación por :username', - 'beatmapset_discussion_review_new' => 'Nueva revisión en ":title" por :username que contiene problemas: :problems, sugerencias: :suggestions, elogios: :praises', - 'beatmapset_discussion_review_new_compact' => 'Nueva revisión por :username que contiene problemas: :problems, sugerencias: :suggestions, elogios: :praises', - 'beatmapset_discussion_unlock' => 'La discusión en ":title" se ha desbloqueado', + 'beatmapset_discussion_review_new' => 'Nueva revisión en «:title» por :username que contiene :review_counts', + 'beatmapset_discussion_review_new_compact' => 'Nueva revisión por :username que contiene :review_counts', + 'beatmapset_discussion_unlock' => 'La discusión en «:title» se ha desbloqueado', 'beatmapset_discussion_unlock_compact' => 'La discusión se ha desbloqueado', 'review_count' => [ @@ -65,37 +65,37 @@ 'beatmapset_problem' => [ '_' => 'Problema con mapa calificado', - 'beatmapset_discussion_qualified_problem' => 'Reportado por :username en ":title": ":content"', - 'beatmapset_discussion_qualified_problem_empty' => 'Reportado por :username en ":title"', - 'beatmapset_discussion_qualified_problem_compact' => 'Reportado por :username: ":content"', + 'beatmapset_discussion_qualified_problem' => 'Reportado por :username en «:title»: «:content»', + 'beatmapset_discussion_qualified_problem_empty' => 'Reportado por :username en «:title»', + 'beatmapset_discussion_qualified_problem_compact' => 'Reportado por :username: «:content»', 'beatmapset_discussion_qualified_problem_compact_empty' => 'Reportado por :username', ], 'beatmapset_state' => [ '_' => 'Cambió el estado del mapa', - 'beatmapset_disqualify' => '":title" ha sido descalificado', + 'beatmapset_disqualify' => '«:title» ha sido descalificado', 'beatmapset_disqualify_compact' => 'El mapa fue descalificado', - 'beatmapset_love' => '":title" fue promovido a amado', + 'beatmapset_love' => '«:title» fue promovido a amados', 'beatmapset_love_compact' => 'El mapa fue promovido a amado', - 'beatmapset_nominate' => '":title" ha sido nominado', + 'beatmapset_nominate' => '«:title» ha sido nominado', 'beatmapset_nominate_compact' => 'El mapa fue nominado', - 'beatmapset_qualify' => '":title" ha ganado suficientes nominaciones e ingresó a la cola de clasificación', + 'beatmapset_qualify' => '«:title» ha ganado suficientes nominaciones e ingresó a la cola de clasificación', 'beatmapset_qualify_compact' => 'El mapa ingresó a la cola de clasificación', - 'beatmapset_rank' => '":title" ha sido clasificado', + 'beatmapset_rank' => '«:title» ha sido clasificado', 'beatmapset_rank_compact' => 'El mapa fue clasificado', - 'beatmapset_remove_from_loved' => '":title" fue removido de Amados', - 'beatmapset_remove_from_loved_compact' => 'El mapa fue removido de Amados', - 'beatmapset_reset_nominations' => 'La nominación de ":title" ha sido restablecida', + 'beatmapset_remove_from_loved' => '«:title» fue eliminado de amados', + 'beatmapset_remove_from_loved_compact' => 'El mapa fue eliminado de amados', + 'beatmapset_reset_nominations' => 'La nominación de «:title» ha sido restablecida', 'beatmapset_reset_nominations_compact' => 'La nominación fue restablecida', ], 'comment' => [ '_' => 'Nuevo comentario', - 'comment_new' => ':username comentó ":content" en ":title"', - 'comment_new_compact' => ':username comentó ":content"', - 'comment_reply' => ':username respondió ":content" en ":title"', - 'comment_reply_compact' => ':username respondió ":content"', + 'comment_new' => ':username comentó «:content» en «:title»', + 'comment_new_compact' => ':username comentó «:content»', + 'comment_reply' => ':username respondió «:content» en «:title»', + 'comment_reply_compact' => ':username respondió «:content»', ], ], @@ -129,10 +129,10 @@ 'comment' => [ '_' => 'Nuevo comentario', - 'comment_new' => ':username comentó ":content" en ":title"', - 'comment_new_compact' => ':username comentó ":content"', - 'comment_reply' => ':username respondió ":content" en ":title"', - 'comment_reply_compact' => ':username respondió ":content"', + 'comment_new' => ':username comentó «:content» en «:title»', + 'comment_new_compact' => ':username comentó «:content»', + 'comment_reply' => ':username respondió «:content» en «:title»', + 'comment_reply_compact' => ':username respondió «:content»', ], ], @@ -142,10 +142,10 @@ 'comment' => [ '_' => 'Nuevo comentario', - 'comment_new' => ':username comentó ":content" en ":title"', - 'comment_new_compact' => ':username comentó ":content"', - 'comment_reply' => ':username respondió ":content" en ":title"', - 'comment_reply_compact' => ':username respondió ":content"', + 'comment_new' => ':username comentó «:content» en «:title»', + 'comment_new_compact' => ':username comentó «:content»', + 'comment_reply' => ':username respondió «:content» en «:title»', + 'comment_reply_compact' => ':username respondió «:content»', ], ], @@ -154,7 +154,7 @@ 'forum_topic_reply' => [ '_' => 'Nueva respuesta en el foro', - 'forum_topic_reply' => ':username respondió a ":title"', + 'forum_topic_reply' => ':username respondió a «:title»', 'forum_topic_reply_compact' => ':username respondió', ], ], @@ -167,8 +167,8 @@ 'user_beatmapset_new_compact' => 'Nuevo mapa «:title»', 'user_beatmapset_new_group' => 'Nuevos mapas por :username', - 'user_beatmapset_revive' => 'Mapa ":title" revivido por :username', - 'user_beatmapset_revive_compact' => 'Mapa ":title" revivido', + 'user_beatmapset_revive' => 'Mapa «:title» revivido por :username', + 'user_beatmapset_revive_compact' => 'Mapa «:title» revivido', ], ], @@ -177,8 +177,8 @@ 'user_achievement_unlock' => [ '_' => 'Nueva medalla', - 'user_achievement_unlock' => '¡Desbloqueado ":title"!', - 'user_achievement_unlock_compact' => '¡Desbloqueado ":title"!', + 'user_achievement_unlock' => '¡Desbloqueado «:title»!', + 'user_achievement_unlock_compact' => '¡Desbloqueado «:title»!', 'user_achievement_unlock_group' => '¡Medallas desbloqueadas!', ], ], @@ -187,27 +187,27 @@ 'mail' => [ 'beatmapset' => [ 'beatmap_owner_change' => [ - 'beatmap_owner_change' => 'Ahora eres un invitado del mapa ":title"', + 'beatmap_owner_change' => 'Ahora eres un invitado del mapa «:title»', ], 'beatmapset_discussion' => [ - 'beatmapset_discussion_lock' => 'La discusión en ":title" se ha cerrado', - 'beatmapset_discussion_post_new' => 'La discusión en ":title" tiene nuevas actualizaciones', - 'beatmapset_discussion_unlock' => 'La discusión en ":title" se ha desbloqueado', + 'beatmapset_discussion_lock' => 'La discusión en «:title» se ha cerrado', + 'beatmapset_discussion_post_new' => 'La discusión en «:title» tiene nuevas actualizaciones', + 'beatmapset_discussion_unlock' => 'La discusión en «:title» se ha desbloqueado', ], 'beatmapset_problem' => [ - 'beatmapset_discussion_qualified_problem' => 'Se reportó un nuevo problema en ":title"', + 'beatmapset_discussion_qualified_problem' => 'Se reportó un nuevo problema en «:title»', ], 'beatmapset_state' => [ - 'beatmapset_disqualify' => '":title" ha sido descalificado', - 'beatmapset_love' => '":title" fue promovido a amado', - 'beatmapset_nominate' => '":title" ha sido nominado', - 'beatmapset_qualify' => '":title" ha ganado suficientes nominaciones e ingresó a la cola de clasificación', - 'beatmapset_rank' => '":title" ha sido clasificado', - 'beatmapset_remove_from_loved' => '":title" fue removido de Amados', - 'beatmapset_reset_nominations' => 'La nominación de ":title" ha sido restablecida', + 'beatmapset_disqualify' => '«:title» ha sido descalificado', + 'beatmapset_love' => '«:title» fue promovido a amados', + 'beatmapset_nominate' => '«:title» ha sido nominado', + 'beatmapset_qualify' => '«:title» ha ganado suficientes nominaciones e ingresó a la cola de clasificación', + 'beatmapset_rank' => '«:title» ha sido clasificado', + 'beatmapset_remove_from_loved' => '«:title» se eliminó de amados', + 'beatmapset_reset_nominations' => 'La nominación de «:title» ha sido restablecida', ], 'comment' => [ @@ -217,36 +217,36 @@ 'channel' => [ 'announcement' => [ - 'announce' => 'Hay un nuevo anuncio en ":name"', + 'announce' => 'Hay un nuevo anuncio en «:name»', ], 'channel' => [ - 'pm' => 'Ha recibido un nuevo mensaje de :username', + 'pm' => 'Has recibido un nuevo mensaje de :username', ], ], 'build' => [ 'comment' => [ - 'comment_new' => 'El registro de cambios ":title" tiene nuevos comentarios', + 'comment_new' => 'El registro de cambios «:title» tiene nuevos comentarios', ], ], 'news_post' => [ 'comment' => [ - 'comment_new' => 'La novedad ":title" tiene nuevos comentarios', + 'comment_new' => 'La noticia «:title» tiene nuevos comentarios', ], ], 'forum_topic' => [ 'forum_topic_reply' => [ - 'forum_topic_reply' => 'Hay nuevas respuestas en ":title"', + 'forum_topic_reply' => 'Hay nuevas respuestas en «:title»', ], ], 'user' => [ 'user_achievement_unlock' => [ - 'user_achievement_unlock' => '¡:username ha desbloqueado una nueva medalla, ":title"!', - 'user_achievement_unlock_self' => '¡Ha desbloqueado una nueva medalla, ":title"!', + 'user_achievement_unlock' => '¡:username ha desbloqueado una nueva medalla, «:title»!', + 'user_achievement_unlock_self' => '¡Has desbloqueado una nueva medalla, «:title»!', ], 'user_beatmapset_new' => [ diff --git a/resources/lang/es/page_title.php b/resources/lang/es/page_title.php index eec5ed5308f..f4288296b86 100644 --- a/resources/lang/es/page_title.php +++ b/resources/lang/es/page_title.php @@ -47,7 +47,7 @@ '_' => 'votos de discusión del mapa', ], 'beatmapset_events_controller' => [ - '_' => 'historial del mapa', + '_' => 'historial de mapas', ], 'beatmapsets_controller' => [ 'discussion' => 'discusión del mapa', diff --git a/resources/lang/es/store.php b/resources/lang/es/store.php index 468e914e745..498589eddd3 100644 --- a/resources/lang/es/store.php +++ b/resources/lang/es/store.php @@ -32,7 +32,7 @@ 'cart_problems_edit' => 'Haz clic aquí para editarlo.', 'declined' => 'El pago ha sido cancelado.', 'delayed_shipping' => '¡Ahora mismo estamos sobresaturados de pedidos! Eres bienvenido a solicitar tu orden, pero considera un **retraso adicional de 1-2 semanas** mientras nos ponemos al día con órdenes ya existentes.', - 'hide_from_activity' => 'Ocultar todas las etiquetas osu!supporter en esta orden de mi actividad', + 'hide_from_activity' => 'Ocultar todas las etiquetas de osu!supporter en esta orden de mi actividad', 'old_cart' => 'Tu carrito parecía estar desactualizado y fue reiniciado, por favor intenta de nuevo.', 'pay' => 'Pagar con PayPal', 'title_compact' => 'caja', @@ -55,7 +55,7 @@ 'contact' => 'Contacto:', 'date' => 'Fecha:', 'echeck_delay' => 'Como su pago fue un eCheck, ¡por favor permita hasta 10 días adicionales para que el pago se realice a través de PayPal!', - 'hide_from_activity' => 'las etiquetas osu!supporter en esta orden no se muestran en tus actividades recientes.', + 'hide_from_activity' => 'las etiquetas de osu!supporter en esta orden no se muestran en tus actividades recientes.', 'sent_via' => 'Enviado vía:', 'shipping_to' => 'Envío a:', 'title' => 'Factura', @@ -182,10 +182,10 @@ 'supporter_tag' => [ 'gift' => 'regalar al jugador', - 'gift_message' => '¡añade un mensaje opcional a tu regalo! (hasta :length caracteres) ', + 'gift_message' => '¡añade un mensaje opcional a tu regalo! (hasta :length caracteres)', 'require_login' => [ - '_' => '¡Tienes que tener una :link para obtener una etiqueta osu!supporter!', + '_' => '¡Tienes que tener la :link para obtener una etiqueta de osu!supporter!', 'link_text' => 'sesión iniciada', ], ], diff --git a/resources/lang/es/users.php b/resources/lang/es/users.php index 68019f12eed..a7b62120a2c 100644 --- a/resources/lang/es/users.php +++ b/resources/lang/es/users.php @@ -75,7 +75,7 @@ 'warning' => "En el caso de que hayas roto una regla, ten en cuenta que generalmente hay un período de espera de un mes durante el cual no consideraremos ninguna solicitud de amnistía. Después de este período, puedes contactar con nosotros si lo consideras necesario. Ten en cuenta que la creación de nuevas cuentas después de haber tenido una desactivada resultará en una extensión de este período de espera de un mes. Por favor, también ten en cuenta que por cada cuenta que crees, estarás violando más reglas. ¡Te sugerimos que no sigas este camino!", 'if_mistake' => [ - '_' => 'Si cree que se trata de un error, puede ponerse en contacto con nosotros (por :email o haciendo clic en el "?" en la esquina inferior derecha de esta página). Tenga en cuenta que siempre confiamos plenamente en nuestras acciones, ya que se basan en datos muy sólidos. Nos reservamos el derecho de ignorar su petición si consideramos que está siendo intencionadamente deshonesto.', + '_' => 'Si crees que se trata de un error, puedes ponerse en contacto con nosotros (por :email o haciendo clic en el «?» de la esquina inferior derecha de esta página). Ten en cuenta que siempre confiamos plenamente en nuestras acciones, ya que se basan en datos muy sólidos. Nos reservamos el derecho de ignorar tu petición si consideramos que estás siendo intencionadamente deshonesto.', 'email' => 'correo electrónico', ], @@ -359,7 +359,7 @@ ], 'top_ranks' => [ 'download_replay' => 'Descargar repetición', - 'not_ranked' => 'Sólo los mapas clasificados dan pp.', + 'not_ranked' => 'Solo los mapas clasificados dan pp', 'pp_weight' => 'valorado :percentage', 'view_details' => 'Ver detalles', 'title' => 'Rangos', @@ -481,7 +481,7 @@ ], 'store' => [ 'from_client' => '¡por favor regístrese a través del cliente del juego en su lugar!', - 'from_web' => 'por favor complete el registro usando el sitio web de osu!', + 'from_web' => 'por favor, completa el registro usando el sitio web de osu!', 'saved' => 'Usuario creado', ], 'verify' => [ diff --git a/resources/lang/fi/authorization.php b/resources/lang/fi/authorization.php index bfc3c68aa8c..1c7c4279957 100644 --- a/resources/lang/fi/authorization.php +++ b/resources/lang/fi/authorization.php @@ -182,7 +182,7 @@ 'edit' => [ 'locked' => 'Käyttäjäsivu on lukittu.', 'not_owner' => 'Voit muokata vain omaa käyttäjäsivuasi.', - 'require_supporter_tag' => 'osu!-tukijamerkki vaaditaan.', + 'require_supporter_tag' => 'osu!tukijamerkki vaaditaan.', ], ], 'update_email' => [ diff --git a/resources/lang/fi/beatmap_discussions.php b/resources/lang/fi/beatmap_discussions.php index 0ec2d80016e..0f16617a1c8 100644 --- a/resources/lang/fi/beatmap_discussions.php +++ b/resources/lang/fi/beatmap_discussions.php @@ -19,7 +19,7 @@ 'index' => [ 'deleted_beatmap' => 'poistettu', 'none_found' => 'Hakukriteereihin täsmääviä keskusteluja ei löytynyt.', - 'title' => 'Rytmikarttojen keskustelut', + 'title' => 'Beatmapkeskustelut', 'form' => [ '_' => 'Hae', diff --git a/resources/lang/fi/beatmappacks.php b/resources/lang/fi/beatmappacks.php index 809649ed5f7..5347bc31590 100644 --- a/resources/lang/fi/beatmappacks.php +++ b/resources/lang/fi/beatmappacks.php @@ -8,13 +8,13 @@ 'description' => 'Valmiiksi pakattuja rytmikarttakokoelmia, joissa yhdistyy tietty teema.', 'empty' => 'Tulossa pian!', 'nav_title' => 'listaus', - 'title' => 'Rytmikarttapaketit', + 'title' => 'Beatmappipaketit', 'blurb' => [ 'important' => 'LUE TÄMÄ ENNEN LATAAMISTA', 'install_instruction' => 'Asennus: Kun paketti on latautunut, pura sen sisältö osu!n "Songs"-tiedostohakemistoon ja osu! hoitaa loput.', 'note' => [ - '_' => 'Huomaa myös, että on erittäin suositeltavaa :scary, koska vanhemmat mapit ovat paljon huonompia kuin uudet.', + '_' => 'Huomaa myös, että on erittäin suositeltavaa :scary, koska vanhemmat kartat ovat yleisellä tasolla heikompilaatuisia kuin uudemmat.', 'scary' => 'ladata uusimpia kokoelmia vanhojen sijaan', ], ], @@ -36,7 +36,7 @@ 'artist' => 'Esittäjä/Albumi', 'chart' => 'Kohdevaloissa', 'featured' => 'Esitelty artisti', - 'loved' => 'Project Rakastettu', + 'loved' => 'Projekti Rakastettu', 'standard' => 'Tavallinen', 'theme' => 'Teema', 'tournament' => 'Turnaus', diff --git a/resources/lang/fi/beatmaps.php b/resources/lang/fi/beatmaps.php index f216348433f..87c1ab69a9d 100644 --- a/resources/lang/fi/beatmaps.php +++ b/resources/lang/fi/beatmaps.php @@ -153,7 +153,7 @@ 'approved' => 'Tämä rytmikartta hyväksyttiiin :date!', 'graveyard' => "Tätä beatmappia ei ole päivitetty sitten :date ja sen tekijä on todennäköisesti hylännyt sen...", 'loved' => 'Tämä rytmikartta lisättiin rakastettuihin :date!', - 'ranked' => 'Tämä rytmikartta rankattiin :date!', + 'ranked' => 'Tämä beatmap hyväksyttiin :date!', 'wip' => 'Huomaa: Tämän rytmikartan tekijä on merkannut sen keskeneräiseksi.', ], diff --git a/resources/lang/fi/beatmapsets.php b/resources/lang/fi/beatmapsets.php index c3407d3133f..e5c088fc4cd 100644 --- a/resources/lang/fi/beatmapsets.php +++ b/resources/lang/fi/beatmapsets.php @@ -163,7 +163,7 @@ 'friend' => 'Kavereiden sijoitukset', 'global' => 'Maailmanlaajuiset sijoitukset', 'supporter-link' => 'Klikkaa tästä nähdäksesi kaikki hienot ominaisuudet mitä saat!', - 'supporter-only' => 'Sinun täytyy olla osu!-tukija nähdäksesi kaveri-, maa- ja muunnelmakohtaiset sijoitukset!', + 'supporter-only' => 'Sinun täytyy olla osu!n tukija nähdäksesi kaveri-, maa- ja muunnelmakohtaiset sijoitukset!', 'title' => 'Tulokset', 'headers' => [ diff --git a/resources/lang/fi/community.php b/resources/lang/fi/community.php index da4fda72562..8de5c09f624 100644 --- a/resources/lang/fi/community.php +++ b/resources/lang/fi/community.php @@ -12,51 +12,51 @@ 'instructions' => 'klikkaa sydäntä jatkaaksesi osu!kauppaan', ], 'why-support' => [ - 'title' => 'Miksi minun pitäisi tukea osu!\'a? Mihin rahat menevät?', + 'title' => 'Miksi minun pitäisi tukea osu!a? Mihin rahat menevät?', 'team' => [ - 'title' => 'Tue Tiimiä', - 'description' => 'Pieni tiimi huolehtii osu!\'n kehittämistä ja ylläpitoa. Tukesi auttaa heitä pysymään, siis... elossa.', + 'title' => 'Tue tiimiä', + 'description' => 'Pieni tiimi huolehtii osu!n kehittämisestä ja ylläpidosta. Tukesi auttaa heitä niin sanotusti... pärjäämään.', ], 'infra' => [ 'title' => 'Palvelininfrastruktuuri', - 'description' => 'Avustukset menevät palvelimiin, joilla ylläpidetään verkkosivustoa, moninpelipalveluita, online-pistetaulukoita jne.', + 'description' => 'Osa avustuksista menee palvelimia varten ja niillä ylläpidetään verkkosivustoa, moninpelipalveluita, verkon pistetaulukoita jne.', ], 'featured-artists' => [ - 'title' => 'Esittelyssä olevat Artistit', - 'description' => 'Sinun tuella voimme lähestyä mahtavia artisteja vielä enemmän ja lisensoida lisää hienoa musiikkia käytettäväksi osu!:ssa', + 'title' => 'Esiteltyjä artisteja varten', + 'description' => 'Sinun tuellasi voimme lähestyä vielä lisää mahtavia artisteja ja lisensoida hienoa musiikkia käytettäväksi osu!ssa.', 'link_text' => 'Näytä nykyinen lista »', ], 'ads' => [ - 'title' => 'Pidä osu! itsekestävänä', + 'title' => 'Pidä osu! omavaraisena', 'description' => 'Lahjoituksesi auttavat pitämään pelin itsenäisenä ja täysin vapaana mainoksista ja ulkopuolisista sponsoreista.', ], 'tournaments' => [ - 'title' => 'Viralliset Turnaukset', - 'description' => 'Auta osu! World Cup -turnausten ylläpidon (sekä palkintojen) rahoittamista.', + 'title' => 'Virallisiin turnauksiin', + 'description' => 'Auta osu! maailmancup -turnausten ylläpidon (sekä palkintojen) rahoituksessa.', 'link_text' => 'Selaa turnauksia »', ], 'bounty-program' => [ - 'title' => 'Open Source Palkkio-ohjelma', - 'description' => 'Tue yhteisön osallistujia, jotka ovat antaneet aikaa ja vaivaa auttaa tekemään osu!\'a paremmaksi.', + 'title' => 'Avoimen lähdekoodin palkkio -ohjelmaan', + 'description' => 'Tue yhteisön osallistujia, jotka ovat käyttäneet aikaansa ja vaivaansa tekemään osu!sta paremman.', 'link_text' => 'Lue lisää »', ], ], 'perks' => [ - 'title' => 'Aha. No mitä minä sitten saan?!', + 'title' => 'Aivan. Millaisia etuja minä saan?', 'osu_direct' => [ 'title' => 'osu!direct', - 'description' => 'Nopea ja helppo tapa etsiä beatmappejä ilman tarvetta poistua pelistä.', + 'description' => 'Saat nopean ja helpon tavan hakea ja ladata rytmikarttoja, ilman pelistä poistumista.', ], 'friend_ranking' => [ 'title' => 'Kavereiden sijoitukset', - 'description' => "Näe miten pärjäät ystäviäsi vastaan rytmikarttojen tulostaulukoissa, sekä pelissä että verkkosivulla.", + 'description' => "Näe miten pärjäät kavereitasi vastaan rytmikarttojen tulostaulukoilla, sekä pelissä että verkkosivustolla.", ], 'country_ranking' => [ 'title' => 'Maakohtaiset sijoitukset', - 'description' => 'Valloita maasi ennen kuin valloitat maailman.', + 'description' => 'Valloita oma maasi ennen kuin valloitat koko maailman.', ], 'mod_filtering' => [ @@ -81,12 +81,12 @@ 'customisation' => [ 'title' => 'Mukauttaminen', - 'description' => "Tee profiilistasi omalaatuinen lisäämällä täysin muokattava käyttäjä-sivu.", + 'description' => "Tee profiilistasi omalaatuinen lisäämällä räätälöidyn kansikuvan tai luomalla täysin mukautettavan 'minä!'-osion oman käyttäjäprofiilisi alle.", ], 'beatmap_filters' => [ 'title' => 'Rytmikarttojen suodattimet', - 'description' => 'Suodata beatmappien hakua pelatun, pelaamattoman sekä kartassa saavutetun luokituksen mukaan.', + 'description' => 'Suodata rytmikarttojen haku pelattujen, pelaamattomien sekä kartassa saavutetun arvosanan mukaan.', ], 'yellow_fellow' => [ @@ -105,7 +105,7 @@ ], 'skinnables' => [ - 'title' => 'Ulkonäöllisyyksiä', + 'title' => 'Ulkoasun muokattavuuksia', 'description' => 'Lisää muokattavia pelinsisäisiä kohteita, kuten esimerkiksi päävalikon taustakuva.', ], @@ -116,33 +116,33 @@ 'sort_options' => [ 'title' => 'Lajitteluasetuksia', - 'description' => 'Näet beatmapin maa-, kaveri- ja modikohtaiset sijoitukset pelissä.', + 'description' => 'Näet rytmikartan maa-, kaveri- ja muunnelmakohtaiset sijoitukset pelissä.', ], 'more_favourites' => [ 'title' => 'Lisää suosikkeja', - 'description' => 'Voit lisätä suosikkilistaan :normally beatmappeja, verrattuna :supporter beatmappeihin normaalitapauksessa', + 'description' => 'Montako rytmikarttaa voit lisätä suosikkeihin nousee: :normally → :supporter', ], 'more_friends' => [ 'title' => 'Lisää kavereita', - 'description' => 'Voit lisätä kaverilistaan :normally kavereita, verrattuna :supporter kavereihin normaalitapauksessa', + 'description' => 'Montako kaveria sinulla voi olla nousee: :normally → :supporter', ], 'more_beatmaps' => [ - 'title' => 'Lataa Enemmän Beatmappeja', - 'description' => 'Kuinka monta vireillä olevia beatmappeja sinulla voi olla kerralla, lasketaan yhteen perusarvosta ja lisäbonuksesta kullekin hyväksytyille beatmapeille, mitä sinulla on (tiettyyn rajaan asti).

Normaalitapauksessa tämä on :base plus :bonus per hyväksytty beatmappi (enintään :bonus_max). Jos olet osu!tukija, raja on :supporter_base plus :supporter_bonus per hyväksytty beatmappi (enintään :supporter_bonus_max).', + 'title' => 'Lähetä lisää rytmikarttoja', + 'description' => 'Vireillä olevien rytmikarttojen enimmäismäärä määräytyy perusarvosta plus kunkin tekemäsi rankatun rytmikartan lisäbonuksesta (tiettyyn rajaan asti).

Tavallisesti tämä on :base plus :bonus per rankattu rytmikartta (bonusta enintään :bonus_max). Jos olet tukija, tämä on :supporter_base plus :supporter_bonus per rankattu rytmikartta (bonusta enintään :supporter_bonus_max).', ], 'friend_filtering' => [ 'title' => 'Kavereiden tulostaulukot', - 'description' => 'Kilpaile kaveriasi kanssa ja katso, miten sijoittaudut heitä vastaan!', + 'description' => 'Kilpaile kavereidesi kanssa ja katso, miten sijoittaudut heitä vastaan!', ], ], 'supporter_status' => [ 'contribution' => 'Kiitos tuestasi tähän saakka! Olet tukenut kokonaisuudessaan :dollars :tags tukijaostoksella!', - 'gifted' => "Tagiostoksistasi :giftedTags on lahjoitettu (yhteensä :giftedDollars), kuinka anteliasta!", - 'not_yet' => "Et ole vielä tukija :(", - 'valid_until' => 'Nykyinen tukijatagi on voimassa :date asti!', - 'was_valid_until' => 'Tukijatagisi oli voimassa :date asti.', + 'gifted' => "Tukijamerkkiostoksistasi :giftedTags on annettu lahjaksi (yhteensä :giftedDollars arvosta), kuinka anteliasta!", + 'not_yet' => "Sinulla ei vielä ole ollut tukijamerkkiä :(", + 'valid_until' => 'Nykyinen tukijamerkkisi on voimassa :date asti!', + 'was_valid_until' => 'Tukijamerkkisi oli voimassa :date asti.', ], ], ]; diff --git a/resources/lang/fi/home.php b/resources/lang/fi/home.php index 09c92fa6f93..4a9e39c6882 100644 --- a/resources/lang/fi/home.php +++ b/resources/lang/fi/home.php @@ -135,7 +135,7 @@ ], 'beatmaps' => [ 'new' => 'Uudet rankatut rytmikartat', - 'popular' => 'Suositut rytmikartat', + 'popular' => 'Suositut Beatmapit', 'by_user' => 'tehnyt :user', ], 'buttons' => [ diff --git a/resources/lang/fi/layout.php b/resources/lang/fi/layout.php index 57c6cee5b40..9fc19b95199 100644 --- a/resources/lang/fi/layout.php +++ b/resources/lang/fi/layout.php @@ -40,7 +40,7 @@ ], 'store' => [ - 'cart' => 'ostoskori', + 'cart' => 'ostoskärry', 'orders' => 'tilaushistoria', 'products' => 'tuotteet', ], @@ -67,7 +67,7 @@ 'menu' => [ 'beatmaps' => [ - '_' => 'rytmikartat', + '_' => 'beatmapit', ], 'community' => [ '_' => 'yhteisö', @@ -75,7 +75,7 @@ ], 'help' => [ '_' => 'apua', - 'getAbuse' => 'ilmoita väärinkäytöstä', + 'getAbuse' => 'ilmoita häirinnästä', 'getFaq' => 'usein kysytyt', 'getRules' => 'säännöt', 'getSupport' => 'tarvitsen siis oikeasti apua!', @@ -113,7 +113,7 @@ '_' => 'Lakiasiat ja tilanne', 'copyright' => 'Tekijänoikeudet (DMCA)', 'privacy' => 'Yksityisyys', - 'server_status' => 'Palvelimen tila', + 'server_status' => 'Palvelimen tilanne', 'source_code' => 'Lähdekoodi', 'terms' => 'Käyttöehdot', ], diff --git a/resources/lang/fi/mail.php b/resources/lang/fi/mail.php index 2b6955c6ec9..92874218164 100644 --- a/resources/lang/fi/mail.php +++ b/resources/lang/fi/mail.php @@ -64,11 +64,11 @@ 'supporter_gift' => [ 'anonymous_gift' => 'Henkilö, joka lahjoitti sinulle tämän tägin, voi halutessaan pysyä anonyyminä, joten heitä ei ole maininttu tässä ilmoituksessa.', 'anonymous_gift_maybe_not' => 'Mutta taidat jo tietää kuka se mahtaa olla ;).', - 'duration' => 'Kiitos hänen, sinulla on pääsy osu!-directiin ja muihin osu!-tukijaetuihin seuraavan :duration ajan.', + 'duration' => 'Kiitos hänen, sinulla on pääsy osu!directiin ja muihin osu!tukijaetuihin seuraavan :duration ajan.', 'features' => 'Voit saada lisätietoja näistä ominaisuuksista täältä:', - 'gifted' => 'Joku on juuri antanut sinulle osu! -tukijan!', + 'gifted' => 'Joku on juuri antanut sinulle osu!tukijamerkin!', 'gift_message' => 'Henkilö, joka lahjoitti sinulle tämän merkin, jätti sinulle viestin:', - 'subject' => 'Sinulle on lahjoitettu osu!-tukijamerkki!', + 'subject' => 'Sinulle on lahjoitettu osu!tukijamerkki!', ], 'user_email_updated' => [ diff --git a/resources/lang/fi/store.php b/resources/lang/fi/store.php index c0d35a450ab..3424959cb2f 100644 --- a/resources/lang/fi/store.php +++ b/resources/lang/fi/store.php @@ -33,7 +33,7 @@ 'declined' => 'Maksu peruutettiin.', 'delayed_shipping' => 'Olemme tällä hetkellä hukkumassa tilauksiin! Olet vapaa tilaamaan, mutta ole valmis odottamaan **1-2 viikkoa lisää** kunnes olemme saaneet nykyiset tilaukset lähetettyä.', 'hide_from_activity' => 'Älä ilmoita osu!supporter tilauksesta profiilissani', - 'old_cart' => 'Korisi näyttää olevan vanhentunut ja on ladattu uudestaan, yritä uudelleen.', + 'old_cart' => 'Ostoskärrysi näyttää olevan vanhentunut ja on ladattu uudestaan, ole hyvä ja yritä uudelleen.', 'pay' => 'Maksa Paypalilla', 'title_compact' => 'kassa', @@ -55,7 +55,7 @@ 'contact' => 'Ota yhteyttä:', 'date' => 'Päivämäärä:', 'echeck_delay' => 'Koska maksusi oli eCheck, anna maksimissaan 10 päivää että maksu pääsee PayPalin läpi!', - 'hide_from_activity' => 'Tämän tilauksen osu!-tukijamerkkejä ei näytetä viimeaikaisessa toiminnassasi.', + 'hide_from_activity' => 'Tämän tilauksen osu!tukijamerkkejä ei näytetä viimeaikaisessa toiminnassasi.', 'sent_via' => 'Lähetetty kautta:', 'shipping_to' => 'Toimitetaan kohteeseen:', 'title' => 'Lasku', @@ -171,7 +171,7 @@ 'out_with_alternative' => 'Valitettavasti tätä tuotetta ei ole enää saatavilla. Käytä valikkoa valitaksesi toinen vaihtoehto tai tarkista myöhemmin uudelleen!', ], - 'add_to_cart' => 'Lisää koriin', + 'add_to_cart' => 'Lisää kärryihin', 'notify' => 'Ilmoita minulle, kun saatavilla!', 'notification_success' => 'saat ilmoituksen, kun meillä on täydennystä. klikkaa :link peruuttaaksesi', @@ -185,7 +185,7 @@ 'gift_message' => 'lisää omavalintainen viesti lahjaasi! (enintään :length merkkiä)', 'require_login' => [ - '_' => 'Sinun pitää olla :link, jotta voit hankkia osu!-tukijamerkin!', + '_' => 'Sinun pitää olla :link, jotta voit hankkia osu!tukijamerkin!', 'link_text' => 'kirjautuneena sisään', ], ], diff --git a/resources/lang/fi/users.php b/resources/lang/fi/users.php index 64213d6e3bb..c8557653dbf 100644 --- a/resources/lang/fi/users.php +++ b/resources/lang/fi/users.php @@ -112,7 +112,7 @@ 'invalid_captcha' => 'Liian monta epäonnistunutta kirjautumisyritystä, täytä captcha ja yritä uudelleen. (Päivitä sivu jos captcha ei ole näkyvissä)', 'locked_ip' => 'IP-osoitteesi on lukittu. Ole hyvä ja odota muutama minuutti.', 'password' => 'Salasana', - 'register' => "Eikö sinulla ole osu!-tiliä? Tee yksi", + 'register' => "Eikö sinulla ole osu!-tiliä? Tee uusi", 'remember' => 'Muista tämä laite', 'title' => 'Kirjaudu sisään jatkaaksesi', 'username' => 'Käyttäjänimi', @@ -377,7 +377,7 @@ 'to_1_done' => 'Kiinnitetty tulos', ], 'pinned' => [ - 'title' => 'Kiinnitetyt Tulokset', + 'title' => 'Kiinnitetyt tulokset', ], ], 'votes' => [ @@ -434,7 +434,7 @@ 'restriction_info' => [ '_' => 'Sinun täytyy olla :link avataksesi tämän ominaisuuden.', - 'link' => 'osu!-tukija', + 'link' => 'osu!n tukija', ], ], 'post_count' => [ diff --git a/resources/lang/id/accounts.php b/resources/lang/id/accounts.php index 91a9dc29d82..db8db4ba4f4 100644 --- a/resources/lang/id/accounts.php +++ b/resources/lang/id/accounts.php @@ -27,7 +27,7 @@ 'legacy_api' => [ 'api' => 'api', 'irc' => 'irc', - 'title' => 'API Lawas', + 'title' => 'API lawas', ], 'password' => [ diff --git a/resources/lang/id/beatmaps.php b/resources/lang/id/beatmaps.php index c6856a3f8ec..f5bbb490b48 100644 --- a/resources/lang/id/beatmaps.php +++ b/resources/lang/id/beatmaps.php @@ -26,7 +26,7 @@ 'message_type_select' => 'Pilih Jenis Komentar', 'reply_notice' => 'Tekan enter untuk membalas.', 'reply_placeholder' => 'Ketik balasanmu di sini', - 'require-login' => 'Silakan masuk untuk membuka topik bahasan baru atau mengirimkan balasan', + 'require-login' => 'Silakan masuk untuk membuka topik diskusi baru atau membalas', 'resolved' => 'Terjawab', 'restore' => 'pulihkan', 'show_deleted' => 'Tampilkan yang telah dihapus', @@ -114,11 +114,11 @@ 'embed' => [ 'delete' => 'Hapus', 'missing' => '[TOPIK DISKUSI DIHAPUS]', - 'unlink' => 'Hapus Tautan', + 'unlink' => 'Lepas Tautan', 'unsaved' => 'Belum Tersimpan', 'timestamp' => [ 'all-diff' => 'Kamu tidak dapat membubuhkan keterangan waktu pada topik diskusi yang tertuju pada "Umum (Seluruh tingkat kesulitan)".', - 'diff' => 'Apabila terdapat keterangan waktu pada :type ini, topik diskusi yang bersangkutan akan muncul pada Linimasa.', + 'diff' => 'Apabila post ini dimulai dengan keterangan waktu, post yang bersangkutan akan muncul pada tab Linimasa.', ], ], 'insert-block' => [ diff --git a/resources/lang/id/community.php b/resources/lang/id/community.php index e324cde2621..e7c91acb745 100644 --- a/resources/lang/id/community.php +++ b/resources/lang/id/community.php @@ -15,12 +15,12 @@ 'title' => 'Mengapa saya harus mendukung osu!? Ke mana saja uangnya akan disalurkan?', 'team' => [ - 'title' => 'Dukung Tim kami', + 'title' => 'Mendukung Tim Kami', 'description' => 'osu! dikembangkan dan dikelola oleh tim yang berukuran kecil. Dukunganmu akan sangat membantu... keberlangsungan hidup mereka.', ], 'infra' => [ 'title' => 'Prasarana Server', - 'description' => 'Kontribusimu akan digunakan untuk memenuhi biaya operasional server kami dan menjalankan berbagai fasilitas yang kami miliki seperti situs web, multiplayer, papan peringkat, dan lain sebagainya.', + 'description' => 'Kontribusimu akan digunakan untuk menutupi biaya server yang menjalankan fasilitas seperti situs web, layanan multiplayer, papan peringkat online, dan lain sebagainya.', ], 'featured-artists' => [ 'title' => 'Featured Artist', @@ -28,8 +28,8 @@ 'link_text' => 'Lihat daftar Featured Artist saat ini »', ], 'ads' => [ - 'title' => 'Bantu osu! Untuk Tetap Mandiri', - 'description' => 'Kontribusimu memungkinkan osu! untuk dapat sepenuhnya berjalan secara mandiri tanpa harus bergantung pada iklan maupun sponsor dari luar.', + 'title' => 'Membantu osu! Tetap Mandiri', + 'description' => 'Kontribusimu membantu osu! untuk tetap mandiri dan sepenuhnya terbebas dari iklan maupun sponsor.', ], 'tournaments' => [ 'title' => 'Pendanaan Turnamen', @@ -138,7 +138,7 @@ ], 'supporter_status' => [ - 'contribution' => 'Terima kasih atas dukunganmu! Kamu telah membeli :tags supporter tag dengan total kontribusi senilai :dollars!', + 'contribution' => 'Terima kasih atas dukunganmu! Kamu telah membeli :tags tag supporter dengan total kontribusi senilai :dollars!', 'gifted' => "Dari jumlah tersebut, kamu telah menghadiahkan :giftedTags di antaranya (:giftedDollars) kepada para pemain lainnya. Terima kasih atas kemurahan hatimu!", 'not_yet' => "Kamu belum pernah memiliki supporter tag :(", 'valid_until' => 'Tag supporter yang kamu miliki saat ini berlaku hingga :date!', diff --git a/resources/lang/id/legacy_api_key.php b/resources/lang/id/legacy_api_key.php index 7c5e9248d08..24f7bc40a20 100644 --- a/resources/lang/id/legacy_api_key.php +++ b/resources/lang/id/legacy_api_key.php @@ -4,7 +4,7 @@ // See the LICENCE file in the repository root for full licence text. return [ - 'new' => 'Kunci API Lawas Baru', + 'new' => 'Kunci API lawas Baru', 'none' => 'Tidak ada kunci.', 'docs' => [ @@ -23,8 +23,8 @@ ], 'warning' => [ - 'line1' => 'Jangan berikan informasi ini kepada orang lain.', - 'line2' => "Tindakan ini sama halnya dengan membocorkan kata sandimu.", - 'line3' => 'Apabila kamu gegabah, akunmu akan dapat disusupi.', + 'line1' => 'Jangan berikan informasi ini pada siapapun.', + 'line2' => "Ini sama halnya membagikan akunmu pada yang lain.", + 'line3' => 'Harap untuk tidak membagikan informasi ini.', ], ]; diff --git a/resources/lang/id/mail.php b/resources/lang/id/mail.php index 3d4e54af158..86a413048da 100644 --- a/resources/lang/id/mail.php +++ b/resources/lang/id/mail.php @@ -22,7 +22,7 @@ 'benefit_more' => 'Di samping itu, para pemilik supporter tag juga akan mendapatkan berbagai keutamaan baru seiring waktunya!', 'feedback' => "Apabila kamu memiliki pertanyaan atau saran lebih lanjut, jangan sungkan untuk membalas email ini; Saya akan menghubungimu kembali sesegera mungkin!", 'keep_free' => 'Berkat orang-orang sepertimu, osu! dapat mewujudkan lingkungan permainan dan komunitas yang terbebas dari iklan dan sistem pembayaran yang mengganggu.', - 'keep_running' => 'Dukunganmu membuat osu! dapat berjalan selama sekitar :minutes! Angka ini mungkin tidak terlihat besar, namun dukungan sekecil apa pun akan tetap berarti bagi kami :).', + 'keep_running' => 'Dukunganmu membuat osu! terus berjalan selama sekitar :minutes! Angka ini mungkin tidak terlihat besar, namun dukungan sekecil apa pun akan tetap berarti bagi kami :).', 'subject' => 'Terima kasih, osu! mencintaimu', 'translation' => 'Sebagai bahan rujukan, tersedia terjemahan dari komunitas di bawah ini:', @@ -98,13 +98,13 @@ 'user_verification' => [ 'code' => 'Kode verifikasi kamu adalah:', - 'code_hint' => 'Kamu dapat memasukkan kode tersebut baik dengan atau tanpa spasi.', + 'code_hint' => 'Kamu dapat memasukkan kode ini baik dengan atau tanpa spasi.', 'link' => 'Di samping itu, kamu juga dapat mengunjungi tautan di bawah ini untuk menyelesaikan proses verifikasi:', 'report' => 'Apabila kamu tidak merasa meminta kode verifikasi dari kami, harap SEGERA BALAS email ini karena akunmu mungkin sedang berada dalam bahaya.', 'subject' => 'Verifikasi akun osu!', 'action_from' => [ - '_' => 'Terdapat aktivitas baru dari :country pada akunmu yang memerlukan verifikasi.', + '_' => 'Terdapat aktivitas baru pada akunmu dari :country yang memerlukan verifikasi.', 'unknown_country' => 'negara yang tidak diketahui', ], ], diff --git a/resources/lang/id/oauth.php b/resources/lang/id/oauth.php index 0127515e92e..b98251ab9e9 100644 --- a/resources/lang/id/oauth.php +++ b/resources/lang/id/oauth.php @@ -55,7 +55,7 @@ 'revoked' => [ 'false' => 'Hapus', - 'true' => 'Telah dihapus', + 'true' => 'Dihapus', ], ], ]; diff --git a/resources/lang/id/store.php b/resources/lang/id/store.php index 6cef00f2de2..f6ebc45b10b 100644 --- a/resources/lang/id/store.php +++ b/resources/lang/id/store.php @@ -29,7 +29,7 @@ 'checkout' => [ 'cart_problems' => 'Uh oh, terdapat masalah dengan keranjangmu!', - 'cart_problems_edit' => 'Klik di sini untuk menyuntingnya.', + 'cart_problems_edit' => 'Klik di sini untuk menyunting isi keranjangmu.', 'declined' => 'Pembayaran dibatalkan.', 'delayed_shipping' => 'Kami sedang kebanjiran pesanan! Apabila kamu memesan sekarang, mohon beri kami waktu tambahan **selama 1-2 minggu** untuk memproses pesananmu karena kami saat ini masih harus mengurus pesanan yang ada.', 'hide_from_activity' => 'Sembunyikan seluruh tag osu!supporter pada pesanan ini dari aktivitas saya', @@ -119,7 +119,7 @@ 'salesperson' => 'Pramuniaga', 'shipping_method' => 'Metode Pengiriman', 'shipping_terms' => 'Ketentuan Pengiriman', - 'title' => 'Detail Pesanan', + 'title' => 'Rincian Pesanan', ], 'item' => [ @@ -135,18 +135,18 @@ ], 'not_modifiable_exception' => [ - 'cancelled' => 'Kamu tidak dapat menyunting pesanan yang telah dibatalkan.', - 'checkout' => 'Kamu tidak dapat menyunting pesanan yang sedang diproses.', // checkout and processing should have the same message. + 'cancelled' => 'Kamu tidak dapat menyunting pesananmu karena pesanan ini telah dibatalkan.', + 'checkout' => 'Kamu tidak dapat menyunting pesananmu pada saat pesanan sedang diproses.', // checkout and processing should have the same message. 'default' => 'Pesanan tidak dapat diubah', - 'delivered' => 'Kamu tidak dapat menyunting pesanan yang telah dikirim.', - 'paid' => 'Kamu tidak dapat menyunting pesanan yang telah dibayar.', - 'processing' => 'Kamu tidak dapat menyunting pesanan yang sedang diproses.', - 'shipped' => 'Kamu tidak dapat menyunting pesanan yang telah dikirim.', + 'delivered' => 'Kamu tidak dapat menyunting pesananmu karena pesanan ini telah dikirim.', + 'paid' => 'Kamu tidak dapat menyunting pesananmu karena pesanan ini telah dibayar lunas.', + 'processing' => 'Kamu tidak dapat menyunting pesananmu pada saat pesanan sedang diproses.', + 'shipped' => 'Kamu tidak dapat menyunting pesananmu karena pesanan ini telah dikirim.', ], 'status' => [ 'cancelled' => 'Dibatalkan', - 'checkout' => 'Menyiapkan', + 'checkout' => 'Mempersiapkan', 'delivered' => 'Terkirim', 'paid' => 'Lunas', 'processing' => 'Menunggu konfirmasi', @@ -198,7 +198,7 @@ 'current' => 'Nama penggunamu saat ini adalah ":username".', 'require_login' => [ - '_' => 'Anda harus :link untuk mengubah nama Anda!', + '_' => 'Kamu harus :link untuk mengubah namamu!', 'link_text' => 'masuk', ], ], diff --git a/resources/lang/it/store.php b/resources/lang/it/store.php index cebbc10abab..b8fccca3cff 100644 --- a/resources/lang/it/store.php +++ b/resources/lang/it/store.php @@ -78,8 +78,8 @@ ], 'prepared' => [ 'title' => 'Il tuo ordine è in preparazione!', - 'line_1' => '', - 'line_2' => '', + 'line_1' => 'Si prega di attendere ancora un po\' prima che venga spedito. Le informazioni di tracciamento verranno visualizzate qui una volta che l\'ordine è stato elaborato e inviato. Questo può richiedere fino a cinque giorni (ma di solito meno!) a seconda di quanto siamo occupati.', + 'line_2' => 'Inviamo tutti gli ordini dal Giappone utilizzando una varietà di servizi di spedizione a seconda del peso e del valore. Questa area verrà aggiornata con le specifiche una volta spedito l\'ordine.', ], 'processing' => [ 'title' => 'Il tuo pagamento non è ancora stato confermato!', @@ -93,8 +93,8 @@ 'title' => 'Il tuo ordine è stato spedito!', 'tracking_details' => '', 'no_tracking_details' => [ - '_' => "", - 'link_text' => '', + '_' => "Non disponiamo dei dettagli di tracciabilità poiché abbiamo inviato il tuo pacco tramite posta aerea, ma puoi aspettarti di riceverlo entro 1-3 settimane. Per l'Europa, a volte la dogana può ritardare l'ordine senza il nostro controllo. Se hai qualche dubbio, rispondi all'e-mail di conferma dell'ordine che hai ricevuto :link.", + 'link_text' => 'inviaci un\'email', ], ], ], @@ -108,9 +108,9 @@ 'no_orders' => 'Nessun ordine da visualizzare.', 'paid_on' => 'Ordine effettuato :date', 'resume' => 'Riprendi Pagamento', - 'shipping_and_handling' => '', + 'shipping_and_handling' => 'Spedizione e Trasporto', 'shopify_expired' => 'Il link del pagamento per quest\'ordine è scaduto.', - 'subtotal' => '', + 'subtotal' => 'Subtotale', 'total' => 'Totale', 'details' => [ diff --git a/resources/lang/it/users.php b/resources/lang/it/users.php index 6f08e9fe813..dd4bee1c9ad 100644 --- a/resources/lang/it/users.php +++ b/resources/lang/it/users.php @@ -339,7 +339,7 @@ 'title' => 'io!', ], 'medals' => [ - 'empty' => "Questo utente non ne ha ricevuti ancora. ;_;", + 'empty' => "Questo utente non ne ha ancora ottenuta una. ;_;", 'recent' => 'Più recenti', 'title' => 'Medaglie', ], @@ -446,7 +446,7 @@ 'country_simple' => 'Classifica Nazionale', 'global' => 'Posto globale per :mode', 'global_simple' => 'Classifica Globale', - 'highest' => 'Grado più alto: :rank il :date', + 'highest' => 'Posizione più alta: :rank il :date', ], 'stats' => [ 'hit_accuracy' => 'Precisione dei Colpi', diff --git a/resources/lang/nl/comments.php b/resources/lang/nl/comments.php index 588401cf0d3..a1d0649fafc 100644 --- a/resources/lang/nl/comments.php +++ b/resources/lang/nl/comments.php @@ -44,7 +44,7 @@ ], 'ogp' => [ - 'title' => '', + 'title' => 'reactie door :user', ], 'placeholder' => [ diff --git a/resources/lang/nl/notifications.php b/resources/lang/nl/notifications.php index 4e422410584..dd54afcce2e 100644 --- a/resources/lang/nl/notifications.php +++ b/resources/lang/nl/notifications.php @@ -58,8 +58,8 @@ 'review_count' => [ 'praises' => '', - 'problems' => '', - 'suggestions' => '', + 'problems' => ':count_delimited probleem|:count_delimited problemen', + 'suggestions' => ':count_delimited suggestie|:count_delimited suggesties', ], ], diff --git a/resources/lang/nl/store.php b/resources/lang/nl/store.php index 0a522f7ede7..45845ddcafd 100644 --- a/resources/lang/nl/store.php +++ b/resources/lang/nl/store.php @@ -116,10 +116,10 @@ 'details' => [ 'order_number' => 'Bestelling #', 'payment_terms' => '', - 'salesperson' => '', - 'shipping_method' => '', - 'shipping_terms' => '', - 'title' => '', + 'salesperson' => 'Verkoper', + 'shipping_method' => 'Verzendmethode', + 'shipping_terms' => 'Verzendvoorwaarden', + 'title' => 'Besteldetails', ], 'item' => [ @@ -151,7 +151,7 @@ 'paid' => 'Betaald', 'processing' => 'Wachten op bevestiging', 'shipped' => 'Verzonden', - 'title' => '', + 'title' => 'Bestelstatus', ], 'thanks' => [ diff --git a/resources/lang/nl/users.php b/resources/lang/nl/users.php index 61111b96ef0..7a5530e5a46 100644 --- a/resources/lang/nl/users.php +++ b/resources/lang/nl/users.php @@ -125,7 +125,7 @@ 'ogp' => [ 'modding_description' => '', - 'modding_description_empty' => '', + 'modding_description_empty' => 'Gebruiker heeft geen beatmaps...', 'description' => [ '_' => 'Rang (:ruleset): :global × :country', diff --git a/resources/lang/ro/users.php b/resources/lang/ro/users.php index 101e33afae7..293cf8ae704 100644 --- a/resources/lang/ro/users.php +++ b/resources/lang/ro/users.php @@ -434,7 +434,7 @@ 'restriction_info' => [ '_' => 'Trebuie să fii un :link să deblochezi acest feature.', - 'link' => 'osu!ajutător', + 'link' => 'suporter osu!', ], ], 'post_count' => [ diff --git a/resources/lang/ru/beatmapsets.php b/resources/lang/ru/beatmapsets.php index 8164e5d2056..49bfcd8ed3e 100644 --- a/resources/lang/ru/beatmapsets.php +++ b/resources/lang/ru/beatmapsets.php @@ -159,7 +159,7 @@ 'scoreboard' => [ 'achieved' => 'достигнут :when', 'country' => 'Рейтинг по стране', - 'error' => 'Ошибка загрузки рейтинга', + 'error' => 'Не удалось загрузить таблицу рекордов', 'friend' => 'Рейтинг среди друзей', 'global' => 'Глобальный рейтинг', 'supporter-link' => 'Нажмите сюда для просмотра всех возможностей, которые Вы можете получить!', diff --git a/resources/lang/ru/users.php b/resources/lang/ru/users.php index e7a07ef2703..5997748236c 100644 --- a/resources/lang/ru/users.php +++ b/resources/lang/ru/users.php @@ -297,29 +297,29 @@ 'beatmap_discussion' => [ 'allow_kudosu' => [ - 'give' => 'Начислено :amount за снятие вето на получение кудосу за отзыв :post', + 'give' => 'Начислено :amount за снятие вето на получение кудосу за отзыв о карте :post', ], 'deny_kudosu' => [ - 'reset' => 'Отнято :amount за ответ в :post', + 'reset' => 'Снято :amount за отзыв о карте :post', ], 'delete' => [ - 'reset' => 'Потеряно :amount за удаление ответа в посте :post', + 'reset' => 'Списано :amount за удаление отзыва о карте :post', ], 'restore' => [ - 'give' => 'Начислено :amount за восстановление ответа :post', + 'give' => 'Начислено :amount за восстановление отзыва в :post', ], 'vote' => [ - 'give' => 'Начислено :amount за получение голосов за отзыв :post', - 'reset' => 'Потеряно :amount за потерю голосов в посте :post', + 'give' => 'Начислено :amount за получение голосов за отзыв о карте :post', + 'reset' => 'Списано :amount за потерю голосов за отзыв о карте :post', ], 'recalculate' => [ - 'give' => 'Начислено :amount за перерасчёт голосов у отзыва :post', - 'reset' => 'Потеряно :amount за перерасчёт голосов в посте :post', + 'give' => 'Начислено :amount за перерасчёт голосов у отзыва о карте :post', + 'reset' => 'Списано :amount за перерасчёт голосов за отзыв о карте :post', ], ], diff --git a/resources/lang/sk/accounts.php b/resources/lang/sk/accounts.php index d04d34db5fe..de2185f7445 100644 --- a/resources/lang/sk/accounts.php +++ b/resources/lang/sk/accounts.php @@ -10,7 +10,7 @@ 'avatar' => [ 'title' => 'Avatar', - 'rules' => 'Prosím uistite sa že váš avatar sedí s :link.
Toto znamená že musí byť primeraný pre každý vek. to znamená žiadna nudita, vulgarizmy alebo sugestívny obsah.', + 'rules' => 'Prosím uistite sa, že váš avatar sedí s :link.
To znamená, že musí byť primeraný pre každý vek. To je žiadna nudita, vulgarizmy alebo sugestívny obsah.', 'rules_link' => 'pravidlá komunity', ], @@ -77,23 +77,23 @@ 'notifications' => [ 'beatmapset_discussion_qualified_problem' => 'dostávať notifikácie pre nové problémy na kvalifikovaných beatmapách pre následujúce módy', - 'beatmapset_disqualify' => 'prijímať upozornenia, keď sú beatmapy diskvalifikované s týchto módov', - 'comment_reply' => 'prijímať upozornenia pre odpovede na moje komentáre', + 'beatmapset_disqualify' => 'prijímať upozornenia, keď sú beatmapy diskvalifikované z týchto módov', + 'comment_reply' => 'prijímať upozornenia pre odpovede na vaše komentáre', 'title' => 'Oznámenia', - 'topic_auto_subscribe' => 'automaticky zapnúť notifikácie pre nové fórove témy ktoré vytvoríte', + 'topic_auto_subscribe' => 'automaticky zapnúť notifikácie pre nové témy fóra, ktoré vytvoríte', 'options' => [ - '_' => 'spôsoby doručenia', + '_' => 'možnosti doručenia', 'beatmap_owner_change' => 'obtiažnosť hosťa', 'beatmapset:modding' => 'módovanie beatmáp', - 'channel_message' => 'súkromné správy', + 'channel_message' => 'správy súkromného chatu', 'comment_new' => 'nové komentáre ', 'forum_topic_reply' => 'odpoveď na tému', 'mail' => 'pošta', 'mapping' => 'tvorca beatmapy', - 'push' => 'upozornenia na stránke', - 'user_achievement_unlock' => 'hráčska medaila odomknutá', + 'push' => 'push', + 'user_achievement_unlock' => 'nová medaila odomknutá', ], ], @@ -109,7 +109,7 @@ 'title' => 'Možnosti', 'beatmapset_download' => [ - '_' => 'predvolený druh sťahovania beatmáp', + '_' => 'predvolený typ sťahovania beatmáp', 'all' => 's videom, ak je dostupné', 'direct' => 'otvoriť v osu!direct', 'no_video' => 'bez videa', @@ -133,7 +133,7 @@ 'security' => [ 'current_session' => 'aktuálne', 'end_session' => 'Koniec relácie', - 'end_session_confirmation' => 'Toto okamžite vypne reláciu na vybranom zariadení. Ste si istí?', + 'end_session_confirmation' => 'Toto okamžite ukončí reláciu na vybranom zariadení. Ste si istí?', 'last_active' => 'Naposledy aktívny:', 'title' => 'Zabezpečenie', 'web_sessions' => 'webové relácie', @@ -148,11 +148,11 @@ ], 'verification_completed' => [ - 'text' => 'Už môžete túto kartu/okno zatvoriť', + 'text' => 'Túto kartu/okno už môžete zatvoriť', 'title' => 'Overenie bolo dokončené', ], 'verification_invalid' => [ - 'title' => 'Link už vypršal alebo je neplatný', + 'title' => 'Link vypršal alebo je neplatný', ], ]; diff --git a/resources/lang/sk/api.php b/resources/lang/sk/api.php index a7cd23b89b9..8d5ffe5478c 100644 --- a/resources/lang/sk/api.php +++ b/resources/lang/sk/api.php @@ -6,7 +6,7 @@ return [ 'error' => [ 'chat' => [ - 'empty' => 'Nemôžete posielať prázdne správy.', + 'empty' => 'Nemôžete poslať prázdnu správu.', 'limit_exceeded' => 'Posielate správy príliš rýchlo, prosím, počkajte chvíľu než to skúsite znova.', 'too_long' => 'Správa, ktorú sa snažíte poslať, je príliš dlhá.', ], @@ -14,7 +14,7 @@ 'scopes' => [ 'bot' => 'Správať sa ako chat bot.', - 'identify' => 'Identifikovať vás a prezerať verejný profil.', + 'identify' => 'Identifikovať vás a prezerať váš verejný profil.', 'chat' => [ 'read' => '', diff --git a/resources/lang/sk/authorization.php b/resources/lang/sk/authorization.php index a0b631fe5af..b8211be81a5 100644 --- a/resources/lang/sk/authorization.php +++ b/resources/lang/sk/authorization.php @@ -5,9 +5,9 @@ return [ 'play_more' => 'Čo si tak namiesto toho zahrať osu!?', - 'require_login' => 'Prosím, prihláste sa, aby ste mohli pokračovať.', + 'require_login' => 'Prosím, prihláste sa pre pokračovanie.', 'require_verification' => 'Prosím overte pre pokračovanie.', - 'restricted' => "Toto nemôžete robiť, kým ste umlčaný.", + 'restricted' => "Nemôžete to robiť s obmedzeným účtom.", 'silenced' => "Toto nemôžete robiť, kým ste umlčaný.", 'unauthorized' => 'Prístup zamietnutý.', @@ -27,7 +27,7 @@ ], 'store' => [ - 'mapper_note_wrong_user' => 'Iba vlastník mapy alebo nominátor/člen skupiny QAT môžu písať poznámky mappera.', + 'mapper_note_wrong_user' => 'Iba vlastník mapy alebo nominátor/členu tímu zaručujúceho kvalitu môže pridať autorove pripomienky.', ], 'vote' => [ @@ -40,9 +40,9 @@ 'beatmap_discussion_post' => [ 'destroy' => [ - 'not_owner' => 'Iba vy môžete odstrániť vaše vlastné príspevky.', + 'not_owner' => 'Môžete odstrániť iba vaše vlastné príspevky.', 'resolved' => 'Nemôžete vymazať príspevky vyriešenej diskusie.', - 'system_generated' => 'Automaticky generovaný príspevok nie je možné upravovať.', + 'system_generated' => 'Automaticky generovaný príspevok nie je možné odstrániť.', ], 'edit' => [ @@ -85,7 +85,7 @@ 'entry' => [ 'limit_reached' => 'Dosiahol si limit vstupov pre túto súťaž', - 'over' => 'Díky za vaše vstupy! Podania boli uzavreté a hlasovanie sa čoskoro otvorí.', + 'over' => 'Ďakujeme za vaše vstupy! Podania pre túto súťaž boli uzavreté a hlasovanie sa čoskoro otvorí.', ], ], @@ -104,15 +104,15 @@ 'edit' => [ 'deleted' => 'Nemôžete upraviť odstránený príspevok.', - 'locked' => 'Príspevok je uzamknutý od upravovania.', + 'locked' => 'Príspevok je uzamknutý pre upravovanie.', 'no_forum_access' => 'Nemáš prístup k danému fóru.', 'not_owner' => 'Upravovať môže iba autor príspevku.', - 'topic_locked' => 'Nie je možné editovať príspevok zamknutej témy.', + 'topic_locked' => 'Nie je možné upraviť príspevok zamknutej témy.', ], 'store' => [ - 'play_more' => 'Prosím skús si zahrať hru pred písaním na fórum! Ak máš problém s hraním, prosím spýtaj sa na Help and Support fóre.', - 'too_many_help_posts' => "Musíš hrať viac pred ďalšími príspevkami. Ak tvoj problém s hraním hry pretrváva, napíš na support@ppy.sh", // FIXME: unhardcode email address. + 'play_more' => 'Predtým, ako pridáte príspevok na fórach, skúste si zahrať, prosím! Ak máte problém s hraním, prosím opýtajte sa na fóre Pomoc a Podpora.', + 'too_many_help_posts' => "Musíš hrať viac, aby si mohol vytvárať ďalšie príspevky. Ak tvoj problém s hraním hry pretrváva, napíš na email support@ppy.sh", // FIXME: unhardcode email address. ], ], diff --git a/resources/lang/tr/beatmap_discussions.php b/resources/lang/tr/beatmap_discussions.php index 34f52123997..329f6ead59f 100644 --- a/resources/lang/tr/beatmap_discussions.php +++ b/resources/lang/tr/beatmap_discussions.php @@ -26,7 +26,7 @@ 'deleted' => 'Silinmiş tartışmaları dahil et', 'mode' => 'Beatmap modu', 'only_unresolved' => 'Sadece çözülmemiş tartışmaları göster', - 'show_review_embeds' => '', + 'show_review_embeds' => 'İnceleme gönderilerini göster', 'types' => 'Mesaj türü', 'username' => 'Kullanıcı adı', diff --git a/resources/lang/tr/comments.php b/resources/lang/tr/comments.php index e190a9cfd48..b5a6a7b47b3 100644 --- a/resources/lang/tr/comments.php +++ b/resources/lang/tr/comments.php @@ -44,7 +44,7 @@ ], 'ogp' => [ - 'title' => '', + 'title' => ':user tarafından yorum', ], 'placeholder' => [ diff --git a/resources/lang/tr/store.php b/resources/lang/tr/store.php index d0142b9740a..ea644a74d86 100644 --- a/resources/lang/tr/store.php +++ b/resources/lang/tr/store.php @@ -49,15 +49,15 @@ ], 'discount' => '%:percent kazanın', - 'free' => '', + 'free' => 'ücretsiz!', 'invoice' => [ 'contact' => 'İletişim:', 'date' => 'Tarih:', 'echeck_delay' => 'Ödemenizin bir eCheck olması nedeniyle, ödemenizin PayPal\'dan temizlenmesi için 10 ekstra günü göz önüne alın!', 'hide_from_activity' => 'Bu siparişteki osu!supporter etiketleri yakın zamandaki etkinliklerinizde gösterilmez.', - 'sent_via' => '', - 'shipping_to' => '', + 'sent_via' => 'Kargo şirketi:', + 'shipping_to' => 'Gönderim adresi:', 'title' => 'Fatura', 'title_compact' => 'fatura', @@ -66,14 +66,14 @@ 'title' => 'Siparişiniz iptal edildi', 'line_1' => [ '_' => "", - 'link_text' => '', + 'link_text' => 'osu!store destek', ], ], 'delivered' => [ 'title' => 'Siparişiniz teslim edildi! İyi günlerde kullanmanız dileğiyle!', 'line_1' => [ '_' => 'Satın alımınızla ilgili bir problem yaşıyorsanız,lütfen :link ile görüşün.', - 'link_text' => '', + 'link_text' => 'osu!store destek', ], ], 'prepared' => [ @@ -91,7 +91,7 @@ ], 'shipped' => [ 'title' => 'Siparişiniz kargoya verildi!', - 'tracking_details' => '', + 'tracking_details' => 'Kargo takip detayları aşağıdadır:', 'no_tracking_details' => [ '_' => "", 'link_text' => 'bize bir e-mail yollayın', @@ -108,17 +108,17 @@ 'no_orders' => 'Görüntülenecek sipariş yok.', 'paid_on' => 'Sipariş verme tarihi :date', 'resume' => 'Sepete Dön', - 'shipping_and_handling' => '', + 'shipping_and_handling' => 'Kargo & Taşıma', 'shopify_expired' => 'Bu sipariş için ödeme bağlantısının süresi doldu.', 'subtotal' => 'Ara toplam', 'total' => 'Toplam', 'details' => [ - 'order_number' => '', - 'payment_terms' => '', + 'order_number' => 'Sipariş No.', + 'payment_terms' => 'Ödeme Koşulları', 'salesperson' => 'Satış Temsilcisi', 'shipping_method' => 'Gönderim Yolu', - 'shipping_terms' => '', + 'shipping_terms' => 'Teslimat Koşulları', 'title' => 'Sipariş Detayları', ], @@ -193,7 +193,7 @@ 'username_change' => [ 'check' => 'Geçerliliğini kontrol etmek için bir kullanıcı adı girin!', 'checking' => ':username geçerliliği kontrol ediliyor...', - 'placeholder' => '', + 'placeholder' => 'İstenilen Kullanıcı Adı', 'label' => 'Yeni kullanıcı adı', 'current' => 'Şu anki kullanıcı adınız ":username".', diff --git a/resources/lang/tr/users.php b/resources/lang/tr/users.php index 5292bfb1fdd..de62d5a56d5 100644 --- a/resources/lang/tr/users.php +++ b/resources/lang/tr/users.php @@ -124,13 +124,13 @@ ], 'ogp' => [ - 'modding_description' => '', - 'modding_description_empty' => '', + 'modding_description' => 'Beatmapler: :counts', + 'modding_description_empty' => 'Kullanıcının hiç beatmapi yok...', 'description' => [ - '_' => '', - 'country' => '', - 'global' => '', + '_' => 'Sıralama (:ruleset): :global | :country', + 'country' => 'Ülke :rank', + 'global' => 'Küresel :rank', ], ], diff --git a/resources/lang/uk/sort.php b/resources/lang/uk/sort.php index 4e1b30a1476..48ac6baf7fd 100644 --- a/resources/lang/uk/sort.php +++ b/resources/lang/uk/sort.php @@ -18,7 +18,7 @@ 'artist_tracks' => [ 'album' => 'Альбом ', 'artist' => 'Виконавець', - 'bpm' => 'БПМ', + 'bpm' => 'BPM', 'genre' => 'Жанр', 'length' => 'Тривалість', 'relevance' => 'Актуальність', diff --git a/resources/lang/zh-tw/comments.php b/resources/lang/zh-tw/comments.php index e2b86de8b71..d78b323ad86 100644 --- a/resources/lang/zh-tw/comments.php +++ b/resources/lang/zh-tw/comments.php @@ -44,7 +44,7 @@ ], 'ogp' => [ - 'title' => '', + 'title' => '評論者 :user', ], 'placeholder' => [ diff --git a/resources/lang/zh-tw/notifications.php b/resources/lang/zh-tw/notifications.php index 4e1bd5067fe..6ce59ed58e7 100644 --- a/resources/lang/zh-tw/notifications.php +++ b/resources/lang/zh-tw/notifications.php @@ -57,9 +57,9 @@ 'beatmapset_discussion_unlock_compact' => '討論已被解鎖', 'review_count' => [ - 'praises' => '', - 'problems' => '', - 'suggestions' => '', + 'praises' => ':count_delimited 個讚', + 'problems' => ':count_delimited 個問題', + 'suggestions' => ':count_delimited 個建議', ], ], diff --git a/resources/lang/zh-tw/store.php b/resources/lang/zh-tw/store.php index c7488a1dcc3..af26d0f5ca7 100644 --- a/resources/lang/zh-tw/store.php +++ b/resources/lang/zh-tw/store.php @@ -6,7 +6,7 @@ return [ 'cart' => [ 'checkout' => '結帳', - 'empty_cart' => '', + 'empty_cart' => '清空購物車', 'info' => '購物車裡有 :count_delimited 件商品($:subtotal)|購物車裡有 :count_delimited 件商品($:subtotal)', 'more_goodies' => '我想在完成訂單之前查看更多的東西', 'shipping_fees' => '運費', @@ -52,34 +52,34 @@ 'free' => '免費!', 'invoice' => [ - 'contact' => '', + 'contact' => '聯絡:', 'date' => '日期:', 'echeck_delay' => '由於您是用 eCheck 付款,請等待至多 10 天以使該支付通過 PayPal 完成!', 'hide_from_activity' => '這項 osu! 贊助者訂單未在您的最近活動中顯示。', - 'sent_via' => '', + 'sent_via' => '透過:', 'shipping_to' => '運送至:', - 'title' => '', + 'title' => '帳單', 'title_compact' => '帳單', 'status' => [ 'cancelled' => [ - 'title' => '', + 'title' => '你的訂單已取消', 'line_1' => [ - '_' => "", + '_' => "如果不是您本人所取消,請聯絡 :link 並提供您的訂單編號 (#:order_number)。", 'link_text' => 'osu!store 支援', ], ], 'delivered' => [ - 'title' => '', + 'title' => '您的貨已送達!希望你能喜歡!', 'line_1' => [ - '_' => '', + '_' => '如果您對於您的購買有任何疑問,請咨詢 :link。', 'link_text' => 'osu!store 支援', ], ], 'prepared' => [ 'title' => '正在準備您的訂單!', - 'line_1' => '', - 'line_2' => '', + 'line_1' => '在訂單出貨前敬請耐心等待。一旦訂單已經處理完成並已經出貨,此處將會顯示最新的運輸資訊。由於我們的繁忙程度所不同,這段時間可能會長達 5 日 (一般情況下不會這麽久!)。', + 'line_2' => '所有訂單都將自日本發出,訂單會依商品重量和價值使用對應的運輸物流業務。若已經出貨,此處將顯示物流詳細資訊。', ], 'processing' => [ 'title' => '您的付款尚未被確認!', @@ -93,7 +93,7 @@ 'title' => '您的訂單已出貨!', 'tracking_details' => '物流追蹤詳情如下:', 'no_tracking_details' => [ - '_' => "", + '_' => "因為我們使用 Air Mail 出貨,所以我們無法紀錄物流資訊。但是您可以在 1-3 個星期內收到包裹。如果收貨地址位於歐洲,海關可能會依此延長訂單運輸時間。如果您有任何問題,請回覆您收到的 :link 郵件。", 'link_text' => '向我們發送電子郵件', ], ], @@ -108,17 +108,17 @@ 'no_orders' => '沒有訂單', 'paid_on' => '下訂單 :date', 'resume' => '繼續結賬', - 'shipping_and_handling' => '', + 'shipping_and_handling' => '運輸與處理', 'shopify_expired' => '此訂單的結帳網址已經過期。', 'subtotal' => '小計', 'total' => '總計', 'details' => [ - 'order_number' => '', - 'payment_terms' => '', - 'salesperson' => '', + 'order_number' => '訂單 #', + 'payment_terms' => '支付條款', + 'salesperson' => '銷售員', 'shipping_method' => '運送方式', - 'shipping_terms' => '', + 'shipping_terms' => '運輸條款', 'title' => '訂單詳情:', ], @@ -155,9 +155,9 @@ ], 'thanks' => [ - 'title' => '', + 'title' => '多謝惠顧!', 'line_1' => [ - '_' => '', + '_' => '您將會收到驗證郵件。如果有任何疑問,請咨詢 :link!', 'link_text' => '聯絡我們', ], ], @@ -186,20 +186,20 @@ 'require_login' => [ '_' => '您需要 :link 以獲得 osu!贊助者標籤!', - 'link_text' => '登入', + 'link_text' => '已登入', ], ], 'username_change' => [ 'check' => '输入使用者名稱並檢查是否可用', 'checking' => '正在檢查 :username 是否可用。。。', - 'placeholder' => '', + 'placeholder' => '請求的使用者名稱', 'label' => '新的使用者名稱', 'current' => '您目前的使用者名稱是 ":username"。', 'require_login' => [ '_' => '需要 :link 才能變更使用者名稱!', - 'link_text' => '登入', + 'link_text' => '已登入', ], ], diff --git a/resources/lang/zh-tw/users.php b/resources/lang/zh-tw/users.php index e863b7c9f33..a680db2cd1a 100644 --- a/resources/lang/zh-tw/users.php +++ b/resources/lang/zh-tw/users.php @@ -125,7 +125,7 @@ 'ogp' => [ 'modding_description' => '圖譜: :counts', - 'modding_description_empty' => '', + 'modding_description_empty' => '使用者沒有任何的圖譜...', 'description' => [ '_' => '排名 (:ruleset): :global | :country', diff --git a/resources/lang/zh/events.php b/resources/lang/zh/events.php index 5507255d038..92ba1fbcf72 100644 --- a/resources/lang/zh/events.php +++ b/resources/lang/zh/events.php @@ -12,7 +12,7 @@ 'beatmapset_update' => ':user 更新了谱面 ":beatmapset"', 'beatmapset_upload' => ':user 提交了一个新谱面 ":beatmapset"', 'empty' => "该用户最近没有活动!", - 'rank' => ':user:beatmap (:mode)中取得第 :rank 名', + 'rank' => ':user 在 :beatmap (:mode) 中取得了:rank', 'rank_lost' => ':user 失去了 :beatmap (:mode)的第一名', 'user_support_again' => ':user 又一次支持了 osu! - 感谢您的慷慨捐赠!', 'user_support_first' => ':user 支持了 osu! - 感谢您的慷慨捐赠!', diff --git a/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index 56e706c5a85..dca42e3ff46 100644 --- a/resources/views/docs/_structures/user.md +++ b/resources/views/docs/_structures/user.md @@ -24,7 +24,7 @@ default_group | string? | Identifier of the default [Group]( id | integer | unique identifier for user is_active | boolean | has this account been active in the last x months? is_bot | boolean | is this a bot account? -is_deleted | boolean || +is_deleted | boolean | | is_online | boolean | is the user currently online? (either on lazer or the new website) is_supporter | boolean | does this user have supporter? last_visit | [Timestamp](#timestamp)? | last access time. `null` if the user hides online presence @@ -38,43 +38,44 @@ username | string | user's display name Following are attributes which may be additionally included in the response. Relevant endpoints should list them if applicable. -Field | Type ----------------------------|----- -account_history | [User.UserAccountHistory](#user-useraccounthistory)[] -active_tournament_banner | [User.ProfileBanner](#user-profilebanner)? -badges | [User.UserBadge](#user-userbadge)[] -beatmap_playcounts_count | integer -blocks | | -country | | -cover | | -favourite_beatmapset_count | integer -follow_user_mapping | integer[] -follower_count | integer -friends | | -graveyard_beatmapset_count | integer -groups | [UserGroup](#usergroup)[] -guest_beatmapset_count | integer -is_restricted | boolean? -kudosu | [User.Kudosu](#user-kudosu) -loved_beatmapset_count | integer -mapping_follower_count | integer -monthly_playcounts | [UserMonthlyPlaycount](#usermonthlyplaycount)[] -page | | -pending_beatmapset_count | | -previous_usernames | | -rank_highest | [User.RankHighest](#user-rankhighest)? -rank_history | | -ranked_beatmapset_count | | -replays_watched_counts | | -scores_best_count | integer -scores_first_count | integer -scores_recent_count | integer -statistics | | -statistics_rulesets | UserStatisticsRulesets -support_level | | -unread_pm_count | | -user_achievements | | -user_preferences | | +Field | Type | Notes +---------------------------|----- | ----- +account_history | [User.UserAccountHistory](#user-useraccounthistory)[] | | +active_tournament_banner | [User.ProfileBanner](#user-profilebanner)? | Deprecated, use `active_tournament_banners` instead. +active_tournament_banners | [User.ProfileBanner](#user-profilebanner)[] | | +badges | [User.UserBadge](#user-userbadge)[] | | +beatmap_playcounts_count | integer | | +blocks | | | +country | | | +cover | | | +favourite_beatmapset_count | integer | | +follow_user_mapping | integer[] | | +follower_count | integer | | +friends | | | +graveyard_beatmapset_count | integer | | +groups | [UserGroup](#usergroup)[] | | +guest_beatmapset_count | integer | | +is_restricted | boolean? | | +kudosu | [User.Kudosu](#user-kudosu) | | +loved_beatmapset_count | integer | | +mapping_follower_count | integer | | +monthly_playcounts | [UserMonthlyPlaycount](#usermonthlyplaycount)[] | | +page | | | +pending_beatmapset_count | | | +previous_usernames | | | +rank_highest | [User.RankHighest](#user-rankhighest)? | | +rank_history | | | +ranked_beatmapset_count | | | +replays_watched_counts | | | +scores_best_count | integer | | +scores_first_count | integer | | +scores_recent_count | integer | | +statistics | | | +statistics_rulesets | UserStatisticsRulesets | | +support_level | | | +unread_pm_count | | | +user_achievements | | | +user_preferences | | |
diff --git a/resources/views/docs/info.md.blade.php b/resources/views/docs/info.md.blade.php index 5a1ca0a9644..07de2f4c0e8 100644 --- a/resources/views/docs/info.md.blade.php +++ b/resources/views/docs/info.md.blade.php @@ -34,6 +34,9 @@ ## Breaking Changes +### 2024-01-23 +- `active_tournament_banner` in [User](#user) has been deprecated, use `active_tournament_banners` instead. + ### 2023-10-17 - GameMode has been renamed to [Ruleset](#ruleset); existing property names remain unchanged. - `number` has been removed from documentation and replaced with `integer` or `float` to better reflect the type of number. diff --git a/resources/views/password_reset/index.blade.php b/resources/views/password_reset/index.blade.php index d114b721e19..91ac1f495fc 100644 --- a/resources/views/password_reset/index.blade.php +++ b/resources/views/password_reset/index.blade.php @@ -2,6 +2,16 @@ Copyright (c) ppy Pty Ltd . Licensed under the GNU Affero General Public License v3.0. See the LICENCE file in the repository root for full licence text. --}} +@php + $params = [ + 'username' => null, + 'reason' => null, + ...(Session::get('password_reset_start') ?? []), + ]; + if (isset($params['reason'])) { + $reason = osu_trans("password_reset.starting.reason.{$params['reason']}"); + } +@endphp @extends('master') @section('content') @@ -18,10 +28,13 @@ class="password-reset js-form-error" method="POST" > @csrf + @if (isset($reason)) +

{{ $reason }}

+ @endif diff --git a/tests/Controllers/PasswordResetControllerTest.php b/tests/Controllers/PasswordResetControllerTest.php index 75a6462a20f..579bab20592 100644 --- a/tests/Controllers/PasswordResetControllerTest.php +++ b/tests/Controllers/PasswordResetControllerTest.php @@ -11,6 +11,7 @@ use App\Libraries\User\PasswordResetData; use App\Mail\PasswordReset; use App\Models\User; +use Carbon\CarbonImmutable; use Illuminate\Support\Facades\Mail; use Tests\TestCase; @@ -194,6 +195,29 @@ public function testUpdateChangedPasswordExternally() $this->assertTrue($user->fresh()->checkPassword($newPassword)); } + public function testUpdateFromInactive(): void + { + $changeTime = CarbonImmutable::now()->subMinutes(1); + $user = User::factory()->create(['user_lastvisit' => $changeTime->subYears(10)]); + + $key = $this->generateKey($user); + + $newPassword = static::randomPassword(); + + $this->put($this->path(), [ + 'key' => $key, + 'user' => [ + 'password' => $newPassword, + 'password_confirmation' => $newPassword, + ], + 'username' => $user->username, + ])->assertRedirect(route('home')); + + $user = $user->fresh(); + $this->assertTrue($user->checkPassword($newPassword)); + $this->assertTrue($user->user_lastvisit->greaterThan($changeTime)); + } + public function testUpdateInvalidUsername() { $user = User::factory()->create(); diff --git a/tests/Controllers/SessionsControllerTest.php b/tests/Controllers/SessionsControllerTest.php index 29000ee7f21..26682853a19 100644 --- a/tests/Controllers/SessionsControllerTest.php +++ b/tests/Controllers/SessionsControllerTest.php @@ -17,6 +17,7 @@ public function testLogin() $password = 'password1'; $user = User::factory()->create(compact('password')); + $this->expectCountChange(fn () => LoginAttempt::count(), 1); $this->post(route('login'), [ 'username' => $user->username, 'password' => $password, diff --git a/tests/Controllers/Solo/ScoresControllerTest.php b/tests/Controllers/Solo/ScoresControllerTest.php index a5dc22bebd1..084cbfcd481 100644 --- a/tests/Controllers/Solo/ScoresControllerTest.php +++ b/tests/Controllers/Solo/ScoresControllerTest.php @@ -130,11 +130,11 @@ public function tearDown(): void parent::tearDown(); static::createApp(); - LaravelRedis::del(Score::PROCESSING_QUEUE); + LaravelRedis::del($GLOBALS['cfg']['osu']['scores']['processing_queue']); } private function processingQueueCount(): int { - return LaravelRedis::llen(Score::PROCESSING_QUEUE); + return LaravelRedis::llen($GLOBALS['cfg']['osu']['scores']['processing_queue']); } } diff --git a/tests/Models/BeatmapsetTest.php b/tests/Models/BeatmapsetTest.php index b9cb14bea58..8c9465e2a04 100644 --- a/tests/Models/BeatmapsetTest.php +++ b/tests/Models/BeatmapsetTest.php @@ -39,6 +39,8 @@ public function testLove() $otherUser = User::factory()->create(); $beatmapset->watches()->create(['user_id' => $otherUser->getKey()]); + $this->expectCountChange(fn () => $beatmapset->bssProcessQueues()->count(), 1); + $beatmapset->love($user); $this->assertSame($notifications + 1, Notification::count()); @@ -117,6 +119,8 @@ public function testQualify() $otherUser = User::factory()->create(); $beatmapset->watches()->create(['user_id' => $otherUser->getKey()]); + $this->expectCountChange(fn () => $beatmapset->bssProcessQueues()->count(), 1); + $beatmapset->qualify($user); $this->assertSame($notifications + 1, Notification::count()); diff --git a/tests/Models/Solo/ScoreTest.php b/tests/Models/Solo/ScoreTest.php index aff52ab6b38..5f300cc4dfb 100644 --- a/tests/Models/Solo/ScoreTest.php +++ b/tests/Models/Solo/ScoreTest.php @@ -59,7 +59,7 @@ public function testLegacyPassScoreRetainsRank() $this->assertSame($legacy->rank, 'S'); } - public function testLegacyFailScoreIsRankD() + public function testLegacyFailScoreIsRankF() { $score = Score::createFromJsonOrExplode([ 'accuracy' => 1, @@ -76,12 +76,12 @@ public function testLegacyFailScoreIsRankD() ]); $this->assertFalse($score->data->passed); - $this->assertSame($score->data->rank, 'D'); + $this->assertSame($score->data->rank, 'F'); $legacy = $score->createLegacyEntryOrExplode(); $this->assertFalse($legacy->perfect); - $this->assertSame($legacy->rank, 'D'); + $this->assertSame($legacy->rank, 'F'); } public function testLegacyScoreHitCounts() diff --git a/tests/karma/tsconfig.json b/tests/karma/tsconfig.json index a12fa1ee6f1..7a9bc984700 100644 --- a/tests/karma/tsconfig.json +++ b/tests/karma/tsconfig.json @@ -15,6 +15,7 @@ }, "include": [ "../../resources/js", + "../../resources/builds/ziggy.d.ts", ".", ] } diff --git a/tsconfig.json b/tsconfig.json index cd4828c3fe9..30a6635ec83 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,7 @@ "useDefineForClassFields": true }, "include": [ - "resources/js" + "resources/js", + "resources/builds/ziggy.d.ts" ] } diff --git a/webpack.config.js b/webpack.config.js index 29e5143e004..fa24df0300a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -218,7 +218,6 @@ const resolve = { alias: { '@fonts': path.resolve(__dirname, 'resources/fonts'), '@images': path.resolve(__dirname, 'public/images'), - 'ziggy-route': resolvePath('vendor/tightenco/ziggy/dist/index.es.js'), }, extensions: ['*', '.js', '.coffee', '.ts', '.tsx'], modules: [ @@ -294,7 +293,7 @@ const watches = [ { callback: () => spawnSync( 'php', - ['artisan', 'ziggy:generate', 'resources/builds/ziggy.js'], + ['artisan', 'ziggy:generate', 'resources/builds/ziggy.js', '--types'], { stdio: 'inherit' }, ), path: resolvePath('routes/web.php'), diff --git a/yarn.lock b/yarn.lock index 371ea648783..ef0043891bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3526,9 +3526,9 @@ flatted@^3.1.0, flatted@^3.2.7: integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== + version "1.15.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== for-in@^1.0.2: version "1.0.2" @@ -6483,6 +6483,11 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== +qs@~6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== + "qtip2@https://github.com/notbakaneko/qTip2.git#cd5f038667d2b23a44f4274c46de01834d704ce6": version "3.0.3-jquery3" resolved "https://github.com/notbakaneko/qTip2.git#cd5f038667d2b23a44f4274c46de01834d704ce6" @@ -8245,6 +8250,13 @@ yargs@^16.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" +ziggy-js@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/ziggy-js/-/ziggy-js-1.8.1.tgz#582f4c19424cec0f8b80de2d033d70f953314a94" + integrity sha512-fnf30uG0yvUQBPL4T8YPgmkBHUdjYaOFgUb1K1gj0+rclnLTNr9/K/cxC3xkCZyYCZz8oTnXkdf3oJXRPSzavw== + dependencies: + qs "~6.9.7" + zwitch@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"