import type { LocaleType } from './index'; import { SAAS_CHAT_UTM_URL } from '@/app/constant'; import { getClientConfig } from '../config/client'; import { SubmitKey } from '../store/config'; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; const en: LocaleType = { WIP: 'Coming Soon...', Error: { Unauthorized: isApp ? `😆 Oops, there's an issue. No worries: \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️` : `😆 Oops, there's an issue. Let's fix it: \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Using a private setup? [Click here](/#/auth) to enter your key 🔑 \ 3️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️ `, }, Auth: { Return: 'Return', Title: 'Need Access Code', Tips: 'Please enter access code below', SubTips: 'Or enter your OpenAI or Google API Key', Input: 'access code', Confirm: 'Confirm', Later: 'Later', SaasTips: 'Too Complex, Use Immediately Now', TopTips: '🥳 NextChat AI launch promotion: Instantly unlock the latest models like OpenAI o1, GPT-4o, Claude-3.5!', }, ChatItem: { ChatItemCount: (count: number) => `${count} messages`, }, Chat: { SubTitle: (count: number) => `${count} messages`, EditMessage: { Title: 'Edit All Messages', Topic: { Title: 'Topic', SubTitle: 'Change the current topic', }, }, Actions: { ChatList: 'Go To Chat List', CompressedHistory: 'Compressed History Memory Prompt', Export: 'Export All Messages as Markdown', Copy: 'Copy', Stop: 'Stop', Retry: 'Retry', Pin: 'Pin', PinToastContent: 'Pinned 1 messages to contextual prompts', PinToastAction: 'View', Delete: 'Delete', Edit: 'Edit', FullScreen: 'FullScreen', RefreshTitle: 'Refresh Title', RefreshToast: 'Title refresh request sent', Speech: 'Play', StopSpeech: 'Stop', }, Commands: { new: 'Start a new chat', newm: 'Start a new chat with mask', next: 'Next Chat', prev: 'Previous Chat', clear: 'Clear Context', fork: 'Copy Chat', del: 'Delete Chat', }, InputActions: { Stop: 'Stop', ToBottom: 'To Latest', Theme: { auto: 'Auto', light: 'Light Theme', dark: 'Dark Theme', }, Prompt: 'Prompts', Masks: 'Masks', Clear: 'Clear Context', Settings: 'Settings', UploadImage: 'Upload Images', }, Rename: 'Rename Chat', Typing: 'Typing…', Input: (submitKey: string) => { let inputHints = `${submitKey} to send`; if (submitKey === String(SubmitKey.Enter)) { inputHints += ', Shift + Enter to wrap'; } return `${inputHints}, / to search prompts, : to use commands`; }, Send: 'Send', StartSpeak: 'Start Speak', StopSpeak: 'Stop Speak', Config: { Reset: 'Reset to Default', SaveAs: 'Save as Mask', }, IsContext: 'Contextual Prompt', ShortcutKey: { Title: 'Keyboard Shortcuts', newChat: 'Open New Chat', focusInput: 'Focus Input Field', copyLastMessage: 'Copy Last Reply', copyLastCode: 'Copy Last Code Block', showShortcutKey: 'Show Shortcuts', }, }, Export: { Title: 'Export Messages', Copy: 'Copy All', Download: 'Download', MessageFromYou: 'Message From You', MessageFromChatGPT: 'Message From ChatGPT', Share: 'Share to ShareGPT', Format: { Title: 'Export Format', SubTitle: 'Markdown or PNG Image', }, IncludeContext: { Title: 'Including Context', SubTitle: 'Export context prompts in mask or not', }, Steps: { Select: 'Select', Preview: 'Preview', }, Image: { Toast: 'Capturing Image...', Modal: 'Long press or right click to save image', }, Artifacts: { Title: 'Share Artifacts', Error: 'Share Error', }, }, Select: { Search: 'Search', All: 'Select All', Latest: 'Select Latest', Clear: 'Clear', }, Memory: { Title: 'Memory Prompt', EmptyContent: 'Nothing yet.', Send: 'Send Memory', Copy: 'Copy Memory', Reset: 'Reset Session', ResetConfirm: 'Resetting will clear the current conversation history and historical memory. Are you sure you want to reset?', }, Home: { NewChat: 'New Chat', DeleteChat: 'Confirm to delete the selected conversation?', DeleteToast: 'Chat Deleted', Revert: 'Revert', }, Settings: { Title: 'Settings', SubTitle: 'All Settings', ShowPassword: 'ShowPassword', Danger: { Reset: { Title: 'Reset All Settings', SubTitle: 'Reset all setting items to default', Action: 'Reset', Confirm: 'Confirm to reset all settings to default?', }, Clear: { Title: 'Clear All Data', SubTitle: 'Clear all messages and settings', Action: 'Clear', Confirm: 'Confirm to clear all messages and settings?', }, }, Lang: { Name: 'Language', // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` All: 'All Languages', }, Avatar: 'Avatar', FontSize: { Title: 'Font Size', SubTitle: 'Adjust font size of chat content', }, FontFamily: { Title: 'Chat Font Family', SubTitle: 'Font Family of the chat content, leave empty to apply global default font', Placeholder: 'Font Family Name', }, InjectSystemPrompts: { Title: 'Inject System Prompts', SubTitle: 'Inject a global system prompt for every request', }, InputTemplate: { Title: 'Input Template', SubTitle: 'Newest message will be filled to this template', }, Update: { Version: (x: string) => `Version: ${x}`, IsLatest: 'Latest version', CheckUpdate: 'Check Update', IsChecking: 'Checking update...', FoundUpdate: (x: string) => `Found new version: ${x}`, GoToUpdate: 'Update', Success: 'Update Successful.', Failed: 'Update Failed.', }, SendKey: 'Send Key', Theme: 'Theme', TightBorder: 'Tight Border', SendPreviewBubble: { Title: 'Send Preview Bubble', SubTitle: 'Preview markdown in bubble', }, AutoGenerateTitle: { Title: 'Auto Generate Title', SubTitle: 'Generate a suitable title based on the conversation content', }, Sync: { CloudState: 'Last Update', NotSyncYet: 'Not sync yet', Success: 'Sync Success', Fail: 'Sync Fail', Config: { Modal: { Title: 'Config Sync', Check: 'Check Connection', }, SyncType: { Title: 'Sync Type', SubTitle: 'Choose your favorite sync service', }, Proxy: { Title: 'Enable CORS Proxy', SubTitle: 'Enable a proxy to avoid cross-origin restrictions', }, ProxyUrl: { Title: 'Proxy Endpoint', SubTitle: 'Only applicable to the built-in CORS proxy for this project', }, WebDav: { Endpoint: 'WebDAV Endpoint', UserName: 'User Name', Password: 'Password', }, UpStash: { Endpoint: 'UpStash Redis REST Url', UserName: 'Backup Name', Password: 'UpStash Redis REST Token', }, }, LocalState: 'Local Data', Overview: (overview: any) => { return `${overview.chat} chats,${overview.message} messages,${overview.prompt} prompts,${overview.mask} masks`; }, ImportFailed: 'Failed to import from file', }, Mask: { Splash: { Title: 'Mask Splash Screen', SubTitle: 'Show a mask splash screen before starting new chat', }, Builtin: { Title: 'Hide Builtin Masks', SubTitle: 'Hide builtin masks in mask list', }, }, Prompt: { Disable: { Title: 'Disable auto-completion', SubTitle: 'Input / to trigger auto-completion', }, List: 'Prompt List', ListCount: (builtin: number, custom: number) => `${builtin} built-in, ${custom} user-defined`, Edit: 'Edit', Modal: { Title: 'Prompt List', Add: 'Add One', Search: 'Search Prompts', }, EditModal: { Title: 'Edit Prompt', }, }, HistoryCount: { Title: 'Attached Messages Count', SubTitle: 'Number of sent messages attached per request', }, CompressThreshold: { Title: 'History Compression Threshold', SubTitle: 'Will compress if uncompressed messages length exceeds the value', }, Usage: { Title: 'Account Balance', SubTitle(used: any, total: any) { return `Used this month $${used}, subscription $${total}`; }, IsChecking: 'Checking...', Check: 'Check', NoAccess: 'Enter API Key to check balance', }, Access: { SaasStart: { Title: 'Use NextChat AI', Label: ' (Most Cost-Effective Option)', SubTitle: 'Maintained by NextChat, zero setup needed, unlock OpenAI o1, GPT-4o,' + ' Claude-3.5 and more', ChatNow: 'Start Now', }, AccessCode: { Title: 'Access Code', SubTitle: 'Access control Enabled', Placeholder: 'Enter Code', }, CustomEndpoint: { Title: 'Custom Endpoint', SubTitle: 'Use custom Azure or OpenAI service', }, Provider: { Title: 'Model Provider', SubTitle: 'Select Azure or OpenAI', }, OpenAI: { ApiKey: { Title: 'OpenAI API Key', SubTitle: 'User custom OpenAI Api Key', Placeholder: 'sk-xxx', }, Endpoint: { Title: 'OpenAI Endpoint', SubTitle: 'Must start with http(s):// or use /api/openai as default', }, }, Azure: { ApiKey: { Title: 'Azure Api Key', SubTitle: 'Check your api key from Azure console', Placeholder: 'Azure Api Key', }, Endpoint: { Title: 'Azure Endpoint', SubTitle: 'Example: ', }, ApiVerion: { Title: 'Azure Api Version', SubTitle: 'Check your api version from azure console', }, }, Anthropic: { ApiKey: { Title: 'Anthropic API Key', SubTitle: 'Use a custom Anthropic Key to bypass password access restrictions', Placeholder: 'Anthropic API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, ApiVerion: { Title: 'API Version (claude api version)', SubTitle: 'Select and input a specific API version', }, }, Baidu: { ApiKey: { Title: 'Baidu API Key', SubTitle: 'Use a custom Baidu API Key', Placeholder: 'Baidu API Key', }, SecretKey: { Title: 'Baidu Secret Key', SubTitle: 'Use a custom Baidu Secret Key', Placeholder: 'Baidu Secret Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'not supported, configure in .env', }, }, Tencent: { ApiKey: { Title: 'Tencent API Key', SubTitle: 'Use a custom Tencent API Key', Placeholder: 'Tencent API Key', }, SecretKey: { Title: 'Tencent Secret Key', SubTitle: 'Use a custom Tencent Secret Key', Placeholder: 'Tencent Secret Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'not supported, configure in .env', }, }, ByteDance: { ApiKey: { Title: 'ByteDance API Key', SubTitle: 'Use a custom ByteDance API Key', Placeholder: 'ByteDance API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, Alibaba: { ApiKey: { Title: 'Alibaba API Key', SubTitle: 'Use a custom Alibaba Cloud API Key', Placeholder: 'Alibaba Cloud API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, Moonshot: { ApiKey: { Title: 'Moonshot API Key', SubTitle: 'Use a custom Moonshot API Key', Placeholder: 'Moonshot API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, XAI: { ApiKey: { Title: 'XAI API Key', SubTitle: 'Use a custom XAI API Key', Placeholder: 'XAI API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, ChatGLM: { ApiKey: { Title: 'ChatGLM API Key', SubTitle: 'Use a custom ChatGLM API Key', Placeholder: 'ChatGLM API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, Stability: { ApiKey: { Title: 'Stability API Key', SubTitle: 'Use a custom Stability API Key', Placeholder: 'Stability API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, Iflytek: { ApiKey: { Title: 'Iflytek API Key', SubTitle: 'Use a Iflytek API Key', Placeholder: 'Iflytek API Key', }, ApiSecret: { Title: 'Iflytek API Secret', SubTitle: 'Use a Iflytek API Secret', Placeholder: 'Iflytek API Secret', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, }, CustomModel: { Title: 'Custom Models', SubTitle: 'Custom model options, seperated by comma', }, Google: { ApiKey: { Title: 'API Key', SubTitle: 'Obtain your API Key from Google AI', Placeholder: 'Google AI API Key', }, Endpoint: { Title: 'Endpoint Address', SubTitle: 'Example: ', }, ApiVersion: { Title: 'API Version (specific to gemini-pro)', SubTitle: 'Select a specific API version', }, GoogleSafetySettings: { Title: 'Google Safety Settings', SubTitle: 'Select a safety filtering level', }, }, }, Model: 'Model', CompressModel: { Title: 'Summary Model', SubTitle: 'Model used to compress history and generate title', }, Temperature: { Title: 'Temperature', SubTitle: 'A larger value makes the more random output', }, TopP: { Title: 'Top P', SubTitle: 'Do not alter this value together with temperature', }, MaxTokens: { Title: 'Max Tokens', SubTitle: 'Maximum length of input tokens and generated tokens', }, PresencePenalty: { Title: 'Presence Penalty', SubTitle: 'A larger value increases the likelihood to talk about new topics', }, FrequencyPenalty: { Title: 'Frequency Penalty', SubTitle: 'A larger value decreasing the likelihood to repeat the same line', }, TTS: { Enable: { Title: 'Enable TTS', SubTitle: 'Enable text-to-speech service', }, Autoplay: { Title: 'Enable Autoplay', SubTitle: 'Automatically generate speech and play, you need to enable the text-to-speech switch first', }, Model: 'Model', Voice: { Title: 'Voice', SubTitle: 'The voice to use when generating the audio', }, Speed: { Title: 'Speed', SubTitle: 'The speed of the generated audio', }, Engine: 'TTS Engine', }, Realtime: { Enable: { Title: 'Realtime Chat', SubTitle: 'Enable realtime chat feature', }, Provider: { Title: 'Model Provider', SubTitle: 'Switch between different providers', }, Model: { Title: 'Model', SubTitle: 'Select a model', }, ApiKey: { Title: 'API Key', SubTitle: 'API Key', Placeholder: 'API Key', }, Azure: { Endpoint: { Title: 'Endpoint', SubTitle: 'Endpoint', }, Deployment: { Title: 'Deployment Name', SubTitle: 'Deployment Name', }, }, Temperature: { Title: 'Randomness (temperature)', SubTitle: 'Higher values result in more random responses', }, }, }, Store: { DefaultTopic: 'New Conversation', BotHello: 'Hello! How can I assist you today?', Error: 'Something went wrong, please try again later.', Prompt: { History: (content: string) => `This is a summary of the chat history as a recap: ${content}`, Topic: 'Please generate a four to five word title summarizing our conversation without any lead-in, punctuation, quotation marks, periods, symbols, bold text, or additional text. Remove enclosing quotation marks.', Summarize: 'Summarize the discussion briefly in 200 words or less to use as a prompt for future context.', }, }, Copy: { Success: 'Copied to clipboard', Failed: 'Copy failed, please grant permission to access clipboard', }, Download: { Success: 'Content downloaded to your directory.', Failed: 'Download failed.', }, Context: { Toast: (x: any) => `With ${x} contextual prompts`, Edit: 'Current Chat Settings', Add: 'Add a Prompt', Clear: 'Context Cleared', Revert: 'Revert', }, Discovery: { Name: 'Discovery', }, FineTuned: { Sysmessage: 'You are an assistant that', }, SearchChat: { Name: 'Search', Page: { Title: 'Search Chat History', Search: 'Enter search query to search chat history', NoResult: 'No results found', NoData: 'No data', Loading: 'Loading...', SubTitle: (count: number) => `Found ${count} results`, }, Item: { View: 'View', }, }, Plugin: { Name: 'Plugin', Page: { Title: 'Plugins', SubTitle: (count: number) => `${count} plugins`, Search: 'Search Plugin', Create: 'Create', Find: 'You can find awesome plugins on github: ', }, Item: { Info: (count: number) => `${count} method`, View: 'View', Edit: 'Edit', Delete: 'Delete', DeleteConfirm: 'Confirm to delete?', }, Auth: { None: 'None', Basic: 'Basic', Bearer: 'Bearer', Custom: 'Custom', CustomHeader: 'Parameter Name', Token: 'Token', Proxy: 'Using Proxy', ProxyDescription: 'Using proxies to solve CORS error', Location: 'Location', LocationHeader: 'Header', LocationQuery: 'Query', LocationBody: 'Body', }, EditModal: { Title: (readonly: boolean) => `Edit Plugin ${readonly ? '(readonly)' : ''}`, Download: 'Download', Auth: 'Authentication Type', Content: 'OpenAPI Schema', Load: 'Load From URL', Method: 'Method', Error: 'OpenAPI Schema Error', }, }, Mask: { Name: 'Mask', Page: { Title: 'Prompt Template', SubTitle: (count: number) => `${count} prompt templates`, Search: 'Search Templates', Create: 'Create', }, Item: { Info: (count: number) => `${count} prompts`, Chat: 'Chat', View: 'View', Edit: 'Edit', Delete: 'Delete', DeleteConfirm: 'Confirm to delete?', }, EditModal: { Title: (readonly: boolean) => `Edit Prompt Template ${readonly ? '(readonly)' : ''}`, Download: 'Download', Clone: 'Clone', }, Config: { Avatar: 'Bot Avatar', Name: 'Bot Name', Sync: { Title: 'Use Global Config', SubTitle: 'Use global config in this chat', Confirm: 'Confirm to override custom config with global config?', }, HideContext: { Title: 'Hide Context Prompts', SubTitle: 'Do not show in-context prompts in chat', }, Artifacts: { Title: 'Enable Artifacts', SubTitle: 'Can render HTML page when enable artifacts.', }, CodeFold: { Title: 'Enable CodeFold', SubTitle: 'Automatically collapse/expand overly long code blocks when CodeFold is enabled', }, Share: { Title: 'Share This Mask', SubTitle: 'Generate a link to this mask', Action: 'Copy Link', }, }, }, NewChat: { Return: 'Return', Skip: 'Just Start', Title: 'Pick a Mask', SubTitle: 'Chat with the Soul behind the Mask', More: 'Find More', NotShow: 'Never Show Again', ConfirmNoShow: 'Confirm to disable?You can enable it in settings later.', }, UI: { Confirm: 'Confirm', Cancel: 'Cancel', Close: 'Close', Create: 'Create', Edit: 'Edit', Export: 'Export', Import: 'Import', Sync: 'Sync', Config: 'Config', }, Exporter: { Description: { Title: 'Only messages after clearing the context will be displayed', }, Model: 'Model', Messages: 'Messages', Topic: 'Topic', Time: 'Time', }, URLCommand: { Code: 'Detected access code from url, confirm to apply? ', Settings: 'Detected settings from url, confirm to apply?', }, SdPanel: { Prompt: 'Prompt', NegativePrompt: 'Negative Prompt', PleaseInput: (name: string) => `Please input ${name}`, AspectRatio: 'Aspect Ratio', ImageStyle: 'Image Style', OutFormat: 'Output Format', AIModel: 'AI Model', ModelVersion: 'Model Version', Submit: 'Submit', ParamIsRequired: (name: string) => `${name} is required`, Styles: { D3Model: '3d-model', AnalogFilm: 'analog-film', Anime: 'anime', Cinematic: 'cinematic', ComicBook: 'comic-book', DigitalArt: 'digital-art', Enhance: 'enhance', FantasyArt: 'fantasy-art', Isometric: 'isometric', LineArt: 'line-art', LowPoly: 'low-poly', ModelingCompound: 'modeling-compound', NeonPunk: 'neon-punk', Origami: 'origami', Photographic: 'photographic', PixelArt: 'pixel-art', TileTexture: 'tile-texture', }, }, Sd: { SubTitle: (count: number) => `${count} images`, Actions: { Params: 'See Params', Copy: 'Copy Prompt', Delete: 'Delete', Retry: 'Retry', ReturnHome: 'Return Home', History: 'History', }, EmptyRecord: 'No images yet', Status: { Name: 'Status', Success: 'Success', Error: 'Error', Wait: 'Waiting', Running: 'Running', }, Danger: { Delete: 'Confirm to delete?', }, GenerateParams: 'Generate Params', Detail: 'Detail', }, }; export default en;