Replace raw string by translated strings
This commit is contained in:
		
							parent
							
								
									0b97d9f73d
								
							
						
					
					
						commit
						b2b2b00735
					
				| @ -325,6 +325,12 @@ export function AppLayout(props: Immutable<Props>): JSX.Element { | ||||
|                             ]) | ||||
|                           ) | ||||
|                     } | ||||
|                     insertLabels={ | ||||
|                       new Map([ | ||||
|                         [0, langui.primary_language], | ||||
|                         [1, langui.secondary_language], | ||||
|                       ]) | ||||
|                     } | ||||
|                     onChange={(items) => { | ||||
|                       const preferredLanguages = [...items].map( | ||||
|                         ([code]) => code | ||||
|  | ||||
| @ -5,6 +5,7 @@ import { useEffect, useState } from "react"; | ||||
| interface Props { | ||||
|   className?: string; | ||||
|   items: Map<string, string>; | ||||
|   insertLabels?: Map<number, string | null | undefined>; | ||||
|   onChange?: (items: Map<string, string>) => void; | ||||
| } | ||||
| 
 | ||||
| @ -25,12 +26,8 @@ export function OrderableList(props: Immutable<Props>): JSX.Element { | ||||
|     <div className="grid gap-2"> | ||||
|       {[...items].map(([key, value], index) => ( | ||||
|         <> | ||||
|           {index === 0 ? ( | ||||
|             <p>Primary language</p> | ||||
|           ) : index === 1 ? ( | ||||
|             <p>Secondary languages</p> | ||||
|           ) : ( | ||||
|             "" | ||||
|           {props.insertLabels?.get(index) && ( | ||||
|             <p>{props.insertLabels.get(index)}</p> | ||||
|           )} | ||||
|           <div | ||||
|             onDragStart={(event) => { | ||||
|  | ||||
| @ -31,7 +31,7 @@ export function ScanSetCover(props: Immutable<Props>): JSX.Element { | ||||
|   const [selectedScan, LanguageSwitcher] = useSmartLanguage({ | ||||
|     items: images, | ||||
|     languages: languages, | ||||
|     languageExtractor: (item) => item?.language?.data?.attributes?.code, | ||||
|     languageExtractor: (item) => item.language?.data?.attributes?.code, | ||||
|   }); | ||||
| 
 | ||||
|   const coverImages: UploadImageFragment[] = []; | ||||
|  | ||||
| @ -132,6 +132,19 @@ query getWebsiteInterface($language_code: String) { | ||||
|         response_invalid_code | ||||
|         response_invalid_email | ||||
|         response_email_success | ||||
|         always_show_info | ||||
|         item_not_available | ||||
|         primary_language | ||||
|         secondary_language | ||||
|         combine_related_contents | ||||
|         previous_content | ||||
|         followup_content | ||||
|         videos | ||||
|         view_on | ||||
|         channel | ||||
|         subscribers | ||||
|         description | ||||
|         available_at | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -36,7 +36,7 @@ export default function Channel(props: Props): JSX.Element { | ||||
|     <SubPanel> | ||||
|       <ReturnButton | ||||
|         href="/archives/videos/" | ||||
|         title={"Videos"} | ||||
|         title={langui.videos} | ||||
|         langui={langui} | ||||
|         displayOn={ReturnButtonType.desktop} | ||||
|         className="mb-10" | ||||
| @ -44,12 +44,12 @@ export default function Channel(props: Props): JSX.Element { | ||||
| 
 | ||||
|       <PanelHeader | ||||
|         icon="movie" | ||||
|         title="Videos" | ||||
|         title={langui.videos} | ||||
|         description={langui.archives_description} | ||||
|       /> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|         <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|       </div> | ||||
|     </SubPanel> | ||||
|  | ||||
| @ -67,7 +67,7 @@ export default function Videos(props: Props): JSX.Element { | ||||
|       /> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|         <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|       </div> | ||||
|     </SubPanel> | ||||
|  | ||||
| @ -39,7 +39,7 @@ export default function Video(props: Props): JSX.Element { | ||||
|     <SubPanel> | ||||
|       <ReturnButton | ||||
|         href="/archives/videos/" | ||||
|         title={"Videos"} | ||||
|         title={langui.videos} | ||||
|         langui={langui} | ||||
|         displayOn={ReturnButtonType.desktop} | ||||
|         className="mb-10" | ||||
| @ -55,14 +55,14 @@ export default function Video(props: Props): JSX.Element { | ||||
|       /> | ||||
| 
 | ||||
|       <NavOption | ||||
|         title={"Channel"} | ||||
|         title={langui.channel} | ||||
|         url="#channel" | ||||
|         border | ||||
|         onClick={() => appLayout.setSubPanelOpen(false)} | ||||
|       /> | ||||
| 
 | ||||
|       <NavOption | ||||
|         title={"Description"} | ||||
|         title={langui.description} | ||||
|         url="#description" | ||||
|         border | ||||
|         onClick={() => appLayout.setSubPanelOpen(false)} | ||||
| @ -135,7 +135,7 @@ export default function Video(props: Props): JSX.Element { | ||||
|                 target="_blank" | ||||
|                 rel="noreferrer" | ||||
|               > | ||||
|                 <Button className="!py-0 !px-3">{`View on ${video.source}`}</Button> | ||||
|                 <Button className="!py-0 !px-3">{`${langui.view_on} ${video.source}`}</Button> | ||||
|               </a> | ||||
|             </div> | ||||
|           </div> | ||||
| @ -144,7 +144,7 @@ export default function Video(props: Props): JSX.Element { | ||||
|         {video.channel?.data?.attributes && ( | ||||
|           <InsetBox id="channel" className="grid place-items-center"> | ||||
|             <div className="w-[clamp(0px,100%,42rem)] grid place-items-center gap-4 text-center"> | ||||
|               <h2 className="text-2xl">{"Channel"}</h2> | ||||
|               <h2 className="text-2xl">{langui.channel}</h2> | ||||
|               <div> | ||||
|                 <Button | ||||
|                   href={`/archives/videos/c/${video.channel.data.attributes.uid}`} | ||||
| @ -153,8 +153,7 @@ export default function Video(props: Props): JSX.Element { | ||||
|                 </Button> | ||||
| 
 | ||||
|                 <p> | ||||
|                   {video.channel.data.attributes.subscribers.toLocaleString()}{" "} | ||||
|                   subscribers | ||||
|                   {`${video.channel.data.attributes.subscribers.toLocaleString()} ${langui.subscribers?.toLowerCase()}`} | ||||
|                 </p> | ||||
|               </div> | ||||
|             </div> | ||||
| @ -163,7 +162,7 @@ export default function Video(props: Props): JSX.Element { | ||||
| 
 | ||||
|         <InsetBox id="description" className="grid place-items-center"> | ||||
|           <div className="w-[clamp(0px,100%,42rem)] grid place-items-center gap-8"> | ||||
|             <h2 className="text-2xl">{"Description"}</h2> | ||||
|             <h2 className="text-2xl">{langui.description}</h2> | ||||
|             <p className="whitespace-pre-line">{video.description}</p> | ||||
|           </div> | ||||
|         </InsetBox> | ||||
|  | ||||
| @ -208,110 +208,107 @@ export default function Content(props: Immutable<Props>): JSX.Element { | ||||
|         className="mb-10" | ||||
|       /> | ||||
| 
 | ||||
|       {content && ( | ||||
|         <div className="grid place-items-center"> | ||||
|           <ThumbnailHeader | ||||
|             thumbnail={content.thumbnail?.data?.attributes} | ||||
|             pre_title={selectedTranslation?.pre_title} | ||||
|             title={selectedTranslation?.title} | ||||
|             subtitle={selectedTranslation?.subtitle} | ||||
|             description={selectedTranslation?.description} | ||||
|             type={content.type} | ||||
|             categories={content.categories} | ||||
|             langui={langui} | ||||
|             languageSwitcher={<LanguageSwitcher />} | ||||
|           /> | ||||
|       <div className="grid place-items-center"> | ||||
|         <ThumbnailHeader | ||||
|           thumbnail={content.thumbnail?.data?.attributes} | ||||
|           pre_title={selectedTranslation?.pre_title} | ||||
|           title={selectedTranslation?.title} | ||||
|           subtitle={selectedTranslation?.subtitle} | ||||
|           description={selectedTranslation?.description} | ||||
|           type={content.type} | ||||
|           categories={content.categories} | ||||
|           langui={langui} | ||||
|           languageSwitcher={<LanguageSwitcher />} | ||||
|         /> | ||||
| 
 | ||||
|           {previousContent?.attributes && ( | ||||
|             <div className="mt-12 mb-8 w-full"> | ||||
|               <h2 className="text-center text-2xl mb-4">Previous content</h2> | ||||
|               <PreviewLine | ||||
|                 href={`/contents/${previousContent.attributes.slug}`} | ||||
|                 pre_title={ | ||||
|                   previousContent.attributes.translations?.[0]?.pre_title | ||||
|                 } | ||||
|                 title={ | ||||
|                   previousContent.attributes.translations?.[0]?.title ?? | ||||
|                   prettySlug(previousContent.attributes.slug) | ||||
|                 } | ||||
|                 subtitle={ | ||||
|                   previousContent.attributes.translations?.[0]?.subtitle | ||||
|                 } | ||||
|                 thumbnail={ | ||||
|                   previousContent.attributes.thumbnail?.data?.attributes | ||||
|                 } | ||||
|                 thumbnailAspectRatio="3/2" | ||||
|                 topChips={ | ||||
|                   isMobile | ||||
|                     ? undefined | ||||
|                     : previousContent.attributes.type?.data?.attributes | ||||
|                     ? [ | ||||
|                         previousContent.attributes.type.data.attributes | ||||
|                           .titles?.[0] | ||||
|                           ? previousContent.attributes.type.data.attributes | ||||
|                               .titles[0]?.title | ||||
|                           : prettySlug( | ||||
|                               previousContent.attributes.type.data.attributes | ||||
|                                 .slug | ||||
|                             ), | ||||
|                       ] | ||||
|                     : undefined | ||||
|                 } | ||||
|                 bottomChips={ | ||||
|                   isMobile | ||||
|                     ? undefined | ||||
|                     : previousContent.attributes.categories?.data.map( | ||||
|                         (category) => category.attributes?.short ?? "" | ||||
|                       ) | ||||
|                 } | ||||
|               /> | ||||
|             </div> | ||||
|           )} | ||||
|         {previousContent?.attributes && ( | ||||
|           <div className="mt-12 mb-8 w-full"> | ||||
|             <h2 className="text-center text-2xl mb-4"> | ||||
|               {langui.previous_content} | ||||
|             </h2> | ||||
|             <PreviewLine | ||||
|               href={`/contents/${previousContent.attributes.slug}`} | ||||
|               pre_title={ | ||||
|                 previousContent.attributes.translations?.[0]?.pre_title | ||||
|               } | ||||
|               title={ | ||||
|                 previousContent.attributes.translations?.[0]?.title ?? | ||||
|                 prettySlug(previousContent.attributes.slug) | ||||
|               } | ||||
|               subtitle={previousContent.attributes.translations?.[0]?.subtitle} | ||||
|               thumbnail={previousContent.attributes.thumbnail?.data?.attributes} | ||||
|               thumbnailAspectRatio="3/2" | ||||
|               topChips={ | ||||
|                 isMobile | ||||
|                   ? undefined | ||||
|                   : previousContent.attributes.type?.data?.attributes | ||||
|                   ? [ | ||||
|                       previousContent.attributes.type.data.attributes | ||||
|                         .titles?.[0] | ||||
|                         ? previousContent.attributes.type.data.attributes | ||||
|                             .titles[0]?.title | ||||
|                         : prettySlug( | ||||
|                             previousContent.attributes.type.data.attributes.slug | ||||
|                           ), | ||||
|                     ] | ||||
|                   : undefined | ||||
|               } | ||||
|               bottomChips={ | ||||
|                 isMobile | ||||
|                   ? undefined | ||||
|                   : previousContent.attributes.categories?.data.map( | ||||
|                       (category) => category.attributes?.short ?? "" | ||||
|                     ) | ||||
|               } | ||||
|             /> | ||||
|           </div> | ||||
|         )} | ||||
| 
 | ||||
|           <HorizontalLine /> | ||||
|         <HorizontalLine /> | ||||
| 
 | ||||
|           <Markdawn text={selectedTranslation?.text_set?.text ?? ""} /> | ||||
|         <Markdawn text={selectedTranslation?.text_set?.text ?? ""} /> | ||||
| 
 | ||||
|           {nextContent?.attributes && ( | ||||
|             <> | ||||
|               <HorizontalLine /> | ||||
|               <h2 className="text-center text-2xl mb-4">Follow-up content</h2> | ||||
|               <PreviewLine | ||||
|                 href={`/contents/${nextContent.attributes.slug}`} | ||||
|                 pre_title={nextContent.attributes.translations?.[0]?.pre_title} | ||||
|                 title={ | ||||
|                   nextContent.attributes.translations?.[0]?.title ?? | ||||
|                   prettySlug(nextContent.attributes.slug) | ||||
|                 } | ||||
|                 subtitle={nextContent.attributes.translations?.[0]?.subtitle} | ||||
|                 thumbnail={nextContent.attributes.thumbnail?.data?.attributes} | ||||
|                 thumbnailAspectRatio="3/2" | ||||
|                 topChips={ | ||||
|                   isMobile | ||||
|                     ? undefined | ||||
|                     : nextContent.attributes.type?.data?.attributes | ||||
|                     ? [ | ||||
|                         nextContent.attributes.type.data.attributes.titles?.[0] | ||||
|                           ? nextContent.attributes.type.data.attributes | ||||
|                               .titles[0]?.title | ||||
|                           : prettySlug( | ||||
|                               nextContent.attributes.type.data.attributes.slug | ||||
|                             ), | ||||
|                       ] | ||||
|                     : undefined | ||||
|                 } | ||||
|                 bottomChips={ | ||||
|                   isMobile | ||||
|                     ? undefined | ||||
|                     : nextContent.attributes.categories?.data.map( | ||||
|                         (category) => category.attributes?.short ?? "" | ||||
|                       ) | ||||
|                 } | ||||
|               /> | ||||
|             </> | ||||
|           )} | ||||
|         </div> | ||||
|       )} | ||||
|         {nextContent?.attributes && ( | ||||
|           <> | ||||
|             <HorizontalLine /> | ||||
|             <h2 className="text-center text-2xl mb-4"> | ||||
|               {langui.followup_content} | ||||
|             </h2> | ||||
|             <PreviewLine | ||||
|               href={`/contents/${nextContent.attributes.slug}`} | ||||
|               pre_title={nextContent.attributes.translations?.[0]?.pre_title} | ||||
|               title={ | ||||
|                 nextContent.attributes.translations?.[0]?.title ?? | ||||
|                 prettySlug(nextContent.attributes.slug) | ||||
|               } | ||||
|               subtitle={nextContent.attributes.translations?.[0]?.subtitle} | ||||
|               thumbnail={nextContent.attributes.thumbnail?.data?.attributes} | ||||
|               thumbnailAspectRatio="3/2" | ||||
|               topChips={ | ||||
|                 isMobile | ||||
|                   ? undefined | ||||
|                   : nextContent.attributes.type?.data?.attributes | ||||
|                   ? [ | ||||
|                       nextContent.attributes.type.data.attributes.titles?.[0] | ||||
|                         ? nextContent.attributes.type.data.attributes.titles[0] | ||||
|                             ?.title | ||||
|                         : prettySlug( | ||||
|                             nextContent.attributes.type.data.attributes.slug | ||||
|                           ), | ||||
|                     ] | ||||
|                   : undefined | ||||
|               } | ||||
|               bottomChips={ | ||||
|                 isMobile | ||||
|                   ? undefined | ||||
|                   : nextContent.attributes.categories?.data.map( | ||||
|                       (category) => category.attributes?.short ?? "" | ||||
|                     ) | ||||
|               } | ||||
|             /> | ||||
|           </> | ||||
|         )} | ||||
|       </div> | ||||
|     </ContentPanel> | ||||
|   ); | ||||
| 
 | ||||
|  | ||||
| @ -67,7 +67,7 @@ export default function Contents(props: Immutable<Props>): JSX.Element { | ||||
|       </div> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Combine related contents"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.combine_related_contents}:</p> | ||||
|         <Switch | ||||
|           setState={setCombineRelatedContent} | ||||
|           state={combineRelatedContent} | ||||
| @ -75,7 +75,7 @@ export default function Contents(props: Immutable<Props>): JSX.Element { | ||||
|       </div> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|         <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|       </div> | ||||
|     </SubPanel> | ||||
| @ -122,7 +122,7 @@ export default function Contents(props: Immutable<Props>): JSX.Element { | ||||
|                         stackNumber={ | ||||
|                           combineRelatedContent && | ||||
|                           item.attributes.group?.data?.attributes?.combine | ||||
|                             ? item.attributes.group?.data?.attributes.contents | ||||
|                             ? item.attributes.group.data.attributes.contents | ||||
|                                 ?.data.length | ||||
|                             : 0 | ||||
|                         } | ||||
| @ -268,7 +268,7 @@ function filterContents( | ||||
|       (content) => | ||||
|         !content.attributes?.group?.data?.attributes || | ||||
|         !content.attributes.group.data.attributes.combine || | ||||
|         content.attributes.group.data.attributes.contents?.data?.[0].id === | ||||
|         content.attributes.group.data.attributes.contents?.data[0].id === | ||||
|           content.id | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| @ -163,23 +163,6 @@ function testingContent(contents: Immutable<Props["contents"]>): Report { | ||||
|         }); | ||||
|       } | ||||
| 
 | ||||
|       if ( | ||||
|         content.attributes.next_recommended?.data?.id === content.id || | ||||
|         content.attributes.previous_recommended?.data?.id === content.id | ||||
|       ) { | ||||
|         report.lines.push({ | ||||
|           subitems: [content.attributes.slug], | ||||
|           name: "Self Recommendation", | ||||
|           type: "Error", | ||||
|           severity: "Very High", | ||||
|           description: | ||||
|             "The Content is referring to itself as a Next or Previous Recommended.", | ||||
|           recommandation: "", | ||||
|           backendUrl: backendUrl, | ||||
|           frontendUrl: frontendUrl, | ||||
|         }); | ||||
|       } | ||||
| 
 | ||||
|       if (!content.attributes.thumbnail?.data?.id) { | ||||
|         report.lines.push({ | ||||
|           subitems: [content.attributes.slug], | ||||
| @ -270,172 +253,171 @@ function testingContent(contents: Immutable<Props["contents"]>): Report { | ||||
|                 frontendUrl: frontendUrl, | ||||
|               }); | ||||
|             } else { | ||||
|               const textSetLanguages: string[] = []; | ||||
| 
 | ||||
|               /* | ||||
|               if (content.attributes && textSet) { | ||||
|                 if (textSet.language?.data?.id) { | ||||
|                   if (textSet.language.data.id in textSetLanguages) { | ||||
|                     report.lines.push({ | ||||
|                       subitems: [ | ||||
|                         content.attributes.slug, | ||||
|                         `TextSet ${textSetIndex.toString()}`, | ||||
|                       ], | ||||
|                       name: "Duplicate Language", | ||||
|                       type: "Error", | ||||
|                       severity: "High", | ||||
|                       description: "", | ||||
|                       recommandation: "", | ||||
|                       backendUrl: backendUrl, | ||||
|                       frontendUrl: frontendUrl, | ||||
|                     }); | ||||
|                   } else { | ||||
|                     textSetLanguages.push(textSet.language.data.id); | ||||
|                   } | ||||
|                 } else { | ||||
|                   report.lines.push({ | ||||
|                     subitems: [ | ||||
|                       content.attributes.slug, | ||||
|                       `TextSet ${textSetIndex.toString()}`, | ||||
|                     ], | ||||
|                     name: "No Language", | ||||
|                     type: "Error", | ||||
|                     severity: "Very High", | ||||
|                     description: "", | ||||
|                     recommandation: "", | ||||
|                     backendUrl: backendUrl, | ||||
|                     frontendUrl: frontendUrl, | ||||
|                   }); | ||||
|                 } | ||||
| 
 | ||||
|                 if (!textSet.source_language?.data?.id) { | ||||
|                   report.lines.push({ | ||||
|                     subitems: [ | ||||
|                       content.attributes.slug, | ||||
|                       `TextSet ${textSetIndex.toString()}`, | ||||
|                     ], | ||||
|                     name: "No Source Language", | ||||
|                     type: "Error", | ||||
|                     severity: "High", | ||||
|                     description: "", | ||||
|                     recommandation: "", | ||||
|                     backendUrl: backendUrl, | ||||
|                     frontendUrl: frontendUrl, | ||||
|                   }); | ||||
|                 } | ||||
| 
 | ||||
|                 if (textSet.status !== Enum_Componentsetstextset_Status.Done) { | ||||
|                   report.lines.push({ | ||||
|                     subitems: [ | ||||
|                       content.attributes.slug, | ||||
|                       `TextSet ${textSetIndex.toString()}`, | ||||
|                     ], | ||||
|                     name: "Not Done Status", | ||||
|                     type: "Improvement", | ||||
|                     severity: "Low", | ||||
|                     description: "", | ||||
|                     recommandation: "", | ||||
|                     backendUrl: backendUrl, | ||||
|                     frontendUrl: frontendUrl, | ||||
|                   }); | ||||
|                 } | ||||
| 
 | ||||
|                 if (!textSet.text || textSet.text.length < 10) { | ||||
|                   report.lines.push({ | ||||
|                     subitems: [ | ||||
|                       content.attributes.slug, | ||||
|                       `TextSet ${textSetIndex.toString()}`, | ||||
|                     ], | ||||
|                     name: "No Text", | ||||
|                     type: "Missing", | ||||
|                     severity: "Medium", | ||||
|                     description: "", | ||||
|                     recommandation: "", | ||||
|                     backendUrl: backendUrl, | ||||
|                     frontendUrl: frontendUrl, | ||||
|                   }); | ||||
|                 } | ||||
| 
 | ||||
|                 if ( | ||||
|                   textSet.source_language?.data?.id === | ||||
|                   textSet.language?.data?.id | ||||
|                 ) { | ||||
|                   if (textSet.transcribers?.data.length === 0) { | ||||
|                     report.lines.push({ | ||||
|                       subitems: [ | ||||
|                         content.attributes.slug, | ||||
|                         `TextSet ${textSetIndex.toString()}`, | ||||
|                       ], | ||||
|                       name: "No Transcribers", | ||||
|                       type: "Missing", | ||||
|                       severity: "High", | ||||
|                       description: | ||||
|                         "The Content is a Transcription but doesn't credit any Transcribers.", | ||||
|                       recommandation: "Add the appropriate Transcribers.", | ||||
|                       backendUrl: backendUrl, | ||||
|                       frontendUrl: frontendUrl, | ||||
|                     }); | ||||
|                   } | ||||
|                   if ( | ||||
|                     textSet.translators?.data && | ||||
|                     textSet.translators.data.length > 0 | ||||
|                   ) { | ||||
|                     report.lines.push({ | ||||
|                       subitems: [ | ||||
|                         content.attributes.slug, | ||||
|                         `TextSet ${textSetIndex.toString()}`, | ||||
|                       ], | ||||
|                       name: "Credited Translators", | ||||
|                       type: "Error", | ||||
|                       severity: "High", | ||||
|                       description: | ||||
|                         "The Content is a Transcription but credits one or more Translators.", | ||||
|                       recommandation: | ||||
|                         "If appropriate, create a Translation Text Set with the Translator credited there.", | ||||
|                       backendUrl: backendUrl, | ||||
|                       frontendUrl: frontendUrl, | ||||
|                     }); | ||||
|                   } | ||||
|                 } else { | ||||
|                   if (textSet.translators?.data.length === 0) { | ||||
|                     report.lines.push({ | ||||
|                       subitems: [ | ||||
|                         content.attributes.slug, | ||||
|                         `TextSet ${textSetIndex.toString()}`, | ||||
|                       ], | ||||
|                       name: "No Translators", | ||||
|                       type: "Missing", | ||||
|                       severity: "High", | ||||
|                       description: | ||||
|                         "The Content is a Transcription but doesn't credit any Translators.", | ||||
|                       recommandation: "Add the appropriate Translators.", | ||||
|                       backendUrl: backendUrl, | ||||
|                       frontendUrl: frontendUrl, | ||||
|                     }); | ||||
|                   } | ||||
|                   if ( | ||||
|                     textSet.transcribers?.data && | ||||
|                     textSet.transcribers.data.length > 0 | ||||
|                   ) { | ||||
|                     report.lines.push({ | ||||
|                       subitems: [ | ||||
|                         content.attributes.slug, | ||||
|                         `TextSet ${textSetIndex.toString()}`, | ||||
|                       ], | ||||
|                       name: "Credited Transcribers", | ||||
|                       type: "Error", | ||||
|                       severity: "High", | ||||
|                       description: | ||||
|                         "The Content is a Translation but credits one or more Transcribers.", | ||||
|                       recommandation: | ||||
|                         "If appropriate, create a Transcription Text Set with the Transcribers credited there.", | ||||
|                       backendUrl: backendUrl, | ||||
|                       frontendUrl: frontendUrl, | ||||
|                     }); | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|               */ | ||||
|                *const textSetLanguages: string[] = []; | ||||
|                *if (content.attributes && textSet) { | ||||
|                *  if (textSet.language?.data?.id) { | ||||
|                *    if (textSet.language.data.id in textSetLanguages) { | ||||
|                *      report.lines.push({ | ||||
|                *        subitems: [ | ||||
|                *          content.attributes.slug, | ||||
|                *          `TextSet ${textSetIndex.toString()}`, | ||||
|                *        ], | ||||
|                *        name: "Duplicate Language", | ||||
|                *        type: "Error", | ||||
|                *        severity: "High", | ||||
|                *        description: "", | ||||
|                *        recommandation: "", | ||||
|                *        backendUrl: backendUrl, | ||||
|                *        frontendUrl: frontendUrl, | ||||
|                *      }); | ||||
|                *    } else { | ||||
|                *      textSetLanguages.push(textSet.language.data.id); | ||||
|                *    } | ||||
|                *  } else { | ||||
|                *    report.lines.push({ | ||||
|                *      subitems: [ | ||||
|                *        content.attributes.slug, | ||||
|                *        `TextSet ${textSetIndex.toString()}`, | ||||
|                *      ], | ||||
|                *      name: "No Language", | ||||
|                *      type: "Error", | ||||
|                *      severity: "Very High", | ||||
|                *      description: "", | ||||
|                *      recommandation: "", | ||||
|                *      backendUrl: backendUrl, | ||||
|                *      frontendUrl: frontendUrl, | ||||
|                *    }); | ||||
|                *  } | ||||
|                * | ||||
|                *  if (!textSet.source_language?.data?.id) { | ||||
|                *    report.lines.push({ | ||||
|                *      subitems: [ | ||||
|                *        content.attributes.slug, | ||||
|                *        `TextSet ${textSetIndex.toString()}`, | ||||
|                *      ], | ||||
|                *      name: "No Source Language", | ||||
|                *      type: "Error", | ||||
|                *      severity: "High", | ||||
|                *      description: "", | ||||
|                *      recommandation: "", | ||||
|                *      backendUrl: backendUrl, | ||||
|                *      frontendUrl: frontendUrl, | ||||
|                *    }); | ||||
|                *  } | ||||
|                * | ||||
|                *  if (textSet.status !== Enum_Componentsetstextset_Status.Done) { | ||||
|                *    report.lines.push({ | ||||
|                *      subitems: [ | ||||
|                *        content.attributes.slug, | ||||
|                *        `TextSet ${textSetIndex.toString()}`, | ||||
|                *      ], | ||||
|                *      name: "Not Done Status", | ||||
|                *      type: "Improvement", | ||||
|                *      severity: "Low", | ||||
|                *      description: "", | ||||
|                *      recommandation: "", | ||||
|                *      backendUrl: backendUrl, | ||||
|                *      frontendUrl: frontendUrl, | ||||
|                *    }); | ||||
|                *  } | ||||
|                * | ||||
|                *  if (!textSet.text || textSet.text.length < 10) { | ||||
|                *    report.lines.push({ | ||||
|                *      subitems: [ | ||||
|                *        content.attributes.slug, | ||||
|                *        `TextSet ${textSetIndex.toString()}`, | ||||
|                *      ], | ||||
|                *      name: "No Text", | ||||
|                *      type: "Missing", | ||||
|                *      severity: "Medium", | ||||
|                *      description: "", | ||||
|                *      recommandation: "", | ||||
|                *      backendUrl: backendUrl, | ||||
|                *      frontendUrl: frontendUrl, | ||||
|                *    }); | ||||
|                *  } | ||||
|                * | ||||
|                *  if ( | ||||
|                *    textSet.source_language?.data?.id === | ||||
|                *    textSet.language?.data?.id | ||||
|                *  ) { | ||||
|                *    if (textSet.transcribers?.data.length === 0) { | ||||
|                *      report.lines.push({ | ||||
|                *        subitems: [ | ||||
|                *          content.attributes.slug, | ||||
|                *          `TextSet ${textSetIndex.toString()}`, | ||||
|                *        ], | ||||
|                *        name: "No Transcribers", | ||||
|                *        type: "Missing", | ||||
|                *        severity: "High", | ||||
|                *        description: | ||||
|                *          "The Content is a Transcription but doesn't credit any Transcribers.", | ||||
|                *        recommandation: "Add the appropriate Transcribers.", | ||||
|                *        backendUrl: backendUrl, | ||||
|                *        frontendUrl: frontendUrl, | ||||
|                *      }); | ||||
|                *    } | ||||
|                *    if ( | ||||
|                *      textSet.translators?.data && | ||||
|                *      textSet.translators.data.length > 0 | ||||
|                *    ) { | ||||
|                *      report.lines.push({ | ||||
|                *        subitems: [ | ||||
|                *          content.attributes.slug, | ||||
|                *          `TextSet ${textSetIndex.toString()}`, | ||||
|                *        ], | ||||
|                *        name: "Credited Translators", | ||||
|                *        type: "Error", | ||||
|                *        severity: "High", | ||||
|                *        description: | ||||
|                *          "The Content is a Transcription but credits one or more Translators.", | ||||
|                *        recommandation: | ||||
|                *          "If appropriate, create a Translation Text Set with the Translator credited there.", | ||||
|                *        backendUrl: backendUrl, | ||||
|                *        frontendUrl: frontendUrl, | ||||
|                *      }); | ||||
|                *    } | ||||
|                *  } else { | ||||
|                *    if (textSet.translators?.data.length === 0) { | ||||
|                *      report.lines.push({ | ||||
|                *        subitems: [ | ||||
|                *          content.attributes.slug, | ||||
|                *          `TextSet ${textSetIndex.toString()}`, | ||||
|                *        ], | ||||
|                *        name: "No Translators", | ||||
|                *        type: "Missing", | ||||
|                *        severity: "High", | ||||
|                *        description: | ||||
|                *          "The Content is a Transcription but doesn't credit any Translators.", | ||||
|                *        recommandation: "Add the appropriate Translators.", | ||||
|                *        backendUrl: backendUrl, | ||||
|                *        frontendUrl: frontendUrl, | ||||
|                *      }); | ||||
|                *    } | ||||
|                *    if ( | ||||
|                *      textSet.transcribers?.data && | ||||
|                *      textSet.transcribers.data.length > 0 | ||||
|                *    ) { | ||||
|                *      report.lines.push({ | ||||
|                *        subitems: [ | ||||
|                *          content.attributes.slug, | ||||
|                *          `TextSet ${textSetIndex.toString()}`, | ||||
|                *        ], | ||||
|                *        name: "Credited Transcribers", | ||||
|                *        type: "Error", | ||||
|                *        severity: "High", | ||||
|                *        description: | ||||
|                *          "The Content is a Translation but credits one or more Transcribers.", | ||||
|                *        recommandation: | ||||
|                *          "If appropriate, create a Transcription Text Set with the Transcribers credited there.", | ||||
|                *        backendUrl: backendUrl, | ||||
|                *        frontendUrl: frontendUrl, | ||||
|                *      }); | ||||
|                *    } | ||||
|                *  } | ||||
|                *} | ||||
|                */ | ||||
|             } | ||||
| 
 | ||||
|             report.lines.push({ | ||||
|  | ||||
| @ -202,7 +202,7 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | ||||
|               <> | ||||
|                 {item?.urls && item.urls.length ? ( | ||||
|                   <div className="flex flex-row place-items-center gap-3"> | ||||
|                     <p>Available at</p> | ||||
|                     <p>{langui.available_at}</p> | ||||
|                     {item.urls.map((url) => ( | ||||
|                       <> | ||||
|                         {url?.url && ( | ||||
| @ -218,7 +218,7 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | ||||
|                     ))} | ||||
|                   </div> | ||||
|                 ) : ( | ||||
|                   <p>This item is not for sale or is no longer available</p> | ||||
|                   <p>{langui.item_not_available}</p> | ||||
|                 )} | ||||
|               </> | ||||
|             )} | ||||
| @ -415,7 +415,7 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | ||||
|             </h2> | ||||
| 
 | ||||
|             <div className="-mt-6 mb-8 flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|               <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|               <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|               <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|             </div> | ||||
|             <div | ||||
|  | ||||
| @ -127,7 +127,7 @@ export default function Library(props: Immutable<Props>): JSX.Element { | ||||
|       </div> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|         <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|       </div> | ||||
|     </SubPanel> | ||||
|  | ||||
| @ -34,7 +34,7 @@ export default function News(props: Immutable<Props>): JSX.Element { | ||||
|       /> | ||||
| 
 | ||||
|       <div className="flex flex-row gap-2 place-items-center coarse:hidden"> | ||||
|         <p className="flex-shrink-0">{"Always show info"}:</p> | ||||
|         <p className="flex-shrink-0">{langui.always_show_info}:</p> | ||||
|         <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||
|       </div> | ||||
|     </SubPanel> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DrMint
						DrMint