Files
Momento/memento-note/lib/i18n/detect-user-language.ts
Sepehr Ramezani aa6a214f37 feat: rename keep-notes to memento-note, migrate to PostgreSQL, fix MCP bugs
- Rename directory keep-notes -> memento-note with all code references
- Prisma: SQLite -> PostgreSQL (both app and MCP server schemas)
- Sync MCP schema with main app (add missing fields, relations, indexes)
- Delete 17 SQLite migrations (clean slate for PostgreSQL)
- Remove SQLite dependencies (@libsql/client, better-sqlite3, etc.)
- Fix MCP server: hardcoded Windows DB paths -> DATABASE_URL env var
- Fix MCP server: .dockerignore excluded index-sse.js (SSE mode broken)
- MCP Dockerfile: node:20 -> node:22
- Docker Compose: add postgres service, remove SQLite volume
- Generate favicon.ico, icon-192.png, icon-512.png, apple-icon.png
- Update layout.tsx icons and manifest.json for PNG icons
- Update all .env files for PostgreSQL
- Rewrite README.md with updated sections
- Remove mcp-server/node_modules and prisma/client-generated from git tracking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-20 20:58:04 +02:00

63 lines
1.6 KiB
TypeScript

/**
* Detect user's preferred language from their existing notes
* Analyzes language distribution across all user's notes
*/
import { auth } from '@/auth'
import { prisma } from '@/lib/prisma'
import { SupportedLanguage } from './load-translations'
export async function detectUserLanguage(): Promise<SupportedLanguage> {
const session = await auth()
// Default to English for non-logged-in users
if (!session?.user?.id) {
return 'en'
}
try {
// Get all user's notes with detected languages
const notes = await prisma.note.findMany({
where: {
userId: session.user.id,
language: { not: null }
},
select: {
language: true,
languageConfidence: true
}
})
if (notes.length === 0) {
return 'en' // Default for new users
}
// Count language occurrences weighted by confidence
const languageScores: Record<string, number> = {}
for (const note of notes) {
if (note.language) {
const confidence = note.languageConfidence || 0.8
languageScores[note.language] = (languageScores[note.language] || 0) + confidence
}
}
// Find language with highest score
const sortedLanguages = Object.entries(languageScores)
.sort(([, a], [, b]) => b - a)
if (sortedLanguages.length > 0) {
const topLanguage = sortedLanguages[0][0] as SupportedLanguage
// Verify it's a supported language
if (['fr', 'en', 'es', 'de', 'fa'].includes(topLanguage)) {
return topLanguage
}
}
return 'en'
} catch (error) {
console.error('Error detecting user language:', error)
return 'en'
}
}