{
	"api_kicker": "API para programadores",
	"api_title": "Cria atividades a partir do teu próprio sistema",
	"api_intro": "Um POST por tipo de atividade. Envia o teu conteúdo em JSON e recebes uma atividade na tua conta Puzzel.org e um URL que podes dar aos jogadores ou colocar num iframe.",
	"api_search_placeholder": "Pesquisa endpoints, campos e definições",
	"api_search_results": "correspondências nesta página",
	"api_search_empty": "Nada nesta página corresponde a isso. Experimenta o nome de um endpoint, um campo como activity_key ou um código de estado.",
	"api_search_clear": "Limpar pesquisa",
	"api_nav_guide": "Como começar",
	"api_nav_endpoints": "Endpoints",
	"api_toc_label": "Nesta página",
	"api_hero_base_label": "URL base",
	"api_hero_method_label": "Método",
	"api_hero_method_value": "POST, corpo em JSON",
	"api_hero_auth_label": "Autenticação",
	"api_hero_auth_value": "Chave + e-mail no corpo",
	"api_hero_limit_label": "Quota",
	"api_hero_limit_value": "[limit] atividades por dia",
	"api_hero_count_label": "Endpoints",
	"api_hero_count_value": "[count] tipos de atividade",
	"api_s_quickstart_title": "O teu primeiro pedido",
	"api_s_quickstart_body": "Não há nada para instalar nem qualquer negociação prévia: envia um corpo em JSON com a tua chave, o teu e-mail e o teu conteúdo. A resposta traz a chave da nova atividade e o URL onde se joga.",
	"api_s_quickstart_note": "Todos os exemplos desta página são pedidos completos e prontos a executar. Troca a chave e o conteúdo pelos teus e funcionam tal como estão.",
	"api_s_auth_title": "Autenticação",
	"api_s_auth_body": "Não há cabeçalhos nem bearer token. As duas credenciais viajam no corpo JSON de cada pedido e a chave só é aceite para a conta a que esse e-mail pertence.",
	"api_s_auth_where": "A tua chave está na secção da conta, no painel, atrás de Mostrar.",
	"api_s_auth_where_link": "Abrir a minha chave de API",
	"api_s_auth_premium": "As chaves de API são atribuídas quando começa uma subscrição, por isso uma conta gratuita ainda não tem nenhuma.",
	"api_s_auth_plans": "Ver os planos",
	"api_s_auth_secret": "Trata a chave como uma palavra-passe. Cria e substitui atividades na tua conta, por isso guarda-a no servidor e fora de tudo o que um navegador possa ler.",
	"api_prefill_kicker": "Exemplos",
	"api_prefill_label": "Preencher os exemplos com a minha chave de API",
	"api_prefill_signed_out": "Inicia sessão e a tua chave entra em todos os exemplos desta página.",
	"api_prefill_sign_in": "Iniciar sessão",
	"api_prefill_none": "Esta conta ainda não tem chave de API.",
	"api_prefill_warning": "Todos os exemplos passam a conter a tua chave real. Não coles nenhum num chat, num issue ou num repositório público.",
	"api_s_request_title": "O corpo do pedido",
	"api_s_request_body": "Todos os endpoints recebem os mesmos cinco campos. O que muda é o campo de conteúdo por baixo deles: a maioria recebe um array de itens, alguns recebem uma frase ou uma imagem, e o sudoku não recebe nada.",
	"api_s_request_settings": "settings é um objeto com opções específicas de cada endpoint. As que cada endpoint lê estão listadas com ele mais abaixo; tudo o resto que lá puseres é ignorado.",
	"api_col_field": "Campo",
	"api_col_type": "Tipo",
	"api_col_notes": "O que faz",
	"api_col_status": "Estado",
	"api_col_meaning": "O que significa",
	"api_required": "obrigatório",
	"api_optional": "opcional",
	"api_default_label": "Predefinição",
	"api_allowed_label": "Um de",
	"api_in_settings": "em settings",
	"api_f_account_api_key": "A chave de API da tua conta. Vai no corpo, não num cabeçalho.",
	"api_f_email": "O endereço com que a tua conta Puzzel.org inicia sessão. A chave só é válida em conjunto com ele.",
	"api_f_title": "O nome que a atividade recebe no teu painel. Se o deixares de fora, o endpoint usa o nome alternativo dele.",
	"api_f_language": "Só define o idioma no URL que recebes de volta — não traduz nada do que envias. A sopa de letras também o lê para mudar as letras de preenchimento para árabe quando é \"ar\".",
	"api_f_activity_key": "Deixa-o de fora para criar uma atividade nova. Se enviares a chave de uma que já te pertence, essa atividade é reconstruída.",
	"api_f_sentence_cryptogram": "A frase a encriptar. Os jogadores descodificam-na caráter a caráter.",
	"api_f_sentence_calculation": "A frase que os jogadores descobrem ao resolver as contas.",
	"api_f_image": "URL absoluto da imagem a cortar. Enviado no nível superior, não dentro de settings.",
	"api_f_image_setting": "URL absoluto da imagem a baralhar. Ao contrário da do puzzle, esta fica dentro de settings.",
	"api_s_response_title": "O que recebes de volta",
	"api_s_response_body": "Uma chamada bem-sucedida responde 200 com a chave da nova atividade e o URL onde se joga. Tudo o resto responde com success a false e uma única string error.",
	"api_response_success": "Sucesso",
	"api_response_error": "Falha",
	"api_s_response_urls": "O url que recebes de volta é a vista de incorporação. Troca embed por play para a abrir em página inteira, ou por build para a abrir no editor — a chave depois de p= mantém-se igual.",
	"api_s_updating_title": "Criar vs. atualizar",
	"api_s_updating_body": "Envia activity_key e a atividade correspondente é reconstruída no lugar: o conteúdo é substituído, o nome e a marca de versão são atualizados e a chave em si mantém-se — por isso as ligações e as incorporações que já partilhaste continuam a funcionar. Os resultados, a pasta onde está e todas as definições que o endpoint não escreve ficam como estavam.",
	"api_s_updating_own": "Só podes atualizar atividades da tua própria conta. A chave de outra pessoa responde 403.",
	"api_s_updating_name": "title é aplicado em todas as atualizações, incluindo a predefinição — se o deixares de fora, a atividade passa a ter o nome alternativo desse endpoint.",
	"api_s_updating_settings": "Os blocos de definições que um endpoint escreve são reescritos de raiz, por isso uma atualização também os repõe nos valores que enviares, ou nas predefinições do endpoint.",
	"api_s_updating_quota": "Uma atualização custa o mesmo que uma criação: uma chamada retirada à quota de hoje.",
	"api_s_limits_title": "Limite de pedidos",
	"api_s_limits_body": "Todas as chamadas bem-sucedidas contam, tanto criações como atualizações. Se passares do limite, o pedido seguinte responde 429 até o contador ser reposto.",
	"api_s_limits_counter": "[limit] atividades por conta por dia",
	"api_s_limits_reset": "O contador é limpo uma vez por dia por uma tarefa agendada, não numa janela móvel de 24 horas.",
	"api_s_errors_title": "Erros",
	"api_s_errors_body": "Os erros chegam sempre em JSON com os mesmos dois campos, nunca como uma página HTML. A string error está escrita para ser lida por uma pessoa — indica o campo ou o limite que falhou.",
	"api_err_400": "Falta algo no corpo, está malformado ou fora do intervalo. A mensagem indica o campo.",
	"api_err_401": "O e-mail é desconhecido, ou a chave não pertence a essa conta.",
	"api_err_403": "O activity_key que enviaste pertence a outra conta.",
	"api_err_429": "A quota de hoje está esgotada. É reposta uma vez por dia.",
	"api_err_500": "O gerador não conseguiu criar um quebra-cabeças com o que enviaste — normalmente por serem poucas palavras, ou palavras que não encaixam umas nas outras.",
	"api_endpoints_title": "Endpoints",
	"api_endpoints_intro": "Um caminho por tipo de atividade, todos POST, todos sob o mesmo URL base. Cada um indica o conteúdo de que precisa, as definições que lê e um pedido que podes executar.",
	"api_group_words": "Palavras e letras",
	"api_group_cards": "Cartões e pares",
	"api_group_questions": "Perguntas e respostas",
	"api_group_text": "Frases e números",
	"api_group_images": "Imagens",
	"api_ep_content_label": "Conteúdo",
	"api_ep_settings_label": "Definições que lê",
	"api_ep_settings_none": "Este endpoint não lê nenhuma definição.",
	"api_ep_example_label": "Pedido de exemplo",
	"api_ep_notes_label": "Vale a pena saber",
	"api_ep_min_items": "Pelo menos [count] em items",
	"api_ep_no_items": "Não recebe items",
	"api_ep_default_title": "Por omissão, fica com o nome “[title]”",
	"api_copy": "Copiar",
	"api_copied": "Copiado",
	"api_toast_copied": "Copiado para a área de transferência",
	"api_ep_open_builder": "Abrir o editor",
	"api_ep_back_to_top": "Voltar ao topo",
	"api_e_crossword": "Encaixa as tuas respostas numa grelha e numera as definições por ti.",
	"api_c_crossword": "Um array de palavras. Cada entrada junta a resposta à definição que lhe aponta.",
	"api_note_crossword_length": "As respostas com menos de dois carateres são descartadas antes de a grelha ser criada, e pelo menos duas têm de sobreviver a isso.",
	"api_note_crossword_layout": "As respostas passam a maiúsculas e o gerador tem vinte tentativas para as encaixar. Se não conseguir colocar uma única palavra, a chamada responde 500.",
	"api_e_wordseeker": "Esconde as tuas palavras numa grelha de letras, nas direções e na forma que escolheres.",
	"api_c_wordseeker": "Um array de palavras. O texto da definição passa a ser a lista de palavras com que os jogadores trabalham.",
	"api_note_wordseeker_length": "As respostas com menos de dois carateres são descartadas, e todas as respostas passam a maiúsculas antes de entrarem na grelha.",
	"api_note_wordseeker_arabic": "A grelha é preenchida com letras latinas, a não ser que language seja \"ar\", o que muda o preenchimento para árabe.",
	"api_set_wordseeker_hidden_solution": "As letras que sobram formam isto. Defini-lo também diz ao gerador para encaixar primeiro a solução, em vez de meter o máximo de palavras que conseguir.",
	"api_set_wordseeker_directions": "As direções em que uma palavra pode seguir. Se o deixares de fora, as palavras seguem apenas para leste, sudeste e sul.",
	"api_set_wordseeker_template": "Recorta a grelha numa forma, em vez de a deixar quadrada.",
	"api_e_acrostic": "Empilha as tuas respostas para que uma coluna forme uma palavra escondida.",
	"api_c_acrostic": "Um array de palavras. Entre elas têm de fornecer todas as letras da palavra escondida.",
	"api_set_acrostic_hidden_solution": "A palavra que a coluna destacada forma. Este endpoint não funciona sem ela.",
	"api_note_acrostic_letters": "Se as respostas não conseguirem fornecer as letras de que a solução precisa, a chamada responde 500 em vez de guardar uma grelha meio construída.",
	"api_note_acrostic_order": "O gerador reordena as tuas respostas para a coluna funcionar, por isso a ordem que envias não é a ordem que os jogadores veem.",
	"api_e_word-scramble": "Baralha as letras de cada resposta para os jogadores as porem em ordem.",
	"api_c_word-scramble": "Um array de palavras. A pista é mostrada ao lado das letras baralhadas.",
	"api_set_scramble_hidden_solution": "Uma palavra bónus opcional que os jogadores escrevem depois de resolverem o resto.",
	"api_note_scramble_random": "As atividades criadas através da API têm sempre a definição de baralhar a ordem ativa, por isso a ordem que envias não é a ordem que os jogadores recebem.",
	"api_e_hangman": "Transforma as tuas palavras ou frases em rondas de adivinhar a letra.",
	"api_c_hangman": "Um array de palavras ou frases curtas. A pista é a dica que os jogadores veem.",
	"api_e_wordle": "Cria um jogo de adivinhar a palavra a partir de cada palavra que envias.",
	"api_c_wordle": "Um array de palavras. Os jogadores têm uma ronda por palavra.",
	"api_note_wordle_dictionary": "Criado com a definição de verificar se as tentativas são palavras reais ativa. Desliga-a no editor se as tuas palavras forem nomes ou inventadas.",
	"api_e_typing-practice": "Transforma frases em exercícios de escrita ao teclado.",
	"api_c_typing-practice": "Um array de palavras ou frases para escrever. O campo da pista serve também de instrução.",
	"api_e_wheel-of-fortune": "Enche uma roda giratória com os teus próprios segmentos.",
	"api_c_wheel-of-fortune": "Um array de segmentos. Cada resposta passa a ser uma fatia.",
	"api_note_wheel_outcome": "Criado com “mostrar o resultado apenas na roda”, por isso o resultado lê-se na roda em vez de aparecer ao lado dela.",
	"api_e_memory": "Cartões virados para baixo para revelar e juntar em pares.",
	"api_c_memory": "Um array de pares. Cada par contém os dois cartões que pertencem um ao outro.",
	"api_note_cards_media": "Um cartão é um objeto com um type e um value. Usa \"text\" para palavras, ou \"image\", \"audio\", \"youtube\" ou \"link\" com um URL em value, e acrescenta alt para uma descrição.",
	"api_e_matching-pairs": "Duas colunas de cartões para arrastar e juntar.",
	"api_c_matching-pairs": "Um array de pares. O primeiro cartão de cada par fica de um lado e o respetivo parceiro do outro.",
	"api_e_flash-cards": "Cartões de dois lados para folhear.",
	"api_c_flash-cards": "Um array de cartões. O primeiro cartão é a frente, o segundo o verso.",
	"api_note_flashcards_sides": "O endpoint guarda tantos cartões quantos enviares, por isso envia exatamente dois por entrada — primeiro a frente, depois o verso.",
	"api_e_categorize": "Cartões para arrumar na categoria a que pertencem.",
	"api_c_categorize": "Um array de categorias, cada uma com um nome e os cartões que lhe pertencem.",
	"api_note_categorize_name": "Uma categoria enviada sem nome é guardada como “Untitled Category”, por isso envia sempre um.",
	"api_e_reorder": "Uma sequência que os jogadores têm de voltar a pôr por ordem.",
	"api_c_reorder": "Um array de sequências. Cada uma contém os cartões pela ordem correta.",
	"api_note_reorder_order": "A ordem que envias é guardada como a ordem correta — o número um primeiro.",
	"api_e_quiz": "Perguntas de escolha múltipla e de resposta aberta, pontuadas à medida que os jogadores avançam.",
	"api_c_quiz": "Um array de perguntas. As perguntas de escolha múltipla levam as respetivas respostas; as de resposta aberta levam a resposta que aceitas.",
	"api_note_question_types": "question_type é \"multiple_choice\", em que a opção certa leva isCorrect a true, ou \"open_answer\", que usa antes correct_answer. Se for deixado de fora, é tratado como escolha múltipla.",
	"api_note_quiz_settings": "O endpoint do quiz passa settings diretamente como blocos de definições da atividade, por isso não é sítio para opções soltas — ajusta o quiz no editor depois.",
	"api_e_board-game": "Um tabuleiro para atravessar a correr, com as tuas perguntas nas casas.",
	"api_c_board-game": "Um array de perguntas, exatamente com a forma que o endpoint do quiz recebe.",
	"api_set_board_tiles": "Quantas casas tem o tabuleiro. Entre 10 e 75.",
	"api_set_board_mode": "Se os jogadores correm até à meta ou recolhem itens pelo caminho.",
	"api_e_cryptogram": "Transforma uma frase num código para decifrar, um caráter de cada vez.",
	"api_c_cryptogram": "Uma frase, no campo sentence. Este endpoint não recebe items.",
	"api_note_cryptogram_no_items": "Tudo o que enviares em items é ignorado — o quebra-cabeças é criado apenas a partir da frase.",
	"api_set_cryptogram_helpers": "Que carateres são revelados à partida como entrada: nenhuns, os mais comuns, as vogais, ou os que indicares.",
	"api_set_cryptogram_character_list": "O alfabeto com que a cifra é construída. Se ficar vazio, a encriptação escolhe o dela.",
	"api_set_cryptogram_extra_letters": "Os carateres revelados quando helpers é \"custom\". Ignorado nos outros modos de ajuda.",
	"api_set_cryptogram_hide_unused": "Deixa de fora da chave os carateres que a frase nunca usa.",
	"api_e_calculation": "Esconde uma frase por trás de contas — resolve a conta, revela a letra.",
	"api_c_calculation": "Uma frase, no campo sentence. Este endpoint não recebe items.",
	"api_set_calc_difficulty": "O resultado mais alto que uma conta pode ter.",
	"api_set_calc_operators": "Que operações podem aparecer. x é multiplicar, : é dividir.",
	"api_set_calc_max_operations": "Quantas operações uma conta pode encadear.",
	"api_set_calc_number_difficulty": "Limita os números individuais dentro de uma conta. De 5 a 1000.",
	"api_note_calculation_fit": "Se as restrições forem demasiado apertadas para codificar a frase, a chamada responde 400 a pedir que as alargues, em vez de guardar um quebra-cabeças incompleto.",
	"api_e_sudoku": "Gera uma grelha resolvida e depois volta a retirar números.",
	"api_c_sudoku": "Nada. O quebra-cabeças inteiro sai das duas definições dele.",
	"api_note_sudoku_no_items": "Não envies items nem sentence — size e difficulty são toda a entrada.",
	"api_note_sudoku_difficulty_sizes": "O editor só oferece a dificuldade para 2x3, 3x3 e 3x4. A API aplica-a a todos os tamanhos, incluindo 2x2 e 4x4.",
	"api_set_sudoku_size": "O tamanho de um bloco, escrito como linhas por colunas — 3x3 dá a grelha clássica de 9x9. O endpoint só verifica se é interpretável como dois números, por isso fica-te pelos tamanhos que o editor oferece.",
	"api_set_sudoku_difficulty": "Quantos números ficam no tabuleiro para começar.",
	"api_e_jigsaw": "Corta uma imagem em peças para voltar a juntar arrastando.",
	"api_c_jigsaw": "Um URL de imagem, no campo image. Este endpoint não recebe items.",
	"api_note_jigsaw_grid": "A API cria sempre um puzzle de 4 por 4. O número de peças, as peças irregulares e os bordos direitos são definições do editor — enviar rows ou columns aqui não faz nada.",
	"api_note_image_reachable": "O URL é guardado tal como o enviaste e o ficheiro nunca é copiado, por isso tem de continuar publicamente acessível enquanto a atividade for jogada.",
	"api_e_slidingpuzzle": "Baralha uma imagem em peças que deslizam para o lugar.",
	"api_c_slidingpuzzle": "Um URL de imagem, dentro de settings. Este endpoint não recebe items.",
	"api_note_sliding_image_slot": "Ao contrário do puzzle, este endpoint lê a imagem de settings.image. Um campo image no nível superior é ignorado e a chamada responde 400.",
	"api_help_title": "Algo não está a funcionar bem?",
	"api_help_body": "Envia o pedido que tentaste e o erro que recebeste e terás uma resposta a sério, de quem escreveu o endpoint.",
	"api_help_cta": "Enviar e-mail ao suporte",
	"api_int_kicker": "Integrações para programadores",
	"api_int_title": "Liga o Puzzel à tua própria plataforma",
	"api_int_intro": "O Puzzel pode entregar o resultado de um jogador diretamente a outro sistema — a pontuação, até onde chegou, o que respondeu — sem que esse sistema seja um LMS completo. Esta página reúne todos os canais que existem: o que sai, quando sai e o mínimo que precisas de construir para o receber.",
	"api_int_hero_out_label": "Os resultados saem através de",
	"api_int_hero_out_value": "Um webhook, ou uma mensagem para a página que envolve a atividade",
	"api_int_hero_in_label": "A tua página pode",
	"api_int_hero_in_value": "Iniciar sessão do jogador e reiniciar a atividade",
	"api_int_hero_where_label": "Ativado",
	"api_int_hero_where_value": "Por atividade, em Programador no editor",
	"api_int_hero_plan_label": "Incluído em",
	"api_int_hero_plan_value": "Um plano pago — estas definições estão desativadas numa conta gratuita",
	"api_int_search_placeholder": "Pesquisar canais, campos e exemplos",
	"api_int_search_empty": "Não há nada nesta página que corresponda a isso. Tenta um canal como webhook ou postMessage, ou um campo como progress.",
	"api_int_nav_channels": "Canais",
	"api_int_s_choose_title": "De que canal precisas?",
	"api_int_s_choose_body": "Há três coisas que podem sair de uma atividade e uma que pode entrar. A que serve depende de uma única pergunta: o jogador está dentro da tua página, ou completamente noutro lado?",
	"api_int_choose_out": "A sair do Puzzel",
	"api_int_choose_in": "A entrar no Puzzel",
	"api_int_choose_when": "Usa-o quando",
	"api_int_choose_needs": "Precisas de",
	"api_int_choose_setting": "Definição",
	"api_int_ch_webhook_name": "Webhook de resultados",
	"api_int_ch_webhook_summary": "Cada resultado guardado é enviado por POST, em JSON, para um URL que te pertence.",
	"api_int_ch_webhook_when": "O jogador pode estar em qualquer lado — uma ligação partilhada, um código QR, o site de outra pessoa — e queres o resultado na tua própria base de dados.",
	"api_int_ch_webhook_needs": "Um endpoint HTTPS que aceite um POST entre origens diferentes.",
	"api_int_ch_parent_name": "Resultados para a página que a envolve",
	"api_int_ch_parent_summary": "O mesmo JSON, enviado para a página que incorpora a atividade em vez de para um servidor.",
	"api_int_ch_parent_when": "Incorporas a atividade na tua própria página de curso e essa página consegue fazer algo com o resultado.",
	"api_int_ch_parent_needs": "Um iframe na tua página e um recetor de mensagens. Sem servidor, sem CORS.",
	"api_int_ch_completion_name": "Sinal de conclusão",
	"api_int_ch_completion_summary": "Uma mensagem quando o jogador termina, que não transporta mais nada além desse facto.",
	"api_int_ch_completion_when": "Só precisas de saber se terminaram — para marcar a lição como concluída, desbloquear a seguinte, ou mostrar o teu próprio ecrã.",
	"api_int_ch_completion_needs": "Um iframe na tua página e um recetor de mensagens.",
	"api_int_ch_trigger_name": "Reiniciar a partir da tua página",
	"api_int_ch_trigger_summary": "A tua página diz à atividade incorporada para limpar as respostas do jogador e recomeçar.",
	"api_int_ch_trigger_when": "Tens o teu próprio botão \"tentar novamente\" fora da atividade.",
	"api_int_ch_trigger_needs": "Um iframe na tua página. A mensagem só é aceite a partir da página que faz a incorporação.",
	"api_int_s_webhook_title": "Webhook de resultados",
	"api_int_s_webhook_body": "Ativa \"Enviar os resultados para um webhook\" no editor e indica um URL. A partir daí, sempre que o progresso do jogador é guardado, o navegador dele envia o resultado completo por POST, em JSON, para esse URL.",
	"api_int_webhook_steps_title": "Como configurar",
	"api_int_webhook_step_1": "Abre a atividade no editor e vai ao menu Programador.",
	"api_int_webhook_step_2": "Ativa \"Enviar os resultados para um webhook\" e cola o teu endpoint no campo por baixo. Tem de ser um URL completo — um domínio isolado é recusado — e tem de ser https, porque o navegador bloqueia uma chamada em http simples feita a partir de uma página servida por https.",
	"api_int_webhook_step_3": "Joga a atividade uma vez, tu próprio. O primeiro POST chega assim que respondes a alguma coisa.",
	"api_int_webhook_receiver": "Um recetor, do início ao fim",
	"api_int_webhook_timing_title": "Dispara enquanto jogas, não só no final",
	"api_int_webhook_timing_body": "Um resultado sai sempre que a entrada é guardada: depois de uma pausa a escrever, quando uma carta é colocada, quando o cronómetro para, e mais uma vez quando a atividade termina. Umas palavras cruzadas longas geram umas duas dezenas de chamadas, não uma só — por isso escreve o teu recetor como um upsert indexado por playerUid e activityKey, e não como uma inserção. Cada chamada transporta o estado completo, por isso a mais recente substitui sempre a anterior e uma chamada que se perde é compensada pela seguinte.",
	"api_int_webhook_finished_title": "Distinguir uma conclusão de um simples guardar",
	"api_int_webhook_finished_body": "progress é uma percentagem: 100 significa que a atividade está completa. Alguns tipos podem terminar sem chegar lá — um quiz respondido até ao fim, um campo de solução resolvido — e esses trazem hasAlternateCompletion em vez disso. Trata qualquer um dos dois casos como concluído.",
	"api_int_webhook_cors_title": "É enviado pelo navegador do jogador",
	"api_int_webhook_cors_body": "O POST vem do separador onde a atividade está a ser jogada, não de um servidor do Puzzel. A maioria dos endpoints criados para receber webhooks já aceita isto. Se o teu nunca vê um pedido, é por esta razão: o navegador pede autorização primeiro, por isso responde ao preflight OPTIONS com um cabeçalho Access-Control-Allow-Origin, e o POST verdadeiro segue-se.",
	"api_int_webhook_trust_title": "Trata o conteúdo enviado como uma afirmação, não uma prova",
	"api_int_webhook_trust_body": "Não há assinatura no pedido, e este vem de um navegador que não controlas, por isso qualquer pessoa que veja a página também te pode enviar um. Isso não é problema para preencher uma barra de progresso ou um painel. Para algo que não deixarias um aluno definir por si próprio — uma nota que conta, um certificado, um pagamento — confirma-o com os resultados no teu próprio painel do Puzzel, ou deixa que os conectores de notas do LMS transportem a pontuação em vez disso.",
	"api_int_s_parent_title": "Resultados para a página que a envolve",
	"api_int_s_parent_body": "Se incorporares a atividade, podes ter esse mesmo JSON enviado para a tua própria página em vez de para um servidor. Ativa \"Enviar os resultados para a página principal\" e fica à escuta da mensagem. Nada sai do navegador, por isso não há endpoint para construir nem CORS a considerar.",
	"api_int_parent_origin_title": "Confirma de onde veio a mensagem",
	"api_int_parent_origin_body": "O teu recetor ouve todas as mensagens enviadas para a página, incluindo de outras frames e extensões do navegador. Compara event.origin com https://puzzel.org antes de confiares no que traz.",
	"api_int_parent_same_title": "O mesmo conteúdo, o mesmo momento",
	"api_int_parent_same_body": "Isto é o gémeo do webhook: os mesmos campos, enviados nos mesmos momentos. Tudo o que está em \"O que contém um resultado\" também se aplica aqui.",
	"api_int_s_completion_title": "Sinal de conclusão",
	"api_int_s_completion_body": "O canal mais pequeno, para quando o resultado em si não te diz respeito: ativa \"Enviar um sinal de conclusão\" e a tua página recebe uma mensagem no momento em que o jogador termina.",
	"api_int_completion_shape": "O que chega",
	"api_int_completion_order_title": "O resultado já está guardado quando chega",
	"api_int_completion_order_body": "O sinal é enviado deliberadamente depois de o guardar de conclusão ter sido concluído, por isso uma página que reaja lendo o resultado de volta vai encontrá-lo lá.",
	"api_int_completion_embed_title": "Só dentro de um iframe",
	"api_int_completion_embed_body": "Ambos os canais de mensagens enviam para a página que enquadra a atividade. Aberta no seu próprio separador, não há ninguém para avisar, por isso nada é enviado.",
	"api_int_s_payload_title": "O que contém um resultado",
	"api_int_s_payload_body": "Uma única forma, seja qual for o canal que a transporta. As respostas do jogador são indexadas pelos ids dos próprios itens da atividade, por isso as mesmas chaves aparecem em correctUids.",
	"api_int_col_when": "Quando está presente",
	"api_int_always": "sempre",
	"api_int_sometimes": "por vezes",
	"api_int_payload_absent_title": "Ausente, não vazio",
	"api_int_payload_absent_body": "Um campo que não se aplica é deixado de fora do JSON, em vez de ser enviado como null ou zero. É assim que se distingue um tipo que não pontua uma partida de uma partida que pontuou zero — por isso lê sempre com um valor por omissão e nunca assumas que uma chave está presente.",
	"api_int_payload_example": "Um quiz terminado, tal como chega",
	"api_int_f_activity_key": "A atividade a que o resultado pertence. A mesma chave que vês no próprio URL da atividade, depois de ?p=.",
	"api_int_f_player_uid": "Quem jogou, como um id anónimo. Estável para este jogador neste dispositivo, por isso é nele que deves indexar os resultados — não é um endereço de e-mail nem uma conta do Puzzel.",
	"api_int_f_player": "Os campos de registo que a atividade pede, tal como os configuraste: nome, e-mail, turma, student_id, e assim por diante. Ausente até o jogador se registar, e ausente por completo numa atividade que não pede nada.",
	"api_int_f_progress": "Até onde chegou, em percentagem. 100 significa terminado.",
	"api_int_f_time_passed": "Tempo passado na atividade, em milissegundos.",
	"api_int_f_last_played_at": "Quando este resultado foi guardado, como um timestamp Unix em milissegundos.",
	"api_int_f_created": "Quando a tentativa foi iniciada, como um timestamp Unix em milissegundos.",
	"api_int_f_player_input": "O que o jogador realmente introduziu, indexado pelo id do item a que pertence. A forma interna depende do tipo de atividade — uma palavra, uma lista de cartas colocadas, uma opção escolhida.",
	"api_int_f_correct_uids": "Quais desses itens estão certos, indexados da mesma forma. Ausente enquanto ainda não foi respondido nada.",
	"api_int_f_score": "Pontos obtidos, nos tipos que pontuam uma partida. Ausente em todos os outros casos — incluindo numa partida que genuinamente pontuou zero, por isso confirma que a chave existe antes de a leres.",
	"api_int_f_performance": "A medida própria de um tipo de como correu, quando existe uma — palavras por minuto no treino de teclado, por exemplo.",
	"api_int_f_attempts": "Que partida é esta: 1 da primeira vez, mais um a cada recomeço. Só nos tipos que terminam uma partida antecipadamente e contam as repetições.",
	"api_int_f_knocked_out": "A partida terminou numa resposta errada e acabou sem estar completa.",
	"api_int_f_alternate": "A atividade foi terminada de uma forma que não chega aos 100% — um quiz respondido até ao fim, um campo de solução resolvido. Trata isto como uma conclusão.",
	"api_int_f_missed_keys": "Carateres que o jogador continuou a errar, começando pelos mais falhados. Só no treino de teclado.",
	"api_int_f_content_version": "Contra que versão do conteúdo da atividade isto foi jogado. Muda quando o proprietário edita as perguntas, por isso um resultado antigo pode ser distinguido de um atual.",
	"api_int_s_control_title": "Reiniciar a atividade a partir da tua página",
	"api_int_s_control_body": "Uma instrução viaja no sentido contrário. Com \"Aceitar comandos da página principal\" ativado, a página que faz a incorporação pode limpar as respostas do jogador e voltar a colocar a atividade no início — para um botão \"tentar novamente\" teu, fora da frame.",
	"api_int_control_only_title": "Reiniciar é o único comando",
	"api_int_control_only_body": "Não existe mensagem para submeter um resultado, abrir a mensagem final, ou saltar para uma pergunta. Uma mensagem que peça outra coisa que não um reinício é ignorada.",
	"api_int_control_guard_title": "Só a página de incorporação é ouvida",
	"api_int_control_guard_body": "O comando só é aceite a partir da página que enquadra a atividade e de mais lado nenhum — nem uma frame irmã, nem um script na página. A definição está desativada por omissão, por isso ativa-a nas atividades que controlas.",
	"api_int_s_identity_title": "Trazer a tua própria identidade de jogador",
	"api_int_s_identity_body": "Se a tua plataforma já sabe quem está a jogar, a atividade não precisa de perguntar outra vez. Existem dois handshakes, ambos para uma atividade dentro da tua página, e ambos ativados por nós em vez de no editor — mudam a quem pertence um resultado, por isso são configurados contigo em vez de a partir de uma caixa de verificação.",
	"api_int_identity_pm_title": "Envia-nos o jogador",
	"api_int_identity_pm_body": "A atividade anuncia-se com 'app-loaded' e espera. A tua página envia de volta os dados do jogador, e o resultado fica associado a esses dados sem que o jogador escreva nada ou veja um ecrã de registo.",
	"api_int_identity_sso_title": "Envia-nos um token",
	"api_int_identity_sso_body": "O mesmo handshake, mas a tua página envia o JWT emitido pelo teu fornecedor de identidade em vez dos próprios campos. Verificamo-lo em relação aos emissores configurados para a tua conta antes de o jogador ser deixado entrar, por isso a identidade é comprovada e não apenas declarada — este é o que deves pedir quando o resultado tem de ser fiável.",
	"api_int_identity_cta_title": "Pede-nos para o ativar",
	"api_int_identity_cta_body": "Diz-nos qual dos dois queres e onde as atividades vão ser incorporadas, e nós configuramos a tua conta e explicamos-te o processo passo a passo.",
	"api_int_identity_cta_button": "Envia-nos um e-mail sobre identidade",
	"api_int_s_create_title": "Criar atividades a partir do teu sistema",
	"api_int_s_create_body": "Tudo o que foi dito acima é sobre um resultado a sair. No sentido contrário — criar as próprias atividades a partir de conteúdo que já tens — está a Puzzle API: um POST por tipo de atividade, e recebes de volta uma chave e um URL para incorporar.",
	"api_int_create_link": "Ler a referência da API",
	"api_int_s_lms_title": "Quando um conector já feito é a melhor resposta",
	"api_int_s_lms_body": "Se a plataforma do outro lado for um LMS a sério, provavelmente não precisas de nada disto. As notas podem voltar sozinhas para o livro de notas, sem nada que precises de alojar.",
	"api_int_lms_lti_title": "Moodle, Canvas, Brightspace, Schoology, itslearning",
	"api_int_lms_lti_body": "Lançada de dentro do LMS, com a pontuação escrita de volta no livro de notas.",
	"api_int_lms_gc_title": "Google Classroom",
	"api_int_lms_gc_body": "Publica uma atividade como trabalho e as notas voltam automaticamente.",
	"api_int_lms_not_title": "Não é nenhum destes?",
	"api_int_lms_not_body": "Plataformas de cursos, sites de membros, intranets e qualquer coisa que tenhas construído tu próprio são exatamente para isso que servem os canais desta página. Uma incorporação mais o sinal de conclusão cobre a maior parte dos casos.",
	"api_int_s_limits_title": "O que não existe",
	"api_int_s_limits_body": "Para não andares à procura disso:",
	"api_int_limit_no_read": "Não há endpoint para ler resultados de volta. A API cria atividades; os resultados saem através dos canais desta página, ou através das exportações no teu painel.",
	"api_int_limit_no_signature": "Não há assinatura no webhook. Não há nada contra o qual verificar o pedido, e é por isso que um resultado não deve ser a única coisa a sustentar algo que importa.",
	"api_int_limit_per_activity": "Não há webhook à escala da conta. O URL é uma definição de uma atividade, por isso uma atividade que copias transporta-o consigo e uma nova começa sem ele.",
	"api_int_limit_no_multiplayer": "Nada num jogo em equipa ou numa sala ao vivo. Tanto os canais de mensagens como o webhook são para jogo a solo, e as definições desativam-se sozinhas quando o modo de equipas está ativado.",
	"api_int_limit_no_retry": "Não há fila de entrega. Nada é guardado e reenviado — o próximo guardar é a nova tentativa, e a última chamada da partida é a que conta.",
	"api_nav_integrations": "Como recuperar os resultados"
}
