Skip to main content
Glama
language-context.tsx9.61 kB
'use client' import type React from 'react' import { createContext, useContext, useState } from 'react' type Language = 'zh-CN' | 'en-US' interface LanguageContextType { language: Language setLanguage: (language: Language) => void t: (key: string) => string } const translations = { 'zh-CN': { // Navigation 'nav.home': '首页', 'nav.settings': '设置', 'nav.tokenUsage': 'TOKEN 用量', 'nav.logs': '日志', // Home 'home.graphitiMCPService': 'Graphiti MCP Pro 服务', 'home.serverStatus.running': '运行中', 'home.serverStatus.stopped': '已停止', 'home.serverStatus.starting': '启动中...', 'home.serverStatus.stopping': '停止中...', 'home.start': '启动', 'home.restart': '重启', 'home.stop': '停止', 'home.mcpConfig': 'MCP 配置', 'home.mcpConfigDesc': '当前 MCP 服务器配置', 'home.tokenUsage': '今日 TOKEN 用量', // Settings 'settings.basic': '基础设置', 'settings.syncReturn': '开启同步返回', 'settings.parallelRequests': '大模型并行请求数', 'settings.logSaveDays': '日志保存天数', 'settings.cleanLogsAtHour': '日志清理时间', 'settings.days': '天', 'settings.neo4j': 'Neo4j 数据库设置', 'settings.neo4j.uri': 'URI', 'settings.neo4j.user': '用户名', 'settings.neo4j.password': '密码', 'settings.largeModel': '大模型连接设置', 'settings.smallModel': '小模型连接设置', 'settings.embedding': '文本嵌入连接设置', 'settings.sameAsLarge': '与大模型相同', 'settings.baseUrl': '请求地址', 'settings.apiKey': 'API KEY', 'settings.modelName': '模型名称', 'settings.update': '更新', 'settings.validate.llm': '大模型连接设置不完整', 'settings.validate.smallModel': '小模型连接设置不完整', 'settings.validate.embedding': '文本嵌入连接设置不完整', 'settings.update.success': '设置修改成功', 'settings.update.error': '设置修改失败,请检查日志', 'settings.update.loading': '正在更新设置...', // Token Usage 'tokenUsage.byDay': '按日', 'tokenUsage.byWeek': '按周', 'tokenUsage.byMonth': '按月', 'tokenUsage.details': '详细记录', 'tokenUsage.filter': '筛选', 'tokenUsage.char.inputTokens': '输入 TOKEN', 'tokenUsage.char.outputTokens': '输出 TOKEN', 'tokenUsage.record.page': '页', 'tokenUsage.record.total': '共', 'tokenUsage.record.items': '条记录', 'tokenUsage.record.item': '条记录', 'tokenUsage.record.time': '时间', 'tokenUsage.record.model': '模型名称', 'tokenUsage.record.episode': '记忆片段', 'tokenUsage.record.responseModel': '数据模型', 'tokenUsage.record.inputTokens': '输入 TOKEN', 'tokenUsage.record.outputTokens': '输出 TOKEN', 'tokenUsage.record.totalTokens': '总计 TOKEN', // Logs 'logs.realtime': '实时日志', 'logs.history': '历史日志', 'logs.pause': '暂停', 'logs.paused': '已暂停', 'logs.waitingData': '等待数据...', 'logs.start': '开始', 'logs.clear': '清空', 'logs.export': '导出日志', 'logs.level': '日志级别', 'logs.source': '来源', 'logs.level.all': '全部', 'logs.level.error': '错误', 'logs.level.warn': '警告', 'logs.level.info': '信息', 'logs.level.debug': '调试', 'logs.searchPlaceholder': '搜索日志...', 'logs.search': '搜索', 'logs.noMatchingRecords': '没有匹配的记录', 'logs.loadingFailed': '加载日志失败', // Common 'common.language': '语言', 'common.theme': '主题', 'common.copy': '复制', 'common.copied': 'MCP 配置代码已复制到剪贴板', 'common.copyError': '复制 MCP 配置代码失败', 'common.save': '保存', 'common.cancel': '取消', 'common.confirm': '确认', 'common.loading': '加载中...', 'common.error': '错误', 'common.success': '成功', 'common.warning': '警告', 'common.info': '信息', 'common.collapse': '收起', 'common.pickDate': '请选择日期', 'common.pickDateRange': '请选择起止日期', 'common.pickWeek': '请选择周', 'common.pickMonth': '请选择月份', 'common.toast.starting': '服务正在启动...', 'common.toast.started': '服务已启动', 'common.toast.restarting': '服务正在重启...', 'common.toast.restarted': '服务已重启', 'common.toast.stopping': '服务正在停止...', 'common.toast.stopped': '服务已停止', }, 'en-US': { // Navigation 'nav.home': 'Home', 'nav.settings': 'Settings', 'nav.tokenUsage': 'Token Usage', 'nav.logs': 'Logs', // Home 'home.graphitiMCPService': 'Graphiti MC Pro Service', 'home.serverStatus.running': 'Running', 'home.serverStatus.stopped': 'Stopped', 'home.serverStatus.starting': 'Starting...', 'home.serverStatus.stopping': 'Stopping...', 'home.start': 'Start', 'home.restart': 'Restart', 'home.stop': 'Stop', 'home.mcpConfig': 'MCP Configuration', 'home.mcpConfigDesc': 'Current MCP server configuration', 'home.tokenUsage': "Today's Token Usage", // Settings 'settings.basic': 'Basic Settings', 'settings.syncReturn': 'Sync Return', 'settings.parallelRequests': 'Parallel Requests', 'settings.logSaveDays': 'Log Save Days', 'settings.cleanLogsAtHour': 'Clean Logs At Hour', 'settings.days': 'Days', 'settings.neo4j': 'Neo4j Database Settings', 'settings.neo4j.uri': 'URI', 'settings.neo4j.user': 'User', 'settings.neo4j.password': 'Password', 'settings.largeModel': 'LLM Settings', 'settings.smallModel': 'Small Model Settings', 'settings.embedding': 'Text Embedding Settings', 'settings.sameAsLarge': 'Same as Large Model', 'settings.baseUrl': 'Base URL', 'settings.apiKey': 'API Key', 'settings.modelName': 'Model Name', 'settings.update': 'Update', 'settings.validate.llm': 'LLM settings are incomplete', 'settings.validate.smallModel': 'Small model settings are incomplete', 'settings.validate.embedding': 'Embedding settings are incomplete', 'settings.update.success': 'Settings updated successfully', 'settings.update.error': 'Failed to update settings, please check the logs', 'settings.update.loading': 'Updating settings...', // Token Usage 'tokenUsage.byDay': 'Daily', 'tokenUsage.byWeek': 'Weekly', 'tokenUsage.byMonth': 'Monthly', 'tokenUsage.details': 'Detailed Records', 'tokenUsage.char.inputTokens': 'Input Tokens', 'tokenUsage.char.outputTokens': 'Output Tokens', 'tokenUsage.filter': 'Filter', 'tokenUsage.record.page': 'Page', 'tokenUsage.record.total': 'Total', 'tokenUsage.record.items': 'Records', 'tokenUsage.record.item': 'Record', 'tokenUsage.record.time': 'Time', 'tokenUsage.record.model': 'LLM Model Name', 'tokenUsage.record.episode': 'Episode', 'tokenUsage.record.responseModel': 'Response Data Model', 'tokenUsage.record.inputTokens': 'Input Tokens', 'tokenUsage.record.outputTokens': 'Output Tokens', 'tokenUsage.record.totalTokens': 'Total Tokens', // Logs 'logs.realtime': 'Realtime', 'logs.history': 'History', 'logs.pause': 'Pause', 'logs.paused': 'Paused', 'logs.waitingData': 'Waiting for data...', 'logs.start': 'Start', 'logs.clear': 'Clear', 'logs.level': 'Log Level', 'logs.source': 'Source', 'logs.level.all': 'All', 'logs.level.error': 'Error', 'logs.level.warn': 'Warn', 'logs.level.info': 'Info', 'logs.level.debug': 'Debug', 'logs.searchPlaceholder': 'Search logs...', 'logs.search': 'Search', 'logs.noMatchingRecords': 'No matching records', 'logs.loadingFailed': 'Failed to load logs', // Common 'common.language': 'Language', 'common.theme': 'Theme', 'common.copy': 'Copy', 'common.copied': 'MCP Config Code Copied', 'common.copyError': 'Failed to copy MCP Config Code', 'common.save': 'Save', 'common.cancel': 'Cancel', 'common.confirm': 'Confirm', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.success': 'Success', 'common.warning': 'Warning', 'common.info': 'Info', 'common.collapse': 'Collapse', 'common.pickDate': 'Pick a date', 'common.pickDateRange': 'Pick a date range', 'common.pickWeek': 'Pick a week', 'common.pickMonth': 'Pick a month', 'common.toast.starting': 'Service is starting...', 'common.toast.started': 'Service started', 'common.toast.restarting': 'Service is restarting...', 'common.toast.restarted': 'Service restarted', 'common.toast.stopping': 'Service is stopping...', 'common.toast.stopped': 'Service stopped', }, } const LanguageContext = createContext<LanguageContextType | undefined>(undefined) export function LanguageProvider({ children }: { children: React.ReactNode }) { const [language, setLanguage] = useState<Language>('zh-CN') const t = (key: string): string => { return translations[language][key as keyof (typeof translations)[typeof language]] || key } return ( <LanguageContext.Provider value={{ language, setLanguage, t }}> {children} </LanguageContext.Provider> ) } export function useLanguage() { const context = useContext(LanguageContext) if (context === undefined) { throw new Error('useLanguage must be used within a LanguageProvider') } return context }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/itcook/graphiti-mcp-pro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server