mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 00:03:46 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			479 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			479 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { getClientConfig } from "../config/client";
 | 
						||
import { SubmitKey } from "../store/config";
 | 
						||
import { LocaleType } from "./index";
 | 
						||
 | 
						||
// 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
 | 
						||
      ? "Invalid API Key, please check it in [Settings](/#/settings) page."
 | 
						||
      : "Unauthorized access, please enter access code in [auth](/#/auth) page, or enter your OpenAI API Key.",
 | 
						||
  },
 | 
						||
  Auth: {
 | 
						||
    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",
 | 
						||
  },
 | 
						||
  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",
 | 
						||
    },
 | 
						||
    Commands: {
 | 
						||
      new: "Start a new chat",
 | 
						||
      newm: "Start a new chat with mask",
 | 
						||
      next: "Next Chat",
 | 
						||
      prev: "Previous Chat",
 | 
						||
      clear: "Clear Context",
 | 
						||
      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) => {
 | 
						||
      var inputHints = `${submitKey} to send`;
 | 
						||
      if (submitKey === String(SubmitKey.Enter)) {
 | 
						||
        inputHints += ", Shift + Enter to wrap";
 | 
						||
      }
 | 
						||
      return inputHints + ", / to search prompts, : to use commands";
 | 
						||
    },
 | 
						||
    Send: "Send",
 | 
						||
    Config: {
 | 
						||
      Reset: "Reset to Default",
 | 
						||
      SaveAs: "Save as Mask",
 | 
						||
    },
 | 
						||
    IsContext: "Contextual Prompt",
 | 
						||
  },
 | 
						||
  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",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  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",
 | 
						||
    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",
 | 
						||
    },
 | 
						||
    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",
 | 
						||
    },
 | 
						||
    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: {
 | 
						||
      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 starts 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",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      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: "Enter your Google AI Studio API Key",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Endpoint Address",
 | 
						||
          SubTitle: "Example:",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVersion: {
 | 
						||
          Title: "API Version (specific to gemini-pro)",
 | 
						||
          SubTitle: "Select a specific API version",
 | 
						||
        },
 | 
						||
      },
 | 
						||
    },
 | 
						||
 | 
						||
    Model: "Model",
 | 
						||
    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",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  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",
 | 
						||
  },
 | 
						||
  Plugin: {
 | 
						||
    Name: "Plugin",
 | 
						||
  },
 | 
						||
  FineTuned: {
 | 
						||
    Sysmessage: "You are an assistant that",
 | 
						||
  },
 | 
						||
  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",
 | 
						||
      },
 | 
						||
      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?",
 | 
						||
  },
 | 
						||
};
 | 
						||
 | 
						||
export default en;
 |