Translation to native Portuguese of "pt_PT.coffee" file (#5940)

* Update pt-PT.coffee

Translation of some strings to Portuguese.
"I'm a self taught coder that would love to colaborate within your project."

* Update pt-PT.coffee

Adding more translations to this file.

* Update pt-PT.coffee

Translation to native Portuguese of some strings.

* Update pt-PT.coffee

Adding more translated strings.

* Update pt-PT.coffee

Adding more translated strings.

* Update pt-PT.coffee

Adding more translated strings.

* Update pt-PT.coffee

* Update pt-PT.coffee

Adding more translated strings to Portuguese and correction of one translation.

* Update pt-PT.coffee

Adding some more translated strings.
From line 925 to 938.

* Update pt-PT.coffee

Adding more translated strings to Portuguese.
From line 938 to 991.

* Update pt-PT.coffee

Adding more translated strings.

Co-authored-by: Valentin Bryukhanov <53545457af642b0f8712bb2cc004f120ce4436f4@gmail.com>

--- app/locale/pt-PT.coco.coffee
+++ app/locale/pt-PT.coco.coffee
@@ -1,102 +1,102 @@
 module.exports = nativeDescription: "Português (Portugal)", englishDescription: "Portuguese (Portugal)", translation:

   new_home:
-#    title: "CodeCombat - Coding games to learn Python and JavaScript"
-#    meta_keywords: "CodeCombat, python, javascript, Coding Games"
-#    meta_description: "Learn typed code through a programming game. Learn Python, JavaScript, and HTML as you solve puzzles and learn to make your own coding games and websites."
-#    meta_og_url: "https://codecombat.com"
-#    become_investor: "to become an investor in CodeCombat"
-#    built_for_teachers_title: "A Coding Game Built with Teachers in Mind"
-#    built_for_teachers_blurb: "Teaching kids to code can often feel overwhelming. CodeCombat helps all educators teach students how to code in either JavaScript or Python, two of the most popular programming languages. With a comprehensive curriculum that includes six computer science units and reinforces learning through project-based game development and web development units, kids will progress on a journey from basic syntax to recursion!"
-#    built_for_teachers_subtitle1: "Computer Science"
-#    built_for_teachers_subblurb1: "Starting with our free Introduction to Computer Science course, students master core coding concepts such as while/for loops, functions, and algorithms."
-#    built_for_teachers_subtitle2: "Game Development"
-#    built_for_teachers_subblurb2: "Learners construct mazes and use basic input handling to code their own games that can be shared with friends and family."
-#    built_for_teachers_subtitle3: "Web Development"
-#    built_for_teachers_subblurb3: "Using HTML, CSS, and jQuery, learners flex their creative muscles to program their own webpages with a custom URL to share with their classmates."
-#    century_skills_title: "21st Century Skills"
-#    century_skills_blurb1: "Students Don't Just Level Up Their Hero, They Level Up Themselves"
-#    century_skills_quote1: "You mess up…so then you think about all of the possible ways to fix it, and then try again. I wouldn't be able to get here without trying hard."
-#    century_skills_subtitle1: "Critical Thinking"
-#    century_skills_subblurb1: "With coding puzzles that are naturally scaffolded into increasingly challenging levels, CodeCombat's programming game ensures kids are always practicing critical thinking."
-#    century_skills_quote2: "Everyone else was making mazes, so I thought, ‘capture the flag’ and that’s what I did."
-#    century_skills_subtitle2: "Creativity"
-#    century_skills_subblurb2: "CodeCombat encourages students to showcase their creativity by building and sharing their own games and webpages."
-#    century_skills_quote3: "If I got stuck on a level. I would work with people around me until we were all able to figure it out."
-#    century_skills_subtitle3: "Collaboration"
-#    century_skills_subblurb3: "Throughout the game, there are opportunities for students to collaborate when they get stuck and to work together using our pair programming guide."
-#    century_skills_quote4: "I’ve always had aspirations of designing video games and learning how to code ... this is giving me a great starting point."
-#    century_skills_subtitle4: "Communication"
-#    century_skills_subblurb4: "Coding requires kids to practice new forms of communication, including communicating with the computer itself and conveying their ideas using the most efficient code."
-#    classroom_in_box_title: "We Strive To:"
-#    classroom_in_box_blurb1: "Engage every student so that they believe coding is for them."
-#    classroom_in_box_blurb2: "Empower any educator to feel confident when teaching coding."
-#    classroom_in_box_blurb3: "Inspire all school leaders to create a world-class computer science program."
+    title: "CodeCombat - Jogos de programação para aprender Python e JavaScript"
+    meta_keywords: "CodeCombat, python, javascript, Jogos de programação"
+    meta_description: "Aprende a digitar código através de um jogo de programação. Aprende Python, JavaScript, e HTML como se resolvesses puzzles e aprende a fazer os teus próprios jogos de programação e páginas web."
+    meta_og_url: "https://codecombat.com"
+    become_investor: "torna-te um investidor do CodeCombat"
+    built_for_teachers_title: "Um Jogo de Programação Construído Tendo os Professores em Mente"
+    built_for_teachers_blurb: "Ensinar crianças a programar pode, muitas vezes, tornar-se esmagador. CodeCombat ajuda todos os educadores a ensinar estudantes como programar em JavaScript e Python, duas das mais populares linguagens de programação. Com um currículo completo que inclui seis unidades de ciência da computação e reforça a aprendizagem através de unidades de desenvolvimento de jogos e páginas web como projeto-base, as crianças irão progredir através de uma aventura que começa na sintaxe básica e termina na recursão!"
+    built_for_teachers_subtitle1: "Ciência da Computação"
+    built_for_teachers_subblurb1: "Ao começar com a nossa Introdução à Ciência da Computação gratuíta, os alunos dominam conceitos estrututais da programação como while/for loops, funções, e algoritmos."
+    built_for_teachers_subtitle2: "Criação de Jogos"
+    built_for_teachers_subblurb2: "Os alunos constroem labirintos e usam inputs básicos ao programar os seus próprios jogos que depois podem ser partilhados com amigos e familiares."
+    built_for_teachers_subtitle3: "Criação de Páginas Web"
+    built_for_teachers_subblurb3: "Usando HTML, CSS, e jQuery, os alunos exercitam os músculos da criatividade para programar as suas próprias páginas web com um endereço personalizado para partilhar com os colegas de turma."
+    century_skills_title: "Habilidades para o Século XXI"
+    century_skills_blurb1: "Os Alunos Não Fazem só os Seus Heróis Subir Níveis, Também se Elevam a si Mesmos"
+    century_skills_quote1: "Fazes asneira... então depois pensas em todas as possibilidades para a resolver, e tentas outra vez. Eu não tería conseguido chegar aqui sem tentar arduamente."
+    century_skills_subtitle1: "Pensamento Crítico"
+    century_skills_subblurb1: "Com puzzles de código cuja armação é naturalmente erguida em níveis de dificuldade crescente, a programação do jogo CodeCombat assegura que as crianças estão continuamente a praticar o seu pensamento crítico."
+    century_skills_quote2: "Todos os outros estavam a construir labirintos, então eu pensei, ‘captura a bandeira’ e foi o que fiz."
+    century_skills_subtitle2: "Creatividade"
+    century_skills_subblurb2: "CodeCombat  encoraja os estudantes a demonstrar a sua criativdade ao construirem e partilharem os seus jogos e páginas web."
+    century_skills_quote3: "Se eu ficasse preso num nível. Colaboraria com as pessoas à minha volta até que todos conseguíssemos resolver como avançar."
+    century_skills_subtitle3: "Colaboração"
+    century_skills_subblurb3: "Ao longo do jogo, há oportinudades para os alunos colaborarem quando ficam encalhados e trabalharem em conjunto usando o nosso guia de programação em parcería."
+    century_skills_quote4: "Sempre tive a ambição de criar video jogos e aprender como programar ... isto oferece-me um excelente ponto de partida."
+    century_skills_subtitle4: "Comunicação"
+    century_skills_subblurb4: "Programar requer que as crianças pratiquem novas formas de comunicação, incluindo comunicar com o computador e transportar as suas ideias utilizando o código mais eficiente."
+    classroom_in_box_title: "Nós esforçamo-nos para:"
+    classroom_in_box_blurb1: "Cativar todos os alunos de forma a que acreditem que programar também é para eles."
+    classroom_in_box_blurb2: "Permitir a qualquer professor sentir-se confiante quando ensina a programar."
+    classroom_in_box_blurb3: "Inspirar todos os líderes escolares a criar um programa de ciências da computação de classe mundial."
 #    classroom_in_box_blurb4: ""
-#    covid19_banner_blurb: "We are offering free access to our full curriculum to educators and schools affected by school closures."
-#    click_here: "Click here"
-#    creativity_rigor_title: "Where Creativity Meets Rigor"
-#    creativity_rigor_subtitle1: "Make coding fun and teach real-world skills"
-#    creativity_rigor_blurb1: "Students type real Python and JavaScript while playing games that encourage trial-and-error, critical thinking, and creativity. Students then apply the coding skills they’ve learned by developing their own games and websites in project-based courses."
-#    creativity_rigor_subtitle2: "Reach students at their level"
-#    creativity_rigor_blurb2: "Every CodeCombat level is scaffolded based on millions of data points and optimized to adapt to each learner. Practice levels and hints help students when they get stuck, and challenge levels assess students' learning throughout the game."
-#    creativity_rigor_subtitle3: "Built for all teachers, regardless of experience"
-#    creativity_rigor_blurb3: "CodeCombat’s self-paced, standards-aligned curriculum makes teaching computer science possible for everyone. CodeCombat equips teachers with the training, instructional resources, and dedicated support to feel confident and successful in the classroom."
-#    featured_partners_title1: "Featured In"
-#    featured_partners_title2: "Awards & Partners"
-#    featured_partners_blurb1: "CollegeBoard Endorsed Provider"
-#    featured_partners_blurb2: "Best Creativity Tool for Students"
-#    featured_partners_blurb3: "Top Pick for Learning"
-#    featured_partners_blurb4: "Code.org Official Partner"
-#    featured_partners_blurb5: "CSforAll Official Member"
-#    featured_partners_blurb6: "Hour of Code Activity Partner"
-#    for_leaders_title: "For School Leaders"
-#    for_leaders_blurb: "A Comprehensive, Standards-Aligned Computer Science Program"
-#    for_leaders_subtitle1: "Easy Implementation"
-#    for_leaders_subblurb1: "A web-based program that requires no IT support. Get started in under 5 minutes using Google or Clever Single Sign-On (SSO)."
-#    for_leaders_subtitle2: "Full Coding Curriculum"
-#    for_leaders_subblurb2: "A standards-aligned curriculum with instructional resources and professional development to enable any teacher to teach computer science."
-#    for_leaders_subtitle3: "Flexible Use Cases"
-#    for_leaders_subblurb3: "Whether you want to build a Middle School coding elective, a CTE pathway, or an AP Computer Science Principles class, CodeCombat is tailored to suit your needs."
-#    for_leaders_subtitle4: "Real-World Skills"
-#    for_leaders_subblurb4: "Students build grit and develop a growth mindset through coding challenges that prepare them for the 500K+ open computing jobs."
-#    for_teachers_title: "For Teachers"
-#    for_teachers_blurb: "Tools to Unlock Student Potential"
-#    for_teachers_subtitle1: "Project-Based Learning"
-#    for_teachers_subblurb1: "Promote creativity, problem-solving, and confidence in project-based courses where students develop their own games and webpages."
-#    for_teachers_subtitle2: "Teacher Dashboard"
-#    for_teachers_subblurb2: "View data on student progress, discover curriculum resources, and access real-time support to empower student learning."
-#    for_teachers_subtitle3: "Built-in Assessments"
-#    for_teachers_subblurb3: "Personalize instruction and ensure students understand core concepts with formative and summative assessments."
-#    for_teachers_subtitle4: "Automatic Differentiation"
-#    for_teachers_subblurb4: "Engage all learners in a diverse classroom with practice levels that adapt to each student's learning needs."
-#    game_based_blurb: "CodeCombat is a game-based computer science program where students type real code and see their characters react in real time."
-#    get_started: "Get started"
-#    global_title: "Join Our Global Community of Learners and Educators"
-#    global_subtitle1: "Learners"
-#    global_subtitle2: "Lines of Code"
-#    global_subtitle3: "Teachers"
-#    global_subtitle4: "Countries"
-#    go_to_my_classes: "Go to my classes"
-#    go_to_my_courses: "Go to my courses"
-#    quotes_quote1: "Name any program online, I’ve tried it. None of them match up to CodeCombat. Any teacher who wants their students to learn how to code... start here!"
-#    quotes_quote2: " I was surprised about how easy and intuitive CodeCombat makes learning computer science. The scores on the AP exam were much higher than I expected and I believe CodeCombat is the reason why this was the case."
-#    quotes_quote3: "CodeCombat has been the most beneficial for teaching my students real-life coding capabilities. My husband is a software engineer and he has tested out all of my programs. He put this as his top choice."
-#    quotes_quote4: "The feedback … has been so positive that we are structuring a computer science class around CodeCombat. The program really engages the students with a gaming style platform that is entertaining and instructional at the same time. Keep up the good work, CodeCombat!"
-#    see_example: "See example"
+    covid19_banner_blurb: "Estamos a oferecer acesso gratuíto ao nosso currículo completo a professores e escolas afetadas pelos encerramentos obrigatórios."
+    click_here: "Clique aqui"
+    creativity_rigor_title: "Onde a Criatividade Encontra o Rigor"
+    creativity_rigor_subtitle1: "Tornar a programação divertida e ensinar habilidades do mundo real"
+    creativity_rigor_blurb1: "Os estudantes escrevem código em Python e JavaScript enquanto brincam com jogos que encorajam a tentativa-e-erro, pensamento crítico, e criatividade. Estes conhecimentos podem ser aplicados depois no desenvolvimento dos seus próprios jogos e páginas web em cursos baseados em projetos reais."
+    creativity_rigor_subtitle2: "Alcançar outros alunos no seu nível"
+    creativity_rigor_blurb2: "Cada nível de CodeCombat é montado com base em milhões de pontos de dados e optimizado para se adaptar a cada aluno. Níveis de prática e dicas ajudam os estudantes quando ficam presos, e níveis desafiantes avaliam a aprendizagem dos estudantes ao longo do jogo."
+    creativity_rigor_subtitle3: "Construído para todos os professores, independentemente da sua experiência"
+    creativity_rigor_blurb3: "O currículo autogerido e alinhado com as normas do CodeCombat torna o ensino das ciências da computação acessível a todos. CodeCombat fornece aos professores a formação, os recursos didácticos e o apoio dedicado para se sentirem confiantes e bem sucedidos na sala de aula."
+    featured_partners_title1: "Apresentado em"
+    featured_partners_title2: "Prémios e Parceiros"
+    featured_partners_blurb1: "Fornecedor endossado pelo CollegeBoard"
+    featured_partners_blurb2: "Melhor Ferramenta de Criatividade para Estudantes"
+    featured_partners_blurb3: "Escolha superior para aprendizagem"
+    featured_partners_blurb4: "Parceiro Oficial do Code.org"
+    featured_partners_blurb5: "Membro Oficial do CSforAll"
+    featured_partners_blurb6: "Parceiro de Actividade do Hour of Code"
+    for_leaders_title: "Para Líderes Escolares"
+    for_leaders_blurb: "Um programa para as Ciências da Computação Abrangente e Alinhado com as Normas"
+    for_leaders_subtitle1: "Fácil Implementação"
+    for_leaders_subblurb1: "Um programa baseado na web que não requer suporte informático. Comece em menos de 5 minutos utilizando Google ou Clever Single Sign-On (SSO)."
+    for_leaders_subtitle2: "Curriculum de Programação Completo"
+    for_leaders_subblurb2: "Um currículo alinhado com as normas, com recursos instrucionais e desenvolvimento profissional para permitir que qualquer professor possa ensinar informática."
+    for_leaders_subtitle3: "Casos de Utilização Flexível"
+    for_leaders_subblurb3: "Quer pretendas aprender a programar de uma forma elegível para o Ensino Secundário, ou curso Técnico-profissional, o CodeCombat é adaptado às tuas necessidades."
+    for_leaders_subtitle4: "Competências para o mundo real"
+    for_leaders_subblurb4: "Os estudantes desenvolvem uma mentalidade de crescimento através de desafios de programação que os preparam para os trabalhos de computação existentes no mercado."
+    for_teachers_title: "Para Professores"
+    for_teachers_blurb: "Ferramentas para desbloquear o potencial do estudante"
+    for_teachers_subtitle1: "Aprendizagem baseada em projectos"
+    for_teachers_subblurb1: "Promover a criatividade, a resolução de problemas e a confiança em cursos baseados em projectos, onde os estudantes desenvolvem os seus próprios jogos e páginas web."
+    for_teachers_subtitle2: "Painel do Professor"
+    for_teachers_subblurb2: "Ver dados sobre o progresso dos estudantes, descobrir recursos curriculares, e aceder a apoio em tempo real para potenciar a aprendizagem dos estudantes."
+    for_teachers_subtitle3: "Avaliações incorporadas"
+    for_teachers_subblurb3: "Personalizar a instrução e assegurar que os alunos compreendem conceitos nucleares com avaliações formativas e cumulativas."
+    for_teachers_subtitle4: "Diferenciação automática"
+    for_teachers_subblurb4: "Envolver todos os alunos numa sala de aula diversificada com níveis de prática que se adaptem às necessidades de aprendizagem de cada aluno."
+    game_based_blurb: "CodeCombat é um programa informático com base num jogo onde os estudantes escrevem código real e vêem os seus personagens reagir em tempo real."
+    get_started: "Começar"
+    global_title: "Junte-se à nossa Comunidade Global de Alunos e Formadores"
+    global_subtitle1: "Alunos"
+    global_subtitle2: "Linhas de Código"
+    global_subtitle3: "Professores"
+    global_subtitle4: "Países"
+    go_to_my_classes: "Vai às minhas aulas"
+    go_to_my_courses: "Vai aos meus cursos"
+    quotes_quote1: "Diga o nome de qualquer programa online, já o experimentei. Nenhum deles se compara ao CodeCombat. Qualquer professor que queira que os seus alunos aprendam a programar... deve começar aqui!"
+    quotes_quote2: "Fiquei surpreendido com a forma como o CodeCombat se torna tão intuitivo e facilita a aprendizagem da programação. As notas que tirei no exame foram muito mais altas do que estava à espera e acredito que o CodeCombat é responsável por isso."
+    quotes_quote3: "CodeCombat tem sido o mais benéfico para ensinar aos meus alunos competências de programação práticas. O meu marido é engenheiro de software e já testou todos os meus programas. Ele colocou este jogo como a sua melhor escolha."
+    quotes_quote4: "O feedback ... tem sido tão positivo que estamos a estruturar uma aula de Ciência da Computação em torno do CodeCombat. O programa envolve efectivamente os alunos, com uma plataforma de estilo de jogo que é divertida e instrutiva ao mesmo tempo. Continuem o bom trabalho, CodeCombat!"
+    see_example: "Ver exemplo"
     slogan: "A forma mais cativante de aprender código real." # {change}
-#    teach_cs1_free: "Teach CS1 Free"
-#    teachers_love_codecombat_title: "Teachers Love CodeCombat"
-#    teachers_love_codecombat_blurb1: "Report that their students enjoy using CodeCombat to learn how to code"
-#    teachers_love_codecombat_blurb2: "Would recommend CodeCombat to other computer science teachers"
-#    teachers_love_codecombat_blurb3: "Say that CodeCombat helps them support students’ problem solving abilities"
-#    teachers_love_codecombat_subblurb: "In partnership with McREL International, a leader in research-based guidance and evaluations of educational technology."
+    teach_cs1_free: "Ensinar CS1 Grátis"
+    teachers_love_codecombat_title: "Os professores adoram o CodeCombat"
+    teachers_love_codecombat_blurb1: "Informar que os seus alunos gostam de utilizar o CodeCombat para aprender a programar"
+    teachers_love_codecombat_blurb2: "Recomendaria o CodeCombat a outros professores de ciências da computação"
+    teachers_love_codecombat_blurb3: "Dizer que o CodeCombat ajuda-os a apoiar as capacidades de resolução de problemas dos seus alunos"
+    teachers_love_codecombat_subblurb: "Em parceria com a McREL International, líder em orientação e avaliações de tecnologia educacional baseadas em investigação."
 #    top_banner_blurb: "Parents, book your child's first live online coding class for free!"
-#    try_the_game: "Try the game"
+    try_the_game: "Experimenta o jogo"
     classroom_edition: "Edição de Turma:"
     learn_to_code: "Aprender a programar:"
     play_now: "Jogar Agora"
-#    im_an_educator: "I'm an Educator"
+    im_an_educator: "Sou Educador"
     im_a_teacher: "Sou um Professor"
     im_a_student: "Sou um Estudante"
     learn_more: "Saber mais"
@@ -127,49 +127,49 @@
     motivating: "motivadora"
     not_tedious: "não entediante."
     gaming_is_good: "Estudos sugerem que jogar é bom para o cérebro das crianças. (é verdade!)"
-#    game_based: "When game-based learning systems are"
-#    compared: "compared"
-#    conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and"
-#    perform_at_higher_level: "perform at a higher level of achievement"
-#    feedback: "Games also provide real-time feedback that allows students to adjust their solution path and understand concepts more holistically, instead of being limited to just “correct” or “incorrect” answers."
+    game_based: "Quando os sistemas de aprendizagem baseados no jogo são"
+    compared: "comparado com"
+    conventional: "em comparação com os métodos convencionais de avaliação, a diferença é clara: os jogos são melhores para ajudar os estudantes a reter o conhecimento, concentrar-se e"
+    perform_at_higher_level: "ter um nível de realização mais elevado"
+    feedback: "Os jogos também fornecem feedback em tempo real que permite aos estudantes ajustar o seu caminho para a solução e compreender conceitos de forma mais holística, em vez de se limitarem apenas a respostas \"correctas\" ou \"incorrectas\"."
     real_game: "Um jogo a sério, jogado com código a sério."
-#    great_game: "A great game is more than just badges and achievements - it’s about a player’s journey, well-designed puzzles, and the ability to tackle challenges with agency and confidence."
-#    agency: "CodeCombat is a game that gives players that agency and confidence with our robust typed code engine, which helps beginner and advanced students alike write proper, valid code."
-#    request_demo_title: "Get your students started today!"
-#    request_demo_subtitle: "Request a demo and get your students started in less than an hour."
-#    get_started_title: "Set up your class today"
-#    get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science."
+    great_game: "Um grande jogo é mais do que apenas medalhas e conquistas - é sobre a viagem do jogador, puzzles bem concebidos, e a capacidade de enfrentar desafios com diligência e confiança."
+    agency: "CodeCombat é um jogo que dá aos jogadores essa diligência e confiança com o nosso robusto motor de código digitado, que ajuda tanto os principiantes como os estudantes avançados a escrever um código válido e adequado."
+    request_demo_title: "Façam com que os vossos alunos comecem hoje!"
+    request_demo_subtitle: "Solicite uma demonstração e inicie os seus alunos em menos de uma hora."
+    get_started_title: "Prepare a sua turma hoje"
+    get_started_subtitle: "Prepare uma aula, junte os seus alunos e acompanhe o seu progresso à medida que aprendem a ciência da computação."
     request_demo: "Pedir uma Demonstração"
-#    request_quote: "Request a Quote"
+    request_quote: "Peça um orçamento"
     setup_a_class: "Configurar uma Turma"
     have_an_account: "Tens uma conta?"
     logged_in_as: "Atualmente tens sessão iniciada como"
-#    computer_science: "Our self-paced courses cover basic syntax to advanced concepts"
+    computer_science: "Os nossos cursos de ritmo individual cobrem desde a sintaxe básica até conceitos avançados"
     ffa: "Grátis para todos os estudantes"
     coming_soon: "Mais, brevemente!"
     courses_available_in: "Os cursos estão disponíveis em JavaScript e Python. Os cursos de Desenvolvimento Web utilizam HTML, CSS e jQuery."
-#    boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike."
-#    winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable."
+    boast: "Apresenta enigmas que são suficientemente complexos para fascinar tanto os jogadores como os programadores."
+    winning: "Uma combinação vencedora de jogabilidade em RPG e programação de trabalhos de casa que faz com que a educação adaptada às crianças seja legitimamente agradável."
     run_class: "Tudo o que precisas para teres uma turma de ciências da computação na tua escola hoje, sem serem necessárias bases de CC."
     goto_classes: "Ir para As Minhas Turmas"
     view_profile: "Ver o Meu Perfil"
     view_progress: "Ver Progresso"
     go_to_courses: "Ir para Os Meus Cursos"
     want_coco: "Queres o CodeCombat na tua escola?"
-#    educator: "Educator"
-#    student: "Student"
-#    our_coding_programs: "Our Coding Programs"
-#    codecombat: "CodeCombat"
-#    ozaria: "Ozaria"
-#    codecombat_blurb: "Our original coding game. Recommended for parents, individuals, educators, and students who want to experience one of the most-loved coding games in the world."
-#    ozaria_blurb: "An adventure game and Computer Science program where students master the lost magic of coding to save their world. Recommended for educators and students."
-#    try_codecombat: "Try CodeCombat"
-#    try_ozaria: "Try Ozaria"
+    educator: "Educador/Formador"
+    student: "Estudante"
+    our_coding_programs: "Os nossos cursos de programação"
+    codecombat: "CodeCombat"
+    ozaria: "Ozaria"
+    codecombat_blurb: "O nosso jogo tradicional de programação. Recomendado para pais, particulares, formadores, e estudantes que queiram experimentar um dos jogos de programação mais amados do mundo."
+    ozaria_blurb: "Um jogo de aventura e programa de Ciência da Computação onde os estudantes dominam a magia perdida da programação para salvar o seu mundo. Recomendado para professores e estudantes."
+    try_codecombat: "Experimenta CodeCombat"
+    try_ozaria: "Experimenta Ozaria"

   nav:
-#    educators: "Educators"
-#    follow_us: "Follow Us"
-#    general: "General"
+    educators: "Educadores/Formadores"
+    follow_us: "Segue-nos"
+    general: "Geral"
     map: "Mapa"
     play: "Níveis" # The top nav bar entry where players choose which levels to play
     community: "Comunidade"
@@ -189,7 +189,7 @@
     twitter_follow: "Seguir"
     my_classrooms: "As Minhas Turmas"
     my_courses: "Os Meus Cursos"
-#    my_teachers: "My Teachers"
+    my_teachers: "Os Meus Professores"
     careers: "Carreiras"
     facebook: "Facebook"
     twitter: "Twitter"
@@ -207,14 +207,14 @@
     help_pref: "Precisas de ajuda? Envia um e-mail para"
     help_suff: "e nós entraremos em contacto!"
     resource_hub: "Centro de Recursos"
-#    apcsp: "AP CS Principles"
+#    apcsp: "AP CS Principles" - Not aplicable in Portugal
     parent: "Educadores"
-#    browser_recommendation: "For the best experience we recommend using the latest version of Chrome. Download the browser here!"
+    browser_recommendation: "Para a melhor experiência, recomendamos a utilização da última versão do Chrome. Descarregue o navegador aqui!"

   modal:
     close: "Fechar"
     okay: "Ok"
-#    cancel: "Cancel"
+    cancel: "Cancelar"

   not_found:
     page_not_found: "Página não encontrada"
@@ -228,12 +228,12 @@
     subscribe_as_diplomat: "Subscreve-te como Diplomata"

   play:
-#    title: "Play CodeCombat Levels - Learn Python, JavaScript, and HTML"
-#    meta_description: "Learn programming with a coding game for beginners. Learn Python or JavaScript as you solve mazes, make your own games, and level up. Challenge your friends in multiplayer arena levels!"
-#    level_title: "__level__ - Learn to Code in Python, JavaScript, HTML"
-#    video_title: "__video__ | Video Level"
-#    game_development_title: "__level__ | Game Development"
-#    web_development_title: "__level__ | Web Development"
+    title: "Joga os níveis de CodeCombat - Aprende Python, JavaScript, e HTML"
+    meta_description: "Aprender programação com um jogo de codificação para principiantes. Aprenda Python ou JavaScript ao resolver labirintos, faça os seus próprios jogos, e suba de nível. Desafie os seus amigos em níveis e arenas multiplayer!"
+    level_title: "__level__ - Aprenda a programar em Python, JavaScript, HTML"
+    video_title: "__video__ | Nível de vídeo"
+    game_development_title: "__level__ | Criação de jogos"
+    web_development_title: "Criação/Desenvolvimento de páginas Web"
     anon_signup_title_1: "O CodeCombat tem uma"
     anon_signup_title_2: "Versão para Turmas!"
     anon_signup_enter_code: "Introduz um Código de Truma:"
@@ -242,8 +242,8 @@
     anon_signup_setup_class: "Configura um turma, adiciona estudantes e monitoriza o progresso!"
     anon_signup_create_teacher: "Criar uma conta de professor gratuita"
     play_as: "Jogar Como" # Ladder page
-#    get_course_for_class: "Assign Game Development and more to your classes!"
-#    request_licenses: "Contact our school specialists for details."
+    get_course_for_class: "Atribua ás suas aulas a Criação de Jogos e não só!"
+    request_licenses: "Contacte os nossos especialistas escolares para mais detalhes."
     compete: "Competir!" # Course details page
     spectate: "Assistir" # Ladder page
     players: "jogadores" # Hover over a level on /play
@@ -275,12 +275,12 @@
     adjust_volume: "Ajustar volume"
     campaign_multiplayer: "Arenas Multijogador"
     campaign_multiplayer_description: "... nas quais programas contra outros jogadores."
-#    brain_pop_done: "You’ve defeated the Ogres with code! You win!"
-#    brain_pop_challenge: "Challenge yourself to play again using a different programming language!"
-#    replay: "Replay"
+    brain_pop_done: "Derrotaste os Ogres com o teu código! Ganhaste!"
+    brain_pop_challenge: "Desafia-te a jogar novamente usando uma linguagem de programação diferente!"
+    replay: "Repetir"
     back_to_classroom: "Voltar à Turma"
     teacher_button: "Para Professores"
-#    get_more_codecombat: "Get More CodeCombat"
+    get_more_codecombat: "Obter mais do CodeCombat"

   code:
     if: "se" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
@@ -351,31 +351,31 @@
     sign_in_with_facebook: "Iniciar sessão com o FB"
     sign_in_with_gplus: "Iniciar sessão com o Google"
     signup_switch: "Queres criar uma conta?"
-#    accounts_merge_confirmation: "There is an account associated with the email from this Google account. Would you like to merge these accounts?"
+    accounts_merge_confirmation: "Existe uma conta associada ao e-mail desta conta Google. Gostaria de fundir estas contas?"

   signup:
-#    complete_subscription: "Complete Subscription"
+    complete_subscription: "Subscrição completa"
     create_student_header: "Criar Conta de Estudante"
     create_teacher_header: "Criar Conta de Professor"
     create_individual_header: "Criar Conta Individual"
     email_announcements: "Receber anúncios sobre níveis e funcionalidades novos do CodeCombat!"
     sign_in_to_continue: "Inicia sessão ou cria uma conta para continuares"
-#    teacher_email_announcements: "Keep me updated on new teacher resources, curriculum, and courses!"
+    teacher_email_announcements: "Mantenha-me actualizado sobre os novos recursos, currículo e cursos para professores!"
     creating: "A Criar Conta..."
     sign_up: "Registar"
     log_in: "iniciar sessão com palavra-passe"
-#    login: "Login"
+    login: "Login"
     required: "Precisas de iniciar sessão antes de prosseguires."
     login_switch: "Já tens uma conta?"
     optional: "opcional"
-#    connected_gplus_header: "You've successfully connected with Google+!"
-#    connected_gplus_p: "Finish signing up so you can log in with your Google+ account."
-#    connected_facebook_header: "You've successfully connected with Facebook!"
-#    connected_facebook_p: "Finish signing up so you can log in with your Facebook account."
+    connected_gplus_header: "Conectou-se com sucesso ao Google+!"
+    connected_gplus_p: "Termine a inscrição para que possa iniciar sessão com a sua conta Google+."
+    connected_facebook_header: "Conectou-se com sucesso ao Facebook!"
+    connected_facebook_p: "Termine de se inscrever para que possa iniciar sessão com a sua conta no Facebook."
     hey_students: "Estudantes, introduzam o código de turma do vosso professor."
     birthday: "Aniversário"
-#    parent_email_blurb: "We know you can't wait to learn programming — we're excited too! Your parents will receive an email with further instructions on how to create an account for you. Email {{email_link}} if you have any questions."
-#    classroom_not_found: "No classes exist with this Class Code. Check your spelling or ask your teacher for help."
+    parent_email_blurb: "Sabemos que mal podes esperar para aprender programação — também estamos entusiasmados! Os teus pais receberão um e-mail com mais instruções sobre como criar uma conta para ti. Envia um e-mail {{{{email_link}} se tiveres alguma dúvida."
+    classroom_not_found: "Não existem turmas com este Código de Turma. Verifica a tua ortografia ou pede ajuda ao teu professor."
     checking: "A verificar..."
     account_exists: "Este e-mail já está a ser usado:"
     sign_in: "Iniciar sessão"
@@ -407,33 +407,32 @@
     ask_teacher_4: " então."
     about_to_join: "Estás prestes a entrar em:"
     enter_parent_email: "Introduz o e-mail do teu educador:"
-#    parent_email_error: "Something went wrong when trying to send the email. Check the email address and try again."
-#    parent_email_sent: "We’ve sent an email with further instructions on how to create an account. Ask your parent to check their inbox."
+    parent_email_error: "Algo correu mal ao tentar enviar o e-mail. Verifique o endereço de correio electrónico e tente novamente."
+    parent_email_sent: "Enviámos um e-mail com mais instruções sobre como criar uma conta. Pede aos teus pais para verificarem a sua caixa de entrada."
     account_created: "Conta Criada!"
     confirm_student_blurb: "Aponta a tua informação para que não a esqueças. O teu professor também te pode ajudar a reiniciar a tua palavra-passe a qualquer altura."
     confirm_individual_blurb: "Aponta a tua informação de início de sessão caso precises dela mais tarde. Verifica o teu e-mail para que possas recuperar a tua conta se alguma vez esqueceres a tua palavra-passe - verifica a tua caixa de entrada!"
     write_this_down: "Aponta isto:"
     start_playing: "Começar a Jogar!"
-#    sso_connected: "Successfully connected with:"
+    sso_connected: "Conectado com sucesso:"
     select_your_starting_hero: "Escolhe o Teu Herói Inicial:"
     you_can_always_change_your_hero_later: "Podes sempre alterar o teu herói mais tarde."
-#    finish: "Finish"
-#    teacher_ready_to_create_class: "You're ready to create your first class!"
-#    teacher_students_can_start_now: "Your students will be able to start playing the first course, Introduction to Computer Science, immediately."
-#    teacher_list_create_class: "On the next screen you will be able to create a new class."
-#    teacher_list_add_students: "Add students to the class by clicking the View Class link, then sending your students the Class Code or URL. You can also invite them via email if they have email addresses."
-#    teacher_list_resource_hub_1: "Check out the"
-#    teacher_list_resource_hub_2: "Course Guides"
-#    teacher_list_resource_hub_3: "for solutions to every level, and the"
-#    teacher_list_resource_hub_4: "Resource Hub"
-#    teacher_list_resource_hub_5: "for curriculum guides, activities, and more!"
-#    teacher_additional_questions: "That’s it! If you need additional help or have questions, reach out to __supportEmail__."
-#    dont_use_our_email_silly: "Don't put our email here! Put your parent's email."
-#    want_codecombat_in_school: "Want to play CodeCombat all the time?"
-#    eu_confirmation: "I agree to allow CodeCombat to store my data on US servers."
-#    eu_confirmation_place_of_processing: "Learn more about the possible risks"
-#    eu_confirmation_student: "If you are not sure, ask your teacher."
-#    eu_confirmation_individual: "If you do not want us to store your data on US servers, you can always keep playing anonymously without saving your code."
+    finish: "Fim"
+    teacher_ready_to_create_class: "Está pronto para criar a sua primeira turma!"
+    teacher_students_can_start_now: "Os seus alunos poderão começar a jogar o primeiro módulo, Introdução à Ciência da Computação, imediatamente."
+    teacher_list_create_class: "No ecrã seguinte, poderá criar uma nova turma."
+    teacher_list_add_students: "Adicione alunos à turma clicando no link Ver Turma, depois envie aos seus alunos o Código da Turma ou URL. Pode também convidá-los por correio electrónico se tiverem endereços de correio electrónico."
+    teacher_list_resource_hub_2: "Guias de Curso"
+    teacher_list_resource_hub_3: "para soluções a todos os níveis, e o"
+    teacher_list_resource_hub_4: "Centro de Recursos"
+    teacher_list_resource_hub_5: "para guias curriculares, actividades, e muito mais!"
+    teacher_additional_questions: "Está feito! Se precisar de ajuda adicional ou tiver dúvidas, contacte __supportEmail__."
+    dont_use_our_email_silly: "Não coloques o nosso e-mail aqui! Põe o email dos teus pais."
+    want_codecombat_in_school: "Queres jogar CodeCombat o tempo inteiro?"
+    eu_confirmation: "Concordo em permitir que a CodeCombat armazene os meus dados em servidores dos EUA."
+    eu_confirmation_place_of_processing: "Saiba mais sobre os possíveis riscos"
+    eu_confirmation_student: "Se não tens a certeza, pergunta ao teu professor."
+    eu_confirmation_individual: "Se não quiser que armazenemos os seus dados em servidores dos EUA, pode sempre continuar a jogar anonimamente sem guardar o seu código."

   recover:
     recover_account_title: "Recuperar Conta"
@@ -449,8 +448,8 @@
     books: "Livros"

   common:
-#    default_title: "CodeCombat - Coding games to learn Python and JavaScript"
-#    default_meta_description: "Learn typed code through a programming game. Learn Python, JavaScript, and HTML as you solve puzzles and learn to make your own coding games and websites."
+    default_title: "CodeCombat - Jogos de programação para aprender Python e JavaScript"
+    default_meta_description: "Aprenda a digitar código através de um jogo de programação. Aprenda Python, JavaScript, e HTML enquanto resolve puzzles e aprende a fazer os seus próprios jogos de programação e websites."
     back: "Voltar" # When used as an action verb, like "Navigate backward"
     coming_soon: "Brevemente!"
     continue: "Continuar" # When used as an action verb, like "Continue forward"
@@ -482,9 +481,9 @@
     submit_changes: "Submeter Alterações"
     save_changes: "Guardar Alterações"
     required_field: "necessário"
-#    submit: "Submit"
-#    replay: "Replay"
-#    complete: "Complete"
+    submit: "Submeter"
+    replay: "Repetir"
+    complete: "Completo"

   general:
     and: "e"
@@ -578,18 +577,18 @@
     course: "Curso:"
     done: "Concluir"
     next_level: "Próximo Nível"
-#    combo_challenge: "Combo Challenge"
-#    concept_challenge: "Concept Challenge"
-#    challenge_unlocked: "Challenge Unlocked"
-#    combo_challenge_unlocked: "Combo Challenge Unlocked"
-#    concept_challenge_unlocked: "Concept Challenge Unlocked"
-#    concept_challenge_complete: "Concept Challenge Complete!"
-#    combo_challenge_complete: "Combo Challenge Complete!"
-#    combo_challenge_complete_body: "Great job, it looks like you're well on your way to understanding __concept__!"
-#    replay_level: "Replay Level"
+    combo_challenge: "Desafio Combo"
+    concept_challenge: "Desafio de Conceito"
+    challenge_unlocked: "Desafio Desbloqueado"
+    combo_challenge_unlocked: "Desafio Combo Desbloqueado"
+    concept_challenge_unlocked: "Desafio do conceito desbloqueado"
+    concept_challenge_complete: "Desafio de Conceito Completo!"
+    combo_challenge_complete: "Desafio Combo Completo!"
+    combo_challenge_complete_body: "Óptimo trabalho, parece que estás no bom caminho para compreender __concept__!"
+    replay_level: "Repetir Nível"
     combo_concepts_used: "__complete__/__total__ Conceitos Usados"
-#    combo_all_concepts_used: "You used all concepts possible to solve the challenge. Great job!"
-#    combo_not_all_concepts_used: "You used __complete__ out of the __total__ concepts possible to solve the challenge. Try to get all __total__ concepts next time!"
+    combo_all_concepts_used: "Utilizaste todos os conceitos possíveis para resolver o desafio. Excelente trabalho!"
+    combo_not_all_concepts_used: "Utilizou __complete__ dos conceitos __total__ possíveis para resolver o desafio. Tente obter todos os __total__ conceitos da próxima vez!"
     start_challenge: "Começar Desafio"
     next_game: "Próximo jogo"
     languages: "Linguagens"
@@ -602,12 +601,12 @@
     restart: "Reiniciar"
     goals: "Objetivos"
     goal: "Objetivo"
-#    challenge_level_goals: "Challenge Level Goals"
-#    challenge_level_goal: "Challenge Level Goal"
-#    concept_challenge_goals: "Concept Challenge Goals"
-#    combo_challenge_goals: "Challenge Level Goals"
-#    concept_challenge_goal: "Concept Challenge Goal"
-#    combo_challenge_goal: "Challenge Level Goal"
+    challenge_level_goals: "Objectivos dos Níveis de Desafio"
+    challenge_level_goal: "Objectivo do Nível de Desafio"
+    concept_challenge_goals: "Objectivos do Desafio de Conceito"
+    combo_challenge_goals: "Objectivos dos Níveis de Desafio"
+    concept_challenge_goal: "Objectivo do Desafio de Conceito"
+    combo_challenge_goal: "Objectivo do Nível de Desafio"
     running: "A Executar..."
     success: "Sucesso!"
     incomplete: "Incompletos"
@@ -617,8 +616,8 @@
     reload_title: "Recarregar o Código Todo?"
     reload_really: "Tens a certeza que queres recarregar este nível de volta ao início?"
     reload_confirm: "Recarregar Tudo"
-#    restart_really: "Are you sure you want to restart the level? You'll loose all the code you've written."
-#    restart_confirm: "Yes, Restart"
+    restart_really: "Tens a certeza de que queres reiniciar o nível? Perderás todo o código que escreveste."
+    restart_confirm: "Sim, Reiniciar"
     test_level: "Testar Nível"
     victory: "Vitória"
     victory_title_prefix: ""
@@ -637,26 +636,26 @@
     victory_gems_gained: "Gemas Ganhas"
     victory_new_item: "Novo Item"
     victory_new_hero: "Novo Herói"
-#    victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks."
+    victory_viking_code_school: "Caramba, foi um nível difícil que acabaste de vencer! Se ainda não é um programador de software, deveria ser. Acabas de ser rapidamente aceite pela Viking Code School, onde pode levar as suas competências para o nível seguinte e tornar-se um programador web profissional em 14 semanas."
     victory_become_a_viking: "Torna-te um Viking"
     victory_no_progress_for_teachers: "O progresso não é guardado para professores. Mas podes adicionar à tua turma uma conta de estudante para ti."
     tome_cast_button_run: "Executar"
     tome_cast_button_running: "A Executar"
     tome_cast_button_ran: "Executado"
-#    tome_cast_button_update: "Update"
+    tome_cast_button_update: "Actualização"
     tome_submit_button: "Submeter"
     tome_reload_method: "Recarregar o código original para recomeçar o nível"
     tome_available_spells: "Feitiços Disponíveis"
     tome_your_skills: "As Tuas Habilidades"
     hints: "Dicas"
-#    videos: "Videos"
+    videos: "Vídeos"
     hints_title: "Dica {{number}}"
     code_saved: "Código Guardado"
     skip_tutorial: "Saltar (esc)"
     keyboard_shortcuts: "Atalhos de Teclado"
     loading_start: "Iniciar Nível"
-#    loading_start_combo: "Start Combo Challenge"
-#    loading_start_concept: "Start Concept Challenge"
+    loading_start_combo: "Iniciar o Desafio Combo"
+    loading_start_concept: "Iniciar Desafio de Conceito"
     problem_alert_title: "Corrige o Teu Código"
     time_current: "Agora:"
     time_total: "Máximo:"
@@ -721,50 +720,50 @@
     tip_solve_then_write: "Primeiro, resolve o problema. Depois, escreve o código. - John Johnson"
     tip_compiler_ignores_comments: "Às vezes acho que o compilador ignora os meus comentários."
     tip_understand_recursion: "A única forma de entender recursão é entender recursão."
-#    tip_life_and_polymorphism: "Open Source is like a totally polymorphic heterogeneous structure: All types are welcome."
-#    tip_mistakes_proof_of_trying: "Mistakes in your code are just proof that you are trying."
-#    tip_adding_orgres: "Rounding up ogres."
-#    tip_sharpening_swords: "Sharpening the swords."
-#    tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
-#    tip_nemo: "When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
-#    tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
-#    tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green"
-#    tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green"
-#    tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood"
-#    tip_good_idea: "The best way to have a good idea is to have a lot of ideas. - Linus Pauling"
-#    tip_programming_not_about_computers: "Computer Science is no more about computers than astronomy is about telescopes. - Edsger Dijkstra"
-#    tip_mulan: "Believe you can, then you will. - Mulan"
-    project_complete: "Projeto Completado!"
-#    share_this_project: "Share this project with friends or family:"
+    tip_life_and_polymorphism: "O Open Source é como uma estrutura totalmente polimórfica e heterogénea: Todos os tipos são bem-vindos."
+    tip_mistakes_proof_of_trying: "Os erros no teu código são apenas a prova de que estás a tentar."
+    tip_adding_orgres: "Arrondando para cima os ogres."
+    tip_sharpening_swords: "Afiar as espadas."
+    tip_ratatouille: "Não deves deixar ninguém definir os teus limites por causa da tua proveniência. O teu único limite é a tua alma. - Gusteau, Ratatouille"
+    tip_nemo: "Quando a vida te desilude, queres saber o que tens de fazer? Continua a nadar, continua a nadar. - Dory, Finding Nemo"
+    tip_internet_weather: "Muda-te para a Internet, é óptimo aqui. Podemos viver no interior, onde o tempo é sempre fantástico. - John Green"
+    tip_nerds: "Os tótós são autorizados a amar coisas, como saltar para cima e para baixo na cadeira - sem poderes controlar-te a ti próprio, amo. - John Green"
+    tip_self_taught: "Eu próprio me ensinei 90% do que aprendi. E isso é normal! - Hank Green"
+    tip_luna_lovegood: "Não te preocupes, estás tão são como eu. - Luna Lovegood"
+    tip_good_idea: "A melhor maneira de ter uma boa ideia é ter muitas ideias. - Linus Pauling"
+    tip_programming_not_about_computers: "A Ciência da Computação é tanto sobre computadores como a astronomia é sobre telescópios. - Edsger Dijkstra"
+    tip_mulan: "Acredita que podes, então vais conseguir. - Mulan"
+    project_complete: "Projeto Concluído!"
+    share_this_project: "Partilhar este projecto com amigos ou familiares:"
     ready_to_share: "Pronto para publicares o teu projeto?"
-#    click_publish: "Click \"Publish\" to make it appear in the class gallery, then check out what your classmates built! You can come back and continue to work on this project. Any further changes will automatically be saved and shared with your classmates."
-#    already_published_prefix: "Your changes have been published to the class gallery."
-#    already_published_suffix: "Keep experimenting and making this project even better, or see what the rest of your class has built! Your changes will automatically be saved and shared with your classmates."
+    click_publish: "Clica em \"Publicar\" para o mostrares na galeria da turma, depois verifica o que os teus colegas de turma construíram! Podes voltar e continuar a trabalhar neste projecto. Quaisquer outras alterações serão automaticamente guardadas e partilhadas com os teus colegas de turma."
+    already_published_prefix: "As tuas alterações foram publicadas na galeria da turma."
+    already_published_suffix: "Continua a experimentar e a tornar este projecto ainda melhor, ou vê o que o resto da tua turma construiu! As tuas alterações serão automaticamente guardadas e partilhadas com os teus colegas de turma."
     view_gallery: "Ver Galeria"
     project_published_noty: "O teu nível foi publicado!"
     keep_editing: "Continuar a Editar"
-#    learn_new_concepts: "Learn new concepts"
-#    watch_a_video: "Watch a video on __concept_name__"
-#    concept_unlocked: "Concept Unlocked"
-#    use_at_least_one_concept: "Use at least one concept: "
-#    command_bank: "Command Bank"
-#    learning_goals: "Learning Goals"
-#    start: "Start"
-#    vega_character: "Vega Character"
-#    click_to_continue: "Click to Continue"
+    learn_new_concepts: "Aprende novos conceitos"
+    watch_a_video: "Vê um vídeo sobre  __concept_name__"
+    concept_unlocked: "Conceito Desbloqueado"
+    use_at_least_one_concept: "Utilizar pelo menos um conceito: "
+    command_bank: "Banco de Comando"
+    learning_goals: "Objectivos de aprendizagem"
+    start: "Começar"
+    vega_character: "Personagem Vega"
+    click_to_continue: "Clicar para continuar"

   apis:
     methods: "Métodos"
     events: "Eventos"
-#    handlers: "Handlers"
+    handlers: "Responsáveis"
     properties: "Propriedades"
-#    snippets: "Snippets"
-#    spawnable: "Spawnable"
+    snippets: "Snippets"
+    spawnable: "Reproduzível"
     html: "HTML"
     math: "Matemática"
-#    array: "Array"
+    array: "Array"
     object: "Objeto"
-#    string: "String"
+    string: "String"
     function: "Função"
     vector: "Vetor"
     date: "Data"
@@ -773,21 +772,21 @@
     number: "Número"
     webjavascript: "JavaScript"

-#  amazon_hoc:
-#    title: "Keep Learning with Amazon!"
-#    congrats: "Congratulations on conquering that challenging Hour of Code!"
-#    educate_1: "Now, keep learning about coding and cloud computing with AWS Educate, an exciting, free program from Amazon for both students and teachers. With AWS Educate, you can earn cool badges as you learn about the basics of the cloud and cutting-edge technologies such as gaming, virtual reality, and Alexa."
-#    educate_2: "Learn more and sign up here"
-#    future_eng_1: "You can also try to build your own school facts skill for Alexa"
-#    future_eng_2: "here"
-#    future_eng_3: "(device is not required). This Alexa activity is brought to you by the"
-#    future_eng_4: "Amazon Future Engineer"
-#    future_eng_5: "program which creates learning and work opportunities for all K-12 students in the United States who wish to pursue computer science."
-
-#  live_class:
-#    title: "Thank you!"
-#    content: "Amazing! We just launched live online classes."
-#    link: "Ready to get ahead on your coding?"
+  amazon_hoc:
+    title: "Continua a aprender com a Amazon!"
+    congrats: "Parabéns pela conquista dessa desafiante Hora de Codificação!"
+    educate_1: "Agora, continua a aprender sobre codificação e computação em nuvem com AWS Educate, um programa emocionante e gratuito da Amazon, tanto para estudantes como para professores. Com AWS Educate, podes ganhar emblemas fixes à medida que aprendes sobre os conceitos básicos da nuvem e tecnologias de ponta, como jogos, realidade virtual e Alexa."
+    educate_2: "Saiba mais e inscreva-se aqui"
+    future_eng_1: "Também podes tentar construir a tua própria habilidade em factos escolares para a Alexa"
+    future_eng_2: "aqui"
+    future_eng_3: "(não é necessário dispositivo). Esta actividade Alexa é trazida até si pela"
+    future_eng_4: "Futuro Engenheiro da Amazon"
+    future_eng_5: "progrma que cria oportunidades de aprendizagem e de trabalho para todos os estudantes do K-12 nos Estados Unidos que desejem seguir a ciência da computação."
+
+  live_class:
+    title: "Obrigado!"
+    content: "Incrível! Acabámos de lançar aulas online ao vivo."
+    link: "Pronto para avançar com a tua programação?"

 #  code_quest:
 #    great: "Great!"
@@ -808,9 +807,9 @@
     goal_survive_time: "Sobrevive por __seconds__ segundos."
     goal_defeat: "Derrota todos os inimigos."
     goal_defeat_amount: "Derrota __amount__ inimigos."
-#    goal_move: "Move to all the red X marks."
-#    goal_collect: "Collect all the items."
-#    goal_collect_amount: "Collect __amount__ items."
+    goal_move: "Mover-se para todas as marcas X vermelhas."
+    goal_collect: "Recolher todos os itens."
+    goal_collect_amount: "Recolher __amount__ itens."

   game_menu:
     inventory_tab: "Inventário"
@@ -841,7 +840,7 @@
     damage_dealt: "Dano Infligido"
     difficulty: "Dificuldade"
     gold_collected: "Ouro Recolhido"
-#    survival_time: "Survived"
+    survival_time: "Sobreviveu"
     defeated: "Inimigos Derrotados"
     code_length: "Linhas de Código"
     score_display: "__scoreType__: __score__"
@@ -879,16 +878,16 @@

   subscribe_for_gems:
     prompt_title: "Gemas Insuficientes!"
-#    prompt_body: "Subscribe to Premium to get gems and access to even more levels!"
+    prompt_body: "Subscreve-te ao Premium para obter gemas e acesso a ainda mais níveis!"

   earn_gems:
     prompt_title: "Gemas Insuficientes"
     prompt_body: "Continua a jogar para receberes mais!"

   subscribe:
-#    best_deal: "Best Deal!"
-#    confirmation: "Congratulations! You now have a CodeCombat Premium Subscription!"
-#    premium_already_subscribed: "You're already subscribed to Premium!"
+    best_deal: "Melhor Oferta!"
+    confirmation: "Parabéns! Tens agora uma Subscrição Premium CodeCombat!"
+    premium_already_subscribed: "Já estás inscrito em Premium!"
     subscribe_modal_title: "CodeCombat 'Premium'"
     comparison_blurb: "Torna-te um Programador Mestre - subscreve-te ao <b>'Premium'</b> hoje!"
     must_be_logged: "Primeiro tens de ter sessão iniciada. Por favor, cria uma conta ou inicia sessão a partir do menu acima."
@@ -931,73 +930,73 @@
     support_part1: "Precisas de ajuda com o pagamento ou preferes PayPal? Envia um e-mail para"
     support_part2: "support@codecombat.com"

-#  announcement:
-#    now_available: "Now available for subscribers!"
-#    subscriber: "subscriber"
-#    cuddly_companions: "Cuddly Companions!" # Pet Announcement Modal
-#    kindling_name: "Kindling Elemental"
-#    kindling_description: "Kindling Elementals just want to keep you warm at night. And during the day. All the time, really."
-#    griffin_name: "Baby Griffin"
-#    griffin_description: "Griffins are half eagle, half lion, all adorable."
-#    raven_name: "Raven"
-#    raven_description: "Ravens are excellent at gathering shiny bottles full of health for you."
-#    mimic_name: "Mimic"
-#    mimic_description: "Mimics can pick up coins for you. Move them on top of coins to increase your gold supply."
-#    cougar_name: "Cougar"
-#    cougar_description: "Cougars like to earn a PhD by Purring Happily Daily."
-#    fox_name: "Blue Fox"
-#    fox_description: "Blue foxes are very clever and love digging in the dirt and snow!"
-#    pugicorn_name: "Pugicorn"
-#    pugicorn_description: "Pugicorns are some of the rarest creatures and can cast spells!"
-#    wolf_name: "Wolf Pup"
-#    wolf_description: "Wolf pups excel in hunting, gathering, and playing a mean game of hide-and-seek!"
-#    ball_name: "Red Squeaky Ball"
-#    ball_description: "ball.squeak()"
-#    collect_pets: "Collect pets for your heroes!"
-#    each_pet: "Each pet has a unique helper ability!"
-#    upgrade_to_premium: "Become a {{subscriber}} to equip pets."
-#    play_second_kithmaze: "Play {{the_second_kithmaze}} to unlock the Wolf Pup!"
-#    the_second_kithmaze: "The Second Kithmaze"
-#    keep_playing: "Keep playing to discover the first pet!"
-#    coming_soon: "Coming soon"
-#    ritic: "Ritic the Cold" # Ritic Announcement Modal
-#    ritic_description: "Ritic the Cold. Trapped in Kelvintaph Glacier for countless ages, finally free and ready to tend to the ogres that imprisoned him."
-#    ice_block: "A block of ice"
-#    ice_description: "There appears to be something trapped inside..."
-#    blink_name: "Blink"
-#    blink_description: "Ritic disappears and reappears in a blink of an eye, leaving nothing but a shadow."
-#    shadowStep_name: "Shadowstep"
-#    shadowStep_description: "A master assassin knows how to walk between the shadows."
-#    tornado_name: "Tornado"
-#    tornado_description: "It is good to have a reset button when one's cover is blown."
-#    wallOfDarkness_name: "Wall of Darkness"
-#    wallOfDarkness_description: "Hide behind a wall of shadows to prevent the gaze of prying eyes."
-
-#  avatar_selection:
-#    pick_an_avatar: "Pick an avatar that will represent you as a player"
-
-#  premium_features:
-#    get_premium: "Get<br>CodeCombat<br>Premium" # Fit into the banner on the /features page
-#    master_coder: "Become a Master Coder by subscribing today!"
-#    paypal_redirect: "You will be redirected to PayPal to complete the subscription process."
-#    subscribe_now: "Subscribe Now"
-#    hero_blurb_1: "Get access to __premiumHeroesCount__ super-charged subscriber-only heroes! Harness the unstoppable power of Okar Stompfoot, the deadly precision of Naria of the Leaf, or summon \"adorable\" skeletons with Nalfar Cryptor."
-#    hero_blurb_2: "Premium Warriors unlock stunning martial skills like Warcry, Stomp, and Hurl Enemy. Or, play as a Ranger, using stealth and bows, throwing knives, traps! Try your skill as a true coding Wizard, and unleash a powerful array of Primordial, Necromantic or Elemental magic!"
-#    hero_caption: "Exciting new heroes!"
-#    pet_blurb_1: "Pets aren't just adorable companions, they also provide unique functionality and methods. The Baby Griffin can carry units through the air, the Wolf Pup plays catch with enemy arrows, the Cougar is fond of chasing ogres around, and the Mimic attracts coins like a magnet!"
-#    pet_blurb_2: "Collect all the pets to discover their unique abilities!"
-#    pet_caption: "Adopt pets to accompany your hero!"
-#    game_dev_blurb: "Learn game scripting and build new levels to share with your friends! Place the items you want, write code for unit logic and behavior, and see if your friends can beat the level!"
-#    game_dev_caption: "Design your own games to challenge your friends!"
-#    everything_in_premium: "Everything you get in CodeCombat Premium:"
-#    list_gems: "Receive bonus gems to buy gear, pets, and heroes"
-#    list_levels: "Gain access to __premiumLevelsCount__ more levels"
-#    list_heroes: "Unlock exclusive heroes, include Ranger and Wizard classes"
-#    list_game_dev: "Make and share games with friends"
-#    list_web_dev: "Build websites and interactive apps"
-#    list_items: "Equip Premium-only items like pets"
-#    list_support: "Get Premium support to help you debug tricky code"
-#    list_clans: "Create private clans to invite your friends and compete on a group leaderboard"
+  announcement:
+    now_available: "Agora disponível para subscritores!"
+    subscriber: "subscritor"
+    cuddly_companions: "Companheiros fofos!" # Pet Announcement Modal
+    kindling_name: "Elemental Kindling"
+    kindling_description: "Os Elementais Kindling só querem manter-te quente durante a noite. E durante o dia. A toda a hora, na verdade."
+    griffin_name: "Grifo bebé"
+    griffin_description: "Os Grifos são meio águia, meio leão, são adoráveis."
+    raven_name: "Corvo"
+    raven_description: "Os corvos são excelentes a recolher garrafas brilhantes e cheias de vida para ti."
+    mimic_name: "Mímico"
+    mimic_description: "Os Mímicos podem apanhar moedas por ti. Move-os para o topo das moedas para aumentar a tua provisão de ouro."
+    cougar_name: "Puma"
+    cougar_description: "Os pumas gostam de ganhar um doutoramento(PhD) a Ronrronar de Felicidade Diáriamente."
+    fox_name: "Raposa Azul"
+    fox_description: "As raposas azuis são muito espertas e adoram escavar na terra e na neve!"
+    pugicorn_name: "Pugicórnio"
+    pugicorn_description: "Os pugicórnios são umas das criaturas mais raras e podem lançar feitiços!"
+    wolf_name: "Filhote de Lobo"
+    wolf_description: "Os filhotes de lobo destacam-se na caça, na recolha e no jogo das escondidas!"
+    ball_name: "Bola Vermelha Guinchante"
+    ball_description: "ball.squeak()"
+    collect_pets: "Recolham animais de estimação para os vossos heróis!"
+    each_pet: "Cada animal de estimação tem uma capacidade de ajudar única!"
+    upgrade_to_premium: "Tornar-se um {{subscriber}} para equipar animais de estimação."
+    play_second_kithmaze: "Joga o {{the_second_kithmaze}} para desbloquear o Filhote de Lobo!"
+    the_second_kithmaze: "O Segundo Kithmaze"
+    keep_playing: "Continua a jogar para descobrires o primeiro animal de estimação!"
+    coming_soon: "Em breve"
+    ritic: "Ritic, o Frio" # Ritic Announcement Modal
+    ritic_description: "Ritic, o Frio. Preso no Glaciar Kelvintaph durante inúmeras eras, finalmente livre e pronto a cuidar da saúde dos ogres que o aprisionaram."
+    ice_block: "Um bloco de gelo"
+    ice_description: "Parece estar alguma coisa presa lá dentro..."
+    blink_name: "Invisibilidade"
+    blink_description: "Ritic desaparece e reaparece num piscar de olhos, não deixando nada mais do que uma sombra."
+    shadowStep_name: "Passo de Sombra"
+    shadowStep_description: "Um mestre assassino sabe como caminhar entre as sombras."
+    tornado_name: "Tornado"
+    tornado_description: "É bom ter um botão de reiniciar quando a própria protecção é rebentada."
+    wallOfDarkness_name: "Muro de Trevas"
+    wallOfDarkness_description: "Escondam-se atrás de um muro de sombras para evitar olhares curiosos."
+
+  avatar_selection:
+    pick_an_avatar: "Escolhe um avatar que te represente como jogador"
+
+  premium_features:
+    get_premium: "Obtém<br>CodeCombat<br>Premium" # Fit into the banner on the /features page
+    master_coder: "Torna-te um Mestre Codificador, subscreve-te hoje!"
+    paypal_redirect: "Será redireccionado para a página do PayPal para completar o processo de subscrição."
+    subscribe_now: "Subscrever agora"
+    hero_blurb_1: "Obtenha acesso a __premiumHeroesCount__ heróis super-carregados apenas para subscritores! Aproveite o poder imparável de Okar Stompfoot, a precisão mortal de Naria of the Leaf, ou convoque esqueletos \"adoráveis\" com Nalfar Cryptor."
+    hero_blurb_2: "Os Guerreiros Premium revelam habilidades marciais espantosas como Warcry, Stomp, e Hurl Enemy. Ou, joga como um Ranger, usando camuflagem e arcos, atirando facas, armadilhas! Experimente a tua habilidade como um verdadeiro Feiticeiro de codificação, e liberte uma poderosa variedade de magia Primordial, Necromântica ou Elemental!"
+    hero_caption: "Novos heróis empolgantes!"
+    pet_blurb_1: "Os animais de estimação não são apenas companheiros encantadores, eles também fornecem funcionalidades e métodos únicos. O Grifo Bebé pode transportar unidades pelo ar, o Filhote de Lobo joga à apanhada com as setas inimigas, o Puma gosta de perseguir ogros por aí, e o Mímico atrai moedas como um íman!"
+    pet_blurb_2: "Reúne todos os animais de estimação para descobrir as suas capacidades únicas!"
+    pet_caption: "Adopta animais de estimação para acompanhar o teu herói!"
+    game_dev_blurb: "Aprende a programar jogos e constrói novos níveis para partilhar com os teus amigos! Coloca os itens que quiseres, escreve código para a unificação da lógica e comportamento, e vê se os teus amigos conseguem vencer o nível!"
+    game_dev_caption: "Cria os teus próprios jogos para desafiar os teus amigos!"
+    everything_in_premium: "Tudo o que se recebe no CodeCombat Premium:"
+    list_gems: "Receber pedras preciosas de bónus para comprar equipamento, animais de estimação e heróis"
+    list_levels: "Obtém acesso a __premiumLevelsCount__ mais níveis"
+    list_heroes: "Desbloqueia heróis exclusivos, incluindo as classes Ranger e Wizard"
+    list_game_dev: "Fazer e partilhar jogos com amigos"
+    list_web_dev: "Construir websites e aplicações interactivas"
+    list_items: "Equipar artigos Premium como animais de estimação"
+    list_support: "Obtém apoio Premium para te ajudar a depurar código complicado"
+    list_clans: "Cria clãs privados para convidar os teus amigos e competir num quadro de líderes de grupo"

   choose_hero:
     choose_hero: "Escolhe o Teu Herói"
@@ -1010,7 +1009,7 @@
     coffeescript_blurb: "Javascript com sintaxe mais agradável."
     lua_blurb: "Linguagem para scripts de jogos."
     java_blurb: "(Apenas para Subscritores) Android e empresas."
-#    cpp_blurb: "(Subscriber Only) Game development and high performance computing."
+    cpp_blurb: "(Apenas para Subscritores) Criação de jogos e alto desempenho em computação."
     status: "Estado"
     weapons: "Armas"
     weapons_warrior: "Espadas - Curto Alcance, Sem Magia"
@@ -1036,12 +1035,12 @@
     level_to_unlock: "Nível para desbloquear:" # Label for which level you have to beat to unlock a particular hero (click a locked hero in the store to see)
     restricted_to_certain_heroes: "Apenas certos heróis podem jogar este nível."

-#  char_customization_modal:
-#    heading: "Customize Your Hero"
-#    body: "Body"
-#    name_label: "Hero's Name"
-#    hair_label: "Hair Color"
-#    skin_label: "Skin Color"
+  char_customization_modal:
+    heading: "personaliza o teu herói"
+    body: "Corpo"
+    name_label: "Nome do herói"
+    hair_label: "Cor do cabelo"
+    skin_label: "Cor da pele"

   skill_docs:
     function: "função" # skill types
@@ -1071,7 +1070,7 @@
     optional_parameters: "Parâmetros Opcionais"
     returns: "Devolve"
     granted_by: "Garantido por"
-#    still_undocumented: "Still undocumented, sorry."
+    still_undocumented: "Ainda por documentar, desculpa."

   save_load:
     granularity_saved_games: "Guardados"
@@ -1093,8 +1092,8 @@
     editor_config_behaviors_description: "Auto-completar parênteses, chavetas e aspas."

   about:
-#    title: "About CodeCombat - Engaging Students, Empowering Teachers, Inspiring Creation"
-#    meta_description: "Our mission is to level computer science through game-based learning and make coding accessible to every learner. We believe programming is magic and want learners to be empowered to to create things from pure imagination."
+    title: "Sobre o CodeCombat - Envolver os estudantes, Capacitar os professores, Inspirar a criação"
+    meta_description: "A nossa missão é nivelar a ciência da computação através da aprendizagem baseada no jogo e tornar a codificação acessível a todos os estudantes. Acreditamos que a programação é mágica e queremos que seja dado aos alunos instrumentos para criar coisas a partir da imaginação pura."
     learn_more: "Saber Mais"
     main_title: "Se queres aprender a programar, precisas de escrever (muito) código."
     main_description: "No CodeCombat, o nosso trabalho é certificarmo-nos de que estás a fazer isso com um sorriso na cara."
@@ -1104,38 +1103,38 @@
     press_link: "Imprensa"
     mission_title: "A nossa missão: tornar a programação acessível a todos os estudantes da Terra."
     mission_description_1: "<strong>A programação é mágica</strong>. É a capacidade de criar coisas a partir de imaginação pura. Começamos o CodeCombat para dar aos utilizadores a sensação de terem poderes mágicos nas pontas dos dedos ao usarem <strong>código escrito</strong>."
-#    mission_description_2: "As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming."
+    mission_description_2: "Ao que parece, isso também lhes permite aprender mais rápido. MUITO mais rápido. É como ter uma conversa em vez de ler um manual. Queremos levar essa conversa a todas as escolas e a <strong>todos os alunos</strong>, porque todos devem ter a oportunidade de aprender a magia da programação."
     team_title: "Conhece a equipa do CodeCombat"
-#    team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our GitHub contributors, because we value growth and learning in our team."
+    team_values: "Valorizamos o diálogo aberto e respeitador, onde ganha a melhor ideia. As nossas decisões são fundamentadas na pesquisa de clientes e o nosso processo está centrado na obtenção de resultados tangíveis para eles. Todos são participativos, desde o nosso CEO até aos nossos colaboradores no GitHub, porque valorizamos o crescimento e a aprendizagem na nossa equipa."
     nick_title: "Co-fundador, CEO"
     matt_title: "Co-fundador, CTO"
-#    lawrence_title: "Customer Success Manager"
-#    jane_title: "Account Executive"
-#    shan_title: "Head of Marketing, CodeCombat Greater China"
-#    run_title: "Head of Operations, CodeCombat Greater China"
-#    lance_title: "Head of Technology, CodeCombat Greater China"
-#    zhiran_title: "Head of Curriculum, CodeCombat Greater China"
-#    yuqiang_title: "Head of Innovation, CodeCombat Greater China"
-#    matias_title: "Senior Software Engineer"
-#    ryan_title: "Customer Support Specialist"
-#    maya_title: "Senior Curriculum Developer"
-#    bill_title: "General Manager, CodeCombat Greater China"
-#    shasha_title: "Product and Visual Designer"
-#    daniela_title: "Marketing Manager"
-#    bobby_title: "Game Designer"
-#    brian_title: "Senior Game Design Manager"
-#    stephanie_title: "Customer Support Specialist"
-#    rob_title: "Sales Development Representative"
-#    shubhangi_title: "Senior Software Engineer"
+    lawrence_title: "Gestor de Sucesso do Cliente"
+    jane_title: "Executivo de Contas"
+    shan_title: "Chefe de Marketing, CodeCombat, China"
+    run_title: "Chefe de Operações, CodeCombat, China"
+    lance_title: "Chefe de Tecnologia, CodeCombat, China"
+    zhiran_title: "Chefe de Curriculum, CodeCombat, China"
+    yuqiang_title: "Chefe de Inovação, CodeCombat, China"
+    matias_title: "Engenheiro Sénior de Software"
+    ryan_title: "Especialista em Apoio ao Cliente"
+    maya_title: "Elaborador Sénior de Curriculum"
+    bill_title: "Director Geral, CodeCombat, China"
+    shasha_title: "Designer Visual e de Produto"
+    daniela_title: "Gestor de Marketing"
+    bobby_title: "Designer de jogos"
+    brian_title: "Gestor Sénior de Design de Jogos"
+    stephanie_title: "Especialista em Apoio ao Cliente"
+    rob_title: "Representante de Desenvolvimento de Vendas"
+    shubhangi_title: "Engenheiro Sénior de Software"
     retrostyle_title: "Ilustração"
     retrostyle_blurb: "'RetroStyle Games'"
     community_title: "...e a nossa comunidade open source"
-#    bryukh_title: "Senior Gameplay Developer"
-#    bryukh_blurb: "Constructs puzzles"
+    bryukh_title: "Programador Sénior de Jogabilidade"
+    bryukh_blurb: "Constrói puzzles"
     community_subtitle: "Mais de 500 contribuidores ajudaram a construir o CodeCombat, com mais a se juntarem todas as semanas!"
     community_description_3: "O CodeCombat é um"
     community_description_link_2: "projeto comunitário"
-#    community_description_1: "with hundreds of players volunteering to create levels, contribute to our code to add features, fix bugs, playtest, and even translate the game into 50 languages so far. Employees, contributors and the site gain by sharing ideas and pooling effort, as does the open source community in general. The site is built on numerous open source projects, and we are open sourced to give back to the community and provide code-curious players a familiar project to explore and experiment with. Anyone can join the CodeCombat community! Check out our"
+    community_description_1: "com centenas de jogadores a voluntariarem-se para criar níveis, contribuir para o nosso código para adicionar funcionalidades, corrigir bugs, testar o jogo, e até traduzir o jogo para 50 línguas até agora. Empregados, colaboradores e o site ganham com a partilha de ideias e com o esforço de agregação, tal como a comunidade de código aberto em geral. O site é construído sobre numerosos projectos de código aberto, e nós fornecemos um código aberto para devolver à comunidade e fornecer aos jogadores curiosos pelo código um projecto familiar para explorar e experimentar. Qualquer pessoa pode juntar-se à comunidade CodeCombat! Confira o nosso"
     community_description_link: "página de contribuição"
     community_description_2: "para mais informações."
     number_contributors: "Mais de 450 contribuidores deram o seu apoio e tempo a este projeto."
@@ -1149,35 +1148,35 @@
     story_statistic_3a: "Juntos, eles escreveram"
     story_statistic_3b: "mil milhões de linhas de código (e continua a contar)"
     story_statistic_3c: "em muitas linguagens de programação diferentes"
-#    story_long_way_1: "Though we've come a long way..."
-#    story_sketch_caption: "Nick's very first sketch depicting a programming game in action."
-#    story_long_way_2: "we still have much to do before we complete our quest, so..."
-#    jobs_title: "Come work with us and help write CodeCombat history!"
-#    jobs_subtitle: "Don't see a good fit but interested in keeping in touch? See our \"Create Your Own\" listing."
+    story_long_way_1: "Embora tenhamos percorrido um longo caminho..."
+    story_sketch_caption: "O primeiro esboço de Nick a representar um jogo de programação em acção."
+    story_long_way_2: "ainda temos muito a fazer antes de completarmos a nossa busca, por isso..."
+    jobs_title: "Vem trabalhar connosco e ajudar a escrever a história do CodeCombat!"
+    jobs_subtitle: "Não vê um bom ajuste mas está interessado em manter-se em contacto? Veja a nossa lista \"Crie o Seu Próprio\"."
     jobs_benefits: "Benefícios de Empregado"
     jobs_benefit_4: "Férias ilimitadas"
-#    jobs_benefit_5: "Professional development and continuing education support – free books and games!"
-#    jobs_benefit_6: "Medical (gold), dental, vision, commuter, 401K"
-#    jobs_benefit_7: "Sit-stand desks for all"
-#    jobs_benefit_9: "10-year option exercise window"
-#    jobs_benefit_10: "Maternity leave: 12 weeks paid, next 6 @ 55% salary"
-#    jobs_benefit_11: "Paternity leave: 12 weeks paid"
+    jobs_benefit_5: "Desenvolvimento profissional e apoio à educação contínua - livros e jogos grátis!"
+    jobs_benefit_6: "Seguro médico (gold), dentário, visão, viagem para local de trabalho, 401K"
+    jobs_benefit_7: "Secretárias para todos"
+    jobs_benefit_9: "Período de 10 anos opcionais de exercício"
+    jobs_benefit_10: "Licença de maternidade: 12 semanas pagas, próximas 6 a 55% do salário"
+    jobs_benefit_11: "Licença de paternidade: 12 semanas pagas"
     jobs_custom_title: "Cria o Teu Próprio"
-#    jobs_custom_description: "Are you passionate about CodeCombat but don't see a job listed that matches your qualifications? Write us and show how you think you can contribute to our team. We'd love to hear from you!"
-#    jobs_custom_contact_1: "Send us a note at"
-#    jobs_custom_contact_2: "introducing yourself and we might get in touch in the future!"
+    jobs_custom_description: "É apaixonado pelo CodeCombat mas não vê um emprego que corresponda às suas qualificações? Escreva-nos e mostre como pensa que pode contribuir para a nossa equipa. Gostaríamos muito de ouvir a sua opinião!"
+    jobs_custom_contact_1: "Envie-nos uma nota para"
+    jobs_custom_contact_2: "apresente-se e poderemos entrar em contacto no futuro!"
     contact_title: "Imprensa e Contactos"
     contact_subtitle: "Precisas de mais informação? Entra em contacto connosco através de"
-#    screenshots_title: "Game Screenshots"
-#    screenshots_hint: "(click to view full size)"
-#    downloads_title: "Download Assets & Information"
+    screenshots_title: "Imagens do jogo"
+    screenshots_hint: "(clique para ver em tamanho real)"
+    downloads_title: "Descarregar bens e informação"
     about_codecombat: "Sobre o CodeCombat"
     logo: "Logótipo"
-#    screenshots: "Screenshots"
-#    character_art: "Character Art"
-#    download_all: "Download All"
+    screenshots: "Capturas de ecrã"
+    character_art: "Arte e design do personagem"
+    download_all: "Descarregar tudo"
     previous: "Anterior"
-#    location_title: "We're located in downtown SF:"
+    location_title: "Estamos localizados no centro da cidade de SF:"

   teachers:
     licenses_needed: "Licenças necessárias"


Fix spec

Fix spec

--- spec/linter-package-json-validator-spec.coffee
+++ spec/linter-package-json-validator-spec.coffee
@@ -1,4 +1,5 @@
 { resetConfig } = require './test-helper'
+path = require 'path'

 PJVProvider = require '../lib/package-json-validator-provider'

@@ -11,10 +12,11 @@
     it 'should not lint other.json files', ->

       waitsForPromise ->
-        atom.workspace.open('./files/other.json')
+        atom.workspace.open(path.join(__dirname, 'files', 'other.json'))
           .then (editor) -> PJVProvider.lint(editor)
           .then (messages) ->

+            console.log(messages)
             expect(messages.length).toEqual(0)

@@ -22,8 +24,9 @@
     it 'should lint package.json files', ->

       waitsForPromise ->
-        atom.workspace.open('./files/package.json')
+        atom.workspace.open(path.join(__dirname, 'files', 'package.json'))
           .then (editor) -> PJVProvider.lint(editor)
           .then (messages) ->

+            console.log(messages)
             expect(messages.length).toNotEqual(0)


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

--- src/core_object.coffee
+++ src/core_object.coffee
@@ -129,7 +129,43 @@
         Object.extend self, options

         return self
-
+
+      ###*
+      Includes a module in this object.
+
+          myObject = Core()
+          myObject.include(Bindable)
+
+          # now you can bind handlers to functions
+          myObject.bind "someEvent", ->
+            alert("wow. that was easy.")
+
+      @name include
+      @methodOf Core#
+      @param {String} Module the module to include. A module is a constructor that takes two parameters, I and self, and returns an object containing the public methods to extend the including object with.
+      ###
+      include: (modules...) ->
+        for Module in modules
+          if Module.isString?()
+            moduleName = Module
+            Module = Module.constantize()
+          else if moduleName = Module._name
+            # Nothing, captured name in if condition
+          else
+            # Attempt to look up module in global namespace
+            for key, value of root
+              if value is Module
+                moduleName = key
+
+          if moduleName
+            unless I.included_modules.include moduleName
+              I.included_modules.push moduleName
+              self.extend Module(I, self)
+          else
+            warn "Unable to discover name for module: ", Module
+            self.extend Module(I, self)
+
+        return self

       send: (name, args...) ->
         self[name](args...)


add Promise require

add Promise require

--- src/create-room.coffee
+++ src/create-room.coffee
@@ -11,6 +11,7 @@
 _ = require('lodash')
 Querystring = require('querystring')
 Config = require '../lib/config'
+Promise =  require 'bluebird'
 BaseRoomInfo =
   server:'localhost'
   port:'13080'


RemoteExtension: JMachine: make it a working example with JMachine

--- client/app/lib/remote-extensions/machine.coffee
+++ client/app/lib/remote-extensions/machine.coffee
@@ -1,10 +1,12 @@
 kd             = require 'kd'
 remote         = require('../remote').getInstance()
+Machine        = require 'app/providers/machine'
+

 module.exports = class JMachine extends remote.api.JMachine

   stop: ->
-    kd.singletons.computeController.stop this
+    kd.singletons.computeController.stop new Machine { machine: this }

   start: ->
-    kd.singletons.computeController.start this
+    kd.singletons.computeController.start new Machine { machine: this }


Don't show poll tooltips forever/too often/too soon

--- app/views/play/CampaignView.coffee
+++ app/views/play/CampaignView.coffee
@@ -1216,6 +1216,7 @@
       return @promptForSubscription campaignSlug, 'premium campaign switch clicked'

   loadUserPollsRecord: ->
+    return if storage.load 'ignored-poll'
     url = "/db/user.polls.record/-/user/#{me.id}"
     @userPollsRecord = new UserPollsRecord().setURL url
     onRecordSync = ->
@@ -1238,7 +1239,8 @@
       return if @destroyed
       tempLoadingPoll.url = -> '/db/poll/' + @id
       @poll = tempLoadingPoll
-      _.delay (=> @activatePoll?(forceShowPoll)), 1000
+      delay = if forceShowPoll then 1000 else 5000  # Wait a little bit before showing the poll
+      _.delay (=> @activatePoll?(forceShowPoll)), delay
     onPollError = (poll, response, request) ->
       if response.status is 404
         console.log 'There are no more polls left.'
@@ -1259,6 +1261,11 @@
       @showPoll()
     else
       $pollButton.tooltip 'show'
+      _.delay (=>
+        $pollButton?.tooltip 'hide'
+        unless @destroyed
+          storage.save 'ignored-poll', true, 5  #  Don't show again in next N minutes
+      ), 20000  # Don't leave the poll open forever

   showPoll: ->
     return false unless @shouldShow 'poll'


Fix target file

Fix target file

--- tests/testConf.coffee
+++ tests/testConf.coffee
@@ -6,7 +6,7 @@

 # list of files / patterns to load in the browser
 #files = [JASMINE, JASMINE_ADAPTER, "tests/*Spec.js"]
-files = [JASMINE, JASMINE_ADAPTER, "unicode_eastasianwidth.min.js", "tests/*Spec.test.js"]
+files = [JASMINE, JASMINE_ADAPTER, "unicode_eastasianwidth.js", "tests/*Spec.test.js"]

 # list of files to exclude
 exclude = []


Account for Finished Banner Size

Account for Finished Banner Size

--- app/pages/project/index.cjsx
+++ app/pages/project/index.cjsx
@@ -105,12 +105,13 @@
         @getSelectedWorkflow(nextProps.project, nextProps.preferences)

   resizeBackground: ->
+    finishedBannerHeight = 70
     projLanding = document.getElementById('projectLandingIntro')
     if projLanding
       sectionBottom = projLanding.getBoundingClientRect().bottom;
       sectionHeight = document.body.scrollTop + sectionBottom
-      if @state.backgroundHeight isnt sectionHeight
-        @setState backgroundHeight: sectionHeight
+      if @state.backgroundHeight isnt sectionHeight + finishedBannerHeight
+        @setState backgroundHeight: sectionHeight + finishedBannerHeight

   fetchInfo: (project) ->
     @setState


Still designing the new module structure

--- modules/accordion.coffee
+++ modules/accordion.coffee
@@ -1,5 +1,3 @@
-DELAY = (time=0) -> new Promise (resolve) -> setTimeout(resolve, time)
-
 # Accordion
 #
 # 手風琴。
@@ -22,9 +20,15 @@

     # 模組自己選擇器。
     $this: null
+
     # 模組自己群組選擇器。
     $elements: null
+
+    # 所選的手風琴標題元素。
     $title: null
+
+    # 延遲函式。
+    delay: (time=0) -> new Promise (resolve) -> setTimeout(resolve, time)

     # 模組內部資料。
     className:


Remove it from Book

Remove it from Book

--- client/landing/app/MainApp/book/bookdata.coffee
+++ client/landing/app/MainApp/book/bookdata.coffee
@@ -250,14 +250,14 @@
     section   : 6
     parent    : 0
   ,
-    title     : "Groups"
-    cssClass  : "groups-intro "
-    content   : """
Join a group which you want to discuss, share code and find tutorials about specific topic! By changing group you are completely changing context. When you are on a group page, you only see updates, Virtual Machines and Members of that group.

-                """
-    routeURL  : "/Groups"
-    section   : 7
-    parent    : 0
-  ,
+  #   title     : "Groups"
+  #   cssClass  : "groups-intro "
+  #   content   : """
Join a group which you want to discuss, share code and find tutorials about specific topic! By changing group you are completely changing context. When you are on a group page, you only see updates, Virtual Machines and Members of that group.

+  #               """
+  #   routeURL  : "/Groups"
+  #   section   : 7
+  #   parent    : 0
+  # ,
     title     : "Chat"
     cssClass  : "chats-intro"
     content   : """
You can chat with your friends or anyone from koding. Just type his/her name and hit enter thats all!


fix firstLogin bug

fix firstLogin bug

--- client/views/pages/firstLogin/firstLogin.coffee
+++ client/views/pages/firstLogin/firstLogin.coffee
@@ -19,7 +19,7 @@

 		if token? && token != ''
 			handle = Meteor.subscribe 'userByToken', token
-			isLoading.set(handle.ready())
+			isLoading.set(!handle.ready())

 Template.firstLogin.events


TBCampaign: Refactored ReferrerModal for campaign.

--- client/Account/views/referrermodal.coffee
+++ client/Account/views/referrermodal.coffee
@@ -1,76 +1,37 @@
-class ReferrerModal extends KDModalViewWithForms
+class ReferrerModal extends KDModalView
+
   constructor: (options = {}, data) ->
+
     options.cssClass       = KD.utils.curry "referrer-modal", options.cssClass
     options.width          = 610
     options.overlay       ?= yes
-    options.title        or= "Get free disk space!"
+    options.title        or= "#Crazy100TBWeek"
     options.url          or= KD.getReferralUrl KD.nick()
     options.onlyInviteTab ?= no
-    options.tabs           =
-      navigable            : no
-      goToNextFormOnSubmit : no
-      hideHandleContainer  : yes
-      forms                :
-        share              :
-          customView       : KDCustomHTMLView
-          cssClass         : "clearfix"
-          partial          : options.partial or "
For each person registers with your referral code, \
-            you'll get 250 MB free disk space for your VM, up to 16 GB total.

Share this code or invite your gmail contacts.
"
-        invite             :
-          customView       : KDCustomHTMLView
+    options.content        = options.partial or """
+

+        Only this week, share your link,
+        they get 5GB instead of 4GB,
+        and you get 1GB extra!
+

+    """

     options.cssClass = KD.utils.curry "hidden", options.cssClass if options.onlyInviteTab

     super options, data

-    {@share, @invite} = @modalTabs.forms
-
-    # @share.addSubView usageWrapper = new KDCustomHTMLView cssClass: "disk-usage-wrapper"
-    # vmc = KD.getSingleton "vmController"
-    # vmc.fetchDefaultVmName (name) ->
-    #   vmc.fetchDiskUsage name, (usage) ->
-    #     if usage.max
-    #       usageWrapper.addSubView new KDLabelView title: "You've claimed #{KD.utils.formatBytesToHumanReadable usage.max}
-    #         of your free 16 GB disk space."
-
-    @share.addSubView leftColumn  = new KDCustomHTMLView cssClass : "left-column"
-    @share.addSubView rightColumn = new KDCustomHTMLView cssClass : "right-column"
-
-    # leftColumn.addSubView urlLabel = new KDLabelView
-    #   cssClass : "share-url-label"
-    #   title    : "Share this code to get your free storage!"
-
-    leftColumn.addSubView urlInput = new KDInputView
+    @addSubView urlInput = new KDInputView
       defaultValue : options.url
       cssClass     : "share-url-input"
       attributes   : readonly:"true"
       click        :-> @selectAll()

-    leftColumn.addSubView shareLinks = new KDCustomHTMLView
+    @addSubView shareLinks = new KDCustomHTMLView
       cssClass : "share-links"
-      partial  : "Share your code on"

     shareLinks.addSubView new TwitterShareLink  url: options.url, trackingName: "referrer"
     shareLinks.addSubView new FacebookShareLink url: options.url, trackingName: "referrer"
     shareLinks.addSubView new LinkedInShareLink url: options.url, trackingName: "referrer"
-
-    rightColumn.addSubView gmail = new KDButtonView
-      title    : "Invite Gmail Contacts"
-      style    : "invite-button gmail"
-      icon     : yes
-      callback : @bound "checkGoogleLinkStatus"
-
-    rightColumn.addSubView facebook = new KDButtonView
-      title    : "Invite Facebook Friends"
-      style    : "invite-button facebook hidden"
-      disabled : yes
-      icon     : yes
-
-    rightColumn.addSubView twitter = new KDButtonView
-      title    : "Invite Twitter Friends"
-      style    : "invite-button twitter hidden"
-      disabled : yes
-      icon     : yes

     KD.getSingleton("mainController").once "ForeignAuthSuccess.google", (data) =>
       @showGmailContactsList data


Pricing: changed prces

Pricing: changed prces

--- client/Pricing/views/developerplan.coffee
+++ client/Pricing/views/developerplan.coffee
@@ -4,11 +4,11 @@
     super options, data

     @plans = [
-      {cpu: 1, ram: 1, disk: "50 GB" , alwaysOn: 1, price: 20},
-      {cpu: 2, ram: 2, disk: "100 GB", alwaysOn: 2, price: 40 , discount:  4, vm: 1},
-      {cpu: 3, ram: 3, disk: "150 GB", alwaysOn: 3, price: 60 , discount:  8, vm: 2},
-      {cpu: 4, ram: 4, disk: "200 GB", alwaysOn: 4, price: 80 , discount: 12, vm: 3},
-      {cpu: 5, ram: 5, disk: "250 GB", alwaysOn: 5, price: 100, discount: 16, vm: 4}
+      { cpu: 1, ram: 1, disk: "50 GB" , alwaysOn: 1, price: 19 }
+      { cpu: 2, ram: 2, disk: "100 GB", alwaysOn: 2, price: 39 , discount:  4, vm: 1 }
+      { cpu: 3, ram: 3, disk: "150 GB", alwaysOn: 3, price: 59 , discount:  8, vm: 2 }
+      { cpu: 4, ram: 4, disk: "200 GB", alwaysOn: 4, price: 79 , discount: 12, vm: 3 }
+      { cpu: 5, ram: 5, disk: "250 GB", alwaysOn: 5, price: 99 , discount: 16, vm: 4 }
     ]

     @planIndex = 0


Stop click propogation from modal

Stop click propogation from modal

--- core/app/assets/javascripts/intermediate.coffee
+++ core/app/assets/javascripts/intermediate.coffee
@@ -64,3 +64,4 @@
 loadUrl '/facts/new'

 $("iframe").preventScrollPropagation()
+$("iframe").on 'click', (e) -> e.stopPropagation()


waifu command (not tested)

waifu command (not tested)

--- modules/danbooru.coffee
+++ modules/danbooru.coffee
@@ -1,4 +1,6 @@
 request = require 'request'
+{ type } = Core.db
+
 danbooru = require('request-promise').defaults {
   baseUrl: 'https://danbooru.donmai.us/'
   auth:
@@ -7,9 +9,20 @@
   simple: true
 }

+Waifu = Core.db.createModel 'Waifu', {
+  id: type.string()
+  user: type.string()
+  waifu: type.string()
+}
+
 class DanbooruModule extends BotModule
   init: =>
-    @registerCommand 'danbooru', (msg, tags, d)=>
+    {@prefix} = @engine
+
+    @registerCommand 'danbooru', {
+      allowDM: true
+      aliases: ['d']
+    }, (msg, tags, d)=>
       tags = 'rating:safe ' + tags if not d.data.allowNSFW
       qs = {
         random: true
@@ -22,6 +35,54 @@
         msg.channel.uploadFile request(url), @getFileName(url)
       .catch (e)=>
         msg.reply 'Something went wrong.'
+
+    @registerCommand 'setwaifu', {
+      aliases: ['setHusbando'],
+      includeCommandNameInArgs: true
+      allowDM: true
+    }, (msg, args, d)=>
+      waifu = args[1].match(/w+/)[0]
+      return msg.reply "Usage: ```#{@prefix}#{args[0]} <danbooru_tag>```" if not waifu
+      # Do a dummy search
+      qs = {
+        limit: 1
+        tags: 'rating:safe ' + waifu
+      }
+      danbooru.get '/posts.json', { json: true, qs }
+      .then (r)=>
+        return Promise.reject { msg: 'Invalid danbooru tag.' } if not r.length
+        Waifu.filter({ user: msg.author.id }).run()
+      .then (results)=>
+        return results[0] if results[0]?
+        new Waifu { user: msg.author.id }
+      .then (w)=>
+        w.waifu = waifu
+        w.save()
+      .then ()=>
+        msg.reply 'Success.'
+      .catch (e)=>
+        return msg.reply e.msg if e.msg
+        msg.reply 'Something went wrong.'
+
+    @registerCommand 'waifu', {
+      aliases: ['husbando', 'w', 'h'],
+      allowDM: true
+    }, (msg)=>
+      Waifu.filter({ user: msg.author.id }).run()
+      .then (results)=>
+        return Promise.reject { msg: "Run the #{@prefix}setWaifu command first." } if not results[0]?
+        qs = {
+          limit: 1
+          random: true
+          tags: 'rating:safe ' + results[0].waifu
+        }
+        danbooru.get '/posts.json', { json: true, qs }
+      .then (r)=>
+        url = "https://danbooru.donmai.us#{r[0].file_url}"
+        msg.channel.uploadFile request(url), @getFileName(url)
+      .catch (e)=>
+        return msg.reply e.msg if e.msg
+        msg.reply 'Something went wrong.'

   getFileName: (url)=> url.split('/').reverse()[0]


h264: Fix removeEmulationPreventionByte()

--- h264.coffee
+++ h264.coffee
@@ -309,10 +309,8 @@
     api.read_sei_payload(bits, payloadType, payloadSize)

   readSEI: (nalUnit) ->
-    nalUnitCopy = new Buffer nalUnit.length
-    nalUnit.copy nalUnitCopy
-    api.removeEmulationPreventionByte nalUnitCopy
-    bits = new Bits nalUnitCopy
+    nalUnit = api.removeEmulationPreventionByte nalUnit
+    bits = new Bits nalUnit
     api.read_nal_header bits
     loop
       api.read_sei_message bits
@@ -321,10 +319,8 @@
     return

   readPPS: (nalUnit) ->
-    nalUnitCopy = new Buffer nalUnit.length
-    nalUnit.copy nalUnitCopy
-    api.removeEmulationPreventionByte nalUnitCopy
-    bits = new Bits nalUnitCopy
+    nalUnit = api.removeEmulationPreventionByte nalUnit
+    bits = new Bits nalUnit
     api.read_nal_header bits
     pic_parameter_set_id = bits.read_ue()
     seq_parameter_set_id = bits.read_ue()
@@ -411,10 +407,8 @@

   readSPS: (nalUnit) ->
     sps = {}
-    nalUnitCopy = new Buffer nalUnit.length
-    nalUnit.copy nalUnitCopy
-    api.removeEmulationPreventionByte nalUnitCopy
-    bits = new Bits nalUnitCopy
+    nalUnit = api.removeEmulationPreventionByte nalUnit
+    bits = new Bits nalUnit
     api.read_nal_header bits
     sps.profile_idc = bits.read_byte()
     sps.constraint_set0_flag = bits.read_bit()
@@ -743,10 +737,8 @@

   parseNALUnit: (nalUnit) ->
     data = {}
-    nalUnitCopy = new Buffer nalUnit.length
-    nalUnit.copy nalUnitCopy
-    api.removeEmulationPreventionByte nalUnitCopy
-    bits = new Bits nalUnitCopy
+    nalUnit = api.removeEmulationPreventionByte nalUnit
+    bits = new Bits nalUnit
     data.nalHeader = api.read_nal_header bits
     if data.nalHeader.nal_unit_type in [
       api.NAL_UNIT_TYPE_NON_IDR_PICTURE
@@ -755,16 +747,30 @@
       api.read_slice_header bits, data
     return data

-  # Removes emulation prevention byte (0x000003)
+  # Removes all emulation prevention bytes (0x03 in 0x000003) from nalUnit and
+  # returns a new Buffer. If no emulation prevention bytes found in nalUnit,
+  # the returned value is the same Buffer instance as the given nalUnit.
   removeEmulationPreventionByte: (nalUnit) ->
     searchPos = 0
+    removeBytePositions = []
     loop
       emulPos = Bits.searchBytesInArray nalUnit, [0x00, 0x00, 0x03], searchPos
       if emulPos is -1
         break
-      nalUnit[emulPos+2..emulPos+2] = []  # Remove 0x03
-      searchPos = emulPos + 2
-    return
+      removeBytePositions.push emulPos + 2
+      searchPos = emulPos + 3
+    if removeBytePositions.length > 0
+      newBuf = new Buffer nalUnit.length - removeBytePositions.length
+      currentSrcPos = 0
+      for pos, i in removeBytePositions
+        # srcBuf.copy(destBuf, destStart, srcStart, srcEnd)
+        nalUnit.copy newBuf, currentSrcPos - i, currentSrcPos, pos
+        currentSrcPos = pos + 1
+      if currentSrcPos < nalUnit.length
+        nalUnit.copy newBuf, currentSrcPos - removeBytePositions.length,
+          currentSrcPos, nalUnit.length
+      nalUnit = newBuf
+    return nalUnit

   # opts:
   #   retrieveOnly (boolean): if true, videoBuf remains intact


Put back all tests

Put back all tests

--- config/run_tests.coffee
+++ config/run_tests.coffee
@@ -14,14 +14,14 @@
     gutil.log 'Running Node.js tests'
     global.test_parameters = require '../test/parameters' # ensure that globals for the target backend are loaded
     gulp.src('test/spec/**/*.tests.coffee')
-      .pipe(mocha({reporter: 'spec'}))
+      .pipe(mocha({}))
       .pipe es.writeArray (err, array) ->
         delete global.test_parameters # cleanup globals
         callback(err)

-  # # run browser tests
-  # queue.defer (callback) ->
-  #   gutil.log 'Running Browser tests'
-  #   karma(callback)
+  # run browser tests
+  queue.defer (callback) ->
+    gutil.log 'Running Browser tests'
+    karma(callback)

   queue.await callback


Do not hide no message/no user errors

Do not hide no message/no user errors

--- app/scripts/lib/utils.coffee
+++ app/scripts/lib/utils.coffee
@@ -26,7 +26,9 @@
         deferred.resolve data
       # Must be 4xx HTTP code actually, but @stiletto fucked it up.
       else
-        @showAlert data.desc
+        text = data.desc
+        autoHide = text not in ["No such message", "User not found."]
+        @showAlert text, "error", autoHide
         deferred.reject data
     jqxhr.fail (err) =>
       text = "Ошибка AJAX: #{err.status} #{err.statusText}"


Aggregated question annotations will have sources too

--- app/api/mock-data/aggregate.coffee
+++ app/api/mock-data/aggregate.coffee
@@ -5,9 +5,23 @@
   annotations: [{
     task: 'is_cool'
     value: 0
+    sources: [{
+      classification: 0
+      annotation: 0
+    }, {
+      classification: 1
+      annotation: 0
+    }]
   }, {
     task: 'cool_stuff'
     value: [1]
+    sources: [{
+      classification: 0
+      annotation: 1
+    }, {
+      classification: 1
+      annotation: 1
+    }]
   }, {
     task: 'coolest_point'
     value: [{