From 4879de1b8a85e82b5df33984791d39e7d95d03bd Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 19 Sep 2023 09:05:28 +0900 Subject: [PATCH 01/49] ReactChild being deprecated --- resources/js/components/beatmapset-event.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/js/components/beatmapset-event.tsx b/resources/js/components/beatmapset-event.tsx index 92a14ac297a..31771090763 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: React.ReactElement | number | string = ''; + let discussionUserLink: React.ReactElement | number | string = '[unknown user]'; + let text: React.ReactElement | number | string = ''; let url = ''; - let user: React.ReactChild | undefined; + let user: React.ReactElement | number | string | undefined; if (this.discussionId != null) { if (this.discussion == null) { From 3718625eef60341df03cbe1f55432cb3d926c7a3 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 19 Sep 2023 16:49:51 +0900 Subject: [PATCH 02/49] use PropsWithChildren instead --- resources/js/components/modal.tsx | 3 +-- resources/js/components/portal.ts | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) 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) { From 3915f2c0bd340866fe1a2cf6327f78767c89934b Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 19 Sep 2023 16:55:03 +0900 Subject: [PATCH 03/49] Fragment not a ReactFragment --- resources/js/utils/lang.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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]); From aa4e01c4e65f1c3347db3d25ccb32a5b5b653f13 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Thu, 28 Dec 2023 18:08:25 +0900 Subject: [PATCH 04/49] we don't need number --- resources/js/components/beatmapset-event.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/js/components/beatmapset-event.tsx b/resources/js/components/beatmapset-event.tsx index 31771090763..b94d61f22ea 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.ReactElement | number | string = ''; - let discussionUserLink: React.ReactElement | number | string = '[unknown user]'; - let text: React.ReactElement | number | string = ''; + let discussionLink: React.ReactElement | string = ''; + let discussionUserLink: React.ReactElement | string = '[unknown user]'; + let text: React.ReactElement | string = ''; let url = ''; - let user: React.ReactElement | number | string | undefined; + let user: React.ReactElement | string | undefined; if (this.discussionId != null) { if (this.discussion == null) { From c33ab5e9511cf6ed0e063afc233e166f5da43320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 28 Dec 2023 19:44:31 +0100 Subject: [PATCH 05/49] Add failing assertions for expected qualification/love behaviour --- tests/Models/BeatmapsetTest.php | 4 ++++ 1 file changed, 4 insertions(+) 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()); From e33108c1e4c0dcab2532637a6e64d37db5311ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 28 Dec 2023 19:54:12 +0100 Subject: [PATCH 06/49] Always push beatmaps to BSS queue after they become eligible for score submission The reasoning for this change is related to the introduction of legacy scoring attributes (https://github.com/ppy/osu-difficulty-calculator/pull/224) which are intended to be used by `osu-difficulty-calculator` to recalculate scores imported from stable to the new standardised scoring scheme. Today it was revealed that some stable scores could not be imported to the new scoring tables due to missing legacy scoring attributes. In particular, said failing scores were set on the following beatmap: https://osu.ppy.sh/beatmapsets/2004898 The current working theory which intends to support this change is that the scoring attributes are missing for this beatmap due to the following coincidence of circumstances: - During back-population of scoring attributes, the beatmap in question was excluded due to being in pending state - The beatmap has not been updated by the creator since the back-population, meaning that it wouldn't have been pushed to `osu-difficulty-calculator` for reprocessing - At 20231228T130004Z the beatmap was qualified, which up until this change was a process involving `osu-web` only and as such would not queue the beatmap for BSS reprocessing. Notably a similar sequence of events can also plausibly happen when loving a beatmap, as it is another case wherein a beatmap enters a state wherein scores set on it will be submitted and preserved in the database. The suggested fix here is to queue the beatmap for a BSS reprocess after both of the aforementioned ranked status changes, which will - via the submission flow - ensure that the beatmap reaches `osu-difficulty-calculator` for reprocessing, and receive legacy scoring attributes as a result. This was already happening for newly-ranked beatmaps, so this is intended to simply be an extension of that. --- app/Models/Beatmapset.php | 3 +++ 1 file changed, 3 insertions(+) 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]); From 81615ec14e926f6cee39e1d76a8379df9a1bd595 Mon Sep 17 00:00:00 2001 From: peppy Date: Sat, 6 Jan 2024 04:19:12 +0000 Subject: [PATCH 07/49] Update mod definitions --- database/mods.json | 72 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/database/mods.json b/database/mods.json index ed40b0dc4cc..1077fda5a3a 100644 --- a/database/mods.json +++ b/database/mods.json @@ -250,7 +250,8 @@ "IncompatibleMods": [ "SI", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -384,7 +385,8 @@ "RD", "SO", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -690,7 +692,8 @@ "WG", "MG", "RP", - "FR" + "FR", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -714,7 +717,8 @@ "IncompatibleMods": [ "TR", "MG", - "RP" + "RP", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -733,7 +737,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -759,7 +764,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -785,7 +791,8 @@ "GR", "DF", "TC", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -882,7 +889,8 @@ "TP", "SI", "GR", - "DF" + "DF", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1030,7 +1038,8 @@ "TR", "WG", "RP", - "BU" + "BU", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1058,7 +1067,8 @@ "TR", "WG", "MG", - "BU" + "BU", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1109,7 +1119,8 @@ "Settings": [], "IncompatibleMods": [ "TR", - "AD" + "AD", + "DP" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1147,6 +1158,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", From 57ea7e8ffece93cc8210fba17936273cd7547c5a Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 9 Jan 2024 15:22:43 +0900 Subject: [PATCH 08/49] update ziggy --- composer.json | 2 +- composer.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) 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..7beb476f336 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", @@ -10698,16 +10698,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 +10759,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", From 29e125c3d83858804c0f4f8b356d8ec6d28d58d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:31:00 +0000 Subject: [PATCH 09/49] Bump follow-redirects from 1.14.8 to 1.15.4 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.8 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.8...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 371ea648783..42db78bcc0a 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" From a1c848190c47a0a74a93825b1ac9e5ccf9e938ce Mon Sep 17 00:00:00 2001 From: bakaneko Date: Wed, 10 Jan 2024 15:05:26 +0900 Subject: [PATCH 10/49] add ziggy-js npm package; not going to figure out how to combine and make typings from the laravel package work... --- package.json | 3 ++- webpack.config.js | 1 - yarn.lock | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3f8c495efd1..4a583dc71b9 100644 --- a/package.json +++ b/package.json @@ -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/webpack.config.js b/webpack.config.js index 29e5143e004..bbc56de42e2 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: [ diff --git a/yarn.lock b/yarn.lock index 371ea648783..f5f54772f23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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" From 138a37fa073cefe8762b9a2420572cb179a39934 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Wed, 10 Jan 2024 15:18:20 +0900 Subject: [PATCH 11/49] include route types when generating routes --- resources/js/laroute.ts | 6 ++---- resources/js/ziggy.d.ts | 10 ++++------ tests/karma/tsconfig.json | 1 + tsconfig.json | 3 ++- webpack.config.js | 2 +- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/resources/js/laroute.ts b/resources/js/laroute.ts index 7f7f150aa9d..8f54114b2e6 100644 --- a/resources/js/laroute.ts +++ b/resources/js/laroute.ts @@ -3,13 +3,11 @@ import { currentUrl } from 'utils/turbolinks'; import { Ziggy } from 'ziggy'; -import ziggyRoute from 'ziggy-route'; +import route 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(); -} +export { route }; diff --git a/resources/js/ziggy.d.ts b/resources/js/ziggy.d.ts index 7d9d01f2f49..200eb7de3cb 100644 --- a/resources/js/ziggy.d.ts +++ b/resources/js/ziggy.d.ts @@ -2,14 +2,12 @@ // See the LICENCE file in the repository root for full licence text. declare module 'ziggy' { - interface ZiggyClass { + // Reduced version of unexported ziggy Config for typing when setting the port and url. + // Using Parameters[3] doesn't quite work since route has overloaded parameters. + interface ZiggyGlobal { port: number | null; url: string; } - 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: ZiggyGlobal; } 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 bbc56de42e2..fa24df0300a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -293,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'), From 335badc4f5e635363ff2cc6014767e28a1aca448 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Wed, 10 Jan 2024 15:22:48 +0900 Subject: [PATCH 12/49] fix types used for route --- resources/js/components/quick-search-button.tsx | 4 ++-- resources/js/profile-page/cover.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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/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; From 38cf3ac26bbc6155dba27321400652cfb79384fb Mon Sep 17 00:00:00 2001 From: bakaneko Date: Wed, 10 Jan 2024 17:12:33 +0900 Subject: [PATCH 13/49] workaround ziggy not exporting necessary types --- resources/js/beatmap-discussions/post.tsx | 4 ++-- resources/js/laroute.ts | 6 ++++-- resources/js/utils/offset-paginator.ts | 3 ++- resources/js/ziggy.d.ts | 10 ++++++++++ 4 files changed, 18 insertions(+), 5 deletions(-) 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/laroute.ts b/resources/js/laroute.ts index 8f54114b2e6..878ef8e1452 100644 --- a/resources/js/laroute.ts +++ b/resources/js/laroute.ts @@ -3,11 +3,13 @@ import { currentUrl } from 'utils/turbolinks'; import { Ziggy } from 'ziggy'; -import route from 'ziggy-js'; +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 { route }; +export function route(name: T, params?: Partial>, absolute?: boolean) { + return ziggyRoute(name, params, absolute, Ziggy); +} 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 200eb7de3cb..324b3658339 100644 --- a/resources/js/ziggy.d.ts +++ b/resources/js/ziggy.d.ts @@ -11,3 +11,13 @@ declare module 'ziggy' { export const Ziggy: ZiggyGlobal; } + +declare module 'ziggy-js' { + export default function route( + name: T, + // retyping because RouteParams (or RouteName...or all the other useful types) + params?: Partial>, + absolute?: boolean, + config?: import('ziggy').ZiggyGlobal, + ): string; +} From 86a35acaa8f9acbc02809b38996476a9be83bb74 Mon Sep 17 00:00:00 2001 From: nanaya Date: Wed, 10 Jan 2024 17:25:54 +0900 Subject: [PATCH 14/49] Update to php 8.3 --- .github/workflows/tests.yml | 2 +- Dockerfile.deployment | 56 ++-- Dockerfile.development | 28 +- composer.json | 2 +- composer.lock | 549 +++++++++++++++++++++--------------- 5 files changed, 359 insertions(+), 278 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2bc058412c5..26ab8b17285 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -94,7 +94,7 @@ jobs: tests: strategy: matrix: - php: ['8.2'] + php: ['8.3'] name: Tests runs-on: ubuntu-latest steps: diff --git a/Dockerfile.deployment b/Dockerfile.deployment index ec4b8213637..9a2663a0b3c 100644 --- a/Dockerfile.deployment +++ b/Dockerfile.deployment @@ -14,20 +14,20 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ build-essential \ git \ nodejs \ - php8.2 \ - php8.2-common \ - php8.2-curl \ - php8.2-ds \ - php8.2-gd \ - php8.2-intl \ - php8.2-mbstring \ - php8.2-mysql \ - php8.2-redis \ - php8.2-sqlite3 \ - php8.2-swoole \ - php8.2-tokenizer \ - php8.2-xml \ - php8.2-zip \ + php8.3 \ + php8.3-common \ + php8.3-curl \ + php8.3-ds \ + php8.3-gd \ + php8.3-intl \ + php8.3-mbstring \ + php8.3-mysql \ + php8.3-redis \ + php8.3-sqlite3 \ + php8.3-swoole \ + php8.3-tokenizer \ + php8.3-xml \ + php8.3-zip \ zip RUN npm install -g yarn @@ -55,20 +55,20 @@ RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ jhead \ nginx \ - php8.2 \ - php8.2-common \ - php8.2-curl \ - php8.2-ds \ - php8.2-gd \ - php8.2-intl \ - php8.2-mbstring \ - php8.2-mysql \ - php8.2-redis \ - php8.2-sqlite3 \ - php8.2-swoole \ - php8.2-tokenizer \ - php8.2-xml \ - php8.2-zip + php8.3 \ + php8.3-common \ + php8.3-curl \ + php8.3-ds \ + php8.3-gd \ + php8.3-intl \ + php8.3-mbstring \ + php8.3-mysql \ + php8.3-redis \ + php8.3-sqlite3 \ + php8.3-swoole \ + php8.3-tokenizer \ + php8.3-xml \ + php8.3-zip RUN rm -f /var/log/nginx/access.log /var/log/nginx/error.log && \ ln -s /dev/stdout /var/log/nginx/access.log && \ diff --git a/Dockerfile.development b/Dockerfile.development index 8b64edde1a9..7646d7b4da9 100644 --- a/Dockerfile.development +++ b/Dockerfile.development @@ -21,20 +21,20 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ libnss3 \ netcat-openbsd \ nodejs \ - php8.2 \ - php8.2-common \ - php8.2-curl \ - php8.2-ds \ - php8.2-gd \ - php8.2-intl \ - php8.2-mbstring \ - php8.2-mysql \ - php8.2-redis \ - php8.2-sqlite3 \ - php8.2-swoole \ - php8.2-tokenizer \ - php8.2-xml \ - php8.2-zip \ + php8.3 \ + php8.3-common \ + php8.3-curl \ + php8.3-ds \ + php8.3-gd \ + php8.3-intl \ + php8.3-mbstring \ + php8.3-mysql \ + php8.3-redis \ + php8.3-sqlite3 \ + php8.3-swoole \ + php8.3-tokenizer \ + php8.3-xml \ + php8.3-zip \ zip RUN npm install -g yarn diff --git a/composer.json b/composer.json index a77c864bf5a..b5b75934c30 100644 --- a/composer.json +++ b/composer.json @@ -90,7 +90,7 @@ "sort-packages": true, "optimize-autoloader": true, "platform": { - "php": "8.2.0" + "php": "8.3.0" }, "allow-plugins": { "composer/package-versions-deprecated": true, diff --git a/composer.lock b/composer.lock index 1d433d09a0e..3f612b29ec8 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": "2f84d245a3e1b8088367e63178897c56", "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", @@ -13842,7 +13923,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "8.2.0" + "php": "8.3.0" }, "plugin-api-version": "2.6.0" } From 6a471fc892dd1e71f0de8210cc6cc8719d05cf6a Mon Sep 17 00:00:00 2001 From: bakaneko Date: Wed, 10 Jan 2024 19:23:26 +0900 Subject: [PATCH 15/49] missing context in comment --- resources/js/ziggy.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/js/ziggy.d.ts b/resources/js/ziggy.d.ts index 324b3658339..e5ea17acacb 100644 --- a/resources/js/ziggy.d.ts +++ b/resources/js/ziggy.d.ts @@ -15,7 +15,8 @@ declare module 'ziggy' { declare module 'ziggy-js' { export default function route( name: T, - // retyping because RouteParams (or RouteName...or all the other useful types) + // Retyping because RouteParams (or RouteName...or all the other useful types) aren't exported. + // We can't use Parameters either because it uses the last declared overload. params?: Partial>, absolute?: boolean, config?: import('ziggy').ZiggyGlobal, From 9a6e0cd68c4a8a400e67c23044c84b7222746169 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 9 Jan 2024 14:04:33 +0900 Subject: [PATCH 16/49] type as ReactNode and require non-null assignments --- resources/js/components/beatmapset-event.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/js/components/beatmapset-event.tsx b/resources/js/components/beatmapset-event.tsx index b94d61f22ea..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.ReactElement | string = ''; - let discussionUserLink: React.ReactElement | string = '[unknown user]'; - let text: React.ReactElement | string = ''; + let discussionLink: NonNullable = ''; + let discussionUserLink: NonNullable = '[unknown user]'; + let text: NonNullable = ''; let url = ''; - let user: React.ReactElement | string | undefined; + let user: React.ReactNode; if (this.discussionId != null) { if (this.discussion == null) { From 8a84732b13e331eb7589fddb1cd797056e59b706 Mon Sep 17 00:00:00 2001 From: nanaya Date: Wed, 10 Jan 2024 22:47:21 +0900 Subject: [PATCH 17/49] More useful return type for user score legacy preference --- app/Libraries/Search/ScoreSearchParams.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 From 303430447f60c5cb4e657c052fab2d8ed3c0fe3c Mon Sep 17 00:00:00 2001 From: bakaneko Date: Thu, 11 Jan 2024 00:24:05 +0900 Subject: [PATCH 18/49] the generics in the type is kind of important --- resources/js/laroute.ts | 5 ++++- resources/js/ziggy.d.ts | 20 ++------------------ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/resources/js/laroute.ts b/resources/js/laroute.ts index 878ef8e1452..2a7de45e4cb 100644 --- a/resources/js/laroute.ts +++ b/resources/js/laroute.ts @@ -10,6 +10,9 @@ 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: T, params?: Partial>, absolute?: boolean) { +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/ziggy.d.ts b/resources/js/ziggy.d.ts index e5ea17acacb..02b3a20b336 100644 --- a/resources/js/ziggy.d.ts +++ b/resources/js/ziggy.d.ts @@ -2,23 +2,7 @@ // See the LICENCE file in the repository root for full licence text. declare module 'ziggy' { - // Reduced version of unexported ziggy Config for typing when setting the port and url. - // Using Parameters[3] doesn't quite work since route has overloaded parameters. - interface ZiggyGlobal { - port: number | null; - url: string; - } + import route, { RouteList } from 'ziggy-js'; - export const Ziggy: ZiggyGlobal; -} - -declare module 'ziggy-js' { - export default function route( - name: T, - // Retyping because RouteParams (or RouteName...or all the other useful types) aren't exported. - // We can't use Parameters either because it uses the last declared overload. - params?: Partial>, - absolute?: boolean, - config?: import('ziggy').ZiggyGlobal, - ): string; + export const Ziggy: NonNullable>[3]>; } From 8a44dd8f00b711911ee234762e6d025c80f503a7 Mon Sep 17 00:00:00 2001 From: nanaya Date: Thu, 11 Jan 2024 13:44:09 +0900 Subject: [PATCH 19/49] Revert back to php 8.2 More waiting for the php repository to be updated Either that or replace the thing with alpine instead --- .github/workflows/tests.yml | 2 +- Dockerfile.deployment | 56 ++++++++++++++++++------------------- Dockerfile.development | 28 +++++++++---------- composer.json | 2 +- composer.lock | 4 +-- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 26ab8b17285..2bc058412c5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -94,7 +94,7 @@ jobs: tests: strategy: matrix: - php: ['8.3'] + php: ['8.2'] name: Tests runs-on: ubuntu-latest steps: diff --git a/Dockerfile.deployment b/Dockerfile.deployment index 9a2663a0b3c..ec4b8213637 100644 --- a/Dockerfile.deployment +++ b/Dockerfile.deployment @@ -14,20 +14,20 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ build-essential \ git \ nodejs \ - php8.3 \ - php8.3-common \ - php8.3-curl \ - php8.3-ds \ - php8.3-gd \ - php8.3-intl \ - php8.3-mbstring \ - php8.3-mysql \ - php8.3-redis \ - php8.3-sqlite3 \ - php8.3-swoole \ - php8.3-tokenizer \ - php8.3-xml \ - php8.3-zip \ + php8.2 \ + php8.2-common \ + php8.2-curl \ + php8.2-ds \ + php8.2-gd \ + php8.2-intl \ + php8.2-mbstring \ + php8.2-mysql \ + php8.2-redis \ + php8.2-sqlite3 \ + php8.2-swoole \ + php8.2-tokenizer \ + php8.2-xml \ + php8.2-zip \ zip RUN npm install -g yarn @@ -55,20 +55,20 @@ RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ jhead \ nginx \ - php8.3 \ - php8.3-common \ - php8.3-curl \ - php8.3-ds \ - php8.3-gd \ - php8.3-intl \ - php8.3-mbstring \ - php8.3-mysql \ - php8.3-redis \ - php8.3-sqlite3 \ - php8.3-swoole \ - php8.3-tokenizer \ - php8.3-xml \ - php8.3-zip + php8.2 \ + php8.2-common \ + php8.2-curl \ + php8.2-ds \ + php8.2-gd \ + php8.2-intl \ + php8.2-mbstring \ + php8.2-mysql \ + php8.2-redis \ + php8.2-sqlite3 \ + php8.2-swoole \ + php8.2-tokenizer \ + php8.2-xml \ + php8.2-zip RUN rm -f /var/log/nginx/access.log /var/log/nginx/error.log && \ ln -s /dev/stdout /var/log/nginx/access.log && \ diff --git a/Dockerfile.development b/Dockerfile.development index 7646d7b4da9..8b64edde1a9 100644 --- a/Dockerfile.development +++ b/Dockerfile.development @@ -21,20 +21,20 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ libnss3 \ netcat-openbsd \ nodejs \ - php8.3 \ - php8.3-common \ - php8.3-curl \ - php8.3-ds \ - php8.3-gd \ - php8.3-intl \ - php8.3-mbstring \ - php8.3-mysql \ - php8.3-redis \ - php8.3-sqlite3 \ - php8.3-swoole \ - php8.3-tokenizer \ - php8.3-xml \ - php8.3-zip \ + php8.2 \ + php8.2-common \ + php8.2-curl \ + php8.2-ds \ + php8.2-gd \ + php8.2-intl \ + php8.2-mbstring \ + php8.2-mysql \ + php8.2-redis \ + php8.2-sqlite3 \ + php8.2-swoole \ + php8.2-tokenizer \ + php8.2-xml \ + php8.2-zip \ zip RUN npm install -g yarn diff --git a/composer.json b/composer.json index b5b75934c30..a77c864bf5a 100644 --- a/composer.json +++ b/composer.json @@ -90,7 +90,7 @@ "sort-packages": true, "optimize-autoloader": true, "platform": { - "php": "8.3.0" + "php": "8.2.0" }, "allow-plugins": { "composer/package-versions-deprecated": true, diff --git a/composer.lock b/composer.lock index 3f612b29ec8..6efcaae73f1 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": "2f84d245a3e1b8088367e63178897c56", + "content-hash": "c748b63fdc90f32f3850b615cb80eb80", "packages": [ { "name": "anhskohbo/no-captcha", @@ -13923,7 +13923,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "8.3.0" + "php": "8.2.0" }, "plugin-api-version": "2.6.0" } From 64e4fa5b3bb973887fbfec4d03e5bbdf5bfd6989 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Thu, 11 Jan 2024 20:11:23 +0900 Subject: [PATCH 20/49] getBoundingClientRect().height is 0 when navigating via history on first render --- resources/js/beatmap-discussions/new-discussion.tsx | 7 +++++-- resources/js/beatmap-discussions/new-review.tsx | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) 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 { From 6d859791f7b03fd90cc891394951bedf10977e59 Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 12 Jan 2024 16:53:54 +0900 Subject: [PATCH 21/49] Update docker images Use "official" es and mysql images and ignore override file. --- .gitignore | 3 +++ docker-compose.yml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) 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/docker-compose.yml b/docker-compose.yml index 01995066de4..40ce3c0bcc1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -85,7 +85,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 +116,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: From 32e0208fbba04a85635a8e00f37d4df253636d95 Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 12 Jan 2024 17:34:46 +0900 Subject: [PATCH 22/49] Update docker dev documentation - `build --no-cache` is smart enough now to not rebuild same things repeatedly - using `docker compose up` skips dependency update which may cause confusion --- SETUP.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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`: From 432418c6f82bccaa29bd7d3b3eb41a06374c8a46 Mon Sep 17 00:00:00 2001 From: peppy Date: Sat, 13 Jan 2024 06:21:53 +0000 Subject: [PATCH 23/49] Update mod definitions --- database/mods.json | 48 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/database/mods.json b/database/mods.json index 1077fda5a3a..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, @@ -352,7 +354,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -605,6 +608,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AL", "SG", "AT", @@ -1360,7 +1366,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1384,7 +1391,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1520,7 +1528,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -1662,6 +1671,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "SG", "AT", "CN", @@ -1994,7 +2006,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2018,7 +2031,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2153,7 +2167,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2264,6 +2279,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AT", "CN", "RX" @@ -2591,7 +2609,8 @@ ], "IncompatibleMods": [ "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2615,7 +2634,8 @@ "IncompatibleMods": [ "NF", "SD", - "AC" + "AC", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -2788,7 +2808,8 @@ "IncompatibleMods": [ "EZ", "NF", - "PF" + "PF", + "CN" ], "RequiresConfiguration": false, "UserPlayable": true, @@ -3187,6 +3208,9 @@ "Settings": [], "IncompatibleMods": [ "NF", + "SD", + "PF", + "AC", "AT", "CN", "AS" From 336281ef3d72483baef49ecf3e5612cc4d078ec3 Mon Sep 17 00:00:00 2001 From: nanaya Date: Sat, 13 Jan 2024 20:57:21 +0900 Subject: [PATCH 24/49] Fix store shipping text Missed a few things when made localisable in 81e1364000904d40ddcf76bd0fd0a63dd8c2ce54. --- resources/lang/en/store.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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', ], ], From 162eb2b4f644a7c24c26afd1cfe09e24bca4a0bf Mon Sep 17 00:00:00 2001 From: nanaya Date: Sat, 13 Jan 2024 21:13:41 +0900 Subject: [PATCH 25/49] Update github action js lint warning count --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 6d0b07a9567bbfb765229f6543444e2b5dbc8c5a Mon Sep 17 00:00:00 2001 From: nanaya Date: Sat, 13 Jan 2024 21:10:54 +0900 Subject: [PATCH 26/49] Support displaying F rank and make it default for fail scores No small icon but I don't think it's visible anywhere...? --- app/Models/Solo/Score.php | 2 +- resources/js/interfaces/rank.ts | 2 +- resources/js/scores-show/dial.tsx | 1 + resources/js/scores-show/tower.tsx | 1 + tests/Models/Solo/ScoreTest.php | 6 +++--- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/Models/Solo/Score.php b/app/Models/Solo/Score.php index 6b4632a30a2..1c4841b188c 100644 --- a/app/Models/Solo/Score.php +++ b/app/Models/Solo/Score.php @@ -64,7 +64,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(); 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/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/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() From 653221ee86313be11f12f0dd4552fda7c2b514d7 Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Sun, 14 Jan 2024 22:30:04 +0100 Subject: [PATCH 27/49] Fix the chat not checking the month and the year before adding header --- resources/js/chat/conversation-view.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index ab883fff597..0c81af56606 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -46,7 +46,9 @@ export default class ConversationView extends React.Component { const conversationStack: JSX.Element[] = []; let currentGroup: Message[] = []; let unreadMarkerShown = false; - let currentDay: number; + let currentDay: number; + let currentMonth: number; + let currentYear: number; each(channel.messages, (message: Message, key: number) => { // check if the last read indicator needs to be shown @@ -66,13 +68,15 @@ 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) || (moment(message.timestamp).date() !== currentDay && moment(message.timestamp).month() !== currentMonth && moment(message.timestamp).year() !== currentYear)) { // is this less dodgy now OwO? if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; } conversationStack.push(); currentDay = moment(message.timestamp).date(); + currentMonth = moment(message.timestamp).month(); + currentYear = moment(message.timestamp).year(); } // add message to current message grouping if the sender is the same, otherwise create a new message grouping From 0385174a45a6a331a90cf392f1baf89353b288fd Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Sun, 14 Jan 2024 22:35:51 +0100 Subject: [PATCH 28/49] Remove useless comment --- resources/js/chat/conversation-view.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index 0c81af56606..cd635bbe9fb 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -68,7 +68,7 @@ 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 && moment(message.timestamp).month() !== currentMonth && moment(message.timestamp).year() !== currentYear)) { // is this less dodgy now OwO? + if (isEmpty(conversationStack) || (moment(message.timestamp).date() !== currentDay && moment(message.timestamp).month() !== currentMonth && moment(message.timestamp).year() !== currentYear)) { if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; From 469101ef1b6438ccd83fb3d13de2f125324dc610 Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Sun, 14 Jan 2024 23:32:46 +0100 Subject: [PATCH 29/49] Update conversation-view.tsx Use isSame() method to compare the date. --- resources/js/chat/conversation-view.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index cd635bbe9fb..a943ef19815 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -46,9 +46,6 @@ export default class ConversationView extends React.Component { const conversationStack: JSX.Element[] = []; let currentGroup: Message[] = []; let unreadMarkerShown = false; - let currentDay: number; - let currentMonth: number; - let currentYear: number; each(channel.messages, (message: Message, key: number) => { // check if the last read indicator needs to be shown @@ -68,15 +65,12 @@ 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 && moment(message.timestamp).month() !== currentMonth && moment(message.timestamp).year() !== currentYear)) { + if (isEmpty(conversationStack) || moment().isSame(message.timestamp, 'day')) { if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; } conversationStack.push(); - currentDay = moment(message.timestamp).date(); - currentMonth = moment(message.timestamp).month(); - currentYear = moment(message.timestamp).year(); } // add message to current message grouping if the sender is the same, otherwise create a new message grouping From a93a4398c46b4715fb4c48f35bfcba3f06797100 Mon Sep 17 00:00:00 2001 From: nanaya Date: Mon, 15 Jan 2024 18:00:49 +0900 Subject: [PATCH 30/49] Add icon for F Not in the "tower" as it's not an achievement. --- .../badges/score-ranks-v2019/GradeSmall-F.svg | 22 +++++++++++++++++++ resources/css/bem/score-rank.less | 17 +++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 public/images/badges/score-ranks-v2019/GradeSmall-F.svg 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(); From 530eb1df8470220066212b6950128fed5a096656 Mon Sep 17 00:00:00 2001 From: nanaya Date: Mon, 15 Jan 2024 19:27:35 +0900 Subject: [PATCH 31/49] Convert ScoreRank to enum --- app/Enums/ScoreRank.php | 19 +++++++++++++++++++ app/Libraries/ScoreRank.php | 16 ---------------- app/Models/Solo/ScoreData.php | 4 ++-- 3 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 app/Enums/ScoreRank.php delete mode 100644 app/Libraries/ScoreRank.php 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/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/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."); } From badbbbe5b8148ce4bacfec62393ae0bc640dc458 Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Mon, 15 Jan 2024 18:33:58 +0100 Subject: [PATCH 32/49] Fix the comparison which was incorrect --- resources/js/chat/conversation-view.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index a943ef19815..57ef2310b2e 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -46,6 +46,7 @@ export default class ConversationView extends React.Component { const conversationStack: JSX.Element[] = []; let currentGroup: Message[] = []; let unreadMarkerShown = false; + let currentDay: string; each(channel.messages, (message: Message, key: number) => { // check if the last read indicator needs to be shown @@ -65,12 +66,13 @@ export default class ConversationView extends React.Component { } // check whether the day-change header needs to be shown - if (isEmpty(conversationStack) || moment().isSame(message.timestamp, 'day')) { + if (isEmpty(conversationStack) || !(moment(message.timestamp).isSame(currentDay, 'day'))) { if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; } conversationStack.push(); + currentDay = moment(message.timestamp).toISOString(); } // add message to current message grouping if the sender is the same, otherwise create a new message grouping From b45d40480b0cb6b619a5dbd5c5877869063ea746 Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Mon, 15 Jan 2024 23:05:12 +0100 Subject: [PATCH 33/49] Change how currentDay is stored and don't ignore the timezone. --- resources/js/chat/conversation-view.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index 57ef2310b2e..9716b244b1a 100644 --- a/resources/js/chat/conversation-view.tsx +++ b/resources/js/chat/conversation-view.tsx @@ -66,13 +66,13 @@ export default class ConversationView extends React.Component { } // check whether the day-change header needs to be shown - if (isEmpty(conversationStack) || !(moment(message.timestamp).isSame(currentDay, 'day'))) { + if (isEmpty(conversationStack) || new Date(message.timestamp).toLocaleDateString() !== currentDay) { if (!isEmpty(currentGroup)) { conversationStack.push(); currentGroup = []; } conversationStack.push(); - currentDay = moment(message.timestamp).toISOString(); + currentDay = new Date(message.timestamp).toLocaleDateString(); } // add message to current message grouping if the sender is the same, otherwise create a new message grouping From 0c51ae8376232b30c221e62c6dadb299afcb5655 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 16 Jan 2024 13:40:04 +0900 Subject: [PATCH 34/49] Update translations from crowdin --- resources/lang/ar/authorization.php | 2 +- resources/lang/ar/bbcode.php | 2 +- resources/lang/ar/beatmappacks.php | 4 +- resources/lang/ar/beatmaps.php | 22 ++-- resources/lang/ar/beatmapset_events.php | 2 +- resources/lang/ar/beatmapsets.php | 2 +- resources/lang/ar/comments.php | 4 +- resources/lang/ar/community.php | 2 +- resources/lang/ar/events.php | 2 +- resources/lang/ar/forum.php | 2 +- resources/lang/ar/legacy_api_key.php | 14 +-- resources/lang/ar/legacy_irc_key.php | 20 +-- resources/lang/ar/model_validation.php | 4 +- resources/lang/ar/notifications.php | 10 +- resources/lang/ar/rankings.php | 8 +- resources/lang/ar/store.php | 72 +++++------ resources/lang/ar/users.php | 16 +-- resources/lang/ca/artist.php | 2 +- resources/lang/cs/accounts.php | 12 +- resources/lang/cs/beatmap_discussions.php | 2 +- resources/lang/cs/comments.php | 2 +- resources/lang/cs/events.php | 2 +- resources/lang/cs/store.php | 24 ++-- resources/lang/de/accounts.php | 2 +- resources/lang/de/users.php | 2 +- resources/lang/es/accounts.php | 2 +- resources/lang/es/artist.php | 2 +- resources/lang/es/authorization.php | 4 +- resources/lang/es/beatmappacks.php | 4 +- resources/lang/es/beatmaps.php | 42 +++---- resources/lang/es/beatmapset_events.php | 24 ++-- resources/lang/es/changelog.php | 2 +- resources/lang/es/client_verifications.php | 6 +- resources/lang/es/community.php | 6 +- resources/lang/es/events.php | 2 +- resources/lang/es/forum.php | 36 +++--- resources/lang/es/friends.php | 4 +- resources/lang/es/home.php | 24 ++-- resources/lang/es/livestreams.php | 2 +- resources/lang/es/mail.php | 4 +- resources/lang/es/model_validation.php | 2 +- .../lang/es/model_validation/fulfillments.php | 2 +- resources/lang/es/notifications.php | 116 +++++++++--------- resources/lang/es/page_title.php | 2 +- resources/lang/es/store.php | 8 +- resources/lang/es/users.php | 6 +- resources/lang/fi/authorization.php | 2 +- resources/lang/fi/beatmap_discussions.php | 2 +- resources/lang/fi/beatmappacks.php | 6 +- resources/lang/fi/beatmaps.php | 2 +- resources/lang/fi/beatmapsets.php | 2 +- resources/lang/fi/community.php | 56 ++++----- resources/lang/fi/home.php | 2 +- resources/lang/fi/layout.php | 8 +- resources/lang/fi/mail.php | 6 +- resources/lang/fi/store.php | 8 +- resources/lang/fi/users.php | 6 +- resources/lang/id/accounts.php | 2 +- resources/lang/id/beatmaps.php | 6 +- resources/lang/id/community.php | 10 +- resources/lang/id/legacy_api_key.php | 8 +- resources/lang/id/mail.php | 6 +- resources/lang/id/oauth.php | 2 +- resources/lang/id/store.php | 20 +-- resources/lang/it/store.php | 12 +- resources/lang/it/users.php | 4 +- resources/lang/nl/comments.php | 2 +- resources/lang/nl/notifications.php | 4 +- resources/lang/nl/store.php | 10 +- resources/lang/nl/users.php | 2 +- resources/lang/ro/users.php | 2 +- resources/lang/ru/beatmapsets.php | 2 +- resources/lang/ru/users.php | 16 +-- resources/lang/sk/accounts.php | 24 ++-- resources/lang/sk/api.php | 4 +- resources/lang/sk/authorization.php | 20 +-- resources/lang/tr/beatmap_discussions.php | 2 +- resources/lang/tr/comments.php | 2 +- resources/lang/tr/store.php | 22 ++-- resources/lang/tr/users.php | 10 +- resources/lang/uk/sort.php | 2 +- resources/lang/zh-tw/comments.php | 2 +- resources/lang/zh-tw/notifications.php | 6 +- resources/lang/zh-tw/store.php | 42 +++---- resources/lang/zh-tw/users.php | 2 +- resources/lang/zh/events.php | 2 +- 86 files changed, 442 insertions(+), 442 deletions(-) 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/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! - 感谢您的慷慨捐赠!', From 90d24328350d24c52bdd2f57888d920cb1603685 Mon Sep 17 00:00:00 2001 From: Corne2Plum3 <57914482+Corne2Plum3@users.noreply.github.com> Date: Tue, 16 Jan 2024 08:04:03 +0100 Subject: [PATCH 35/49] Remove unused library --- resources/js/chat/conversation-view.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/js/chat/conversation-view.tsx b/resources/js/chat/conversation-view.tsx index 9716b244b1a..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'; From d9d69695e9b320fd30192e4f07f5f0ff2f7124e7 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 16 Jan 2024 16:52:59 +0900 Subject: [PATCH 36/49] fix initialization order usage --- resources/js/core/timeago.ts | 8 ++++---- resources/js/notifications/notification-controller.ts | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) 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/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; From bb739944f694f009d80cc64fe2cf46566688decb Mon Sep 17 00:00:00 2001 From: nanaya Date: Tue, 16 Jan 2024 18:34:11 +0900 Subject: [PATCH 37/49] Log successful login --- app/Models/LoginAttempt.php | 8 ++------ tests/Controllers/SessionsControllerTest.php | 1 + 2 files changed, 3 insertions(+), 6 deletions(-) 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/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, From cc710819f243b35056a6c7671ba172f7c5ac2835 Mon Sep 17 00:00:00 2001 From: nanaya Date: Thu, 18 Jan 2024 23:50:18 +0900 Subject: [PATCH 38/49] Fix browser test on docker dev --- .env.dusk.local.example | 4 +- docker-compose.yml | 9 +++++ docker/development/entrypoint.sh | 6 +-- docker/development/nginx-default.conf | 54 ++++++++++++++------------- 4 files changed, 42 insertions(+), 31 deletions(-) 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/docker-compose.yml b/docker-compose.yml index 40ce3c0bcc1..6e7fa320e9a 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'] @@ -136,6 +144,7 @@ services: image: nginx:latest depends_on: - php + - php-dusk - notification-server - notification-server-dusk volumes: 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; } } From 17aa8d9aa14a8c4374f4d3da8c7c869ddfeacf48 Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 19 Jan 2024 14:39:44 +0900 Subject: [PATCH 39/49] Mark user active on password reset Seems to make more sense. Also avoids reset re-triggering forced reactivation if the redirect never happens and the user logs in again from a different session. --- .../Controllers/PasswordResetController.php | 2 ++ .../PasswordResetControllerTest.php | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) 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/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(); From 2d6a54ac6e74a16e550812b6b5483845a710b747 Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 19 Jan 2024 17:58:37 +0900 Subject: [PATCH 40/49] Add message on forced password reset Also fixed bug where ujs redirect conflicts with user login handler. --- app/Http/Controllers/SessionsController.php | 5 +++++ app/Libraries/User/ForceReactivation.php | 5 +++++ resources/js/core/user/user-login.ts | 6 +++++- resources/lang/en/password_reset.php | 3 +++ resources/views/password_reset/index.blade.php | 15 ++++++++++++++- 5 files changed, 32 insertions(+), 2 deletions(-) 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/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/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/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/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 From 7deab46016c850ce67573042475927eb0c040b99 Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 19 Jan 2024 22:10:46 +0900 Subject: [PATCH 41/49] Reduce assets generation verbosity --- package.json | 2 +- resources/js/cli/generate-localizations.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4a583dc71b9..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", 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() { From 5c89c1870e7eef131b3823c7043d82498c1eed70 Mon Sep 17 00:00:00 2001 From: Agatem Date: Fri, 19 Jan 2024 20:07:49 +0100 Subject: [PATCH 42/49] Update the osu! team link --- app/helpers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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'), From 72a4430a092c0d0bce808838df0c8a9f29fbc0b2 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 23 Jan 2024 14:49:22 +0900 Subject: [PATCH 43/49] deprecate User.active_tournament_banner response --- app/Transformers/UserCompactTransformer.php | 2 +- resources/views/docs/_structures/user.md | 3 ++- resources/views/docs/info.md.blade.php | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) 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/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index 56e706c5a85..eeda2296c9e 100644 --- a/resources/views/docs/_structures/user.md +++ b/resources/views/docs/_structures/user.md @@ -41,7 +41,8 @@ Following are attributes which may be additionally included in the response. Rel Field | Type ---------------------------|----- account_history | [User.UserAccountHistory](#user-useraccounthistory)[] -active_tournament_banner | [User.ProfileBanner](#user-profilebanner)? +active_tournament_banner | Deprecated, use `active_tournament_banners` instead. [User.ProfileBanner](#user-profilebanner)? +active_tournament_banners | [User.ProfileBanner](#user-profilebanner)[] badges | [User.UserBadge](#user-userbadge)[] beatmap_playcounts_count | integer blocks | | 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. From fcf4bc22fc88a7d0e04e72494ad7a7e64b5a33c1 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 23 Jan 2024 14:50:51 +0900 Subject: [PATCH 44/49] don't hypenate code blocks --- resources/css/entrypoints/docs.less | 3 --- 1 file changed, 3 deletions(-) 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, From a01ebd0751f58cdc276227168f10606a2cd0bf7e Mon Sep 17 00:00:00 2001 From: nanaya Date: Fri, 26 Jan 2024 05:32:07 +0900 Subject: [PATCH 45/49] Use older indexer version Until the score structure update is merged. --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6e7fa320e9a..c2e1ddab56a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -154,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: @@ -168,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: From 2b664b53af842202b51d81f79a625d949548b53e Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 23 Jan 2024 19:11:52 +0900 Subject: [PATCH 46/49] add a column for notes; ...not sure if good idea --- resources/views/docs/_structures/user.md | 76 ++++++++++++------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index eeda2296c9e..f7be8d426d4 100644 --- a/resources/views/docs/_structures/user.md +++ b/resources/views/docs/_structures/user.md @@ -38,44 +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 | Deprecated, use `active_tournament_banners` instead. [User.ProfileBanner](#user-profilebanner)? -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 | | +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 | | | |
From 9984619a16c82e7a609e12cd2727f1bdf6c97c78 Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 23 Jan 2024 19:18:52 +0900 Subject: [PATCH 47/49] fun pipes --- resources/views/docs/_structures/user.md | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index f7be8d426d4..8429e698e21 100644 --- a/resources/views/docs/_structures/user.md +++ b/resources/views/docs/_structures/user.md @@ -45,13 +45,13 @@ active_tournament_banner | [User.ProfileBanner](#user-profilebanner)? | Deprec active_tournament_banners | [User.ProfileBanner](#user-profilebanner)[] | | badges | [User.UserBadge](#user-userbadge)[] | | beatmap_playcounts_count | integer | | -blocks | | | | -country | | | | -cover | | | | +blocks | | | +country | | | +cover | | | favourite_beatmapset_count | integer | | follow_user_mapping | integer[] | | follower_count | integer | | -friends | | | | +friends | | | graveyard_beatmapset_count | integer | | groups | [UserGroup](#usergroup)[] | | guest_beatmapset_count | integer | | @@ -60,22 +60,22 @@ kudosu | [User.Kudosu](#user-kudosu) | | loved_beatmapset_count | integer | | mapping_follower_count | integer | | monthly_playcounts | [UserMonthlyPlaycount](#usermonthlyplaycount)[] | | -page | | | | -pending_beatmapset_count | | | | -previous_usernames | | | | +page | | | +pending_beatmapset_count | | | +previous_usernames | | | rank_highest | [User.RankHighest](#user-rankhighest)? | | -rank_history | | | | -ranked_beatmapset_count | | | | -replays_watched_counts | | | | +rank_history | | | +ranked_beatmapset_count | | | +replays_watched_counts | | | scores_best_count | integer | | scores_first_count | integer | | scores_recent_count | integer | | -statistics | | | | +statistics | | | statistics_rulesets | UserStatisticsRulesets | | -support_level | | | | -unread_pm_count | | | | -user_achievements | | | | -user_preferences | | | | +support_level | | | +unread_pm_count | | | +user_achievements | | | +user_preferences | | |
From d1be160452c3439efbdd36ee7390c541cc2ca53a Mon Sep 17 00:00:00 2001 From: bakaneko Date: Tue, 23 Jan 2024 19:19:10 +0900 Subject: [PATCH 48/49] fix empty cell --- resources/views/docs/_structures/user.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index 8429e698e21..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 From 7b7c15329e432cf760490c59c3b422f2692663c9 Mon Sep 17 00:00:00 2001 From: nanaya Date: Wed, 24 Jan 2024 17:26:34 +0900 Subject: [PATCH 49/49] Configurable score processing queue --- .env.example | 1 + app/Models/Solo/Score.php | 4 +--- config/osu.php | 1 + tests/Controllers/Solo/ScoresControllerTest.php | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) 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/app/Models/Solo/Score.php b/app/Models/Solo/Score.php index 1c4841b188c..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 = [ @@ -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/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/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']); } }