实现国际化(i18n)支持,包括: 1. 新增i18n配置文件和中间件 2. 重构页面和组件以支持多语言 3. 添加中英日三语翻译文件 4. 修改API路由以支持语言参数 5. 更新README文档说明i18n功能 6. 添加语言切换组件 7. 调整布局和路由结构支持多语言路径
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import { getUserPointsTransactions } from "@/lib/points";
|
|
import { NextResponse, NextRequest } from "next/server";
|
|
import { getSessionData } from "@/lib/server-actions";
|
|
import { useTranslation } from '@/i18n';
|
|
import { getLanguageFromRequest } from '@/lib/utils';
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const lang = getLanguageFromRequest(request);
|
|
const { t } = await useTranslation(lang, 'errors');
|
|
|
|
const session = await getSessionData();
|
|
if (!session || !session.user || !session.user.id) {
|
|
return NextResponse.json({ success: false, error: t("unauthorized") }, { status: 401 });
|
|
}
|
|
|
|
try {
|
|
const userId = session.user.id;
|
|
const { searchParams } = new URL(request.url);
|
|
const page = parseInt(searchParams.get('page') || '1', 10);
|
|
const pageSize = parseInt(searchParams.get('pageSize') || '20', 10);
|
|
|
|
// 校验 page 和 pageSize 是否为有效数字
|
|
if (isNaN(page) || page < 1 || isNaN(pageSize) || pageSize < 1) {
|
|
return NextResponse.json({ success: false, error: t("invalid_pagination_parameters") }, { status: 400 });
|
|
}
|
|
|
|
const transactions = await getUserPointsTransactions(userId, page, pageSize);
|
|
|
|
return NextResponse.json({ success: true, transactions });
|
|
} catch (error) {
|
|
console.error("Error fetching user points transactions:", error);
|
|
return NextResponse.json({ success: false, error: t("internal_server_error") }, { status: 500 });
|
|
}
|
|
} |