diff --git a/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts b/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts index 0a31d75c..2bb05f46 100644 --- a/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts +++ b/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts @@ -2,9 +2,12 @@ import { JSDOM } from "jsdom"; export function extractNumberedElements( content: string, + title: string, ): Array<{ number: number; text: string }> { const doc = new JSDOM(content); - const numberedElements: Array<{ number: number; text: string }> = []; + const numberedElements: Array<{ number: number; text: string }> = [ + { number: 0, text: title }, + ]; //
のみを改行とする doc.window.document.body.innerHTML = doc.window.document.body.innerHTML .replace(/\n/g, "") diff --git a/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx b/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx index 064b2ab9..63a44c96 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx @@ -5,16 +5,22 @@ import type { SourceTextWithTranslations } from "../types"; import { Translation } from "./Translation"; interface ContentWithTranslationsProps { + title: string; content: string; sourceTextWithTranslations: SourceTextWithTranslations[]; userId: number | null; } export const ContentWithTranslations = memo(function ContentWithTranslations({ + title, content, sourceTextWithTranslations, userId, }: ContentWithTranslationsProps) { + const titleTranslation = useMemo(() => { + return sourceTextWithTranslations.find((info) => info.number === 0); + }, [sourceTextWithTranslations]); + const parsedContent = useMemo(() => { if (typeof window === "undefined") { return null; @@ -63,5 +69,19 @@ export const ContentWithTranslations = memo(function ContentWithTranslations({ return
Loading...
; } - return <>{parsedContent}; + return ( + <> +

+ {title} + {titleTranslation && ( + + )} +

+ {parsedContent} + + ); }); diff --git a/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx b/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx index b380137a..6e72cbec 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx @@ -46,14 +46,22 @@ export function Translation({ const alternativeTranslationsWithVotes = useMemo( () => - translationsWithVotes.filter((t) => t.id !== bestTranslationWithVote.id), + bestTranslationWithVote + ? translationsWithVotes.filter( + (t) => t.id !== bestTranslationWithVote.id, + ) + : [], [translationsWithVotes, bestTranslationWithVote], ); const sanitizedAndParsedText = useMemo(() => { - const sanitized = sanitizeAndParseText(bestTranslationWithVote.text); - return sanitized; - }, [bestTranslationWithVote.text]); + if (!bestTranslationWithVote) return null; + return sanitizeAndParseText(bestTranslationWithVote.text); + }, [bestTranslationWithVote]); + + if (!bestTranslationWithVote || !sanitizedAndParsedText) { + return null; + } return (
diff --git a/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx b/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx index bf2b698e..2f2c1014 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx @@ -34,7 +34,7 @@ export function UserAITranslationStatus({ return ( - Translation Status + Your AI Translation Status
+ {actionData?.slug && ( + + + Translation Job Started + + + {actionData.slug} + + + )}
-

- {pageData.title} -
{pageData.translationTitle}
-

-
t.userVote?.isUpvote, ); diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/addNumbersToContent.ts b/web/app/routes/$userName+/page+/$slug+/utils/addNumbersToContent.ts similarity index 100% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/addNumbersToContent.ts rename to web/app/routes/$userName+/page+/$slug+/utils/addNumbersToContent.ts diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractArticle.ts b/web/app/routes/$userName+/page+/$slug+/utils/extractArticle.ts similarity index 100% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/extractArticle.ts rename to web/app/routes/$userName+/page+/$slug+/utils/extractArticle.ts diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts b/web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts similarity index 93% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts rename to web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts index 0a31d75c..2bb05f46 100644 --- a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts +++ b/web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts @@ -2,9 +2,12 @@ import { JSDOM } from "jsdom"; export function extractNumberedElements( content: string, + title: string, ): Array<{ number: number; text: string }> { const doc = new JSDOM(content); - const numberedElements: Array<{ number: number; text: string }> = []; + const numberedElements: Array<{ number: number; text: string }> = [ + { number: 0, text: title }, + ]; //
のみを改行とする doc.window.document.body.innerHTML = doc.window.document.body.innerHTML .replace(/\n/g, "") diff --git a/web/app/routes/resources+/footer.tsx b/web/app/routes/resources+/footer.tsx index e071e396..4797798b 100644 --- a/web/app/routes/resources+/footer.tsx +++ b/web/app/routes/resources+/footer.tsx @@ -42,50 +42,36 @@ export function Footer({ safeUser }: FooterProps) { return ( diff --git a/web/app/routes/translator/route.tsx b/web/app/routes/translator/route.tsx index 48a10600..eec246f5 100644 --- a/web/app/routes/translator/route.tsx +++ b/web/app/routes/translator/route.tsx @@ -127,7 +127,10 @@ export async function action({ request }: ActionFunctionArgs) { targetLanguage, ); - const numberedElements = extractNumberedElements(numberedContent); + const numberedElements = extractNumberedElements( + numberedContent, + title, + ); await createOrUpdateSourceTexts(numberedElements, page.id); // ファイルの翻訳ジョブをキューに追加 await queue.add(`translate-${safeUser.id}`, {