mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 08:13:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			505 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			505 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { SubmitKey } from "../store/config";
 | 
						||
import { PartialLocaleType } from "../locales/index";
 | 
						||
import { getClientConfig } from "../config/client";
 | 
						||
 | 
						||
const isApp = !!getClientConfig()?.isApp;
 | 
						||
 | 
						||
const pt: PartialLocaleType = {
 | 
						||
  WIP: "Em breve...",
 | 
						||
  Error: {
 | 
						||
    Unauthorized: isApp
 | 
						||
      ? "Chave API inválida, por favor verifique em [Configurações](/#/settings)."
 | 
						||
      : "Acesso não autorizado, por favor insira o código de acesso em [auth](/#/auth) ou insira sua Chave API OpenAI.",
 | 
						||
  },
 | 
						||
  Auth: {
 | 
						||
    Title: "Necessário Código de Acesso",
 | 
						||
    Tips: "Por favor, insira o código de acesso abaixo",
 | 
						||
    SubTips: "Ou insira sua Chave API OpenAI",
 | 
						||
    Input: "código de acesso",
 | 
						||
    Confirm: "Confirmar",
 | 
						||
    Later: "Depois",
 | 
						||
  },
 | 
						||
  ChatItem: {
 | 
						||
    ChatItemCount: (count: number) => `${count} mensagens`,
 | 
						||
  },
 | 
						||
  Chat: {
 | 
						||
    SubTitle: (count: number) => `${count} mensagens`,
 | 
						||
    EditMessage: {
 | 
						||
      Title: "Editar Todas as Mensagens",
 | 
						||
      Topic: {
 | 
						||
        Title: "Tópico",
 | 
						||
        SubTitle: "Mudar o tópico atual",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Actions: {
 | 
						||
      ChatList: "Ir Para Lista de Chat",
 | 
						||
      CompressedHistory: "Prompt de Memória Histórica Comprimida",
 | 
						||
      Export: "Exportar Todas as Mensagens como Markdown",
 | 
						||
      Copy: "Copiar",
 | 
						||
      Stop: "Parar",
 | 
						||
      Retry: "Tentar Novamente",
 | 
						||
      Pin: "Fixar",
 | 
						||
      PinToastContent: "Fixada 1 mensagem para prompts contextuais",
 | 
						||
      PinToastAction: "Visualizar",
 | 
						||
      Delete: "Deletar",
 | 
						||
      Edit: "Editar",
 | 
						||
    },
 | 
						||
    Commands: {
 | 
						||
      new: "Iniciar um novo chat",
 | 
						||
      newm: "Iniciar um novo chat com máscara",
 | 
						||
      next: "Próximo Chat",
 | 
						||
      prev: "Chat Anterior",
 | 
						||
      clear: "Limpar Contexto",
 | 
						||
      del: "Deletar Chat",
 | 
						||
    },
 | 
						||
    InputActions: {
 | 
						||
      Stop: "Parar",
 | 
						||
      ToBottom: "Para o Mais Recente",
 | 
						||
      Theme: {
 | 
						||
        auto: "Automático",
 | 
						||
        light: "Tema Claro",
 | 
						||
        dark: "Tema Escuro",
 | 
						||
      },
 | 
						||
      Prompt: "Prompts",
 | 
						||
      Masks: "Máscaras",
 | 
						||
      Clear: "Limpar Contexto",
 | 
						||
      Settings: "Configurações",
 | 
						||
    },
 | 
						||
    Rename: "Renomear Chat",
 | 
						||
    Typing: "Digitando…",
 | 
						||
    Input: (submitKey: string) => {
 | 
						||
      var inputHints = `${submitKey} para enviar`;
 | 
						||
      if (submitKey === String(SubmitKey.Enter)) {
 | 
						||
        inputHints += ", Shift + Enter para quebrar linha";
 | 
						||
      }
 | 
						||
      return inputHints + ", / para buscar prompts, : para usar comandos";
 | 
						||
    },
 | 
						||
    Send: "Enviar",
 | 
						||
    Config: {
 | 
						||
      Reset: "Redefinir para Padrão",
 | 
						||
      SaveAs: "Salvar como Máscara",
 | 
						||
    },
 | 
						||
    IsContext: "Prompt Contextual",
 | 
						||
  },
 | 
						||
  Export: {
 | 
						||
    Title: "Exportar Mensagens",
 | 
						||
    Copy: "Copiar Tudo",
 | 
						||
    Download: "Baixar",
 | 
						||
    MessageFromYou: "Mensagem De Você",
 | 
						||
    MessageFromChatGPT: "Mensagem De ChatGPT",
 | 
						||
    Share: "Compartilhar para ShareGPT",
 | 
						||
    Format: {
 | 
						||
      Title: "Formato de Exportação",
 | 
						||
      SubTitle: "Markdown ou Imagem PNG",
 | 
						||
    },
 | 
						||
    IncludeContext: {
 | 
						||
      Title: "Incluindo Contexto",
 | 
						||
      SubTitle: "Exportar prompts de contexto na máscara ou não",
 | 
						||
    },
 | 
						||
    Steps: {
 | 
						||
      Select: "Selecionar",
 | 
						||
      Preview: "Pré-visualizar",
 | 
						||
    },
 | 
						||
    Image: {
 | 
						||
      Toast: "Capturando Imagem...",
 | 
						||
      Modal:
 | 
						||
        "Pressione longamente ou clique com o botão direito para salvar a imagem",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Select: {
 | 
						||
    Search: "Buscar",
 | 
						||
    All: "Selecionar Tudo",
 | 
						||
    Latest: "Selecionar Mais Recente",
 | 
						||
    Clear: "Limpar",
 | 
						||
  },
 | 
						||
  Memory: {
 | 
						||
    Title: "Prompt de Memória",
 | 
						||
    EmptyContent: "Nada ainda.",
 | 
						||
    Send: "Enviar Memória",
 | 
						||
    Copy: "Copiar Memória",
 | 
						||
    Reset: "Resetar Sessão",
 | 
						||
    ResetConfirm:
 | 
						||
      "Resetar irá limpar o histórico de conversa atual e a memória histórica. Você tem certeza que quer resetar?",
 | 
						||
  },
 | 
						||
  Home: {
 | 
						||
    NewChat: "Novo Chat",
 | 
						||
    DeleteChat: "Confirmar para deletar a conversa selecionada?",
 | 
						||
    DeleteToast: "Chat Deletado",
 | 
						||
    Revert: "Reverter",
 | 
						||
  },
 | 
						||
  Settings: {
 | 
						||
    Title: "Configurações",
 | 
						||
    SubTitle: "Todas as Configurações",
 | 
						||
    Danger: {
 | 
						||
      Reset: {
 | 
						||
        Title: "Resetar Todas as Configurações",
 | 
						||
        SubTitle: "Resetar todos os itens de configuração para o padrão",
 | 
						||
        Action: "Resetar",
 | 
						||
        Confirm: "Confirmar para resetar todas as configurações para o padrão?",
 | 
						||
      },
 | 
						||
      Clear: {
 | 
						||
        Title: "Limpar Todos os Dados",
 | 
						||
        SubTitle: "Limpar todas as mensagens e configurações",
 | 
						||
        Action: "Limpar",
 | 
						||
        Confirm: "Confirmar para limpar todas as mensagens e configurações?",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Lang: {
 | 
						||
      Name: "Language",
 | 
						||
      All: "Todos os Idiomas",
 | 
						||
    },
 | 
						||
    Avatar: "Avatar",
 | 
						||
    FontSize: {
 | 
						||
      Title: "Tamanho da Fonte",
 | 
						||
      SubTitle: "Ajustar o tamanho da fonte do conteúdo do chat",
 | 
						||
    },
 | 
						||
    FontFamily: {
 | 
						||
      Title: "Fonte do Chat",
 | 
						||
      SubTitle:
 | 
						||
        "Fonte do conteúdo do chat, deixe vazio para aplicar a fonte padrão global",
 | 
						||
      Placeholder: "Nome da Fonte",
 | 
						||
    },
 | 
						||
    InjectSystemPrompts: {
 | 
						||
      Title: "Inserir Prompts de Sistema",
 | 
						||
      SubTitle: "Inserir um prompt de sistema global para cada requisição",
 | 
						||
    },
 | 
						||
    InputTemplate: {
 | 
						||
      Title: "Modelo de Entrada",
 | 
						||
      SubTitle: "A mensagem mais recente será preenchida neste modelo",
 | 
						||
    },
 | 
						||
 | 
						||
    Update: {
 | 
						||
      Version: (x: string) => `Versão: ${x}`,
 | 
						||
      IsLatest: "Última versão",
 | 
						||
      CheckUpdate: "Verificar Atualização",
 | 
						||
      IsChecking: "Verificando atualização...",
 | 
						||
      FoundUpdate: (x: string) => `Nova versão encontrada: ${x}`,
 | 
						||
      GoToUpdate: "Atualizar",
 | 
						||
    },
 | 
						||
    SendKey: "Tecla de Envio",
 | 
						||
    Theme: "Tema",
 | 
						||
    TightBorder: "Borda Ajustada",
 | 
						||
    SendPreviewBubble: {
 | 
						||
      Title: "Bolha de Pré-visualização de Envio",
 | 
						||
      SubTitle: "Pré-visualizar markdown na bolha",
 | 
						||
    },
 | 
						||
    AutoGenerateTitle: {
 | 
						||
      Title: "Gerar Título Automaticamente",
 | 
						||
      SubTitle: "Gerar um título adequado baseado no conteúdo da conversa",
 | 
						||
    },
 | 
						||
    Sync: {
 | 
						||
      CloudState: "Última Atualização",
 | 
						||
      NotSyncYet: "Ainda não sincronizado",
 | 
						||
      Success: "Sincronização bem sucedida",
 | 
						||
      Fail: "Falha na sincronização",
 | 
						||
 | 
						||
      Config: {
 | 
						||
        Modal: {
 | 
						||
          Title: "Configurar Sincronização",
 | 
						||
          Check: "Verificar Conexão",
 | 
						||
        },
 | 
						||
        SyncType: {
 | 
						||
          Title: "Tipo de Sincronização",
 | 
						||
          SubTitle: "Escolha seu serviço de sincronização favorito",
 | 
						||
        },
 | 
						||
        Proxy: {
 | 
						||
          Title: "Habilitar Proxy CORS",
 | 
						||
          SubTitle: "Habilitar um proxy para evitar restrições de cross-origin",
 | 
						||
        },
 | 
						||
        ProxyUrl: {
 | 
						||
          Title: "Endpoint de Proxy",
 | 
						||
          SubTitle: "Apenas aplicável ao proxy CORS embutido para este projeto",
 | 
						||
        },
 | 
						||
 | 
						||
        WebDav: {
 | 
						||
          Endpoint: "Endpoint WebDAV",
 | 
						||
          UserName: "Nome de Usuário",
 | 
						||
          Password: "Senha",
 | 
						||
        },
 | 
						||
 | 
						||
        UpStash: {
 | 
						||
          Endpoint: "URL REST Redis UpStash",
 | 
						||
          UserName: "Nome do Backup",
 | 
						||
          Password: "Token REST Redis UpStash",
 | 
						||
        },
 | 
						||
      },
 | 
						||
 | 
						||
      LocalState: "Dados Locais",
 | 
						||
      Overview: (overview: any) => {
 | 
						||
        return `${overview.chat} chats,${overview.message} mensagens,${overview.prompt} prompts,${overview.mask} máscaras`;
 | 
						||
      },
 | 
						||
      ImportFailed: "Falha ao importar do arquivo",
 | 
						||
    },
 | 
						||
    Mask: {
 | 
						||
      Splash: {
 | 
						||
        Title: "Tela de Início da Máscara",
 | 
						||
        SubTitle:
 | 
						||
          "Mostrar uma tela de início da máscara antes de iniciar novo chat",
 | 
						||
      },
 | 
						||
      Builtin: {
 | 
						||
        Title: "Esconder Máscaras Embutidas",
 | 
						||
        SubTitle: "Esconder máscaras embutidas na lista de máscaras",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Prompt: {
 | 
						||
      Disable: {
 | 
						||
        Title: "Desabilitar auto-completar",
 | 
						||
        SubTitle: "Digite / para acionar auto-completar",
 | 
						||
      },
 | 
						||
      List: "Lista de Prompts",
 | 
						||
      ListCount: (builtin: number, custom: number) =>
 | 
						||
        `${builtin} embutidos, ${custom} definidos pelo usuário`,
 | 
						||
      Edit: "Editar",
 | 
						||
      Modal: {
 | 
						||
        Title: "Lista de Prompts",
 | 
						||
        Add: "Adicionar Um",
 | 
						||
        Search: "Buscar Prompts",
 | 
						||
      },
 | 
						||
      EditModal: {
 | 
						||
        Title: "Editar Prompt",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    HistoryCount: {
 | 
						||
      Title: "Contagem de Mensagens Anexadas",
 | 
						||
      SubTitle: "Número de mensagens enviadas anexadas por requisição",
 | 
						||
    },
 | 
						||
    CompressThreshold: {
 | 
						||
      Title: "Limite de Compressão de Histórico",
 | 
						||
      SubTitle:
 | 
						||
        "Irá comprimir se o comprimento das mensagens não comprimidas exceder o valor",
 | 
						||
    },
 | 
						||
 | 
						||
    Usage: {
 | 
						||
      Title: "Saldo da Conta",
 | 
						||
      SubTitle(used: any, total: any) {
 | 
						||
        return `Usado este mês ${used}, assinatura ${total}`;
 | 
						||
      },
 | 
						||
      IsChecking: "Verificando...",
 | 
						||
      Check: "Verificar",
 | 
						||
      NoAccess: "Insira a Chave API para verificar o saldo",
 | 
						||
    },
 | 
						||
    Access: {
 | 
						||
      AccessCode: {
 | 
						||
        Title: "Código de Acesso",
 | 
						||
        SubTitle: "Controle de Acesso Habilitado",
 | 
						||
        Placeholder: "Insira o Código",
 | 
						||
      },
 | 
						||
      CustomEndpoint: {
 | 
						||
        Title: "Endpoint Personalizado",
 | 
						||
        SubTitle: "Use serviço personalizado Azure ou OpenAI",
 | 
						||
      },
 | 
						||
      Provider: {
 | 
						||
        Title: "Provedor do Modelo",
 | 
						||
        SubTitle: "Selecione Azure ou OpenAI",
 | 
						||
      },
 | 
						||
      OpenAI: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Chave API OpenAI",
 | 
						||
          SubTitle: "Usar Chave API OpenAI personalizada",
 | 
						||
          Placeholder: "sk-xxx",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Endpoint OpenAI",
 | 
						||
          SubTitle:
 | 
						||
            "Deve começar com http(s):// ou usar /api/openai como padrão",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Azure: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Chave API Azure",
 | 
						||
          SubTitle: "Verifique sua chave API do console Azure",
 | 
						||
          Placeholder: "Chave API Azure",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Endpoint Azure",
 | 
						||
          SubTitle: "Exemplo: ",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVerion: {
 | 
						||
          Title: "Versão API Azure",
 | 
						||
          SubTitle: "Verifique sua versão API do console Azure",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Anthropic: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Chave API Anthropic",
 | 
						||
          SubTitle: "Verifique sua chave API do console Anthropic",
 | 
						||
          Placeholder: "Chave API Anthropic",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Endpoint Address",
 | 
						||
          SubTitle: "Exemplo: ",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVerion: {
 | 
						||
          Title: "Versão API (Versão api claude)",
 | 
						||
          SubTitle: "Verifique sua versão API do console Anthropic",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      CustomModel: {
 | 
						||
        Title: "Modelos Personalizados",
 | 
						||
        SubTitle: "Opções de modelo personalizado, separados por vírgula",
 | 
						||
      },
 | 
						||
    },
 | 
						||
 | 
						||
    Model: "Modelo",
 | 
						||
    Temperature: {
 | 
						||
      Title: "Temperatura",
 | 
						||
      SubTitle: "Um valor maior torna a saída mais aleatória",
 | 
						||
    },
 | 
						||
    TopP: {
 | 
						||
      Title: "Top P",
 | 
						||
      SubTitle: "Não altere este valor junto com a temperatura",
 | 
						||
    },
 | 
						||
    MaxTokens: {
 | 
						||
      Title: "Máximo de Tokens",
 | 
						||
      SubTitle: "Comprimento máximo de tokens de entrada e tokens gerados",
 | 
						||
    },
 | 
						||
    PresencePenalty: {
 | 
						||
      Title: "Penalidade de Presença",
 | 
						||
      SubTitle:
 | 
						||
        "Um valor maior aumenta a probabilidade de falar sobre novos tópicos",
 | 
						||
    },
 | 
						||
    FrequencyPenalty: {
 | 
						||
      Title: "Penalidade de Frequência",
 | 
						||
      SubTitle:
 | 
						||
        "Um valor maior diminui a probabilidade de repetir a mesma linha",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Store: {
 | 
						||
    DefaultTopic: "Nova Conversa",
 | 
						||
    BotHello: "Olá! Como posso ajudá-lo hoje?",
 | 
						||
    Error: "Algo deu errado, por favor tente novamente mais tarde.",
 | 
						||
    Prompt: {
 | 
						||
      History: (content: string) =>
 | 
						||
        "Este é um resumo do histórico de chat como um recapitulativo: " +
 | 
						||
        content,
 | 
						||
      Topic:
 | 
						||
        "Por favor, gere um título de quatro a cinco palavras resumindo nossa conversa sem qualquer introdução, pontuação, aspas, períodos, símbolos ou texto adicional. Remova as aspas que o envolvem.",
 | 
						||
      Summarize:
 | 
						||
        "Resuma a discussão brevemente em 200 palavras ou menos para usar como um prompt para o contexto futuro.",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Copy: {
 | 
						||
    Success: "Copiado para a área de transferência",
 | 
						||
    Failed:
 | 
						||
      "Falha na cópia, por favor conceda permissão para acessar a área de transferência",
 | 
						||
  },
 | 
						||
  Download: {
 | 
						||
    Success: "Conteúdo baixado para seu diretório.",
 | 
						||
    Failed: "Falha no download.",
 | 
						||
  },
 | 
						||
  Context: {
 | 
						||
    Toast: (x: any) => `Com ${x} prompts contextuais`,
 | 
						||
    Edit: "Configurações do Chat Atual",
 | 
						||
    Add: "Adicionar um Prompt",
 | 
						||
    Clear: "Contexto Limpo",
 | 
						||
    Revert: "Reverter",
 | 
						||
  },
 | 
						||
  Plugin: {
 | 
						||
    Name: "Plugin",
 | 
						||
  },
 | 
						||
  FineTuned: {
 | 
						||
    Sysmessage: "Você é um assistente que",
 | 
						||
  },
 | 
						||
  SearchChat: {
 | 
						||
    Name: "Pesquisar",
 | 
						||
    Page: {
 | 
						||
      Title: "Pesquisar histórico de chat",
 | 
						||
      Search: "Digite palavras-chave para pesquisa",
 | 
						||
      NoResult: "Nenhum resultado encontrado",
 | 
						||
      NoData: "Sem dados",
 | 
						||
      Loading: "Carregando",
 | 
						||
 | 
						||
      SubTitle: (count: number) => `Encontrado ${count} resultados`,
 | 
						||
    },
 | 
						||
    Item: {
 | 
						||
      View: "Ver",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Mask: {
 | 
						||
    Name: "Máscara",
 | 
						||
    Page: {
 | 
						||
      Title: "Template de Prompt",
 | 
						||
      SubTitle: (count: number) => `${count} templates de prompt`,
 | 
						||
      Search: "Buscar Templates",
 | 
						||
      Create: "Criar",
 | 
						||
    },
 | 
						||
    Item: {
 | 
						||
      Info: (count: number) => `${count} prompts`,
 | 
						||
      Chat: "Chat",
 | 
						||
      View: "Visualizar",
 | 
						||
      Edit: "Editar",
 | 
						||
      Delete: "Deletar",
 | 
						||
      DeleteConfirm: "Confirmar para deletar?",
 | 
						||
    },
 | 
						||
    EditModal: {
 | 
						||
      Title: (readonly: boolean) =>
 | 
						||
        `Editar Template de Prompt ${readonly ? "(somente leitura)" : ""}`,
 | 
						||
      Download: "Baixar",
 | 
						||
      Clone: "Clonar",
 | 
						||
    },
 | 
						||
    Config: {
 | 
						||
      Avatar: "Avatar do Bot",
 | 
						||
      Name: "Nome do Bot",
 | 
						||
      Sync: {
 | 
						||
        Title: "Usar Configuração Global",
 | 
						||
        SubTitle: "Usar configuração global neste chat",
 | 
						||
        Confirm:
 | 
						||
          "Confirmar para substituir a configuração personalizada pela configuração global?",
 | 
						||
      },
 | 
						||
      HideContext: {
 | 
						||
        Title: "Esconder Prompts de Contexto",
 | 
						||
        SubTitle: "Não mostrar prompts de contexto no chat",
 | 
						||
      },
 | 
						||
      Share: {
 | 
						||
        Title: "Compartilhar Esta Máscara",
 | 
						||
        SubTitle: "Gerar um link para esta máscara",
 | 
						||
        Action: "Copiar Link",
 | 
						||
      },
 | 
						||
    },
 | 
						||
  },
 | 
						||
  NewChat: {
 | 
						||
    Return: "Retornar",
 | 
						||
    Skip: "Apenas Começar",
 | 
						||
    Title: "Escolher uma Máscara",
 | 
						||
    SubTitle: "Converse com a Alma por trás da Máscara",
 | 
						||
    More: "Encontre Mais",
 | 
						||
    NotShow: "Nunca Mostrar Novamente",
 | 
						||
    ConfirmNoShow:
 | 
						||
      "Confirmar para desabilitar?Você pode habilitar nas configurações depois.",
 | 
						||
  },
 | 
						||
 | 
						||
  UI: {
 | 
						||
    Confirm: "Confirmar",
 | 
						||
    Cancel: "Cancelar",
 | 
						||
    Close: "Fechar",
 | 
						||
    Create: "Criar",
 | 
						||
    Edit: "Editar",
 | 
						||
    Export: "Exportar",
 | 
						||
    Import: "Importar",
 | 
						||
    Sync: "Sincronizar",
 | 
						||
    Config: "Configurar",
 | 
						||
  },
 | 
						||
  Exporter: {
 | 
						||
    Description: {
 | 
						||
      Title: "Apenas mensagens após a limpeza do contexto serão exibidas",
 | 
						||
    },
 | 
						||
    Model: "Modelo",
 | 
						||
    Messages: "Mensagens",
 | 
						||
    Topic: "Tópico",
 | 
						||
    Time: "Tempo",
 | 
						||
  },
 | 
						||
 | 
						||
  URLCommand: {
 | 
						||
    Code: "Código de acesso detectado a partir da url, confirmar para aplicar? ",
 | 
						||
    Settings:
 | 
						||
      "Configurações detectadas a partir da url, confirmar para aplicar?",
 | 
						||
  },
 | 
						||
};
 | 
						||
 | 
						||
export default pt;
 |