const en = {
  menu: {
    modelManagement: 'Model Management',
    monitoringManagement: 'Monitoring Management',
    systemManagement: 'System Management',
    resourcesAndSupport: 'Resources & Support',
    launchModel: 'Launch Model',
    runningModels: 'Running Models',
    registerModel: 'Register Model',
    clusterInfo: 'Cluster Information',
    monitorCenter: 'Monitoring Center',
    logCenter: 'Log Center',
    userManagement: 'User Management',
    apiKeyManagement: 'API Key Management',
    securitySettings: 'Security Settings',
    auditCenter: 'Audit Center',
    xagent: 'Xagent AI Agent',
    contactUs: 'Contact Us',
    documentation: 'Documentation',
    website: 'Official Website',
  },
  model: {
    languageModels: 'Language Models',
    embeddingModels: 'Embedding Models',
    rerankModels: 'Rerank Models',
    imageModels: 'Image Models',
    audioModels: 'Audio Models',
    videoModels: 'Video Models',
    customModels: 'Custom Models',
    flexibleModels: 'Flexible Models',
  },
  launchModel: {
    modelType: 'Model Type',
    modelAbility: 'Model Ability',
    generate: 'Text Generation',
    embed: 'Embedding',
    rerank: 'Rerank',
    chat: 'Conversation',
    vision: 'Vision',
    reasoning: 'Reasoning',
    tools: 'Tool Use',
    audio: 'Audio Processing',
    omni: 'Multimodal (Omni)',
    hybrid: 'Hybrid Capability',
    text2image: 'Text to Image',
    image2image: 'Image to Image',
    inpainting: 'Image Inpainting',
    ocr: 'Optical Character Recognition (OCR)',
    audio2text: 'Audio to Text',
    text2audio: 'Text to Audio',
    text2audio_zero_shot: 'Text to Audio (Zero-Shot)',
    text2audio_voice_cloning: 'Text to Audio (Voice Cloning)',
    text2audio_emotion_control: 'Text to Audio (Emotion Control)',
    text2video: 'Text to Video',
    image2video: 'Image to Video',
    firstlastframe2video: 'First & Last Frame to Video',
    status: 'Status',
    cached: 'Cached',
    manageCachedModels: 'Manage Cached Models',
    manageVirtualEnvironments: 'Manage Virtual Environments',
    favorite: 'Favorite',
    unfavorite: 'Unfavorite',
    search: 'Search for model name and description',
    searchModelType: 'Search for {{modelType}} model name',
    searchInstruction: 'Type {{hotkey}} to search',
    clickToLaunchModel: 'Click with mouse to launch the model',
    dimensions: 'dimensions',
    maxTokens: 'max tokens',
    contextLength: 'context length',
    chatModel: 'chat model',
    generateModel: 'generate model',
    otherModel: 'other model',
    confirmDeleteCustomModel:
      'Are you sure to delete custom model {{modelName}}? This behavior is irreversible.',
    modelName: 'Model Name',
    envPath: 'Environment Path',
    realPath: 'Real Path',
    copyEnvPath: 'Copy environment path',
    viewPackages: 'View Packages',
    installedPackages: 'Installed Packages',
    packageName: 'Package Name',
    version: 'Version',
    location: 'Location',
    packagesCount: 'Packages Count',
    size: 'Size',
    pythonVersion: 'Python Version',
    createdAt: 'Created At',
    noVirtualEnvironmentsForNow: 'No virtual environments for now!',
    noPackagesInstalled: 'No packages installed',
    lastConfig: 'Last Config',
    configCache: 'Config Cache',
    newCache: 'New Cache',
    noConfigCache: 'No config cache for now!',
    loadCache: 'Use',
    deleteCache: 'Delete Cache',
    lastUpdated: 'Last Updated',
    defaultConfig: 'Default Config',
    confirmDeleteConfigCache: 'Delete this cached configuration? This action is irreversible.',
    invalidConfigCache: 'The model engine required by this cached configuration is unavailable.',
    commandLineParsing: 'Command Line Argument Parsing',
    copyToCommandLine: 'Copy as Command Line Command',
    modelEngine: 'Model Engine',
    modelFormat: 'Model Format',
    modelSize: 'Model Size',
    quantization: 'Quantization',
    multimodelProjector: 'Multimodel Projector',
    nGPU: 'GPU Count per Replica',
    nGPUPerWorker: 'GPU Count per Worker',
    nGPUDevice: 'Device',
    gpuCount: 'GPU: {{count}}',
    nGpuLayers: 'N GPU Layers',
    replica: 'Replica',
    advancedConfiguration: 'Advanced Configuration',
    runtimeEnvironment: 'Runtime Environment',
    engineParameters: 'Engine Parameters',
    engineQuantizationParameters: 'Quantization Parameters',
    engineAdditionalParameters: 'Additional Parameters',
    modelUid: 'Model UID',
    modelUidPlaceholder: 'Model name by default',
    requestLimits: 'Request Limits',
    requestLimitsPlaceholder: 'The request limit for this model, default is None',
    workerIp: 'Worker IP',
    workerIpPlaceholder:
      'Specify worker IPs in distributed mode. Select multiple or type one, then Add.',
    workerCount: 'Worker Count',
    workerCountPlaceholder: 'Worker Count',
    GPUIdx: 'GPU Idx',
    GPUIdxPlaceholder: 'Specify the GPU indexes where the model is located, e.g. 0,1,2',
    downloadHub: 'Download Hub',
    downloadHubPlaceholder: 'Download_hub',
    modelPath: 'Model Path',
    modelPathPlaceholder:
      'For PyTorch, provide the model directory. For GGML/GGUF, provide the model file path.',
    GGUFQuantization: 'GGUF Quantization',
    GGUFQuantizationPlaceholder: 'Quantizes the Transformer part.',
    GGUFModelPath: 'GGUF Model Path',
    GGUFModelPathPlaceholder: 'Should be a file ending with .gguf.',
    lightningVersions: 'Lightning Versions',
    lightningVersionsPlaceholder: 'Lightning Versions',
    lightningModelPath: 'Lightning Model Path',
    lightningModelPathPlaceholder: 'Lightning Model Path',
    enableThinking: 'Enable Thinking',
    enableMtp: 'Enable MTP',
    speculativeDecoding: 'Speculative Decoding',
    draftModelQuantization: 'Drafter Quantization',
    draftModelQuantizationPlaceholder: 'Defaults to the first available',
    numSpeculativeTokens: 'Speculative Tokens',
    numSpeculativeTokensPlaceholder: 'engine default',
    numSpeculativeTokensPlaceholderValue: 'engine default: {{value}}',
    enableMtpTip:
      'Runs a small drafter alongside the model that proposes several tokens per round, which the model then verifies in one pass. Output is identical, decoding is faster. Enabling it downloads an extra drafter checkpoint.',
    draftModelQuantizationTip:
      'A drafter is small, so quantizing it saves little memory while lowering the acceptance rate. The unquantized conversion is recommended even for a quantized target model.',
    numSpeculativeTokensTip:
      'Tokens the drafter proposes per round, including the bonus token. Left unset, MLX reads the drafter training depth (4 for Gemma 4). For Gemma 4, llama.cpp, vLLM, and SGLang follow the size recipe: 2 for E2B, 4 for E4B and 26B-A4B, and 4 for 12B and 31B (the lower end of their recommended 4–8 range).',
    parsingReasoningContent: 'Parsing Reasoning Content',
    CPUOffload: 'CPU Offload',
    CPUOffloadTip:
      'Unload the model to the CPU. Recommend to enable this when resources are limited or when using the GGUF option.',
    loraConfig: 'Lora Config',
    loraModelConfig: 'Lora Model Config',
    virtualEnvConfig: 'Virtual Environments Config',
    modelVirtualEnv: 'Model Virtual Environments',
    virtualEnvPackage: 'Virtual Environment Packages',
    envVariable: 'Environment Variables',
    envVariableConfig: 'Environment Variable Config',
    additionalQuantizationParametersForInferenceEngine:
      'Additional quantization parameters passed to the inference engine',
    additionalParametersForInferenceEngine: 'Additional parameters passed to the inference engine',
    enterIntegerGreaterThanZero: 'Please enter an integer greater than 0.',
    enterCommaSeparatedNumbers: 'Please enter numeric data separated by commas, for example: 0,1,2',
    device: 'Device',
    loraLoadKwargsForImageModel: 'Lora Load Kwargs for Image Model',
    loraFuseKwargsForImageModel: 'Lora Fuse Kwargs for Image Model',
    launch: 'Launch',
    copyJson: 'Copy Json',
    placeholderTip: 'Please enter',
    fillCompleteParametersBeforeAdding: 'Please fill in the complete parameters before adding!',
    model_format: 'model_format',
    model_size_in_billions: 'model_size_in_billions',
    quantizations: 'quantizations',
    real_path: 'real_path',
    path: 'path',
    ipAddress: 'IP Address',
    copyRealPath: 'Copy real_path',
    copyPath: 'Copy path',
    noCacheForNow: 'No cache for now!',
    confirmDeleteCacheFiles: 'Confirm deletion of cache files? This action is irreversible.',
    confirmDeleteVirtualEnv:
      'Confirm deletion of virtual environment? This action is irreversible.',
    commandLineTip: 'Please confirm whether the model names are consistent.',
    featured: 'featured',
    all: 'all',
    cancelledSuccessfully: 'Cancelled Successfully!',
    mustBeUnique: '{{key}} must be unique',
    launchProgress: 'Launch Progress',
    launchCompleted: 'Model deployment completed',
    launchCompletedWithAutostart: 'Model deployment completed and added to autostart',
    saveAutostart: 'Autostart after successful launch',
    autostartSaveFailed: 'Model launched, but failed to save autostart config',
    launchCanceled: 'Deployment stopped',
    initializing: 'Initializing...',
    moreDetails: 'More Details',
  },
  runningModels: {
    searchPlaceholder: 'Search model name or model UID...',
    loadingModels: 'Loading models...',
    fetchingModelList: 'Fetching the latest running model list.',
    noRunningModels: 'No models running',
    launchModelFirst: 'Launch a model to show it here.',
    noModelsFound: 'No models found',
    tryChangingSearchKeywords: 'Try changing your search keywords.',
    selectModel: 'Select a model',
    selectModelDescription: 'Click an item in the left list to view details.',
    tryApi: 'Try API',
    refresh: 'Refresh',
    terminateConfirmBody:
      'The current model {{name}} has {{replica}} replicas. When the cluster is busy or the replica count is high, termination may take several minutes. The total duration depends on the slowest Worker node. Please do not click Terminate repeatedly.',
    terminateConfirmOk: 'Terminate',
    baseInfo: 'Basic Information',
    modelType: 'Model Type',
    modelEngine: 'Model Engine',
    modelFormat: 'Model Format',
    modelSize: 'Model Size',
    quantization: 'Quantization',
    resources: 'Resource Allocation',
    workerAddress: 'Worker Node',
    gpuIndexes: 'GPU Indexes',
    gpuMemory: 'GPU Memory',
    replicaDetail: 'Replica Details',
    removeReplicaConfirm:
      'Are you sure you want to remove replica {{replicaId}} of model {{modelUid}}?',
    autostartEnabled: 'Autostart configured',
    removeAutostartSuccess: 'Removed autostart for {{modelUid}}',
    removeAutostartFailed: 'Failed to remove autostart',
  },
  registerModel: {
    modelName: 'Model Name',
    modelDescription: 'Model Description (Optional)',
    contextLength: 'Context Length',
    dimensions: 'Dimensions',
    maxTokens: 'Max Tokens',
    modelPath: 'Model Path',
    modelLanguages: 'Model Languages',
    languages: 'Languages',
    multilingual: 'Multilingual',
    modelAbilities: 'Model Abilities',
    modelFamily: 'Model Family',
    chatTemplate: 'Chat Template',
    test: 'test',
    testResult: 'test result',
    noTestResults: 'No test results...',
    stopTokenIds: 'Stop Token Ids',
    stop: 'Stop',
    reasoningStartTag: 'Reasoning Start Tag',
    reasoningEndTag: 'Reasoning End Tag',
    toolParser: 'Tool Parser',
    launcher: 'Launcher',
    launcherArguments: 'Launcher Arguments (Optional)',
    registerModel: 'Register Model',
    messagesExample: 'Messages Example',
    JSONFormat: 'JSON Format',
    modelSpecs: 'Model Specs',
    modelSizeBillions: 'Model Size in Billions',
    quantization: 'Quantization',
    quantizationOptional: 'Quantization (Optional)',
    controlnet: 'Controlnet',
    packages: 'Packages in Virtual Env',
    more: 'more',
    modelFormat: 'Model Format',
    enterNumberGreaterThanZero: 'Please enter a number greater than 0.',
    carefulQuantizationForModelRegistration:
      'For GPTQ/AWQ/FP8/MLX models, please be careful to fill in the quantization corresponding to the model you want to register.',
    quantizationCannotBeEmpty: 'Quantization cannot be left empty.',
    enterInteger: 'Please enter an integer.',
    enterIntegerGreaterThanZero: 'Please enter an integer greater than 0.',
    showJsonView: 'Show custom JSON configuration used by API',
    hiddenJsonView: 'Hide custom JSON configuration used by API',
    copyAll: 'Copy all',
    alphanumericWithHyphensUnderscores:
      'Alphanumeric characters with properly placed hyphens and underscores. Must not match any built-in model names.',
    chooseBuiltInOrCustomModel: 'You can choose from the built-in models or input your own.',
    chooseOnlyBuiltInModel: 'You can only choose from the built-in models.',
    provideModelDirectoryPath: 'Provide the model directory path.',
    provideModelLauncher: 'Provide the model launcher.',
    jsonArgumentsForLauncher:
      'A JSON-formatted dictionary representing the arguments passed to the Launcher.',
    provideModelDirectoryOrFilePath:
      'For PyTorch, provide the model directory. For GGUF, provide the model file path.',
    ensureChatTemplatePassesTest:
      'Please make sure this chat_template passes the test by clicking the TEST button on the right. Please note that this test may not cover all cases and will only be used for the most basic case.',
    testFailurePreventsChatWorking:
      'Please note that failure to pass test may prevent chats from working properly.',
    stopControlForChatModels: 'int type, used to control the stopping of chat models',
    stopControlStringForChatModels: 'string type, used to control the stopping of chat models',
    enterJsonFormattedDictionary: 'Please enter the JSON-formatted dictionary.',
    autoFill: 'Auto Fill',
    fillInModelPathFirst: 'Please fill in modelPath first',
    fillInModelFamilyFirst: 'Please select model family first',
  },
  monitorCenter: {
    notConfigured:
      'Monitoring not configured. Please set XINFERENCE_GRAFANA_URL environment variable.',
    tab: {
      overview: 'Overview',
      modelLoad: 'Model Load',
      llmSlo: 'LLM SLO',
      gpu: 'GPU',
      host: 'Host',
      security: 'Security',
    },
    time: {
      '5m': 'Last 5 minutes',
      '15m': 'Last 15 minutes',
      '30m': 'Last 30 minutes',
      '1h': 'Last 1 hour',
      '3h': 'Last 3 hours',
      '6h': 'Last 6 hours',
      '12h': 'Last 12 hours',
      '24h': 'Last 24 hours',
      '7d': 'Last 7 days',
      '2d': 'Last 2 days',
    },
    refresh: {
      off: 'Off',
      '10s': '10 seconds',
      '30s': '30 seconds',
      '1m': '1 minute',
      '5m': '5 minutes',
    },
    absoluteRange: 'Absolute time range',
    applyTimeRange: 'Apply time range',
    invalidTimeRange: 'End time must be later than start time',
    manualRefresh: 'Refresh dashboard',
    config: {
      button: 'Monitor Config',
      title: 'Monitor Configuration',
      grafanaUrl: 'Grafana URL',
      datasourceName: 'Datasource Name',
      alertDatasourceName: 'Alert Datasource Name',
      clusterName: 'Cluster Name',
      dashboards: 'Dashboard UIDs',
      testConnection: 'Test Connection',
      testing: 'Testing…',
      connectionOk: 'Connected',
      connectionFailed: 'Connection failed',
      reset: 'Reset to Defaults',
      resetConfirm: 'Reset monitor config to defaults?',
      save: 'Save',
      cancel: 'Cancel',
      saved: 'Saved',
      source: {
        db: 'Database',
        env: 'Environment',
        default: 'Default',
      },
    },
  },
  logCenter: {
    notConfigured: 'Logs are not configured. Please enable the Elasticsearch log service.',
    allNodes: 'All nodes',
    searchPlaceholder: 'Search log content, fields, or keywords',
    refresh: 'Refresh logs',
    loading: 'Loading logs...',
    logLevel: 'Log level',
    nodeType: 'Node type',
    clearFilters: 'Clear all',
    noLogs: 'No matching logs',
    totalHits: '{{count}} total',
    prevPage: 'Previous',
    nextPage: 'Next',
    time: 'Time',
    level: 'Level',
    node: 'Node',
    message: 'Message',
    detail: {
      tableTab: 'Table',
      jsonTab: 'JSON',
      action: 'Action',
      field: 'Field',
      value: 'Value',
      filterFor: 'Filter for value',
      filterOut: 'Filter out value',
      copyJson: 'Copy JSON',
      copied: 'Copied',
      viewContext: 'View context',
      contextTitle: 'Log context',
      contextError: 'No context is available for this log.',
      contextFetchError: 'Failed to load context.',
      loadNewer: 'Load newer logs',
      loadOlder: 'Load older logs',
      newerDocs: 'newer logs',
      olderDocs: 'older logs',
    },
  },
  clusterInfo: {
    pageDescription:
      'View the current state of your XInference cluster — supervisors, workers, and their hardware resources.',
    supervisor: 'Supervisor',
    workers: 'Workers',
    workerDetails: 'Worker Details',
    count: 'Count',
    cpuInfo: 'CPU Info',
    usage: 'Usage: ',
    total: 'Total: ',
    cpuMemoryInfo: 'CPU Memory Info',
    version: 'Version',
    release: 'Release: ',
    commit: 'Commit: ',
    gpuInfo: 'GPU Info',
    gpuMemoryInfo: 'GPU Memory Info',
    address: 'Address',
    item: 'Item',
    value: 'Value',
    nodeType: 'Node Type',
    cpuUsage: 'CPU Usage',
    cpuTotal: 'CPU Total',
    memUsage: 'Mem Usage',
    memTotal: 'Mem Total',
    gpuCount: 'GPU Count',
    gpuLoad: 'GPU Load',
    gpuMemUsage: 'GPU Mem Usage',
    gpuMemTotal: 'GPU Mem Total',
    worker: 'Worker',
  },
  userManagement: {
    pageDescription: 'Manage users who can access the Xinference cluster.',
    createUser: 'Create User',
    editUser: 'Edit User',
    editPermissionsTitle: 'Edit Permissions - {{username}}',
    username: 'Username',
    usernamePlaceholder: 'e.g. alice',
    usernameRequired: 'Username is required',
    password: 'Password',
    passwordPlaceholder: 'Enter password',
    passwordRequired: 'Password is required',
    confirmPassword: 'Confirm Password',
    confirmPasswordPlaceholder: 'Re-enter password',
    passwordMismatch: 'Passwords do not match',
    passwordTooShort: 'Password must be longer than 8 characters',
    newPassword: 'New Password',
    changePassword: 'Change Password',
    changePasswordTitle: 'Change Password - {{username}}',
    passwordChanged: 'Password changed successfully!',
    permissions: 'Permissions',
    selectAll: 'Select all',
    expandPermissions: 'Expand permissions',
    collapsePermissions: 'Collapse permissions',
    source: 'Source',
    createdAt: 'Created At',
    enabled: 'Enabled',
    enabledStatus: 'Enabled',
    disabledStatus: 'Disabled',
    currentUser: 'Current user',
    currentUserToggleHint: 'You cannot disable yourself',
    mustChangePwd: 'Must change password',
    noUsers: 'No users found.',
    loading: 'Loading users...',
    create: 'Create',
    creating: 'Creating...',
    saving: 'Saving...',
    createSuccess: 'User created successfully!',
    updateSuccess: 'User updated successfully!',
    deleteTitle: 'Delete User',
    deleteDescription: 'Are you sure you want to delete {{username}}? This action is irreversible.',
    permissionGroups: {
      admin: 'admin',
      models: 'models',
      keys: 'keys',
      users: 'users',
      cache: 'cache',
      virtualenv: 'virtualenv',
      logs: 'logs',
      monitor: 'monitor',
    },
    permissionLabels: {
      admin: 'Administrator',
      'models:list': 'View model list',
      'models:read': 'Read model details',
      'models:write': 'Launch/stop models',
      'models:register': 'Register/unregister models',
      'keys:create': 'Create API Key',
      'keys:manage': 'Manage API Keys',
      'users:manage': 'Manage users',
      'cache:list': 'View cache',
      'cache:delete': 'Delete cache',
      'virtualenv:list': 'View virtual environments',
      'virtualenv:delete': 'Delete virtual environments',
      'logs:list': 'View logs',
      'monitor:view': 'View monitoring',
    },
  },
  apiKey: {
    pageDescription: 'Manage API keys for accessing the Xinference API.',
    createKey: 'Create API Key',
    keyCreated: 'API Key Created',
    saveKeyWarning: 'Copy and store your API key now. It will not be shown again.',
    name: 'Name',
    namePlaceholder: 'e.g. my-app-key',
    nameRequired: 'Name is required',
    description: 'Description',
    descriptionPlaceholder: 'Optional description',
    key: 'Key',
    createdAt: 'Created At',
    expiresAt: 'Expires At',
    expiresAtHint: 'Leave empty for no expiration.',
    status: 'Status',
    enabled: 'Enabled',
    active: 'Active',
    disabled: 'Disabled',
    expired: 'Expired',
    revealKey: 'Reveal key',
    hideKey: 'Hide key',
    noKeys: 'No API keys yet. Create one to get started.',
    loading: 'Loading API keys...',
    create: 'Create',
    creating: 'Creating...',
    deleteTitle: 'Delete API Key',
    deleteDescription: 'Are you sure you want to delete this API key? This action is irreversible.',
    updateSuccess: 'API key updated successfully!',
    saving: 'Saving...',
    owner: 'Owner',
    ownerPlaceholder: 'Leave empty to use current user',
    ownerHint: 'Leave empty to assign it to the current user.',
    permissionType: 'Permission Type',
    permissionAll: 'All Models',
    permissionByType: 'By Model Type',
    permissionById: 'By Model ID',
    permissionMixed: 'By Type + Instance (Mixed)',
    modelTypes: 'Model Types',
    modelTypesPlaceholder: 'Select model types',
    modelIds: 'Model IDs',
    modelIdsPlaceholder: 'Select model IDs',
    modelsLoading: 'Loading models...',
    usersLoading: 'Loading users...',
    modelPermissions: 'Model Permissions',
    bannedCount: 'Banned Count',
    bannedList: 'Banned List',
    noBanned: 'No banned records',
    view: 'View',
  },
  securitySettings: {
    pageDescription:
      'Configure failed-request rate limits and manage currently banned IPs and API keys.',
    rateLimitConfig: 'Rate Limit Policy',
    rateLimitDesc:
      'Set the failure threshold, counting window, and ban duration for IP and API key layers.',
    ipLayer: 'IP Layer',
    ipLayerDesc: 'Counts failed requests by client IP.',
    keyLayer: 'API Key Layer',
    keyLayerDesc: 'Counts failed requests by IP and API key pair.',
    max_failures: 'Max Failures',
    window_seconds: 'Window Seconds',
    ban_seconds: 'Ban Seconds',
    notConfigured: 'Not configured',
    failuresAllowed: 'failure threshold',
    currentBlocks: 'current blocks',
    bannedIps: 'Banned IPs',
    bannedIpsDesc: 'Client addresses temporarily blocked after exceeding the IP layer threshold.',
    bannedKeys: 'Banned API Keys',
    bannedKeysDesc:
      'IP and API key pairs temporarily blocked after exceeding the API key layer threshold.',
    noBannedIps: 'No banned IPs.',
    noBannedKeys: 'No banned API keys.',
    ip: 'IP',
    keyId: 'Key ID',
    remaining: 'Remaining',
    refresh: 'Refresh',
    saveConfig: 'Save Policy',
    saveSuccess: 'Security policy updated.',
    unban: 'Unban',
    unbanAll: 'Unban All',
    unbanSuccess: 'Ban removed.',
    clearTitle: 'Unban All',
    clearIpsDescription: 'Unban all IPs? These clients will regain access immediately.',
    clearKeysDescription: 'Unban all API keys? These pairs will regain access immediately.',
    seconds: '{{count}} sec',
    minutes: '{{count}} min',
    hours: '{{count}} hr',
  },
  auditCenter: {
    pageDescription:
      'Search API access audit records across users, API keys, model calls, and abnormal access.',
    totalEvents: 'Audit Events',
    successEvents: 'Successful Events',
    riskEvents: 'Risk Events',
    apiKeyEvents: 'API Key Events',
    matchingRecords: 'matching records',
    currentPage: 'current page',
    filters: 'Filters',
    resetFilters: 'Reset Filters',
    refresh: 'Refresh',
    loading: 'Loading...',
    noRecords: 'No audit records.',
    totalHits: '{{count}} records',
    prevPage: 'Previous',
    nextPage: 'Next',
    detailTitle: 'Audit Detail',
    rawJson: 'Raw JSON',
    copyJson: 'Copy JSON',
    time: 'Time',
    category: 'Category',
    identity: 'Identity',
    endpoint: 'Endpoint',
    apiKeyNameColumn: 'API Key Name',
    model: 'Model',
    modelIdColumn: 'Model ID',
    status: 'Status',
    latency: 'Latency',
    latencyMs: '{{value}} ms',
    user: 'User',
    userPlaceholder: 'Username',
    apiKeyName: 'API Key',
    apiKeyNamePlaceholder: 'Key name',
    modelId: 'Model ID',
    modelIdPlaceholder: 'Model UID',
    modelName: 'Model Name',
    modelNamePlaceholder: 'Model name',
    modelType: 'Model Type',
    clientIp: 'Client IP',
    clientIpPlaceholder: 'IP address',
    authType: 'Auth Type',
    allStatuses: 'All statuses',
    allCategories: 'All categories',
    allAuthTypes: 'All auth types',
    allModelTypes: 'All model types',
    categoryOptions: {
      inference: 'Inference',
      admin: 'Admin',
      auth: 'Auth',
      unknown: 'Unknown',
    },
    authTypeOptions: {
      api_key: 'API Key',
      jwt: 'JWT',
      none: 'None',
    },
    statusOptions: {
      success: 'Success',
      error: 'Error',
      denied: 'Denied',
      login_failed: 'Login Failed',
      model_not_found: 'Model Not Found',
      ip_banned: 'IP Banned',
      key_banned: 'Key Banned',
      key_expired: 'Key Expired',
      key_disabled: 'Key Disabled',
      invalid_key: 'Invalid Key',
      invalid_token: 'Invalid Token',
      insufficient_scope: 'Insufficient Scope',
      user_disabled: 'User Disabled',
      no_credentials: 'No Credentials',
      unknown: 'Unknown',
    },
    modelTypeOptions: {
      LLM: 'Language Model',
      embedding: 'Embedding',
      rerank: 'Rerank',
      image: 'Image',
      video: 'Video',
      audio: 'Audio',
    },
  },
  login: {
    welcome: 'Welcome back',
    welcomeDesc: 'Centrally manage and deploy your LLM, embedding, image, and multimodal models.',
    login: 'Login',
    loginDesc: 'Enter your account information to continue',
    username: 'Username',
    password: 'Password',
    mustChangePasswordDesc: 'You need to change your password before continuing on first login.',
    changePasswordUserMissing: 'Unable to identify the current user. Please log in again.',
    or: 'or',
    ssoLogin: 'Sign in with SSO',
  },
  setup: {
    welcome: 'Welcome to Xinference',
    welcomeDesc:
      'This instance has no accounts yet. Create the first administrator account to finish setting up your deployment.',
    title: 'Set up admin account',
    description: 'Create the first administrator account to continue.',
    passwordTooShort: 'Password must be at least {{min}} characters',
    submit: 'Create Admin Account',
    createSuccess: 'Admin account created. Sign in with your new credentials.',
    createFailed: 'Setup failed. Please try again.',
    adminAccessNote: 'This account will have full administrator access.',
    featureServingTitle: 'Model serving made easy',
    featureServingDesc:
      'Launch state-of-the-art LLM, embedding, and multimodal models with a single command.',
    featureApiTitle: 'OpenAI-compatible API',
    featureApiDesc:
      'Drop-in RESTful API, RPC, CLI, and Web UI access -- works with your existing tooling.',
    featureDistributedTitle: 'Distributed by design',
    featureDistributedDesc:
      'Scale inference across GPUs and CPUs, on a single machine or a cluster.',
  },
  common: {
    accessDenied: 'Access Denied',
    accessDeniedDescription: 'You do not have the required permission ({{scope}}) to access this page.',
    valueEmpty: 'Cannot be empty',
    patternError: 'Invalid format, please check',
    loginSuccess: 'Login successful',
    loginOut: 'Log out',
    loginOutSuccess: 'Logged out successfully',
    copySuccess: 'Copied successfully!',
    deleteSuccess: 'Deleted successfully!',
    lastUpdateTime: 'Last update time',
    noOptions: 'No data available',
    goBack: 'Go Back',
    add: 'Add',
    delete: 'Delete',
    edit: 'Edit',
    modify: 'Modify',
    from: 'From',
    to: 'To',
    clear: 'Clear',
    today: 'Today',
    weekDays: {
      sun: 'Sun',
      mon: 'Mon',
      tue: 'Tue',
      wed: 'Wed',
      thu: 'Thu',
      fri: 'Fri',
      sat: 'Sat',
    },
    cancel: 'Cancel',
    confirm: 'Confirm',
    update: 'Update',
    deploy: 'Deploy',
    stop: 'Stop',
    packUp: 'Collapse',
    unfold: 'Expand',
    operation: 'Operation',
    notice: 'Notice',
    itemsCount: '{{count}} items',
    autoCompleteOptionsTips:
      'Common parameters are listed below. You can also enter a custom parameter.',
  },
} as const;
export default en;
