Translate track search publishing type and status

This commit is contained in:
schroda
2025-05-30 22:55:57 +02:00
parent c2391f0903
commit 3bff11d8a9
5 changed files with 136 additions and 6 deletions

View File

@@ -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": {

View File

@@ -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<Theme> = {
padding: DIALOG_PADDING,
...CARD_BACKGROUND,
};
export const PUBLISHING_TYPE_TO_TRANSLATION: Record<PublishingType, TranslationKey> = {
[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, TranslationKey> = {
[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',
};

View File

@@ -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',
}

View File

@@ -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 }) => (
<Stack
@@ -170,13 +174,19 @@ export const TrackerMangaCard = ({
<TrackerMangaCardTitle title={manga.title} selected={selected} />
</TrackerMangaCardLink>
{manga.publishingType && (
<Metadata title={t('global.label.type')} value={manga.publishingType} />
<Metadata
title={t('global.label.type')}
value={t(PUBLISHING_TYPE_TO_TRANSLATION[Trackers.getPublishingType(manga)])}
/>
)}
{manga.startDate && (
<Metadata title={t('global.label.started')} value={manga.startDate} />
)}
{manga.publishingStatus && (
<Metadata title={t('manga.label.status')} value={manga.publishingStatus} />
<Metadata
title={t('manga.label.status')}
value={t(PUBLISHING_STATUS_TO_TRANSLATION[Trackers.getPublishingStatus(manga)])}
/>
)}
</Stack>
</Stack>

View File

@@ -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<TrackerType, 'id'>;
type LoggedInInfo = Pick<TrackerType, 'isLoggedIn' | 'isTokenExpired'>;
type TrackRecordTrackerInfo = Pick<TrackRecordType, 'trackerId'>;
type TrackSearchPublishingTypeInfo = Pick<TrackSearchType, 'publishingType'>;
type TrackSearchPublishingStatusInfo = Pick<TrackSearchType, 'publishingStatus'>;
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 extends TrackSearchPublishingTypeInfo>(
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 extends TrackSearchPublishingStatusInfo>(
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;
}
}
}