route.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { NextRequest, NextResponse } from 'next/server';
  2. export async function POST(request: NextRequest) {
  3. try {
  4. const { text, targetLanguage = 'en' } = await request.json();
  5. if (!text || typeof text !== 'string') {
  6. return NextResponse.json(
  7. { error: 'Text is required and must be a string' },
  8. { status: 400 }
  9. );
  10. }
  11. // 如果文本已经是英文,直接返回
  12. if (isEnglish(text)) {
  13. return NextResponse.json({
  14. success: true,
  15. originalText: text,
  16. translatedText: text,
  17. isTranslated: false
  18. });
  19. }
  20. // 使用DeepSeek-Chat模型进行翻译
  21. const translatedText = await translateWithDeepSeek(text, targetLanguage);
  22. return NextResponse.json({
  23. success: true,
  24. originalText: text,
  25. translatedText: translatedText,
  26. isTranslated: translatedText !== text
  27. });
  28. } catch (error: any) {
  29. console.error('Translation error:', error);
  30. return NextResponse.json(
  31. { error: error.message || 'Translation failed' },
  32. { status: 500 }
  33. );
  34. }
  35. }
  36. // 简单检测是否为英文
  37. function isEnglish(text: string): boolean {
  38. // 检查是否主要包含英文字符
  39. const englishRegex = /^[a-zA-Z0-9\s.,!?'"()-]+$/;
  40. return englishRegex.test(text.trim());
  41. }
  42. // 使用DeepSeek-Chat模型进行翻译
  43. async function translateWithDeepSeek(text: string, targetLang: string = 'en'): Promise<string> {
  44. try {
  45. const apiKey = process.env.DEEPSEEK_API_KEY;
  46. if (!apiKey) {
  47. console.warn('DeepSeek API key not found, returning original text');
  48. return text;
  49. }
  50. const response = await fetch('https://api.deepseek.com/v1/chat/completions', {
  51. method: 'POST',
  52. headers: {
  53. 'Content-Type': 'application/json',
  54. 'Authorization': `Bearer ${apiKey}`,
  55. },
  56. body: JSON.stringify({
  57. model: 'deepseek-chat',
  58. messages: [
  59. {
  60. role: 'system',
  61. content: `You are a professional translator. Translate the given text to ${targetLang === 'en' ? 'English' : targetLang}. Only return the translated text, no explanations or additional content.`
  62. },
  63. {
  64. role: 'user',
  65. content: text
  66. }
  67. ],
  68. temperature: 0.1,
  69. max_tokens: 1000
  70. })
  71. });
  72. if (!response.ok) {
  73. console.error(`DeepSeek API error: ${response.status}`);
  74. return text;
  75. }
  76. const result = await response.json();
  77. if (result.choices && result.choices[0] && result.choices[0].message) {
  78. const translatedText = result.choices[0].message.content.trim();
  79. return translatedText || text;
  80. }
  81. console.error('Invalid response from DeepSeek API');
  82. return text;
  83. } catch (error) {
  84. console.error('DeepSeek translation error:', error);
  85. return text;
  86. }
  87. }