feat(i18n): improve ai chat and settings localization
This commit is contained in:
@@ -4,6 +4,8 @@ import { aiJsonError } from "@/server/ai/responses";
|
||||
import { domainActorFromSession } from "@/server/auth/domain-actor";
|
||||
import { getSessionContextFromHeaders } from "@/server/auth/session";
|
||||
import { DomainError } from "@/server/domain/errors";
|
||||
import { resolveFreelancerLocale } from "@/server/i18n/resolver";
|
||||
import { createTranslator } from "@/server/i18n/translator";
|
||||
import { getDomainService } from "@/server/services/runtime";
|
||||
import { generateText } from "ai";
|
||||
import { NextResponse } from "next/server";
|
||||
@@ -11,20 +13,24 @@ import { NextResponse } from "next/server";
|
||||
export const maxDuration = 120;
|
||||
|
||||
export async function POST(request: Request) {
|
||||
let t: ReturnType<typeof createTranslator>["t"] | null = null;
|
||||
|
||||
try {
|
||||
const context = await getSessionContextFromHeaders(new Headers(request.headers));
|
||||
if (!context) {
|
||||
throw new DomainError("UNAUTHENTICATED", "Oturum gerekli.");
|
||||
throw new DomainError("UNAUTHENTICATED", "Authentication is required.");
|
||||
}
|
||||
if (context.profile.role !== "freelancer") {
|
||||
throw new DomainError("FORBIDDEN", "Bu işlem yalnızca freelancer hesabına açıktır.");
|
||||
throw new DomainError("FORBIDDEN", "This action is only available to freelancer accounts.");
|
||||
}
|
||||
|
||||
const actor = domainActorFromSession(context);
|
||||
const locale = await resolveFreelancerLocale(context);
|
||||
t = createTranslator(locale.locale, ["finance", "common"]).t;
|
||||
const analysisContext = buildFinanceAnalysisContext(getDomainService(), actor);
|
||||
if (!analysisContext.hasData) {
|
||||
return NextResponse.json({
|
||||
text: "Son 30 güne ait finansal işlem bulunmadığı için analiz yapamıyorum. Lütfen yeni gelir veya gider ekleyin.",
|
||||
text: t("finance.ai.noData"),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -32,14 +38,12 @@ export async function POST(request: Request) {
|
||||
const { text } = await generateText({
|
||||
model: runtime.model,
|
||||
timeout: runtime.timeout,
|
||||
system: `Sen profesyonel bir finans danışmanısın.
|
||||
Verilen finansal verilere dayanarak kısa, motive edici ve yapıcı bir finansal durum raporu sun.
|
||||
Markdown başlıklar kullan, Türkçe konuş ve hukuki ya da finansal kesin hüküm verme.`,
|
||||
prompt: `Aşağıdaki server-side finans özetine göre durum ve uygulanabilir öneriler sun:\n\n${analysisContext.text}`,
|
||||
system: t("finance.ai.systemPrompt"),
|
||||
prompt: t("finance.ai.prompt", { context: analysisContext.text }),
|
||||
});
|
||||
|
||||
return NextResponse.json({ text });
|
||||
} catch (error) {
|
||||
return aiJsonError(error);
|
||||
return aiJsonError(error, t ?? undefined);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user