From 3bff11d8a9e3e6aab5304b948af27d277718c965 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Fri, 30 May 2025 22:55:57 +0200 Subject: [PATCH] Translate track search publishing type and status --- public/locales/en.json | 27 ++++++++- src/modules/tracker/Tracker.constants.ts | 23 ++++++++ src/modules/tracker/Tracker.types.ts | 21 +++++++ .../components/cards/TrackerMangaCard.tsx | 16 +++++- src/modules/tracker/services/Trackers.ts | 55 +++++++++++++++++++ 5 files changed, 136 insertions(+), 6 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index 5ffebe2b..d9ea8a80 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -154,10 +154,10 @@ "downloaded": "Downloaded" } }, - "value_one": "{{count}} chapter", - "value_other": "{{count}} chapters", "title_one": "Chapter", - "title_other": "Chapters" + "title_other": "Chapters", + "value_one": "{{count}} chapter", + "value_other": "{{count}} chapters" }, "download": { "queue": { @@ -1537,6 +1537,27 @@ } } }, + "publishing": { + "status": { + "cancelled": "$(manga.status.cancelled)", + "currently_publishing": "Currently publishing", + "finished": "$t(global.label.finished)", + "hiatus": "$(manga.status.hiatus)", + "not_yet_published": "Not yet published", + "not_yet_released": "Not yet released", + "releasing": "Releasing" + }, + "type": { + "doujinshi": "Doujinshi", + "manga": "$t(manga.title_one)", + "manhua": "$t(manga.type.manhwa)", + "manhwa": "$t(manga.type.manhwa)", + "novel": "Novel", + "oel": "OEL", + "one_shot": "Oneshot", + "unknown": "$t(global.label.unknown)" + } + }, "settings": { "dialog": { "title": { diff --git a/src/modules/tracker/Tracker.constants.ts b/src/modules/tracker/Tracker.constants.ts index 6348a701..bdeac8ba 100644 --- a/src/modules/tracker/Tracker.constants.ts +++ b/src/modules/tracker/Tracker.constants.ts @@ -7,6 +7,8 @@ */ import { SxProps, Theme } from '@mui/material/styles'; +import { PublishingStatus, PublishingType } from '@/modules/tracker/Tracker.types.ts'; +import { TranslationKey } from '@/Base.types.ts'; export const DIALOG_PADDING: number = 2; @@ -20,3 +22,24 @@ export const CARD_STYLING: SxProps = { padding: DIALOG_PADDING, ...CARD_BACKGROUND, }; + +export const PUBLISHING_TYPE_TO_TRANSLATION: Record = { + [PublishingType.UNKNOWN]: 'tracking.publishing.type.unknown', + [PublishingType.MANGA]: 'tracking.publishing.type.manga', + [PublishingType.NOVEL]: 'tracking.publishing.type.novel', + [PublishingType.ONE_SHOT]: 'tracking.publishing.type.one_shot', + [PublishingType.DOUJINSHI]: 'tracking.publishing.type.doujinshi', + [PublishingType.MANHWA]: 'tracking.publishing.type.manhwa', + [PublishingType.MANHUA]: 'tracking.publishing.type.manhua', + [PublishingType.OEL]: 'tracking.publishing.type.oel', +}; + +export const PUBLISHING_STATUS_TO_TRANSLATION: Record = { + [PublishingStatus.FINISHED]: 'tracking.publishing.status.finished', + [PublishingStatus.RELEASING]: 'tracking.publishing.status.releasing', + [PublishingStatus.NOT_YET_RELEASED]: 'tracking.publishing.status.not_yet_released', + [PublishingStatus.CANCELLED]: 'tracking.publishing.status.cancelled', + [PublishingStatus.HIATUS]: 'tracking.publishing.status.hiatus', + [PublishingStatus.CURRENTLY_PUBLISHING]: 'tracking.publishing.status.currently_publishing', + [PublishingStatus.NOT_YET_PUBLISHED]: 'tracking.publishing.status.not_yet_published', +}; diff --git a/src/modules/tracker/Tracker.types.ts b/src/modules/tracker/Tracker.types.ts index eb2df7c4..986605f7 100644 --- a/src/modules/tracker/Tracker.types.ts +++ b/src/modules/tracker/Tracker.types.ts @@ -10,3 +10,24 @@ export type MetadataTrackingSettings = { updateProgressAfterReading: boolean; updateProgressManualMarkRead: boolean; }; + +export enum PublishingType { + UNKNOWN = 'unknown', + MANGA = 'manga', + NOVEL = 'novel', + ONE_SHOT = 'one_shot', + DOUJINSHI = 'doujinshi', + MANHWA = 'manhwa', + MANHUA = 'manhua', + OEL = 'oel', +} + +export enum PublishingStatus { + FINISHED = 'finished', + RELEASING = 'releasing', + NOT_YET_RELEASED = 'not_yet_released', + CANCELLED = 'cancelled', + HIATUS = 'hiatus', + CURRENTLY_PUBLISHING = 'currently_publishing', + NOT_YET_PUBLISHED = 'not_yet_published', +} diff --git a/src/modules/tracker/components/cards/TrackerMangaCard.tsx b/src/modules/tracker/components/cards/TrackerMangaCard.tsx index 9aa4a228..79713855 100644 --- a/src/modules/tracker/components/cards/TrackerMangaCard.tsx +++ b/src/modules/tracker/components/cards/TrackerMangaCard.tsx @@ -26,9 +26,13 @@ import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx'; import { TypographyMaxLines } from '@/modules/core/components/texts/TypographyMaxLines.tsx'; import { Metadata } from '@/modules/core/components/texts/Metadata.tsx'; import { MediaQuery } from '@/modules/core/utils/MediaQuery.tsx'; -import { TTrackerManga } from '@/modules/tracker/services/Trackers.ts'; +import { Trackers, TTrackerManga } from '@/modules/tracker/services/Trackers.ts'; import { MANGA_COVER_ASPECT_RATIO } from '@/modules/manga/Manga.constants.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; +import { + PUBLISHING_STATUS_TO_TRANSLATION, + PUBLISHING_TYPE_TO_TRANSLATION, +} from '@/modules/tracker/Tracker.constants.ts'; const TrackerMangaCardTitle = ({ title, selected }: { title: string; selected: boolean }) => ( {manga.publishingType && ( - + )} {manga.startDate && ( )} {manga.publishingStatus && ( - + )} diff --git a/src/modules/tracker/services/Trackers.ts b/src/modules/tracker/services/Trackers.ts index 4e782b62..f4b8a0d0 100644 --- a/src/modules/tracker/services/Trackers.ts +++ b/src/modules/tracker/services/Trackers.ts @@ -7,6 +7,7 @@ */ import { TrackerType, TrackRecordType, TrackSearchType } from '@/lib/graphql/generated/graphql.ts'; +import { PublishingStatus, PublishingType } from '@/modules/tracker/Tracker.types.ts'; export enum Tracker { MYANIMELIST = 1, @@ -53,6 +54,8 @@ type TrackerIdInfo = Pick; type LoggedInInfo = Pick; type TrackRecordTrackerInfo = Pick; +type TrackSearchPublishingTypeInfo = Pick; +type TrackSearchPublishingStatusInfo = Pick; export class Trackers { static getIds(trackers: TrackerIdInfo[]): number[] { @@ -90,4 +93,56 @@ export class Trackers { ): TrackRecord | undefined { return trackRecords.find((trackRecord) => trackRecord.trackerId === tracker.id); } + + static getPublishingType( + trackSearch: TrackSearch, + ): PublishingType { + const type = trackSearch.publishingType.toLowerCase().replaceAll(' ', '_'); + + switch (type) { + case PublishingType.UNKNOWN: + return PublishingType.UNKNOWN; + case PublishingType.MANGA: + return PublishingType.MANGA; + case PublishingType.NOVEL: + return PublishingType.NOVEL; + case PublishingType.ONE_SHOT: + return PublishingType.ONE_SHOT; + case PublishingType.DOUJINSHI: + return PublishingType.DOUJINSHI; + case PublishingType.MANHWA: + return PublishingType.MANHWA; + case PublishingType.MANHUA: + return PublishingType.MANHUA; + case PublishingType.OEL: + return PublishingType.OEL; + default: + return trackSearch.publishingType as PublishingType; + } + } + + static getPublishingStatus( + trackSearch: TrackSearch, + ): PublishingStatus { + const status = trackSearch.publishingStatus.toLowerCase().replaceAll(' ', '_'); + + switch (status) { + case PublishingStatus.FINISHED: + return PublishingStatus.FINISHED; + case PublishingStatus.RELEASING: + return PublishingStatus.RELEASING; + case PublishingStatus.NOT_YET_RELEASED: + return PublishingStatus.NOT_YET_RELEASED; + case PublishingStatus.CANCELLED: + return PublishingStatus.CANCELLED; + case PublishingStatus.HIATUS: + return PublishingStatus.HIATUS; + case PublishingStatus.CURRENTLY_PUBLISHING: + return PublishingStatus.CURRENTLY_PUBLISHING; + case PublishingStatus.NOT_YET_PUBLISHED: + return PublishingStatus.NOT_YET_PUBLISHED; + default: + return trackSearch.publishingStatus as PublishingStatus; + } + } }