From 89c6c4d9711cff1365b59a7a9305ed8080afc749 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 11 Dec 2024 19:28:54 +0100 Subject: [PATCH] Fix formating authors --- apps/readest-app/src/services/appService.ts | 2 +- apps/readest-app/src/utils/book.ts | 24 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/apps/readest-app/src/services/appService.ts b/apps/readest-app/src/services/appService.ts index d3d20ae9..6af61d86 100644 --- a/apps/readest-app/src/services/appService.ts +++ b/apps/readest-app/src/services/appService.ts @@ -136,7 +136,7 @@ export abstract class BaseAppService implements AppService { hash, format, title: formatTitle(loadedBook.metadata.title), - author: formatAuthors(loadedBook.metadata.author), + author: formatAuthors(loadedBook.metadata.language, loadedBook.metadata.author), lastUpdated: Date.now(), }; if (!(await this.fs.exists(getDir(book), 'Books'))) { diff --git a/apps/readest-app/src/utils/book.ts b/apps/readest-app/src/utils/book.ts index d9b1f74b..b07ff95a 100644 --- a/apps/readest-app/src/utils/book.ts +++ b/apps/readest-app/src/utils/book.ts @@ -46,11 +46,29 @@ const formatLanguageMap = (x: string | LanguageMap): string => { return x[userLang] || x[keys[0]!]!; }; -const listFormat = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' }); +const listFormat = (lang: string) => { + if (lang === 'zh') { + return new Intl.ListFormat('en', { style: 'narrow', type: 'unit' }); + } else { + return new Intl.ListFormat(lang, { style: 'long', type: 'conjunction' }); + } +}; -export const formatAuthors = (contributors: string | Contributor | [string | Contributor]) => +const getBookLangCode = (lang: string | string[] | undefined) => { + try { + const bookLang = typeof lang === 'string' ? lang : lang?.[0]; + return bookLang ? bookLang.split('-')[0]! : 'en'; + } catch { + return 'en'; + } +}; + +export const formatAuthors = ( + bookLang: string | string[] | undefined, + contributors: string | Contributor | [string | Contributor], +) => Array.isArray(contributors) - ? listFormat.format( + ? listFormat(getBookLangCode(bookLang)).format( contributors.map((contributor) => typeof contributor === 'string' ? contributor : formatLanguageMap(contributor?.name), ),