diff --git a/CLAUDE.md b/CLAUDE.md index 2af4cc2..4a95c64 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,14 +35,19 @@ src/ user-facing string, both languages, plus topic/language/voice names) config/ settings.rs, level.rs (commitment), paths.rs store/ history.rs (SQLite) -decks/.toml hand-curated built-in decks (embedded with include_str!) +decks// hand-curated built-in decks (en, es for pt-BR speakers; pt for English + speakers): deck.toml = header + general tips, then one file of phrases + per theme, named in English (work.toml, health.toml…; the `topic` keys + inside stay pt-BR). `themed!` in learn/deck.rs joins them; a new theme + file must be listed there decks/.basics.toml hand-curated first words + short chunks (where the path starts) decks/.lexicaster.toml GENERATED by scripts/port-lexicaster.mjs — never edit by hand decks/.lexicaster.tiers.toml hand-curated short/polished answers for the generated deck, keyed by `say` and merged at load (a stale `say` fails the deck tests) decks/pt.basics.toml first Brazilian Portuguese words + chunks, written for English speakers -decks/i18n/..toml translation overlay keyed by `say` (meaning, situation, tip, - cue) bringing a deck to another native; e.g. es.en.toml, es.basics.en.toml +decks/i18n/. translation overlay keyed by `say` (meaning, situation, tip, cue) + bringing a deck to another native: es.en/ mirrors decks/es/ theme by theme, + es.basics.en.toml is one file tests/cli.rs drives the built binary (CARGO_BIN_EXE_snowlearner) with SNOWLEARNER_HOME tests/install.rs install.sh end to end against a local fake release (real script, real binary) tests/speech_e2e.rs real whisper run on synthesized speech (#[ignore], needs a model) diff --git a/Cargo.lock b/Cargo.lock index 73b4164..d9b933a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2441,7 +2441,7 @@ dependencies = [ [[package]] name = "snowlearner" -version = "0.1.6" +version = "0.1.7" dependencies = [ "anyhow", "bytemuck", diff --git a/Cargo.toml b/Cargo.toml index da0ab18..adac187 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snowlearner" -version = "0.1.6" +version = "0.1.7" edition = "2024" rust-version = "1.85" description = "A pixel-art frost mage that freezes your screen until you practice speaking a new language." diff --git a/README.md b/README.md index 4f89d1f..a13a266 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ none (hotkey confirms your answer, CPU-only drawing). `SNOWLEARNER_RENDERER=cpu| | Action | Hotkey / mouse | Command | |---|---|---| | Practice a phrase · "I'm done talking" · next | `Ctrl+Alt+M` · click the orb | `snowlearner say` | -| Control panel (game, audio, progress tabs) | `Ctrl+Alt+K` · Ctrl+click the orb | `snowlearner menu` | +| Control panel (game, audio, keys, progress tabs) | `Ctrl+Alt+K` · Ctrl+click the orb | `snowlearner menu` | | Your progress: known · learning · next | `Ctrl+Alt+P` | `snowlearner progress` (`--print` in the terminal) | | Magic hand (15 s) | hold `Ctrl+Alt` · `Ctrl+Alt+G` | `snowlearner grab` | | Pause (black hole) / resume | right-click the orb · `P` | `snowlearner pause` | @@ -105,6 +105,10 @@ none (hotkey confirms your answer, CPU-only drawing). `SNOWLEARNER_RENDERER=cpu| | Shortcut cheat sheet | hover the orb · hold `Ctrl+Alt` | — | | Quit | — | `snowlearner quit` | +A hotkey another program already uses (NVIDIA's overlay takes `Ctrl+Alt+M`, for one) does nothing: +the app says so at startup and marks it `(in use)` in the panel's **keys** tab, where each hotkey +can be moved to a free key. The change applies at once, and every on-screen hint follows it. + Window mode extras: `H` help, `1`–`4` commitment, `L` switch language, click characters to poke them. **Commitment level (*compromisso*)**: `chill | steady | committed | relentless` — how often the diff --git a/decks/en/deck.toml b/decks/en/deck.toml new file mode 100644 index 0000000..635544f --- /dev/null +++ b/decks/en/deck.toml @@ -0,0 +1,39 @@ +language = "en" +native = "pt-BR" +language_name = "inglês" +title = "Inglês pra vida real" + +# General tips the warrior drops between challenges. + +[[tip]] +text = "Falso amigo: 'actually' é 'na verdade', não 'atualmente' (currently)." +[[tip]] +text = "Falso amigo: 'pretend' é 'fingir'. 'Pretender' é 'intend' ou 'plan to'." +[[tip]] +text = "Falso amigo: 'push' é EMPURRAR. Puxar é 'pull'. Olhe a porta!" +[[tip]] +text = "Falso amigo: 'library' é biblioteca. Livraria é 'bookstore'." +[[tip]] +text = "Falso amigo: 'exquisite' é refinado, elogio! Não é 'esquisito' (weird)." +[[tip]] +text = "Falso amigo: 'parents' são pai e mãe. Parentes são 'relatives'." +[[tip]] +text = "Falso amigo: 'lunch' é almoço. Lanche é 'snack'." +[[tip]] +text = "Pronúncia: final -ed quase não soa. 'worked' = 'uórkt', não 'uórqued'." +[[tip]] +text = "Pronúncia: o 'th' é língua entre os dentes. 'think' não é 'fink' nem 'tink'." +[[tip]] +text = "Pronúncia: não coloque 'i' no fim: 'Facebook' não é 'feicebuki'." +[[tip]] +text = "Pronúncia: 'beach' tem 'i' longo; 'bitch' tem 'i' curto. Cuidado na praia!" +[[tip]] +text = "Educação: 'Could you...?' soa bem mais gentil que 'Can you...?'." +[[tip]] +text = "Pra ganhar tempo pensando: 'Let me think...' ou 'That's a good question'." +[[tip]] +text = "Não entendeu? Tudo bem pedir: 'Sorry, could you say that again?'." +[[tip]] +text = "'How are you?' muitas vezes é só um oi. Responda curto: 'Good, you?'." +[[tip]] +text = "Em email e reunião, 'I'm afraid...' suaviza uma notícia ruim." diff --git a/decks/en/emergency.toml b/decks/en/emergency.toml new file mode 100644 index 0000000..68daffe --- /dev/null +++ b/decks/en/emergency.toml @@ -0,0 +1,156 @@ +# decks/en: emergência. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "emergência" +situation = "Aconteceu um acidente." +say = "Please call an ambulance" +short = "Call an ambulance!" +polished = "Please, someone call an ambulance right now!" +meaning = "Por favor, chame uma ambulância" +accept = ["Call an ambulance"] + +[[phrase]] +topic = "emergência" +situation = "Perdeu o passaporte na viagem." +say = "I lost my passport" +polished = "Excuse me, I've lost my passport" +meaning = "Perdi meu passaporte" + +[[phrase]] +topic = "emergência" +situation = "Precisa de ajuda urgente na rua." +say = "Can you help me, please?" +short = "Help, please!" +polished = "Excuse me, could you help me, please?" +meaning = "Você pode me ajudar, por favor?" +accept = ["Could you help me, please?", "Can you help me?"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você vê fumaça saindo da cozinha do restaurante." +say = "There's a fire!" +short = "Fire!" +polished = "There's a fire, everyone get out!" +meaning = "Está pegando fogo!" +accept = ["There is a fire"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você saiu do metrô numa cidade que não conhece e não sabe voltar." +say = "I can't find my hotel." +polished = "Excuse me, I can't find my hotel." +meaning = "Não consigo achar meu hotel." +accept = ["I cannot find my hotel"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você volta para a mesa do café e sua mochila sumiu." +say = "Someone stole my backpack." +short = "My backpack!" +polished = "Excuse me, someone just stole my backpack." +meaning = "Roubaram minha mochila." +accept = ["Somebody stole my backpack", "My backpack was stolen"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Uma pessoa passa mal e cai ao seu lado na rua." +say = "We need a doctor." +short = "A doctor!" +polished = "We need a doctor here, please hurry!" +meaning = "Precisamos de um médico." + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Seu amigo se machucou e você para um táxi na rua." +say = "I need to get to a hospital." +short = "A hospital, quick!" +polished = "Please, I need to get to a hospital right now." +meaning = "Preciso ir a um hospital." +accept = ["I need to go to a hospital", "I need to go to the hospital"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Seu amigo caiu da bicicleta e não consegue levantar." +say = "My friend is hurt." +short = "He's hurt!" +polished = "Please help, my friend is badly hurt." +meaning = "Meu amigo está machucado." +accept = ["My friend is injured"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Você liga para a emergência e perguntam onde você está." +say = "I don't know the address." +short = "I don't know." +polished = "I'm sorry, I don't know the exact address." +meaning = "Não sei o endereço." +accept = ["I do not know the address"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Seu celular descarregou e você precisa avisar a família." +say = "Can I use your phone?" +short = "Your phone, please?" +polished = "Sorry, could I use your phone for a minute?" +meaning = "Posso usar seu celular?" +accept = ["Could I use your phone?", "May I use your phone?"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "A porta bateu e a chave ficou dentro do apartamento." +say = "I'm locked out." +short = "Locked out!" +polished = "I'm locked out of my apartment." +meaning = "Fiquei trancado pra fora." +accept = ["I locked myself out"] +tip = "'Locked out' = trancado do lado de fora, sem a chave." + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Depois de uma batida leve de carro, você desce pra ver as pessoas." +say = "Is everyone okay?" +short = "Everyone okay?" +polished = "Is everyone okay? Is anybody hurt?" +meaning = "Está todo mundo bem?" +accept = ["Is everybody okay?", "Is everyone all right?"] + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Na delegacia, depois que levaram sua mochila." +say = "I need to report a theft." +short = "I was robbed." +polished = "Hello, I'd like to report a theft, please." +meaning = "Preciso registrar um furto." +accept = ["I want to report a theft"] +tip = "'Theft' é furto; 'robbery' é roubo com ameaça." + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Seu cartão sumiu e você liga para o banco." +say = "I need to cancel my card." +short = "Cancel my card, please." +polished = "I've lost my card and I need to cancel it." +meaning = "Preciso cancelar meu cartão." +accept = ["I need to block my card"] + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Um homem desmaiou e você fala com a emergência ao telefone." +say = "He's not breathing." +short = "Not breathing!" +polished = "Please hurry, he's not breathing!" +meaning = "Ele não está respirando." +accept = ["He is not breathing", "He isn't breathing"] diff --git a/decks/en/first-contact.toml b/decks/en/first-contact.toml new file mode 100644 index 0000000..441b1d6 --- /dev/null +++ b/decks/en/first-contact.toml @@ -0,0 +1,80 @@ +# decks/en: primeiros contatos. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você trava no meio da frase conversando com um desconhecido." +say = "I'm learning English." +short = "Still learning." +polished = "I'm still learning English, so please be patient." +meaning = "Estou aprendendo inglês." +accept = ["I am learning English", "I'm still learning English"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Um vizinho pergunta há quanto tempo você está na cidade." +say = "I moved here last year." +short = "Last year." +polished = "I moved here last year for work." +meaning = "Me mudei pra cá no ano passado." +accept = ["I came here last year"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você conversa com alguém na fila da padaria do bairro." +say = "Do you live around here?" +polished = "So, do you live around here?" +meaning = "Você mora por aqui?" +accept = ["Do you live nearby?", "Do you live near here?"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você se despede de alguém que conheceu hoje num jantar." +say = "It was nice meeting you." +short = "Nice meeting you." +polished = "It was really nice meeting you today." +meaning = "Foi um prazer te conhecer." +accept = ["It was nice to meet you", "It was great meeting you"] +tip = "Na chegada é 'Nice to meet you'; na despedida, 'Nice meeting you'." + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Um colega novo conta que veio de outro país." +say = "What brought you here?" +polished = "So, what brought you to this city?" +meaning = "O que te trouxe pra cá?" +accept = ["What brings you here?"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Você conhece alguém do bairro numa festa de vizinhos." +say = "How long have you lived here?" +short = "How long?" +polished = "How long have you been living here?" +meaning = "Há quanto tempo você mora aqui?" +tip = "Pra algo que começou no passado e continua: 'have lived', não 'live'." + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Perguntam como está sendo a vida na cidade nova." +say = "I'm still getting used to it." +short = "Still getting used to it." +polished = "Honestly, I'm still getting used to it." +meaning = "Ainda estou me acostumando." +tip = "'Get used to' = se acostumar com." + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "No último dia do curso, você se despede de um colega." +say = "We should keep in touch." +short = "Let's keep in touch." +polished = "We should definitely keep in touch." +meaning = "A gente devia manter contato." +accept = ["We should stay in touch", "Let's stay in touch"] diff --git a/decks/en/health-and-social.toml b/decks/en/health-and-social.toml new file mode 100644 index 0000000..b4d22c7 --- /dev/null +++ b/decks/en/health-and-social.toml @@ -0,0 +1,42 @@ +# decks/en: saúde e social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Um amigo nota que você anda quieto e pergunta se está tudo bem." +say = "I've been feeling stressed lately." +short = "I've been stressed." +polished = "To be honest, I've been feeling stressed lately." +meaning = "Ando estressado ultimamente." +accept = ["I've been stressed lately", "I've been really stressed lately"] + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Um colega te chama pra sair tarde numa terça-feira." +say = "I'm trying to get more sleep." +short = "I need more sleep." +polished = "I'm really trying to get more sleep these days." +meaning = "Estou tentando dormir mais." +accept = ["I'm trying to sleep more"] + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Seu amigo está exausto e não para de trabalhar." +say = "You should take a day off." +short = "Take a day off." +polished = "I really think you should take a day off." +meaning = "Você devia tirar um dia de folga." +accept = ["You should take the day off"] +tip = "'A day off' = um dia de folga." + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Uma amiga está doente em casa, sozinha." +say = "Text me if you need anything." +short = "Text me." +polished = "Please text me if you need anything at all." +meaning = "Me manda mensagem se precisar de alguma coisa." +accept = ["Message me if you need anything", "Call me if you need anything"] diff --git a/decks/en/health.toml b/decks/en/health.toml new file mode 100644 index 0000000..657b6f8 --- /dev/null +++ b/decks/en/health.toml @@ -0,0 +1,176 @@ +# decks/en: saúde. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde" +situation = "Você não está bem e precisa de atendimento." +say = "I need to see a doctor" +short = "I need a doctor" +polished = "I think I need to see a doctor, please" +meaning = "Preciso ver um médico" + +[[phrase]] +topic = "saúde" +situation = "Na consulta, mostre onde dói." +say = "It hurts right here" +short = "It hurts here" +polished = "Doctor, it hurts right here when I press" +meaning = "Dói bem aqui" +accept = ["It hurts here"] + +[[phrase]] +topic = "saúde" +situation = "Na farmácia, procurando remédio pra dor de cabeça." +say = "Do you have something for a headache?" +short = "Something for a headache?" +polished = "Could you recommend something for a headache?" +meaning = "Tem algo pra dor de cabeça?" + +[[phrase]] +topic = "saúde" +situation = "O médico pergunta há quanto tempo você está assim." +say = "I've been feeling sick since yesterday" +short = "I feel sick" +polished = "I've been feeling quite sick since yesterday morning" +meaning = "Estou me sentindo mal desde ontem" + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você mede a temperatura e o termômetro mostra trinta e nove." +say = "I have a fever." +short = "A fever." +polished = "I think I have a fever." +meaning = "Estou com febre." +accept = ["I've got a fever"] +tip = "Em inglês você 'tem' febre: 'I have a fever', nunca 'I am with fever'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Na farmácia, a atendente pergunta o que você está sentindo." +say = "I have a sore throat." +short = "Sore throat." +polished = "I have a really sore throat." +meaning = "Estou com dor de garganta." +accept = ["I've got a sore throat", "My throat hurts"] +tip = "'Sore' = dolorido: sore throat, sore muscles." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você não para de tossir e vai à farmácia." +say = "I need something for a cough." +short = "Something for a cough?" +polished = "Do you have anything for a bad cough?" +meaning = "Preciso de algo pra tosse." +tip = "'Cough' se fala 'cóf'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Antes de receitar, o médico pergunta se você tem alguma alergia." +say = "I'm allergic to penicillin." +short = "Penicillin." +polished = "Yes, I'm allergic to penicillin." +meaning = "Sou alérgico a penicilina." +accept = ["I am allergic to penicillin"] + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você cortou o dedo cozinhando na casa de um amigo." +say = "Do you have a band-aid?" +short = "A band-aid, please." +polished = "Excuse me, do you have a band-aid?" +meaning = "Você tem um band-aid?" +accept = ["Do you have a plaster?", "Have you got a plaster?"] +tip = "Nos EUA é 'band-aid'; no Reino Unido, 'plaster'." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você liga para a clínica logo cedo, sem horário marcado." +say = "Can I see a doctor today?" +short = "A doctor today?" +polished = "Is there any chance I could see a doctor today?" +meaning = "Consigo passar com um médico hoje?" +accept = ["Could I see a doctor today?"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O médico pergunta desde quando você está com dor." +say = "It started two days ago." +short = "Two days ago." +polished = "It started about two days ago." +meaning = "Começou há dois dias." +tip = "'Ago' vem depois do tempo: 'two days ago' = há dois dias." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você levanta rápido demais e tudo começa a girar." +say = "I feel dizzy." +polished = "I've been feeling dizzy all day." +meaning = "Estou tonto." +accept = ["I'm dizzy", "I'm feeling dizzy"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você pisou em falso jogando bola e o pé inchou." +say = "I think I sprained my ankle." +short = "I sprained my ankle." +polished = "I think I may have sprained my ankle." +meaning = "Acho que torci o tornozelo." +accept = ["I think I twisted my ankle"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O farmacêutico te entrega o remédio e você não sabe a dose." +say = "How often should I take it?" +short = "How often?" +polished = "Sorry, how often should I take it?" +meaning = "De quanto em quanto tempo devo tomar?" +accept = ["How often do I take it?"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O médico pergunta se você toma algum remédio todo dia." +say = "I'm not taking any medication." +short = "No medication." +polished = "No, I'm not taking any medication at the moment." +meaning = "Não estou tomando nenhum remédio." +accept = ["I don't take any medication"] + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Seu remédio de uso contínuo acabou e você vai à farmácia." +say = "I need a refill on my prescription." +short = "A refill, please." +polished = "Hi, I need a refill on my prescription, please." +meaning = "Preciso renovar minha receita." +tip = "'Prescription' é a receita médica. 'Recipe' é receita de comida." + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Na recepção da clínica, antes de fazer um exame caro." +say = "Does my insurance cover this?" +short = "Is this covered?" +polished = "Could you tell me if my insurance covers this?" +meaning = "Meu plano cobre isso?" +accept = ["Is this covered by my insurance?"] + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Você liga para o dentista pedindo um encaixe urgente." +say = "I have a terrible toothache." +short = "A toothache." +polished = "I've had a terrible toothache since last night." +meaning = "Estou com uma dor de dente terrível." +accept = ["I've got a terrible toothache"] diff --git a/decks/en/home-and-paperwork.toml b/decks/en/home-and-paperwork.toml new file mode 100644 index 0000000..dc2ef8f --- /dev/null +++ b/decks/en/home-and-paperwork.toml @@ -0,0 +1,86 @@ +# decks/en: casa e burocracia. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "A internet do apartamento alugado caiu e você escreve ao dono." +say = "The wifi isn't working." +short = "No wifi." +polished = "Hi, the wifi isn't working in my apartment." +meaning = "O wi-fi não está funcionando." +accept = ["The wifi is not working", "The wifi doesn't work", "The internet isn't working"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "Primeira semana no prédio novo, você encontra um vizinho no corredor." +say = "Where do I take out the trash?" +short = "Where's the trash?" +polished = "Sorry, where do I take out the trash?" +meaning = "Onde eu coloco o lixo?" +accept = ["Where do I put the trash?", "Where does the trash go?"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "No balcão do banco, a atendente pergunta em que pode ajudar." +say = "I'd like to withdraw some money." +short = "A withdrawal, please." +polished = "Hi, I'd like to withdraw some money, please." +meaning = "Queria sacar dinheiro." +accept = ["I would like to withdraw some money", "I'd like to take out some money"] +tip = "'Withdraw' = sacar. 'Deposit' = depositar." + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "A feira só aceita dinheiro e você está sem nenhum." +say = "Is there an ATM nearby?" +short = "An ATM?" +polished = "Excuse me, is there an ATM nearby?" +meaning = "Tem um caixa eletrônico por aqui?" +accept = ["Is there an ATM near here?", "Is there a cash machine nearby?"] +tip = "ATM se fala letra por letra: 'ei-ti-ém'." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "A pia da cozinha pinga a noite toda e você avisa o proprietário." +say = "The faucet is leaking." +short = "It's leaking." +polished = "Hi, the kitchen faucet is leaking." +meaning = "A torneira está vazando." +accept = ["The tap is leaking", "The faucet is dripping"] +tip = "Nos EUA é 'faucet'; no Reino Unido, 'tap'." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "O caixa eletrônico não devolveu seu cartão e você entra na agência." +say = "The ATM kept my card." +short = "It kept my card." +polished = "Excuse me, the ATM kept my card." +meaning = "O caixa eletrônico engoliu meu cartão." +accept = ["The ATM swallowed my card", "The ATM ate my card"] + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "Você chega ao guichê com a conta de luz na mão." +say = "I need to pay this bill." +short = "Pay this, please." +polished = "Hi, I need to pay this bill, please." +meaning = "Preciso pagar essa conta." +accept = ["I'd like to pay this bill"] +tip = "'Bill' é conta a pagar (luz, restaurante). 'Account' é conta de banco." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "Primeiro mês no apartamento, você escreve ao proprietário." +say = "When is the rent due?" +short = "When's it due?" +polished = "Could you remind me when the rent is due?" +meaning = "Quando vence o aluguel?" +accept = ["When's the rent due?"] +tip = "'Due' = que vence, com prazo: 'the rent is due on the first'." diff --git a/decks/en/phone.toml b/decks/en/phone.toml new file mode 100644 index 0000000..bb82c0e --- /dev/null +++ b/decks/en/phone.toml @@ -0,0 +1,168 @@ +# decks/en: telefone. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "telefone" +situation = "A pessoa que você procura não está." +say = "Can I leave a message?" +polished = "Could I leave a message, please?" +meaning = "Posso deixar um recado?" +accept = ["Could I leave a message?"] + +[[phrase]] +topic = "telefone" +situation = "Ligou pro número errado." +say = "Sorry, I think I have the wrong number" +short = "Wrong number, sorry" +polished = "I'm so sorry, I think I have the wrong number" +meaning = "Desculpa, acho que liguei errado" + +[[phrase]] +topic = "telefone" +situation = "Precisa soletrar seu nome." +say = "Let me spell it for you" +short = "Let me spell it" +polished = "Sure, let me spell it for you" +meaning = "Deixa eu soletrar pra você" +tip = "Treine o alfabeto: o 'e' em inglês se fala 'í' e o 'i' se fala 'ái'." + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Você atende o telefone e não reconhece a voz." +say = "Who's calling, please?" +short = "Who's calling?" +polished = "May I ask who's calling, please?" +meaning = "Quem está falando, por favor?" +accept = ["Who is calling, please?", "Who is this?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "A ligação está baixa e você não escuta a pessoa." +say = "Can you hear me?" +polished = "Hello, can you hear me okay?" +meaning = "Você está me ouvindo?" +accept = ["Can you hear me okay?", "Can you hear me now?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Você liga para a casa de uma amiga e outra pessoa atende." +say = "Can I speak to Ana?" +short = "Ana, please." +polished = "Hello, could I speak to Ana, please?" +meaning = "Posso falar com a Ana?" +accept = ["Could I speak to Ana?", "May I speak to Ana?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "A campainha toca no meio da ligação e você precisa ir abrir a porta." +say = "Hold on a second." +short = "Hold on." +polished = "Could you hold on a second, please?" +meaning = "Espera um segundo." +accept = ["Hold on a sec", "Hang on a second"] +tip = "'Hold on' = espera aí." + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Um amigo liga bem na hora em que você está entrando no ônibus." +say = "I'll call you back." +short = "Call you back." +polished = "Can I call you back in ten minutes?" +meaning = "Eu te ligo de volta." +accept = ["I will call you back"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Você não vai poder ir à consulta de amanhã e liga para a clínica." +say = "I need to reschedule my appointment." +short = "Can I reschedule?" +polished = "Hello, I need to reschedule my appointment, please." +meaning = "Preciso remarcar minha consulta." +accept = ["I need to change my appointment"] +tip = "'Appointment' é horário marcado (médico, banco). Encontro com amigos não é 'appointment'." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "A atendente ditou o telefone rápido demais pra você anotar." +say = "Could you repeat the number?" +short = "The number again?" +polished = "Sorry, could you repeat the number more slowly?" +meaning = "Pode repetir o número?" +accept = ["Can you repeat the number?"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "O sinal está ruim e a voz da pessoa fica sumindo." +say = "You're breaking up." +short = "Breaking up!" +polished = "Sorry, you're breaking up, I can barely hear you." +meaning = "Sua voz está cortando." +tip = "'Breaking up' na ligação é a voz cortando. Entre um casal, é terminar o namoro." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Um amigo explica onde é a festa, mas você prefere receber por escrito." +say = "Can you text me the address?" +short = "Text me the address." +polished = "Could you text me the address, please?" +meaning = "Pode me mandar o endereço por mensagem?" +accept = ["Could you text me the address?"] +tip = "'Text' também é verbo: mandar mensagem." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Seu amigo não atende e a ligação cai na caixa postal." +say = "Call me when you can." +short = "Call me back." +polished = "Hi, it's me, call me back when you can." +meaning = "Me liga quando puder." +accept = ["Call me back when you can"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "A atendente pergunta se você pode aguardar na linha." +say = "Sure, I can hold." +short = "I'll hold." +polished = "Sure, no problem, I can hold." +meaning = "Claro, eu aguardo." +tip = "'Hold' ao telefone é esperar na linha." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "A internet de casa caiu e você liga para o suporte." +say = "I'm calling about my internet connection." +short = "It's about my internet." +polished = "Hi, I'm calling about a problem with my internet connection." +meaning = "Estou ligando por causa da minha internet." +tip = "'I'm calling about...' é o jeito padrão de dizer o motivo da ligação." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "A ligação caiu no meio da conversa e você liga de novo." +say = "Sorry, we got cut off." +short = "We got cut off." +polished = "Sorry about that, I think we got cut off." +meaning = "Desculpa, a ligação caiu." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "Você está preso no menu automático e quer um atendente." +say = "Can I speak to a real person?" +short = "A real person, please." +polished = "Could you put me through to a real person, please?" +meaning = "Posso falar com um atendente de verdade?" +accept = ["Could I speak to a real person?"] +tip = "'Put me through to...' = me transfira para..." diff --git a/decks/en/restaurant.toml b/decks/en/restaurant.toml new file mode 100644 index 0000000..579dde3 --- /dev/null +++ b/decks/en/restaurant.toml @@ -0,0 +1,106 @@ +# decks/en: restaurante. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "restaurante" +situation = "Você quer levar a comida pra viagem." +say = "Can I get this to go?" +short = "To go, please" +polished = "Could I get this to go, please?" +meaning = "Pode embalar pra viagem?" +accept = ["Could I get this to go?"] + +[[phrase]] +topic = "restaurante" +situation = "Você tem alergia a amendoim." +say = "I'm allergic to peanuts" +short = "No peanuts, please" +polished = "Just so you know, I'm allergic to peanuts" +meaning = "Sou alérgico a amendoim" +tip = "Alergia é sério: fale devagar e aponte no cardápio se precisar." + +[[phrase]] +topic = "restaurante" +situation = "Terminou de comer e quer pagar." +say = "Could we get the check, please?" +short = "Check, please" +polished = "Whenever you're ready, could we get the check, please?" +meaning = "Pode trazer a conta, por favor?" +accept = ["Can we get the check, please?", "Check, please"] +tip = "Nos EUA é 'check'; no Reino Unido, 'bill'." + +[[phrase]] +topic = "restaurante" +situation = "Chegou no restaurante com um amigo." +say = "A table for two, please" +short = "Two, please" +polished = "Hi, could we get a table for two, please?" +meaning = "Uma mesa pra dois, por favor" + +[[phrase]] +topic = "restaurante" +situation = "Não sabe o que pedir." +say = "What do you recommend?" +short = "Any recommendations?" +polished = "What would you recommend here?" +meaning = "O que você recomenda?" + +[[phrase]] +topic = "restaurante" +situation = "Quer saber se aceitam cartão." +say = "Do you take credit cards?" +short = "Card okay?" +polished = "Do you happen to take credit cards?" +meaning = "Vocês aceitam cartão de crédito?" +accept = ["Do you accept credit cards?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "O garçom chega à mesa com o bloquinho na mão." +say = "I'll have the chicken, please." +short = "The chicken, please." +polished = "I think I'll have the chicken, please." +meaning = "Vou querer o frango, por favor." +accept = ["I will have the chicken, please", "I'll have the chicken"] +tip = "'I'll have...' é o jeito natural de pedir. 'I want...' soa seco." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "Vocês sentaram há dez minutos e ninguém trouxe o cardápio." +say = "Could we see the menu?" +short = "The menu, please." +polished = "Excuse me, could we see the menu, please?" +meaning = "Podemos ver o cardápio?" +accept = ["Can we see the menu?", "Could we have the menu?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "Você não aguenta pimenta e o prato tem um desenho de chama ao lado." +say = "Is this dish spicy?" +short = "Is it spicy?" +polished = "Excuse me, is this dish very spicy?" +meaning = "Esse prato é apimentado?" +accept = ["Is this spicy?"] +tip = "'Spicy' é apimentado. 'Hot' pode ser quente ou apimentado." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "A comida chegou, mas esqueceram a sua bebida." +say = "Can I have some water, please?" +short = "Some water, please." +polished = "Could I have some water, please?" +meaning = "Pode me trazer uma água, por favor?" +accept = ["Can I get some water, please?", "Could I get some water, please?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "O garçom tira os pratos e pergunta se estava tudo bom." +say = "Everything was delicious." +short = "It was delicious." +polished = "Everything was delicious, thank you so much." +meaning = "Estava tudo delicioso." +accept = ["It was all delicious", "Everything was great"] diff --git a/decks/en/routine-and-transport.toml b/decks/en/routine-and-transport.toml new file mode 100644 index 0000000..c0f122d --- /dev/null +++ b/decks/en/routine-and-transport.toml @@ -0,0 +1,85 @@ +# decks/en: rotina e transporte. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "O ônibus está cheio e há uma bolsa no banco ao lado de alguém." +say = "Is this seat taken?" +short = "Is this taken?" +polished = "Excuse me, is this seat taken?" +meaning = "Esse lugar está ocupado?" +accept = ["Is anyone sitting here?"] + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "O ônibus está lotado e você precisa passar pra descer." +say = "This is my stop." +short = "My stop!" +polished = "Excuse me, this is my stop." +meaning = "É a minha parada." +accept = ["That's my stop", "I'm getting off here"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você sobe no ônibus e não sabe quanto pagar." +say = "How much is the fare?" +short = "How much?" +polished = "Excuse me, how much is the fare?" +meaning = "Quanto é a passagem?" +accept = ["What's the fare?", "How much is a ticket?"] +tip = "'Fare' é o preço da passagem (ônibus, metrô, táxi)." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "O motorista do aplicativo ia passar da sua casa." +say = "Can you drop me off here?" +short = "Here is fine." +polished = "Could you drop me off right here, please?" +meaning = "Pode me deixar aqui?" +accept = ["Could you drop me off here?", "You can drop me off here"] +tip = "'Drop off' = deixar alguém num lugar. O contrário é 'pick up' (buscar)." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você chega no ponto e vê o ônibus virando a esquina." +say = "I missed the bus." +short = "Missed it!" +polished = "Sorry, I just missed the bus." +meaning = "Perdi o ônibus." +accept = ["I just missed the bus"] +tip = "Perder o ônibus é 'miss'. Perder um objeto é 'lose'." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você liga pra avisar que vai chegar atrasado ao jantar." +say = "I'm stuck in traffic." +short = "Stuck in traffic." +polished = "Sorry, I'm stuck in traffic right now." +meaning = "Estou preso no trânsito." +accept = ["I am stuck in traffic"] + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "O aplicativo mostra uma hora de metrô até a casa do seu amigo." +say = "Is there a faster way to get there?" +short = "A faster way?" +polished = "Do you know if there's a faster way to get there?" +meaning = "Tem um jeito mais rápido de chegar lá?" +accept = ["Is there a quicker way to get there?"] + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "A catraca do metrô apita: seu cartão está sem saldo." +say = "I need to top up my card." +short = "Top up, please." +polished = "Hi, I need to top up my transit card." +meaning = "Preciso recarregar meu cartão." +accept = ["I need to reload my card", "I need to add money to my card"] +tip = "'Top up' = recarregar (cartão, celular). Nos EUA também se diz 'reload'." diff --git a/decks/en/shopping.toml b/decks/en/shopping.toml new file mode 100644 index 0000000..e54d02a --- /dev/null +++ b/decks/en/shopping.toml @@ -0,0 +1,163 @@ +# decks/en: compras. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "compras" +situation = "O vendedor oferece ajuda, mas você só está olhando." +say = "I'm just looking, thanks" +short = "Just looking" +polished = "I'm just looking for now, thank you" +meaning = "Só estou olhando, obrigado" +accept = ["Just looking, thanks"] + +[[phrase]] +topic = "compras" +situation = "Quer provar uma roupa." +say = "Can I try this on?" +polished = "Would it be okay if I tried this on?" +meaning = "Posso experimentar?" +accept = ["Could I try this on?"] + +[[phrase]] +topic = "compras" +situation = "Precisa de um tamanho maior." +say = "Do you have this in a bigger size?" +short = "A bigger size?" +polished = "Excuse me, do you have this in a bigger size?" +meaning = "Tem esse num tamanho maior?" +accept = ["Do you have this in a larger size?"] + +[[phrase]] +topic = "compras" +situation = "O produto veio com defeito." +say = "I'd like to return this" +polished = "Hi, I'd like to return this, please" +meaning = "Eu gostaria de devolver isso" +accept = ["I would like to return this"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você pegou duas calças e não acha onde experimentar." +say = "Where are the fitting rooms?" +short = "The fitting rooms?" +polished = "Excuse me, where are the fitting rooms?" +meaning = "Onde ficam os provadores?" +accept = ["Where is the fitting room?", "Where are the changing rooms?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você sai do provador e a vendedora pergunta como ficou a camisa." +say = "It's too tight." +short = "Too tight." +polished = "It's a bit too tight for me." +meaning = "Está muito apertada." +accept = ["It is too tight"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você gostou do casaco e decide comprar." +say = "I'll take it." +polished = "Great, I'll take it, thank you." +meaning = "Vou levar." +accept = ["I will take it"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Já é tarde e você quer saber se dá tempo de voltar à loja." +say = "What time do you close?" +short = "When do you close?" +polished = "Excuse me, what time do you close today?" +meaning = "Que horas vocês fecham?" + +[[phrase]] +topic = "compras" +level = "A2" +situation = "Há uma placa de desconto, mas a etiqueta mostra o preço cheio." +say = "Is this on sale?" +short = "On sale?" +polished = "Excuse me, is this one on sale?" +meaning = "Isso está em promoção?" +tip = "'On sale' = em promoção. 'For sale' = à venda." + +[[phrase]] +topic = "compras" +level = "A2" +situation = "A vendedora pergunta se pode ajudar, e você procura algo pra sua mãe." +say = "I'm looking for a gift." +polished = "I'm looking for a gift for my mother." +meaning = "Estou procurando um presente." +accept = ["I'm looking for a present"] + +[[phrase]] +topic = "compras" +level = "A2" +situation = "Você pagou e o caixa não entregou o comprovante." +say = "Can I have the receipt?" +short = "The receipt, please." +polished = "Could I have the receipt, please?" +meaning = "Pode me dar a nota?" +accept = ["Could I have the receipt?", "Can I get the receipt?"] +tip = "'Receipt' se fala 'ri-SÍT': o 'p' é mudo." + +[[phrase]] +topic = "compras" +level = "A2" +situation = "O tênis ficou grande no seu pé." +say = "Do you have a smaller size?" +short = "A smaller size?" +polished = "Do you happen to have a smaller size?" +meaning = "Tem um número menor?" +accept = ["Do you have it in a smaller size?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você abre a caixa na loja e a tela do aparelho está riscada." +say = "This one is damaged." +short = "It's damaged." +polished = "I'm afraid this one is damaged." +meaning = "Este aqui está com defeito." +accept = ["This one is broken"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você ganhou uma blusa, mas não gostou da cor." +say = "Can I exchange it for another color?" +short = "Can I exchange it?" +polished = "Would it be possible to exchange it for another color?" +meaning = "Posso trocar por outra cor?" +accept = ["Could I exchange it for another color?"] +tip = "'Exchange' é trocar por outro. 'Return' é devolver. 'Refund' é o dinheiro de volta." + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você comprou online há duas semanas e nada chegou." +say = "My order hasn't arrived yet." +short = "My order hasn't arrived." +polished = "I'm afraid my order still hasn't arrived." +meaning = "Meu pedido ainda não chegou." +accept = ["My order has not arrived yet"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Antes de comprar um presente caro, você quer saber se pode devolver." +say = "What's your return policy?" +short = "Can I return it?" +polished = "Could you tell me what your return policy is?" +meaning = "Qual é a política de devolução?" +accept = ["What is your return policy?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você confere o extrato e a mesma compra aparece duas vezes." +say = "I think I was charged twice." +short = "I was charged twice." +polished = "Excuse me, I think I was charged twice for this." +meaning = "Acho que me cobraram duas vezes." diff --git a/decks/en/slang-and-small-talk.toml b/decks/en/slang-and-small-talk.toml new file mode 100644 index 0000000..8447988 --- /dev/null +++ b/decks/en/slang-and-small-talk.toml @@ -0,0 +1,105 @@ +# decks/en: gírias e conversa. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Perguntam que horas o mercado fecha e você não sabe." +say = "I have no clue." +short = "No clue." +polished = "Honestly, I have no clue." +meaning = "Não faço ideia." +accept = ["I have no idea", "I've got no clue"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Seu amigo pergunta se você prefere pizza ou hambúrguer." +say = "Either way works for me." +short = "Either way." +polished = "Honestly, either way works for me." +meaning = "Pra mim tanto faz." +accept = ["Either one works for me", "I'm fine with either"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Chove forte e te chamam pra uma festa do outro lado da cidade." +say = "I don't feel like going out." +short = "I don't feel like it." +polished = "I really don't feel like going out tonight." +meaning = "Não estou a fim de sair." +accept = ["I'm not in the mood to go out"] +tip = "'Feel like' + verbo com -ing = estar a fim de." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Um amigo conta que vai largar o emprego pra viajar o mundo." +say = "Are you serious?" +short = "Seriously?" +polished = "Are you serious? I can't believe it!" +meaning = "Tá falando sério?" +accept = ["Are you being serious?"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Vocês combinam por mensagem de se encontrar às oito." +say = "Cool, see you then!" +short = "Cool!" +polished = "Cool, see you at eight then!" +meaning = "Beleza, até lá!" +accept = ["Great, see you then", "Okay, see you then"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Perguntam como é morar com seu colega de apartamento." +say = "We get along really well." +short = "We get along." +polished = "We get along really well, actually." +meaning = "A gente se dá muito bem." +accept = ["We get on really well"] +tip = "'Get along' = se dar bem com alguém. No Reino Unido, 'get on'." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "O técnico marcou pra manhã e já são quatro da tarde." +say = "I'm fed up with waiting." +short = "I'm fed up." +polished = "Honestly, I'm fed up with waiting." +meaning = "Cansei de esperar." +accept = ["I'm sick of waiting", "I'm tired of waiting"] +tip = "'Fed up' = de saco cheio, sem ser palavrão." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Seu amigo quer ir a um restaurante que você conhece e sabe o preço." +say = "Heads up, it's pretty expensive." +short = "Heads up!" +polished = "Just a heads up, it's pretty expensive." +meaning = "Só avisando, é bem caro." +accept = ["Just so you know, it's pretty expensive"] +tip = "'Heads up' = aviso amigável antes de algo acontecer." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Um amigo te manda um vídeo de um gato caindo do sofá." +say = "That's hilarious!" +short = "Hilarious!" +polished = "That's hilarious, I can't stop laughing!" +meaning = "Isso é muito engraçado!" +accept = ["That is hilarious", "That's so funny"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Você reencontra um conhecido e quer saber as novidades." +say = "What have you been up to?" +short = "What's new?" +polished = "So, what have you been up to lately?" +meaning = "O que você anda fazendo?" +accept = ["What've you been up to?", "What have you been doing?"] diff --git a/decks/en/social.toml b/decks/en/social.toml new file mode 100644 index 0000000..4b3bc24 --- /dev/null +++ b/decks/en/social.toml @@ -0,0 +1,210 @@ +# decks/en: social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "social" +situation = "Alguém pergunta de onde você é." +say = "I'm from Brazil" +polished = "I'm originally from Brazil" +meaning = "Eu sou do Brasil" + +[[phrase]] +topic = "social" +situation = "Quer puxar conversa sobre o trabalho da pessoa." +say = "What do you do for a living?" +short = "What do you do?" +polished = "So, what do you do for a living?" +meaning = "Com o que você trabalha?" +accept = ["What do you do?"] + +[[phrase]] +topic = "social" +situation = "A pessoa fala rápido demais pra você." +say = "Could you speak a little slower?" +short = "Slower, please" +polished = "Sorry, could you speak a little slower, please?" +meaning = "Você poderia falar um pouco mais devagar?" +accept = ["Could you speak more slowly?", "Can you speak a little slower?"] + +[[phrase]] +topic = "social" +situation = "Não sabe uma palavra em inglês." +say = "How do you say this in English?" +short = "How do you say this?" +polished = "Sorry, how do you say this in English?" +meaning = "Como se diz isso em inglês?" + +[[phrase]] +topic = "social" +situation = "Alguém pede desculpas por algo pequeno." +say = "No worries" +short = "All good" +polished = "No worries at all, it happens" +meaning = "Sem problemas" +accept = ["No problem"] + +[[phrase]] +topic = "social" +situation = "Um amigo pergunta se você está chegando." +say = "I'm on my way" +short = "On my way!" +polished = "I'm on my way, see you soon" +meaning = "Estou a caminho" + +[[phrase]] +topic = "social" +situation = "Não entendeu o que a pessoa quis dizer." +say = "What do you mean?" +polished = "Sorry, what do you mean by that?" +meaning = "O que você quer dizer?" + +[[phrase]] +topic = "social" +situation = "Está indo embora da festa." +say = "It was great seeing you" +short = "Great seeing you" +polished = "It was really great seeing you again" +meaning = "Foi ótimo te ver" +accept = ["It was nice seeing you", "It was great to see you"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "Você encontra um vizinho no elevador." +say = "How's it going?" +polished = "Hey, how's it going today?" +meaning = "Como vão as coisas?" +accept = ["How is it going?"] +tip = "Resposta natural: 'Pretty good, you?'." + +[[phrase]] +topic = "social" +level = "A1" +situation = "Sua amiga chega na festa e você a apresenta a um colega." +say = "This is my friend Ana." +short = "This is Ana." +polished = "I'd like you to meet my friend Ana." +meaning = "Essa é minha amiga Ana." + +[[phrase]] +topic = "social" +level = "A1" +situation = "O anfitrião te oferece mais uma bebida e você não quer." +say = "I'm good, thanks." +short = "I'm good." +polished = "I'm good for now, thanks." +meaning = "Estou bem, obrigado." +tip = "Aqui 'I'm good' é recusar com educação: 'não, obrigado'." + +[[phrase]] +topic = "social" +level = "A1" +situation = "Você quer manter contato com alguém que conheceu hoje." +say = "What's your number?" +short = "Your number?" +polished = "Can I get your number?" +meaning = "Qual é o seu número?" +accept = ["What is your number?", "What's your phone number?"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "Um amigo conta que passou na entrevista de emprego." +say = "That's great news!" +short = "Great news!" +polished = "That's great news, I'm so happy for you!" +meaning = "Que notícia boa!" +accept = ["That is great news"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Você quer conhecer melhor um colega novo." +say = "Do you want to grab a coffee?" +short = "Coffee?" +polished = "Would you like to grab a coffee sometime?" +meaning = "Quer tomar um café?" +accept = ["Want to grab a coffee?", "Do you want to get a coffee?"] +tip = "'Grab a coffee' é o convite casual do dia a dia." + +[[phrase]] +topic = "social" +level = "A2" +situation = "Te chamam pra sair hoje, mas você já tem compromisso." +say = "I can't make it tonight." +short = "Can't make it." +polished = "I'm sorry, I can't make it tonight." +meaning = "Não vou conseguir ir hoje à noite." +accept = ["I cannot make it tonight"] +tip = "'Make it' = conseguir ir ou chegar." + +[[phrase]] +topic = "social" +level = "A2" +situation = "Um amigo conta que foi demitido." +say = "I'm sorry to hear that." +short = "Sorry to hear that." +polished = "I'm really sorry to hear that." +meaning = "Sinto muito por isso." +accept = ["I am sorry to hear that"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Você chega vinte minutos depois do combinado." +say = "Sorry to keep you waiting." +short = "Sorry for the wait." +polished = "I'm so sorry to keep you waiting, the traffic was terrible." +meaning = "Desculpa te fazer esperar." +accept = ["Sorry for keeping you waiting", "Sorry I kept you waiting"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Na segunda, um colega pergunta como foi seu fim de semana." +say = "Not much, I just stayed home." +short = "Not much." +polished = "Not much, I just stayed home and relaxed." +meaning = "Nada demais, só fiquei em casa." +accept = ["Not much, I stayed home"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Sexta à tarde, você quer saber os planos do seu amigo." +say = "What are you up to this weekend?" +short = "Any plans?" +polished = "So, what are you up to this weekend?" +meaning = "O que você vai fazer no fim de semana?" +accept = ["What are you doing this weekend?"] +tip = "'What are you up to?' = o que você anda fazendo ou vai fazer." + +[[phrase]] +topic = "social" +level = "B1" +situation = "Você cruza na rua com um amigo que não via há anos." +say = "It's been a long time!" +short = "Long time no see!" +polished = "It's been such a long time, how have you been?" +meaning = "Quanto tempo!" +accept = ["It has been a long time"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "A conversa está boa, mas você precisa ir embora." +say = "I should get going." +short = "I should go." +polished = "Well, I should get going, but it was nice talking to you." +meaning = "Preciso ir andando." +accept = ["I should be going", "I have to get going"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "Seu amigo insiste em pagar a conta do bar de novo." +say = "The next one is on me." +short = "Next one's on me." +polished = "Thanks, but the next one is on me." +meaning = "A próxima é por minha conta." +accept = ["The next one's on me", "Next time it's on me"] +tip = "'It's on me' = eu pago." diff --git a/decks/en/travel.toml b/decks/en/travel.toml new file mode 100644 index 0000000..bcf6b90 --- /dev/null +++ b/decks/en/travel.toml @@ -0,0 +1,121 @@ +# decks/en: viagem. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "viagem" +situation = "Você chegou no hotel." +say = "I have a reservation under my name" +short = "I have a reservation" +polished = "Hi, I have a reservation under my name" +meaning = "Tenho uma reserva no meu nome" +accept = ["I have a reservation"] + +[[phrase]] +topic = "viagem" +situation = "Quer saber se o café da manhã está incluso." +say = "Is breakfast included?" +short = "Breakfast included?" +polished = "Could you tell me if breakfast is included?" +meaning = "O café da manhã está incluso?" + +[[phrase]] +topic = "viagem" +situation = "Precisa saber até que horas pode ficar no quarto." +say = "What time is check-out?" +short = "Check-out time?" +polished = "Could you tell me what time check-out is?" +meaning = "Que horas é o check-out?" + +[[phrase]] +topic = "viagem" +situation = "Sua mala não apareceu na esteira." +say = "My luggage didn't arrive" +short = "Lost luggage" +polished = "I'm afraid my luggage didn't arrive" +meaning = "Minha bagagem não chegou" +accept = ["My bag didn't arrive"] +tip = "'Luggage' não tem plural: nunca 'luggages'." + +[[phrase]] +topic = "viagem" +situation = "Está perdido e procura a estação." +say = "How do I get to the train station?" +short = "Train station?" +polished = "Excuse me, how do I get to the train station?" +meaning = "Como eu chego na estação de trem?" + +[[phrase]] +topic = "viagem" +situation = "No check-in do voo." +say = "Could I get a window seat, please?" +short = "Window seat, please" +polished = "If possible, could I get a window seat, please?" +meaning = "Poderia me dar um assento na janela, por favor?" +accept = ["Can I get a window seat, please?", "Can I have a window seat?"] + +[[phrase]] +topic = "viagem" +situation = "Quer saber quanto tempo leva até o centro." +say = "How long does it take to get downtown?" +short = "How far is downtown?" +polished = "Excuse me, do you know how long it takes to get downtown?" +meaning = "Quanto tempo leva pra chegar no centro?" +tip = "'Downtown' é o centro da cidade nos EUA." + +[[phrase]] +topic = "viagem" +situation = "Na imigração, perguntam o motivo da viagem." +say = "I'm here on vacation" +short = "On vacation" +polished = "I'm just here on vacation for a week" +meaning = "Estou aqui de férias" +accept = ["I'm here for vacation", "I'm here on holiday"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Na estação, você não acha a bilheteria." +say = "Where can I buy a ticket?" +short = "Tickets?" +polished = "Excuse me, where can I buy a ticket?" +meaning = "Onde posso comprar uma passagem?" +accept = ["Where do I buy a ticket?", "Where can I get a ticket?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "O trem está na plataforma e você não tem certeza se é o seu." +say = "Does this train go to the airport?" +short = "To the airport?" +polished = "Excuse me, does this train go to the airport?" +meaning = "Esse trem vai pro aeroporto?" +accept = ["Is this the train to the airport?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você e seu amigo querem uma foto juntos em frente ao monumento." +say = "Can you take our picture?" +short = "A picture, please?" +polished = "Excuse me, could you take our picture, please?" +meaning = "Pode tirar uma foto da gente?" +accept = ["Could you take our picture?", "Can you take a picture of us?", "Can you take our photo?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você planeja o dia seguinte com o recepcionista do hotel." +say = "What time does the museum open?" +short = "When does it open?" +polished = "Excuse me, what time does the museum open?" +meaning = "Que horas o museu abre?" +accept = ["When does the museum open?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você fez o check-out de manhã, mas seu voo é só à noite." +say = "Can I leave my bags here?" +short = "My bags here?" +polished = "Would it be okay to leave my bags here?" +meaning = "Posso deixar minhas malas aqui?" +accept = ["Could I leave my bags here?", "Can I leave my luggage here?"] diff --git a/decks/en.toml b/decks/en/work.toml similarity index 50% rename from decks/en.toml rename to decks/en/work.toml index e4d7bf3..3ae4585 100644 --- a/decks/en.toml +++ b/decks/en/work.toml @@ -1,45 +1,4 @@ -language = "en" -native = "pt-BR" -language_name = "inglês" -title = "Inglês pra vida real" - -# ---------------------------------------------------------------- tips -# General tips the warrior drops between challenges. - -[[tip]] -text = "Falso amigo: 'actually' é 'na verdade', não 'atualmente' (currently)." -[[tip]] -text = "Falso amigo: 'pretend' é 'fingir'. 'Pretender' é 'intend' ou 'plan to'." -[[tip]] -text = "Falso amigo: 'push' é EMPURRAR. Puxar é 'pull'. Olhe a porta!" -[[tip]] -text = "Falso amigo: 'library' é biblioteca. Livraria é 'bookstore'." -[[tip]] -text = "Falso amigo: 'exquisite' é refinado, elogio! Não é 'esquisito' (weird)." -[[tip]] -text = "Falso amigo: 'parents' são pai e mãe. Parentes são 'relatives'." -[[tip]] -text = "Falso amigo: 'lunch' é almoço. Lanche é 'snack'." -[[tip]] -text = "Pronúncia: final -ed quase não soa. 'worked' = 'uórkt', não 'uórqued'." -[[tip]] -text = "Pronúncia: o 'th' é língua entre os dentes. 'think' não é 'fink' nem 'tink'." -[[tip]] -text = "Pronúncia: não coloque 'i' no fim: 'Facebook' não é 'feicebuki'." -[[tip]] -text = "Pronúncia: 'beach' tem 'i' longo; 'bitch' tem 'i' curto. Cuidado na praia!" -[[tip]] -text = "Educação: 'Could you...?' soa bem mais gentil que 'Can you...?'." -[[tip]] -text = "Pra ganhar tempo pensando: 'Let me think...' ou 'That's a good question'." -[[tip]] -text = "Não entendeu? Tudo bem pedir: 'Sorry, could you say that again?'." -[[tip]] -text = "'How are you?' muitas vezes é só um oi. Responda curto: 'Good, you?'." -[[tip]] -text = "Em email e reunião, 'I'm afraid...' suaviza uma notícia ruim." - -# ---------------------------------------------------------------- trabalho +# decks/en: trabalho. The header and tips are in deck.toml; src/learn/deck.rs joins the files. [[phrase]] topic = "trabalho" @@ -193,328 +152,6 @@ polished = "Yesterday I finished the login page, and it's ready for review" meaning = "Ontem eu terminei a página de login" tip = "'Finished' termina com som de 't': 'fínisht'." -# ---------------------------------------------------------------- viagem - -[[phrase]] -topic = "viagem" -situation = "Você chegou no hotel." -say = "I have a reservation under my name" -short = "I have a reservation" -polished = "Hi, I have a reservation under my name" -meaning = "Tenho uma reserva no meu nome" -accept = ["I have a reservation"] - -[[phrase]] -topic = "viagem" -situation = "Quer saber se o café da manhã está incluso." -say = "Is breakfast included?" -short = "Breakfast included?" -polished = "Could you tell me if breakfast is included?" -meaning = "O café da manhã está incluso?" - -[[phrase]] -topic = "viagem" -situation = "Precisa saber até que horas pode ficar no quarto." -say = "What time is check-out?" -short = "Check-out time?" -polished = "Could you tell me what time check-out is?" -meaning = "Que horas é o check-out?" - -[[phrase]] -topic = "viagem" -situation = "Sua mala não apareceu na esteira." -say = "My luggage didn't arrive" -short = "Lost luggage" -polished = "I'm afraid my luggage didn't arrive" -meaning = "Minha bagagem não chegou" -accept = ["My bag didn't arrive"] -tip = "'Luggage' não tem plural: nunca 'luggages'." - -[[phrase]] -topic = "viagem" -situation = "Está perdido e procura a estação." -say = "How do I get to the train station?" -short = "Train station?" -polished = "Excuse me, how do I get to the train station?" -meaning = "Como eu chego na estação de trem?" - -[[phrase]] -topic = "viagem" -situation = "No check-in do voo." -say = "Could I get a window seat, please?" -short = "Window seat, please" -polished = "If possible, could I get a window seat, please?" -meaning = "Poderia me dar um assento na janela, por favor?" -accept = ["Can I get a window seat, please?", "Can I have a window seat?"] - -[[phrase]] -topic = "viagem" -situation = "Quer saber quanto tempo leva até o centro." -say = "How long does it take to get downtown?" -short = "How far is downtown?" -polished = "Excuse me, do you know how long it takes to get downtown?" -meaning = "Quanto tempo leva pra chegar no centro?" -tip = "'Downtown' é o centro da cidade nos EUA." - -[[phrase]] -topic = "viagem" -situation = "Na imigração, perguntam o motivo da viagem." -say = "I'm here on vacation" -short = "On vacation" -polished = "I'm just here on vacation for a week" -meaning = "Estou aqui de férias" -accept = ["I'm here for vacation", "I'm here on holiday"] - -# ---------------------------------------------------------------- restaurante - -[[phrase]] -topic = "restaurante" -situation = "Você quer levar a comida pra viagem." -say = "Can I get this to go?" -short = "To go, please" -polished = "Could I get this to go, please?" -meaning = "Pode embalar pra viagem?" -accept = ["Could I get this to go?"] - -[[phrase]] -topic = "restaurante" -situation = "Você tem alergia a amendoim." -say = "I'm allergic to peanuts" -short = "No peanuts, please" -polished = "Just so you know, I'm allergic to peanuts" -meaning = "Sou alérgico a amendoim" -tip = "Alergia é sério: fale devagar e aponte no cardápio se precisar." - -[[phrase]] -topic = "restaurante" -situation = "Terminou de comer e quer pagar." -say = "Could we get the check, please?" -short = "Check, please" -polished = "Whenever you're ready, could we get the check, please?" -meaning = "Pode trazer a conta, por favor?" -accept = ["Can we get the check, please?", "Check, please"] -tip = "Nos EUA é 'check'; no Reino Unido, 'bill'." - -[[phrase]] -topic = "restaurante" -situation = "Chegou no restaurante com um amigo." -say = "A table for two, please" -short = "Two, please" -polished = "Hi, could we get a table for two, please?" -meaning = "Uma mesa pra dois, por favor" - -[[phrase]] -topic = "restaurante" -situation = "Não sabe o que pedir." -say = "What do you recommend?" -short = "Any recommendations?" -polished = "What would you recommend here?" -meaning = "O que você recomenda?" - -[[phrase]] -topic = "restaurante" -situation = "Quer saber se aceitam cartão." -say = "Do you take credit cards?" -short = "Card okay?" -polished = "Do you happen to take credit cards?" -meaning = "Vocês aceitam cartão de crédito?" -accept = ["Do you accept credit cards?"] - -# ---------------------------------------------------------------- compras - -[[phrase]] -topic = "compras" -situation = "O vendedor oferece ajuda, mas você só está olhando." -say = "I'm just looking, thanks" -short = "Just looking" -polished = "I'm just looking for now, thank you" -meaning = "Só estou olhando, obrigado" -accept = ["Just looking, thanks"] - -[[phrase]] -topic = "compras" -situation = "Quer provar uma roupa." -say = "Can I try this on?" -polished = "Would it be okay if I tried this on?" -meaning = "Posso experimentar?" -accept = ["Could I try this on?"] - -[[phrase]] -topic = "compras" -situation = "Precisa de um tamanho maior." -say = "Do you have this in a bigger size?" -short = "A bigger size?" -polished = "Excuse me, do you have this in a bigger size?" -meaning = "Tem esse num tamanho maior?" -accept = ["Do you have this in a larger size?"] - -[[phrase]] -topic = "compras" -situation = "O produto veio com defeito." -say = "I'd like to return this" -polished = "Hi, I'd like to return this, please" -meaning = "Eu gostaria de devolver isso" -accept = ["I would like to return this"] - -# ---------------------------------------------------------------- saúde - -[[phrase]] -topic = "saúde" -situation = "Você não está bem e precisa de atendimento." -say = "I need to see a doctor" -short = "I need a doctor" -polished = "I think I need to see a doctor, please" -meaning = "Preciso ver um médico" - -[[phrase]] -topic = "saúde" -situation = "Na consulta, mostre onde dói." -say = "It hurts right here" -short = "It hurts here" -polished = "Doctor, it hurts right here when I press" -meaning = "Dói bem aqui" -accept = ["It hurts here"] - -[[phrase]] -topic = "saúde" -situation = "Na farmácia, procurando remédio pra dor de cabeça." -say = "Do you have something for a headache?" -short = "Something for a headache?" -polished = "Could you recommend something for a headache?" -meaning = "Tem algo pra dor de cabeça?" - -[[phrase]] -topic = "saúde" -situation = "O médico pergunta há quanto tempo você está assim." -say = "I've been feeling sick since yesterday" -short = "I feel sick" -polished = "I've been feeling quite sick since yesterday morning" -meaning = "Estou me sentindo mal desde ontem" - -# ---------------------------------------------------------------- social - -[[phrase]] -topic = "social" -situation = "Alguém pergunta de onde você é." -say = "I'm from Brazil" -polished = "I'm originally from Brazil" -meaning = "Eu sou do Brasil" - -[[phrase]] -topic = "social" -situation = "Quer puxar conversa sobre o trabalho da pessoa." -say = "What do you do for a living?" -short = "What do you do?" -polished = "So, what do you do for a living?" -meaning = "Com o que você trabalha?" -accept = ["What do you do?"] - -[[phrase]] -topic = "social" -situation = "A pessoa fala rápido demais pra você." -say = "Could you speak a little slower?" -short = "Slower, please" -polished = "Sorry, could you speak a little slower, please?" -meaning = "Você poderia falar um pouco mais devagar?" -accept = ["Could you speak more slowly?", "Can you speak a little slower?"] - -[[phrase]] -topic = "social" -situation = "Não sabe uma palavra em inglês." -say = "How do you say this in English?" -short = "How do you say this?" -polished = "Sorry, how do you say this in English?" -meaning = "Como se diz isso em inglês?" - -[[phrase]] -topic = "social" -situation = "Alguém pede desculpas por algo pequeno." -say = "No worries" -short = "All good" -polished = "No worries at all, it happens" -meaning = "Sem problemas" -accept = ["No problem"] - -[[phrase]] -topic = "social" -situation = "Um amigo pergunta se você está chegando." -say = "I'm on my way" -short = "On my way!" -polished = "I'm on my way, see you soon" -meaning = "Estou a caminho" - -[[phrase]] -topic = "social" -situation = "Não entendeu o que a pessoa quis dizer." -say = "What do you mean?" -polished = "Sorry, what do you mean by that?" -meaning = "O que você quer dizer?" - -[[phrase]] -topic = "social" -situation = "Está indo embora da festa." -say = "It was great seeing you" -short = "Great seeing you" -polished = "It was really great seeing you again" -meaning = "Foi ótimo te ver" -accept = ["It was nice seeing you", "It was great to see you"] - -# ---------------------------------------------------------------- telefone - -[[phrase]] -topic = "telefone" -situation = "A pessoa que você procura não está." -say = "Can I leave a message?" -polished = "Could I leave a message, please?" -meaning = "Posso deixar um recado?" -accept = ["Could I leave a message?"] - -[[phrase]] -topic = "telefone" -situation = "Ligou pro número errado." -say = "Sorry, I think I have the wrong number" -short = "Wrong number, sorry" -polished = "I'm so sorry, I think I have the wrong number" -meaning = "Desculpa, acho que liguei errado" - -[[phrase]] -topic = "telefone" -situation = "Precisa soletrar seu nome." -say = "Let me spell it for you" -short = "Let me spell it" -polished = "Sure, let me spell it for you" -meaning = "Deixa eu soletrar pra você" -tip = "Treine o alfabeto: o 'e' em inglês se fala 'í' e o 'i' se fala 'ái'." - -# ---------------------------------------------------------------- emergência - -[[phrase]] -topic = "emergência" -situation = "Aconteceu um acidente." -say = "Please call an ambulance" -short = "Call an ambulance!" -polished = "Please, someone call an ambulance right now!" -meaning = "Por favor, chame uma ambulância" -accept = ["Call an ambulance"] - -[[phrase]] -topic = "emergência" -situation = "Perdeu o passaporte na viagem." -say = "I lost my passport" -polished = "Excuse me, I've lost my passport" -meaning = "Perdi meu passaporte" - -[[phrase]] -topic = "emergência" -situation = "Precisa de ajuda urgente na rua." -say = "Can you help me, please?" -short = "Help, please!" -polished = "Excuse me, could you help me, please?" -meaning = "Você pode me ajudar, por favor?" -accept = ["Could you help me, please?", "Can you help me?"] - -# ---------------------------------------------------------------- work, A1 and A2 (pre-A1 is in basics) - [[phrase]] topic = "trabalho" level = "A1" diff --git a/decks/es.toml b/decks/es.toml deleted file mode 100644 index 0d9b320..0000000 --- a/decks/es.toml +++ /dev/null @@ -1,639 +0,0 @@ -language = "es" -native = "pt-BR" -language_name = "espanhol" -title = "Espanhol pra vida real" - -# ---------------------------------------------------------------- tips - -[[tip]] -text = "Falso amigo: 'embarazada' é GRÁVIDA, não envergonhada (avergonzada)." -[[tip]] -text = "Falso amigo: 'exquisito' é delicioso, elogio! Não é esquisito." -[[tip]] -text = "Falso amigo: 'oficina' é escritório. Oficina mecânica é 'taller'." -[[tip]] -text = "Falso amigo: 'polvo' é poeira. O animal é 'pulpo'." -[[tip]] -text = "Falso amigo: 'rato' é um momento. O bicho é 'ratón'." -[[tip]] -text = "Falso amigo: 'apellido' é sobrenome, não apelido (apodo)." -[[tip]] -text = "Falso amigo: 'propina' é gorjeta. Não é crime!" -[[tip]] -text = "Falso amigo: 'cena' é jantar. A cena do filme é 'escena'." -[[tip]] -text = "Pronúncia: o 'j' e o 'g' antes de e/i soam como um 'rr' forte: 'jamón'." -[[tip]] -text = "Pronúncia: 'll' e 'y' soam parecido com 'j' ou 'i': 'calle' = 'caje'." -[[tip]] -text = "Pronúncia: não nasalize! 'Pan' não é 'pão': fale o 'n' no fim." -[[tip]] -text = "Pronúncia: o 'z' e o 'c' (antes de e/i) viram 'th' na Espanha e 's' na América." -[[tip]] -text = "Em espanhol se 'tem' fome e frio: tengo hambre, tengo frío." -[[tip]] -text = "'Usted' é o formal. Use com pessoas mais velhas e no trabalho." -[[tip]] -text = "No clima usa-se 'hace': hace frío, hace calor, hace sol." - -# ---------------------------------------------------------------- trabajo - -[[phrase]] -topic = "trabalho" -situation = "O colega está falando, mas está no mudo." -say = "Perdón, estás en silencio" -short = "Estás en silencio" -polished = "Perdón, creo que tienes el micrófono en silencio" -meaning = "Desculpa, você está no mudo" -accept = ["Estás en silencio", "Tienes el micrófono apagado"] - -[[phrase]] -topic = "trabalho" -situation = "Você quer ver o que o colega está mostrando." -say = "¿Puedes compartir tu pantalla?" -short = "¿Compartes pantalla?" -polished = "¿Te importaría compartir tu pantalla?" -meaning = "Pode compartilhar sua tela?" -accept = ["¿Podrías compartir tu pantalla?"] - -[[phrase]] -topic = "trabalho" -situation = "Você vai se atrasar para a reunião." -say = "Voy a llegar unos minutos tarde" -short = "Llego tarde" -polished = "Perdón, voy a llegar unos minutos tarde" -meaning = "Vou chegar alguns minutos atrasado" - -[[phrase]] -topic = "trabalho" -situation = "Precisa confirmar antes de responder." -say = "Déjame revisarlo y te aviso" -short = "Lo reviso" -polished = "Déjame revisarlo bien y te aviso en un rato" -meaning = "Deixa eu revisar e te aviso" -accept = ["Lo reviso y te aviso"] - -[[phrase]] -topic = "trabalho" -situation = "Não entendeu a explicação." -say = "¿Me lo puedes explicar paso a paso?" -short = "¿Me lo explicas?" -polished = "¿Te importaría explicármelo paso a paso, por favor?" -meaning = "Você pode me explicar passo a passo?" - -[[phrase]] -topic = "trabalho" -situation = "Perguntam o prazo de uma tarefa." -say = "¿Cuál es la fecha de entrega?" -short = "¿Para cuándo es?" -polished = "¿Me podrías decir cuál es la fecha de entrega?" -meaning = "Qual é o prazo de entrega?" - -[[phrase]] -topic = "trabalho" -situation = "A reunião precisa ser adiada." -say = "¿Podemos pasarlo para mañana?" -short = "¿Mañana mejor?" -polished = "¿Sería posible pasarlo para mañana?" -meaning = "Podemos passar isso pra amanhã?" -accept = ["¿Lo podemos pasar para mañana?"] - -[[phrase]] -topic = "trabalho" -situation = "Você concorda com a ideia." -say = "Tiene sentido" -polished = "Sí, tiene todo el sentido" -meaning = "Faz sentido" - -[[phrase]] -topic = "trabalho" -situation = "Achou um problema sério em produção." -say = "Creo que hay un error en producción" -short = "Hay un error" -polished = "Creo que puede haber un error en producción" -meaning = "Acho que tem um erro em produção" - -[[phrase]] -topic = "trabalho" -situation = "Vai mandar um resumo depois da reunião." -say = "Te mando un correo con el resumen" -short = "Te mando el resumen" -polished = "Luego te mando un correo con el resumen" -meaning = "Te mando um email com o resumo" -tip = "Email em espanhol é 'correo' (ou 'mail' na conversa)." - -[[phrase]] -topic = "trabalho" -situation = "Quer saber se o áudio está bom." -say = "¿Me escuchas bien?" -short = "¿Me escuchas?" -polished = "Perdón, ¿me escuchas bien?" -meaning = "Você está me ouvindo bem?" -accept = ["¿Me oyes bien?"] - -[[phrase]] -topic = "trabalho" -situation = "Discorda, mas com educação." -say = "Entiendo, pero no estoy seguro de que funcione" -short = "No estoy seguro" -polished = "Entiendo tu punto, pero no estoy del todo seguro de que funcione" -meaning = "Entendo, mas não tenho certeza de que funcione" - -# ---------------------------------------------------------------- viaje - -[[phrase]] -topic = "viagem" -situation = "Você chegou no hotel." -say = "Tengo una reserva a mi nombre" -short = "Tengo una reserva" -polished = "Hola, tengo una reserva a mi nombre" -meaning = "Tenho uma reserva no meu nome" - -[[phrase]] -topic = "viagem" -situation = "Quer saber se o café da manhã está incluso." -say = "¿El desayuno está incluido?" -short = "¿Incluye desayuno?" -polished = "¿Me podría decir si el desayuno está incluido?" -meaning = "O café da manhã está incluso?" -accept = ["¿Está incluido el desayuno?"] - -[[phrase]] -topic = "viagem" -situation = "Sua mala não apareceu." -say = "Mi maleta no llegó" -polished = "Disculpe, mi maleta no llegó" -meaning = "Minha mala não chegou" - -[[phrase]] -topic = "viagem" -situation = "Está perdido procurando o metrô." -say = "¿Cómo llego a la estación de metro?" -short = "¿El metro?" -polished = "Disculpe, ¿cómo llego a la estación de metro?" -meaning = "Como eu chego na estação de metrô?" - -[[phrase]] -topic = "viagem" -situation = "Quer saber quanto tempo leva até o centro." -say = "¿Cuánto se tarda en llegar al centro?" -short = "¿Está lejos el centro?" -polished = "Disculpe, ¿sabe cuánto se tarda en llegar al centro?" -meaning = "Quanto tempo leva pra chegar no centro?" -accept = ["¿Cuánto tiempo se tarda al centro?"] - -[[phrase]] -topic = "viagem" -situation = "Na imigração, perguntam o motivo da viagem." -say = "Estoy de vacaciones" -polished = "Estoy aquí de vacaciones por una semana" -meaning = "Estou de férias" -accept = ["Vengo de vacaciones"] - -[[phrase]] -topic = "viagem" -situation = "Quer um táxi pra ir ao aeroporto." -say = "¿Me puede pedir un taxi al aeropuerto?" -short = "Un taxi, por favor" -polished = "¿Sería tan amable de pedirme un taxi al aeropuerto?" -meaning = "Pode me chamar um táxi pro aeroporto?" - -# ---------------------------------------------------------------- restaurante - -[[phrase]] -topic = "restaurante" -situation = "Terminou de comer e quer pagar." -say = "La cuenta, por favor" -polished = "Cuando pueda, ¿nos trae la cuenta, por favor?" -meaning = "A conta, por favor" -accept = ["¿Me trae la cuenta, por favor?"] - -[[phrase]] -topic = "restaurante" -situation = "Quer levar a comida." -say = "¿Me lo pone para llevar?" -short = "Para llevar" -polished = "¿Me lo pone para llevar, por favor?" -meaning = "Pode embalar pra viagem?" -accept = ["Para llevar, por favor"] - -[[phrase]] -topic = "restaurante" -situation = "Tem alergia a nozes." -say = "Soy alérgico a los frutos secos" -short = "Sin frutos secos" -polished = "Para que lo sepa, soy alérgico a los frutos secos" -meaning = "Sou alérgico a nozes e castanhas" - -[[phrase]] -topic = "restaurante" -situation = "Não sabe o que pedir." -say = "¿Qué me recomienda?" -polished = "¿Qué me recomendaría usted?" -meaning = "O que você me recomenda?" -accept = ["¿Qué me recomiendas?"] - -[[phrase]] -topic = "restaurante" -situation = "Chegou com um amigo." -say = "Una mesa para dos, por favor" -short = "Para dos" -polished = "Buenas, ¿tiene una mesa para dos, por favor?" -meaning = "Uma mesa pra dois, por favor" - -[[phrase]] -topic = "restaurante" -situation = "Quer saber se aceitam cartão." -say = "¿Aceptan tarjeta?" -polished = "¿Se puede pagar con tarjeta?" -meaning = "Vocês aceitam cartão?" -accept = ["¿Se puede pagar con tarjeta?"] - -# ---------------------------------------------------------------- compras - -[[phrase]] -topic = "compras" -situation = "O vendedor oferece ajuda, mas você só está olhando." -say = "Solo estoy mirando, gracias" -short = "Solo miro" -polished = "Solo estoy mirando por ahora, muchas gracias" -meaning = "Só estou olhando, obrigado" - -[[phrase]] -topic = "compras" -situation = "Quer provar uma roupa." -say = "¿Me lo puedo probar?" -polished = "¿Le importa si me lo pruebo?" -meaning = "Posso experimentar?" -accept = ["¿Puedo probármelo?"] - -[[phrase]] -topic = "compras" -situation = "Precisa de outro tamanho." -say = "¿Lo tiene en una talla más grande?" -short = "¿Una talla más?" -polished = "Disculpe, ¿lo tiene en una talla más grande?" -meaning = "Tem num tamanho maior?" -tip = "Tamanho de roupa é 'talla'; de sapato, 'número'." - -[[phrase]] -topic = "compras" -situation = "Quer devolver um produto." -say = "Quiero devolver esto" -polished = "Hola, me gustaría devolver esto, por favor" -meaning = "Quero devolver isso" - -# ---------------------------------------------------------------- salud - -[[phrase]] -topic = "saúde" -situation = "Você não está bem." -say = "Necesito ver a un médico" -short = "Necesito un médico" -polished = "Creo que necesito ver a un médico, por favor" -meaning = "Preciso ver um médico" - -[[phrase]] -topic = "saúde" -situation = "Mostre onde dói." -say = "Me duele aquí" -polished = "Me duele justo aquí" -meaning = "Dói aqui" - -[[phrase]] -topic = "saúde" -situation = "Na farmácia, dor de cabeça." -say = "¿Tiene algo para el dolor de cabeza?" -short = "¿Algo para la cabeza?" -polished = "¿Me podría recomendar algo para el dolor de cabeza?" -meaning = "Tem algo pra dor de cabeça?" - -[[phrase]] -topic = "saúde" -situation = "Conte desde quando está mal." -say = "Me siento mal desde ayer" -short = "Me siento mal" -polished = "Me siento bastante mal desde ayer por la mañana" -meaning = "Estou me sentindo mal desde ontem" - -# ---------------------------------------------------------------- social - -[[phrase]] -topic = "social" -situation = "Perguntam de onde você é." -say = "Soy de Brasil" -polished = "Soy de Brasil, de São Paulo" -meaning = "Sou do Brasil" - -[[phrase]] -topic = "social" -situation = "Quer saber com o que a pessoa trabalha." -say = "¿A qué te dedicas?" -polished = "Y tú, ¿a qué te dedicas?" -meaning = "Com o que você trabalha?" -tip = "Muito mais natural que '¿Cuál es tu trabajo?'." - -[[phrase]] -topic = "social" -situation = "A pessoa fala rápido demais." -say = "¿Puedes hablar más despacio?" -short = "Más despacio, por favor" -polished = "Perdón, ¿puedes hablar un poco más despacio?" -meaning = "Você pode falar mais devagar?" -accept = ["¿Podrías hablar más despacio?", "Más despacio, por favor"] - -[[phrase]] -topic = "social" -situation = "Não sabe uma palavra." -say = "¿Cómo se dice esto en español?" -short = "¿Cómo se dice?" -polished = "Perdona, ¿me podrías decir cómo se dice esto en español?" -meaning = "Como se diz isso em espanhol?" - -[[phrase]] -topic = "social" -situation = "Alguém pede desculpas por algo pequeno." -say = "No pasa nada" -short = "Tranqui" -polished = "No te preocupes, no pasa nada" -meaning = "Não tem problema" -accept = ["No te preocupes"] - -[[phrase]] -topic = "social" -situation = "Um amigo pergunta se você está chegando." -say = "Ya voy en camino" -short = "Ya voy" -polished = "Ya voy en camino, nos vemos pronto" -meaning = "Já estou a caminho" -accept = ["Voy en camino"] - -[[phrase]] -topic = "social" -situation = "Está indo embora da festa." -say = "Me encantó verte" -polished = "Me encantó mucho volver a verte" -meaning = "Adorei te ver" -accept = ["Qué bueno verte"] - -# ---------------------------------------------------------------- teléfono - -[[phrase]] -topic = "telefone" -situation = "A pessoa que você procura não está." -say = "¿Puedo dejar un mensaje?" -polished = "¿Podría dejarle un mensaje, por favor?" -meaning = "Posso deixar um recado?" - -[[phrase]] -topic = "telefone" -situation = "Ligou pro número errado." -say = "Perdón, creo que me equivoqué de número" -short = "Número equivocado, perdón" -polished = "Disculpe la molestia, creo que me equivoqué de número" -meaning = "Desculpa, acho que liguei errado" - -# ---------------------------------------------------------------- emergencia - -[[phrase]] -topic = "emergência" -situation = "Aconteceu um acidente." -say = "Llame a una ambulancia, por favor" -short = "Una ambulancia" -polished = "Por favor, ¡que alguien llame a una ambulancia ya!" -meaning = "Chame uma ambulância, por favor" -accept = ["Llamen a una ambulancia"] - -[[phrase]] -topic = "emergência" -situation = "Perdeu o passaporte." -say = "Perdí mi pasaporte" -polished = "Disculpe, perdí mi pasaporte" -meaning = "Perdi meu passaporte" - -[[phrase]] -topic = "emergência" -situation = "Precisa de ajuda na rua." -say = "¿Me puede ayudar, por favor?" -short = "Ayuda, por favor" -polished = "Disculpe, ¿me podría ayudar, por favor?" -meaning = "Pode me ajudar, por favor?" -accept = ["¿Me puedes ayudar?", "Ayúdeme, por favor"] - -# ---------------------------------------------------------------- work, A1 and A2 (pre-A1 is in basics) - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Seu celular toca durante a reunião e você atende rapidinho pra avisar." -say = "Estoy en una reunión." -polished = "Perdón, ahora estoy en una reunión." -meaning = "Estou numa reunião." -accept = ["Estoy en reunión"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Um colega chega na sua mesa enquanto você está numa ligação." -say = "Estoy en una llamada." -short = "En una llamada." -polished = "Perdona, ahora mismo estoy en una llamada." -meaning = "Estou numa ligação." -accept = ["Estoy al teléfono"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Na festa da empresa, alguém de outra área pergunta o que você faz." -say = "Trabajo en informática." -short = "En informática." -polished = "Trabajo en informática, en el equipo de software." -meaning = "Trabalho com TI." -accept = ["Trabajo en tecnología", "Trabajo en sistemas"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Um colega pergunta a que horas é a reunião de hoje." -say = "La reunión es a las diez." -short = "A las diez." -polished = "La reunión es a las diez, en la sala grande." -meaning = "A reunião é às dez." -accept = ["Es a las diez"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Primeiro dia no escritório, você procura onde vai ser a reunião." -say = "¿Dónde está la sala de reuniones?" -short = "¿La sala de reuniones?" -polished = "Disculpa, ¿me podrías decir dónde está la sala de reuniones?" -meaning = "Onde fica a sala de reunião?" -accept = ["¿Dónde es la sala de reuniones?"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Na call, o cliente falou rápido e você não pegou o número do pedido." -say = "¿Puede repetir, por favor?" -short = "¿Cómo?" -polished = "Perdón, ¿lo puede repetir, por favor?" -meaning = "Pode repetir, por favor?" -accept = ["¿Puedes repetir, por favor?"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Um cliente chega e você apresenta a pessoa que coordena o seu time." -say = "Este es mi jefe." -short = "Mi jefe." -polished = "Le presento a mi jefe." -meaning = "Esse é o meu gerente." -accept = ["Esta es mi jefa"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "No fim da apresentação, perguntam se alguém tem dúvidas, e você tem." -say = "Tengo una pregunta." -short = "Una pregunta." -polished = "Perdón, tengo una pregunta, si me permiten." -meaning = "Tenho uma pergunta." -accept = ["Tengo una duda"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Você acorda com febre e avisa o time no chat que não vai trabalhar." -say = "Hoy estoy enfermo." -short = "Estoy enfermo." -polished = "Hola a todos, hoy estoy enfermo y no voy a trabajar." -meaning = "Estou doente hoje." -accept = ["Hoy estoy enferma", "Estoy enfermo hoy"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Um colega passou meia hora te ajudando a configurar o notebook." -say = "Gracias por tu ayuda." -short = "Gracias." -polished = "Muchas gracias por toda tu ayuda." -meaning = "Obrigado pela ajuda." -accept = ["Gracias por su ayuda"] - -[[phrase]] -topic = "trabalho" -level = "A1" -situation = "Sexta à tarde, você sai do escritório e se despede do time." -say = "Nos vemos el lunes." -short = "Hasta el lunes." -polished = "Buen fin de semana, nos vemos el lunes." -meaning = "Até segunda." -accept = ["Hasta el lunes"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Um colega quer conversar, mas você está no meio de uma entrega." -say = "¿Hablamos después del almuerzo?" -polished = "¿Te parece si hablamos después del almuerzo?" -meaning = "Podemos conversar depois do almoço?" -accept = ["¿Podemos hablar después de comer?"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "O cliente pergunta quando vai receber a proposta." -say = "Hoy te mando el correo." -short = "Hoy te lo mando." -polished = "Le mando el correo hoy antes de que termine el día." -meaning = "Mando o e-mail hoje." -accept = ["Te envío el correo hoy"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Um colega pergunta se você vai ao escritório hoje." -say = "Hoy trabajo desde casa." -short = "Teletrabajo hoy." -polished = "Hoy trabajo desde casa, pero estoy conectado si me necesitas." -meaning = "Hoje estou trabalhando de casa." -accept = ["Hoy trabajo en remoto"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "A reunião já começou e você não acha o convite na agenda." -say = "¿Me mandas el enlace?" -short = "¿El enlace?" -polished = "¿Me podrías mandar el enlace, por favor?" -meaning = "Pode me mandar o link?" -accept = ["¿Me puedes enviar el enlace?"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Você entra atrasado na call e explica o motivo." -say = "No me funciona internet." -short = "Sin internet." -polished = "Perdón por el retraso, no me funciona internet." -meaning = "Minha internet caiu." -accept = ["Se me cayó internet"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Na call, o som do colega some de repente." -say = "No te oigo." -polished = "Perdón, no te oigo muy bien." -meaning = "Não estou te ouvindo." -accept = ["No te escucho", "No lo escucho"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Você avisa um colega que a reunião de quarta mudou de dia." -say = "La reunión se movió al viernes." -short = "Pasó al viernes." -polished = "Te aviso de que la reunión se movió al viernes." -meaning = "A reunião mudou pra sexta." -accept = ["Cambiaron la reunión al viernes"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "O trânsito parou e você avisa no chat que vai chegar atrasado." -say = "Llego cinco minutos tarde." -polished = "Perdón, llego unos cinco minutos tarde." -meaning = "Vou atrasar cinco minutos." -accept = ["Voy a llegar cinco minutos tarde"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Você quer marcar uma conversa com um cliente e pergunta o melhor horário." -say = "¿A qué hora te viene bien?" -short = "¿Cuándo puedes?" -polished = "¿A qué hora te vendría mejor?" -meaning = "Que horário fica bom pra você?" -accept = ["¿Qué hora te queda bien?"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "O chefe pergunta como está o relatório do mês." -say = "Terminé el informe." -short = "Informe listo." -polished = "Terminé el informe, ahora mismo se lo envío." -meaning = "Terminei o relatório." -accept = ["Ya terminé el informe"] - -[[phrase]] -topic = "trabalho" -level = "A2" -situation = "Você combina com um colega de revisar o projeto juntos." -say = "Nos vemos mañana a las nueve." -short = "Mañana a las nueve." -polished = "¿Te parece si nos vemos mañana a las nueve?" -meaning = "Vamos nos ver amanhã às nove." -accept = ["Quedamos mañana a las nueve"] diff --git a/decks/es/deck.toml b/decks/es/deck.toml new file mode 100644 index 0000000..406b2c0 --- /dev/null +++ b/decks/es/deck.toml @@ -0,0 +1,36 @@ +language = "es" +native = "pt-BR" +language_name = "espanhol" +title = "Espanhol pra vida real" + + +[[tip]] +text = "Falso amigo: 'embarazada' é GRÁVIDA, não envergonhada (avergonzada)." +[[tip]] +text = "Falso amigo: 'exquisito' é delicioso, elogio! Não é esquisito." +[[tip]] +text = "Falso amigo: 'oficina' é escritório. Oficina mecânica é 'taller'." +[[tip]] +text = "Falso amigo: 'polvo' é poeira. O animal é 'pulpo'." +[[tip]] +text = "Falso amigo: 'rato' é um momento. O bicho é 'ratón'." +[[tip]] +text = "Falso amigo: 'apellido' é sobrenome, não apelido (apodo)." +[[tip]] +text = "Falso amigo: 'propina' é gorjeta. Não é crime!" +[[tip]] +text = "Falso amigo: 'cena' é jantar. A cena do filme é 'escena'." +[[tip]] +text = "Pronúncia: o 'j' e o 'g' antes de e/i soam como um 'rr' forte: 'jamón'." +[[tip]] +text = "Pronúncia: 'll' e 'y' soam parecido com 'j' ou 'i': 'calle' = 'caje'." +[[tip]] +text = "Pronúncia: não nasalize! 'Pan' não é 'pão': fale o 'n' no fim." +[[tip]] +text = "Pronúncia: o 'z' e o 'c' (antes de e/i) viram 'th' na Espanha e 's' na América." +[[tip]] +text = "Em espanhol se 'tem' fome e frio: tengo hambre, tengo frío." +[[tip]] +text = "'Usted' é o formal. Use com pessoas mais velhas e no trabalho." +[[tip]] +text = "No clima usa-se 'hace': hace frío, hace calor, hace sol." diff --git a/decks/es/emergency.toml b/decks/es/emergency.toml new file mode 100644 index 0000000..249941a --- /dev/null +++ b/decks/es/emergency.toml @@ -0,0 +1,152 @@ +# decks/es: emergência. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "emergência" +situation = "Aconteceu um acidente." +say = "Llame a una ambulancia, por favor" +short = "Una ambulancia" +polished = "Por favor, ¡que alguien llame a una ambulancia ya!" +meaning = "Chame uma ambulância, por favor" +accept = ["Llamen a una ambulancia"] + +[[phrase]] +topic = "emergência" +situation = "Perdeu o passaporte." +say = "Perdí mi pasaporte" +polished = "Disculpe, perdí mi pasaporte" +meaning = "Perdi meu passaporte" + +[[phrase]] +topic = "emergência" +situation = "Precisa de ajuda na rua." +say = "¿Me puede ayudar, por favor?" +short = "Ayuda, por favor" +polished = "Disculpe, ¿me podría ayudar, por favor?" +meaning = "Pode me ajudar, por favor?" +accept = ["¿Me puedes ayudar?", "Ayúdeme, por favor"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você vê fumaça saindo da cozinha do restaurante." +say = "¡Hay un incendio!" +short = "¡Fuego!" +polished = "¡Hay un incendio, salgan todos!" +meaning = "Está pegando fogo!" +accept = ["Hay fuego"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você saiu do metrô numa cidade que não conhece e não sabe voltar." +say = "No encuentro mi hotel." +polished = "Disculpe, no encuentro mi hotel." +meaning = "Não consigo achar meu hotel." +accept = ["No puedo encontrar mi hotel"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Você volta para a mesa do café e sua mochila sumiu." +say = "Me robaron la mochila." +short = "¡Mi mochila!" +polished = "Disculpe, me acaban de robar la mochila." +meaning = "Roubaram minha mochila." +accept = ["Me han robado la mochila", "Se llevaron mi mochila"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Uma pessoa passa mal e cai ao seu lado na rua." +say = "Necesitamos un médico." +short = "¡Un médico!" +polished = "Necesitamos un médico aquí, ¡rápido, por favor!" +meaning = "Precisamos de um médico." + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Seu amigo se machucou e você para um táxi na rua." +say = "Necesito ir a un hospital." +short = "¡Al hospital, rápido!" +polished = "Por favor, necesito ir a un hospital ahora mismo." +meaning = "Preciso ir a um hospital." +accept = ["Necesito ir al hospital", "Tengo que ir a un hospital"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Seu amigo caiu da bicicleta e não consegue levantar." +say = "Mi amigo está herido." +short = "¡Está herido!" +polished = "Ayuda, por favor, mi amigo está muy herido." +meaning = "Meu amigo está machucado." +accept = ["Mi amigo está lastimado", "Mi amiga está herida"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Você liga para a emergência e perguntam onde você está." +say = "No sé la dirección." +short = "No sé." +polished = "Lo siento, no sé la dirección exacta." +meaning = "Não sei o endereço." + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Seu celular descarregou e você precisa avisar a família." +say = "¿Puedo usar tu teléfono?" +short = "¿Tu teléfono, por favor?" +polished = "Perdón, ¿podría usar tu teléfono un minuto?" +meaning = "Posso usar seu celular?" +accept = ["¿Puedo usar tu celular?", "¿Me prestas tu teléfono?"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "A porta bateu e a chave ficou dentro do apartamento." +say = "Me quedé afuera sin llaves." +short = "Me quedé afuera." +polished = "Me quedé afuera de mi departamento sin llaves." +meaning = "Fiquei trancado pra fora." +accept = ["Me quedé fuera sin llaves", "Dejé las llaves adentro"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Depois de uma batida leve de carro, você desce pra ver as pessoas." +say = "¿Están todos bien?" +short = "¿Todos bien?" +polished = "¿Están todos bien? ¿Hay algún herido?" +meaning = "Está todo mundo bem?" + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Na delegacia, depois que levaram sua mochila." +say = "Necesito denunciar un robo." +short = "Me robaron." +polished = "Hola, quisiera denunciar un robo, por favor." +meaning = "Preciso registrar um furto." +accept = ["Quiero denunciar un robo", "Quiero poner una denuncia"] +tip = "'Denunciar' é fazer o boletim de ocorrência." + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Seu cartão sumiu e você liga para o banco." +say = "Necesito cancelar mi tarjeta." +short = "Cancele mi tarjeta." +polished = "Perdí mi tarjeta y necesito cancelarla." +meaning = "Preciso cancelar meu cartão." +accept = ["Necesito bloquear mi tarjeta", "Quiero cancelar mi tarjeta"] + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Um homem desmaiou e você fala com a emergência ao telefone." +say = "No respira." +polished = "¡Rápido, por favor, no respira!" +meaning = "Ele não está respirando." +accept = ["No está respirando"] diff --git a/decks/es/first-contact.toml b/decks/es/first-contact.toml new file mode 100644 index 0000000..bb2a8d3 --- /dev/null +++ b/decks/es/first-contact.toml @@ -0,0 +1,80 @@ +# decks/es: primeiros contatos. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você trava no meio da frase conversando com um desconhecido." +say = "Estoy aprendiendo español." +short = "Estoy aprendiendo." +polished = "Todavía estoy aprendiendo español, ten paciencia." +meaning = "Estou aprendendo espanhol." +accept = ["Todavía estoy aprendiendo español"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Um vizinho pergunta há quanto tempo você está na cidade." +say = "Me mudé aquí el año pasado." +short = "El año pasado." +polished = "Me mudé aquí el año pasado por trabajo." +meaning = "Me mudei pra cá no ano passado." +accept = ["Llegué aquí el año pasado", "Me mudé acá el año pasado"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você conversa com alguém na fila da padaria do bairro." +say = "¿Vives por aquí?" +polished = "Oye, ¿vives por aquí cerca?" +meaning = "Você mora por aqui?" +accept = ["¿Vives cerca de aquí?", "¿Vives por acá?"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "Você se despede de alguém que conheceu hoje num jantar." +say = "Fue un gusto conocerte." +short = "Un gusto." +polished = "De verdad, fue un gusto conocerte." +meaning = "Foi um prazer te conhecer." +accept = ["Fue un placer conocerte", "Encantado de conocerte", "Encantada de conocerte"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Um colega novo conta que veio de outro país." +say = "¿Qué te trajo por aquí?" +polished = "Cuéntame, ¿qué te trajo a esta ciudad?" +meaning = "O que te trouxe pra cá?" +accept = ["¿Qué te trae por aquí?", "¿Qué te trajo aquí?"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Você conhece alguém do bairro numa festa de vizinhos." +say = "¿Cuánto tiempo llevas viviendo aquí?" +short = "¿Cuánto tiempo llevas?" +polished = "Oye, ¿cuánto tiempo llevas viviendo aquí?" +meaning = "Há quanto tempo você mora aqui?" +accept = ["¿Cuánto tiempo llevas aquí?", "¿Hace cuánto vives aquí?"] +tip = "'Llevar' + tempo = há quanto tempo: 'llevo dos años aquí'." + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Perguntam como está sendo a vida na cidade nova." +say = "Todavía me estoy acostumbrando." +short = "Me estoy acostumbrando." +polished = "La verdad, todavía me estoy acostumbrando." +meaning = "Ainda estou me acostumando." +accept = ["Aún me estoy acostumbrando", "Todavía estoy acostumbrándome"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "No último dia do curso, você se despede de um colega." +say = "Tenemos que seguir en contacto." +short = "Seguimos en contacto." +polished = "De verdad, tenemos que seguir en contacto." +meaning = "A gente precisa manter contato." +accept = ["Hay que seguir en contacto", "Tenemos que mantener el contacto"] diff --git a/decks/es/health-and-social.toml b/decks/es/health-and-social.toml new file mode 100644 index 0000000..f020eac --- /dev/null +++ b/decks/es/health-and-social.toml @@ -0,0 +1,42 @@ +# decks/es: saúde e social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Um amigo nota que você anda quieto e pergunta se está tudo bem." +say = "Últimamente ando muy estresado." +short = "Ando estresado." +polished = "La verdad, últimamente ando muy estresado." +meaning = "Ando muito estressado ultimamente." +accept = ["Últimamente ando muy estresada", "Últimamente estoy muy estresado", "Últimamente estoy muy estresada"] +tip = "'Andar' + adjetivo = como você tem estado: 'ando cansado'." + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Um colega te chama pra sair tarde numa terça-feira." +say = "Estoy tratando de dormir más." +short = "Necesito dormir más." +polished = "Estos días estoy tratando de dormir más." +meaning = "Estou tentando dormir mais." +accept = ["Estoy intentando dormir más"] + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Seu amigo está exausto e não para de trabalhar." +say = "Deberías tomarte un día libre." +short = "Tómate un día libre." +polished = "De verdad creo que deberías tomarte un día libre." +meaning = "Você devia tirar um dia de folga." +accept = ["Deberías tomar un día libre", "Tendrías que tomarte un día libre"] + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Uma amiga está doente em casa, sozinha." +say = "Avísame si necesitas algo." +short = "Avísame." +polished = "Por favor, avísame si necesitas cualquier cosa." +meaning = "Me avisa se precisar de alguma coisa." +accept = ["Dime si necesitas algo"] diff --git a/decks/es/health.toml b/decks/es/health.toml new file mode 100644 index 0000000..c043186 --- /dev/null +++ b/decks/es/health.toml @@ -0,0 +1,174 @@ +# decks/es: saúde. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde" +situation = "Você não está bem." +say = "Necesito ver a un médico" +short = "Necesito un médico" +polished = "Creo que necesito ver a un médico, por favor" +meaning = "Preciso ver um médico" + +[[phrase]] +topic = "saúde" +situation = "Mostre onde dói." +say = "Me duele aquí" +polished = "Me duele justo aquí" +meaning = "Dói aqui" + +[[phrase]] +topic = "saúde" +situation = "Na farmácia, dor de cabeça." +say = "¿Tiene algo para el dolor de cabeza?" +short = "¿Algo para la cabeza?" +polished = "¿Me podría recomendar algo para el dolor de cabeza?" +meaning = "Tem algo pra dor de cabeça?" + +[[phrase]] +topic = "saúde" +situation = "Conte desde quando está mal." +say = "Me siento mal desde ayer" +short = "Me siento mal" +polished = "Me siento bastante mal desde ayer por la mañana" +meaning = "Estou me sentindo mal desde ontem" + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você mede a temperatura e o termômetro mostra trinta e nove." +say = "Tengo fiebre." +short = "Fiebre." +polished = "Creo que tengo fiebre." +meaning = "Estou com febre." +tip = "Em espanhol você 'tem' febre: 'tengo fiebre', nunca 'estoy con fiebre'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Na farmácia, a atendente pergunta o que você está sentindo." +say = "Me duele la garganta." +short = "La garganta." +polished = "Me duele mucho la garganta." +meaning = "Estou com dor de garganta." +accept = ["Tengo dolor de garganta"] + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você não para de tossir e vai à farmácia." +say = "Necesito algo para la tos." +short = "¿Algo para la tos?" +polished = "¿Tiene algo para una tos fuerte?" +meaning = "Preciso de algo pra tosse." +accept = ["Quiero algo para la tos"] + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Antes de receitar, o médico pergunta se você tem alguma alergia." +say = "Soy alérgico a la penicilina." +short = "A la penicilina." +polished = "Sí, soy alérgico a la penicilina." +meaning = "Sou alérgico a penicilina." +accept = ["Soy alérgica a la penicilina", "Tengo alergia a la penicilina"] + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Você cortou o dedo cozinhando na casa de um amigo." +say = "¿Tienes una curita?" +polished = "Perdona, ¿tienes una curita?" +meaning = "Você tem um band-aid?" +accept = ["¿Tienes una tirita?", "¿Tiene una curita?"] +tip = "'Curita' na América Latina; na Espanha é 'tirita'." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você liga para a clínica logo cedo, sem horário marcado." +say = "¿Me puede ver un médico hoy?" +short = "¿Un médico hoy?" +polished = "¿Sería posible que me viera un médico hoy?" +meaning = "Consigo passar com um médico hoje?" +accept = ["¿Puedo ver a un médico hoy?"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O médico pergunta desde quando você está com dor." +say = "Empezó hace dos días." +short = "Hace dos días." +polished = "Empezó hace unos dos días." +meaning = "Começou há dois dias." +tip = "'Hace dos días' = há dois dias. O 'hace' vem antes do tempo." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você levanta rápido demais e tudo começa a girar." +say = "Estoy mareado." +polished = "Estoy mareado desde esta mañana." +meaning = "Estou tonto." +accept = ["Estoy mareada", "Me siento mareado", "Me siento mareada"] +tip = "'Mareado' é tonto ou enjoado." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "Você pisou em falso jogando bola e o pé inchou." +say = "Creo que me torcí el tobillo." +short = "Me torcí el tobillo." +polished = "Me parece que me torcí el tobillo." +meaning = "Acho que torci o tornozelo." +accept = ["Creo que me doblé el tobillo"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O farmacêutico te entrega o remédio e você não sabe a dose." +say = "¿Cada cuánto debo tomarlo?" +short = "¿Cada cuánto?" +polished = "Disculpe, ¿cada cuánto debo tomarlo?" +meaning = "De quanto em quanto tempo devo tomar?" +accept = ["¿Cada cuánto lo tomo?", "¿Cada cuánto tengo que tomarlo?"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "O médico pergunta se você toma algum remédio todo dia." +say = "No tomo ningún medicamento." +short = "Ningún medicamento." +polished = "No, no tomo ningún medicamento por ahora." +meaning = "Não estou tomando nenhum remédio." +accept = ["No tomo ninguna medicina"] + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Seu remédio de uso contínuo acabou e você vai ao médico." +say = "Necesito renovar mi receta." +short = "Renovar mi receta." +polished = "Hola, necesito renovar mi receta, por favor." +meaning = "Preciso renovar minha receita." +tip = "'Receta' serve pra médico e pra cozinha, igual em português." + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Na recepção da clínica, antes de fazer um exame caro." +say = "¿Mi seguro cubre esto?" +short = "¿Esto está cubierto?" +polished = "¿Me podría decir si mi seguro cubre esto?" +meaning = "Meu plano cobre isso?" +accept = ["¿Esto lo cubre mi seguro?"] +tip = "'Seguro' (médico) é o plano de saúde." + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Você liga para o dentista pedindo um encaixe urgente." +say = "Me duele mucho una muela." +short = "Una muela." +polished = "Me duele mucho una muela desde anoche." +meaning = "Estou com muita dor de dente." +accept = ["Tengo un dolor de muelas terrible"] +tip = "'Muela' é o dente de trás; dente em geral é 'diente'." diff --git a/decks/es/home-and-paperwork.toml b/decks/es/home-and-paperwork.toml new file mode 100644 index 0000000..d6058a5 --- /dev/null +++ b/decks/es/home-and-paperwork.toml @@ -0,0 +1,83 @@ +# decks/es: casa e burocracia. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "A internet do apartamento alugado caiu e você escreve ao dono." +say = "El wifi no funciona." +short = "No hay wifi." +polished = "Hola, el wifi no funciona en mi departamento." +meaning = "O wi-fi não está funcionando." +accept = ["No funciona el wifi", "El internet no funciona"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "Primeira semana no prédio novo, você encontra um vizinho no corredor." +say = "¿Dónde saco la basura?" +short = "¿Dónde va la basura?" +polished = "Perdón, ¿dónde tengo que sacar la basura?" +meaning = "Onde eu coloco o lixo?" +accept = ["¿Dónde se saca la basura?", "¿Dónde tiro la basura?"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "No balcão do banco, a atendente pergunta em que pode ajudar." +say = "Quiero retirar dinero." +polished = "Hola, quisiera retirar dinero, por favor." +meaning = "Queria sacar dinheiro." +accept = ["Quiero sacar dinero", "Quisiera retirar dinero"] +tip = "'Retirar' ou 'sacar' dinero = sacar dinheiro." + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "A feira só aceita dinheiro e você está sem nenhum." +say = "¿Hay un cajero cerca?" +short = "¿Un cajero?" +polished = "Disculpe, ¿hay un cajero automático cerca?" +meaning = "Tem um caixa eletrônico por aqui?" +accept = ["¿Hay un cajero automático cerca?", "¿Hay un cajero por aquí?"] +tip = "'Cajero' (automático) é o caixa eletrônico." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "A pia da cozinha pinga a noite toda e você avisa o proprietário." +say = "Hay una fuga de agua." +short = "Hay una fuga." +polished = "Hola, hay una fuga de agua en la cocina." +meaning = "Tem um vazamento de água." +accept = ["Hay una gotera", "Tengo una fuga de agua"] + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "O caixa eletrônico não devolveu seu cartão e você entra na agência." +say = "El cajero se tragó mi tarjeta." +short = "Se tragó mi tarjeta." +polished = "Disculpe, el cajero se tragó mi tarjeta." +meaning = "O caixa eletrônico engoliu meu cartão." +accept = ["El cajero se quedó con mi tarjeta"] + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "Você chega ao guichê com a conta de luz na mão." +say = "Necesito pagar esta factura." +short = "Pagar esto, por favor." +polished = "Hola, necesito pagar esta factura, por favor." +meaning = "Preciso pagar essa conta." +accept = ["Quiero pagar esta factura", "Necesito pagar este recibo"] +tip = "'Factura' é a conta de luz, água, telefone. 'Cuenta' serve pra restaurante e banco." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "Primeiro mês no apartamento, você escreve ao proprietário." +say = "¿Cuándo se paga el alquiler?" +short = "¿Cuándo se paga?" +polished = "¿Me recuerda cuándo se paga el alquiler?" +meaning = "Quando vence o aluguel?" +accept = ["¿Cuándo vence el alquiler?", "¿Cuándo se paga la renta?"] diff --git a/decks/es/phone.toml b/decks/es/phone.toml new file mode 100644 index 0000000..9db7a4d --- /dev/null +++ b/decks/es/phone.toml @@ -0,0 +1,155 @@ +# decks/es: telefone. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "telefone" +situation = "A pessoa que você procura não está." +say = "¿Puedo dejar un mensaje?" +polished = "¿Podría dejarle un mensaje, por favor?" +meaning = "Posso deixar um recado?" + +[[phrase]] +topic = "telefone" +situation = "Ligou pro número errado." +say = "Perdón, creo que me equivoqué de número" +short = "Número equivocado, perdón" +polished = "Disculpe la molestia, creo que me equivoqué de número" +meaning = "Desculpa, acho que liguei errado" + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Você atende o telefone e não reconhece a voz." +say = "¿Quién habla, por favor?" +short = "¿Quién habla?" +polished = "Disculpe, ¿con quién hablo, por favor?" +meaning = "Quem está falando, por favor?" +accept = ["¿Quién es, por favor?", "¿De parte de quién?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "A ligação está baixa e você não escuta a pessoa." +say = "No te escucho." +short = "No escucho." +polished = "Perdón, no te escucho muy bien." +meaning = "Não estou te ouvindo." +accept = ["No te oigo"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Você liga para a casa de uma amiga e outra pessoa atende." +say = "¿Puedo hablar con Ana?" +short = "Con Ana, por favor." +polished = "Hola, ¿podría hablar con Ana, por favor?" +meaning = "Posso falar com a Ana?" +accept = ["¿Podría hablar con Ana?", "¿Está Ana?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "A campainha toca no meio da ligação e você precisa ir abrir a porta." +say = "Espera un segundo." +short = "Espera." +polished = "¿Puedes esperar un segundo, por favor?" +meaning = "Espera um segundo." +accept = ["Espérame un segundo", "Dame un segundo"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "Um amigo liga bem na hora em que você está entrando no ônibus." +say = "Te devuelvo la llamada." +short = "Te llamo luego." +polished = "¿Te puedo devolver la llamada en diez minutos?" +meaning = "Eu te ligo de volta." +accept = ["Te llamo después", "Luego te llamo"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Você liga para o consultório para marcar uma consulta." +say = "Quiero pedir una cita." +short = "Una cita, por favor." +polished = "Hola, quisiera pedir una cita, por favor." +meaning = "Gostaria de marcar um horário." +accept = ["Quisiera pedir una cita", "Quiero sacar una cita"] +tip = "'Cita' é horário marcado ou encontro. Citação de livro também é 'cita'." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "A atendente ditou o telefone rápido demais pra você anotar." +say = "¿Puede repetir el número?" +short = "¿El número otra vez?" +polished = "Perdón, ¿puede repetir el número más despacio?" +meaning = "Pode repetir o número?" +accept = ["¿Me repite el número?"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "O sinal está ruim e a voz da pessoa fica sumindo." +say = "Se corta la llamada." +short = "Se corta." +polished = "Perdón, se corta la llamada, casi no te escucho." +meaning = "A ligação está cortando." +accept = ["Se está cortando", "Se entrecorta"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Um amigo explica onde é a festa, mas você prefere receber por escrito." +say = "¿Me mandas la dirección por mensaje?" +short = "Mándame la dirección." +polished = "¿Me podrías mandar la dirección por mensaje, por favor?" +meaning = "Pode me mandar o endereço por mensagem?" +tip = "Falso amigo: 'dirección' é endereço." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Seu amigo não atende e a ligação cai na caixa postal." +say = "Llámame cuando puedas." +short = "Llámame." +polished = "Hola, soy yo, llámame cuando puedas." +meaning = "Me liga quando puder." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "A atendente pergunta se você pode aguardar na linha." +say = "Claro, espero." +polished = "Claro, no hay problema, yo espero." +meaning = "Claro, eu aguardo." +accept = ["Sí, espero"] + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "A internet de casa caiu e você liga para o suporte." +say = "Llamo por mi conexión a internet." +short = "Es por mi internet." +polished = "Hola, llamo por un problema con mi conexión a internet." +meaning = "Estou ligando por causa da minha internet." +tip = "'Llamo por...' é o jeito padrão de dizer o motivo da ligação." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "A ligação caiu no meio da conversa e você liga de novo." +say = "Perdón, se cortó la llamada." +short = "Se cortó la llamada." +polished = "Perdón, creo que se cortó la llamada." +meaning = "Desculpa, a ligação caiu." +accept = ["Perdón, se cortó"] + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "Você está preso no menu automático e quer um atendente." +say = "¿Puedo hablar con una persona?" +short = "Con una persona, por favor." +polished = "¿Me podría comunicar con una persona, por favor?" +meaning = "Posso falar com um atendente de verdade?" +accept = ["¿Puedo hablar con un agente?", "Quiero hablar con una persona"] diff --git a/decks/es/restaurant.toml b/decks/es/restaurant.toml new file mode 100644 index 0000000..d4f4e46 --- /dev/null +++ b/decks/es/restaurant.toml @@ -0,0 +1,103 @@ +# decks/es: restaurante. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "restaurante" +situation = "Terminou de comer e quer pagar." +say = "La cuenta, por favor" +polished = "Cuando pueda, ¿nos trae la cuenta, por favor?" +meaning = "A conta, por favor" +accept = ["¿Me trae la cuenta, por favor?"] + +[[phrase]] +topic = "restaurante" +situation = "Quer levar a comida." +say = "¿Me lo pone para llevar?" +short = "Para llevar" +polished = "¿Me lo pone para llevar, por favor?" +meaning = "Pode embalar pra viagem?" +accept = ["Para llevar, por favor"] + +[[phrase]] +topic = "restaurante" +situation = "Tem alergia a nozes." +say = "Soy alérgico a los frutos secos" +short = "Sin frutos secos" +polished = "Para que lo sepa, soy alérgico a los frutos secos" +meaning = "Sou alérgico a nozes e castanhas" + +[[phrase]] +topic = "restaurante" +situation = "Não sabe o que pedir." +say = "¿Qué me recomienda?" +polished = "¿Qué me recomendaría usted?" +meaning = "O que você me recomenda?" +accept = ["¿Qué me recomiendas?"] + +[[phrase]] +topic = "restaurante" +situation = "Chegou com um amigo." +say = "Una mesa para dos, por favor" +short = "Para dos" +polished = "Buenas, ¿tiene una mesa para dos, por favor?" +meaning = "Uma mesa pra dois, por favor" + +[[phrase]] +topic = "restaurante" +situation = "Quer saber se aceitam cartão." +say = "¿Aceptan tarjeta?" +polished = "¿Se puede pagar con tarjeta?" +meaning = "Vocês aceitam cartão?" +accept = ["¿Se puede pagar con tarjeta?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "O garçom chega à mesa com o bloquinho na mão." +say = "Voy a pedir el pollo." +short = "El pollo, por favor." +polished = "Creo que voy a pedir el pollo, por favor." +meaning = "Vou querer o frango." +accept = ["Para mí, el pollo", "Yo quiero el pollo"] +tip = "Pra pedir: 'voy a pedir...' ou 'para mí, ...'." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "Vocês sentaram há dez minutos e ninguém trouxe o cardápio." +say = "¿Nos trae la carta?" +short = "La carta, por favor." +polished = "Disculpe, ¿nos podría traer la carta, por favor?" +meaning = "Pode trazer o cardápio?" +accept = ["¿Nos trae el menú?", "¿Nos puede traer la carta?"] +tip = "Falso amigo: 'la carta' é o cardápio. Também se diz 'el menú'." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "Você não aguenta pimenta e o prato tem um desenho de chama ao lado." +say = "¿Este plato pica?" +short = "¿Pica?" +polished = "Disculpe, ¿este plato pica mucho?" +meaning = "Esse prato é apimentado?" +accept = ["¿Este plato es picante?", "¿Es picante?"] +tip = "'Picar' = arder de pimenta. Apimentado é 'picante'." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "A comida chegou, mas esqueceram a sua bebida." +say = "¿Me trae agua, por favor?" +short = "Agua, por favor." +polished = "¿Me podría traer agua, por favor?" +meaning = "Pode me trazer uma água, por favor?" +accept = ["¿Me trae un vaso de agua, por favor?", "¿Me puede traer agua?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "O garçom tira os pratos e pergunta se estava tudo bom." +say = "Todo estuvo delicioso." +short = "Estuvo delicioso." +polished = "Todo estuvo delicioso, muchas gracias." +meaning = "Estava tudo delicioso." +accept = ["Todo estaba delicioso", "Todo estuvo muy rico"] diff --git a/decks/es/routine-and-transport.toml b/decks/es/routine-and-transport.toml new file mode 100644 index 0000000..5132d66 --- /dev/null +++ b/decks/es/routine-and-transport.toml @@ -0,0 +1,81 @@ +# decks/es: rotina e transporte. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "O ônibus está cheio e há uma bolsa no banco ao lado de alguém." +say = "¿Está ocupado este asiento?" +short = "¿Está ocupado?" +polished = "Disculpe, ¿está ocupado este asiento?" +meaning = "Esse lugar está ocupado?" +accept = ["¿Este asiento está ocupado?", "¿Está libre este asiento?"] + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "O ônibus está lotado e você precisa passar pra descer." +say = "Esta es mi parada." +short = "¡Mi parada!" +polished = "Permiso, esta es mi parada." +meaning = "É a minha parada." +accept = ["Aquí me bajo", "Me bajo aquí"] +tip = "'Permiso' é o 'com licença' pra passar entre as pessoas." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você sobe no ônibus e não sabe quanto pagar." +say = "¿Cuánto cuesta el pasaje?" +short = "¿Cuánto es?" +polished = "Disculpe, ¿cuánto cuesta el pasaje?" +meaning = "Quanto é a passagem?" +accept = ["¿Cuánto cuesta el boleto?", "¿Cuánto vale el pasaje?"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "O motorista do aplicativo ia passar da sua casa." +say = "¿Me puede dejar aquí?" +short = "Aquí está bien." +polished = "¿Me podría dejar aquí mismo, por favor?" +meaning = "Pode me deixar aqui?" +accept = ["¿Me deja aquí?", "Déjeme aquí, por favor"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você chega no ponto e vê o ônibus virando a esquina." +say = "Perdí el autobús." +polished = "Perdón, acabo de perder el autobús." +meaning = "Perdi o ônibus." +accept = ["Se me fue el autobús", "Perdí el bus", "Perdí el camión"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Você liga pra avisar que vai chegar atrasado ao jantar." +say = "Estoy atrapado en el tráfico." +short = "Hay mucho tráfico." +polished = "Perdón, estoy atrapado en el tráfico ahora mismo." +meaning = "Estou preso no trânsito." +accept = ["Estoy atrapada en el tráfico", "Estoy en un atasco", "Estoy atascado en el tráfico"] + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "O aplicativo mostra uma hora de metrô até a casa do seu amigo." +say = "¿Hay una forma más rápida de llegar?" +short = "¿Hay algo más rápido?" +polished = "¿Sabes si hay una forma más rápida de llegar?" +meaning = "Tem um jeito mais rápido de chegar lá?" +accept = ["¿Hay una manera más rápida de llegar?"] + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "A catraca do metrô apita: seu cartão está sem saldo." +say = "Necesito recargar mi tarjeta." +short = "Una recarga, por favor." +polished = "Hola, necesito recargar mi tarjeta de transporte." +meaning = "Preciso recarregar meu cartão." +accept = ["Quiero recargar mi tarjeta", "Necesito cargar mi tarjeta"] diff --git a/decks/es/shopping.toml b/decks/es/shopping.toml new file mode 100644 index 0000000..c4527b2 --- /dev/null +++ b/decks/es/shopping.toml @@ -0,0 +1,160 @@ +# decks/es: compras. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "compras" +situation = "O vendedor oferece ajuda, mas você só está olhando." +say = "Solo estoy mirando, gracias" +short = "Solo miro" +polished = "Solo estoy mirando por ahora, muchas gracias" +meaning = "Só estou olhando, obrigado" + +[[phrase]] +topic = "compras" +situation = "Quer provar uma roupa." +say = "¿Me lo puedo probar?" +polished = "¿Le importa si me lo pruebo?" +meaning = "Posso experimentar?" +accept = ["¿Puedo probármelo?"] + +[[phrase]] +topic = "compras" +situation = "Precisa de outro tamanho." +say = "¿Lo tiene en una talla más grande?" +short = "¿Una talla más?" +polished = "Disculpe, ¿lo tiene en una talla más grande?" +meaning = "Tem num tamanho maior?" +tip = "Tamanho de roupa é 'talla'; de sapato, 'número'." + +[[phrase]] +topic = "compras" +situation = "Quer devolver um produto." +say = "Quiero devolver esto" +polished = "Hola, me gustaría devolver esto, por favor" +meaning = "Quero devolver isso" + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você pegou duas calças e não acha onde experimentar." +say = "¿Dónde están los probadores?" +short = "¿Los probadores?" +polished = "Disculpe, ¿dónde están los probadores?" +meaning = "Onde ficam os provadores?" +accept = ["¿Dónde está el probador?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você sai do provador e a vendedora pergunta como ficou a camisa." +say = "Me queda apretada." +short = "Muy apretada." +polished = "Me queda un poco apretada." +meaning = "Ficou apertada em mim." +accept = ["Me queda apretado", "Me aprieta"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Você gostou do casaco e decide comprar." +say = "Me lo llevo." +polished = "Perfecto, me lo llevo, gracias." +meaning = "Vou levar." +accept = ["Me la llevo", "Lo llevo"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "Já é tarde e você quer saber se dá tempo de voltar à loja." +say = "¿A qué hora cierran?" +short = "¿Cuándo cierran?" +polished = "Disculpe, ¿a qué hora cierran hoy?" +meaning = "Que horas vocês fecham?" + +[[phrase]] +topic = "compras" +level = "A2" +situation = "Há uma placa de desconto, mas a etiqueta mostra o preço cheio." +say = "¿Esto está en oferta?" +short = "¿En oferta?" +polished = "Disculpe, ¿este está en oferta?" +meaning = "Isso está em promoção?" +accept = ["¿Esto está rebajado?", "¿Está en oferta?"] +tip = "'Oferta' ou 'rebaja' = promoção." + +[[phrase]] +topic = "compras" +level = "A2" +situation = "A vendedora pergunta se pode ajudar, e você procura algo pra sua mãe." +say = "Busco un regalo." +polished = "Busco un regalo para mi mamá." +meaning = "Estou procurando um presente." +accept = ["Estoy buscando un regalo"] +tip = "Falso amigo: 'regalo' é presente." + +[[phrase]] +topic = "compras" +level = "A2" +situation = "Você pagou e o caixa não entregou o comprovante." +say = "¿Me da el recibo?" +short = "El recibo, por favor." +polished = "¿Me podría dar el recibo, por favor?" +meaning = "Pode me dar a nota?" +accept = ["¿Me da el ticket?", "¿Me das el recibo?"] + +[[phrase]] +topic = "compras" +level = "A2" +situation = "O tênis ficou grande no seu pé." +say = "¿Tiene una talla más pequeña?" +short = "¿Una talla menos?" +polished = "¿De casualidad tiene una talla más pequeña?" +meaning = "Tem um número menor?" +accept = ["¿Tiene un número más pequeño?", "¿Tiene una talla más chica?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você abre a caixa na loja e a tela do aparelho está riscada." +say = "Este está dañado." +short = "Está dañado." +polished = "Disculpe, pero este está dañado." +meaning = "Este aqui está com defeito." +accept = ["Este viene dañado", "Este está roto"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você ganhou uma blusa, mas não gostou da cor." +say = "¿Puedo cambiarlo por otro color?" +short = "¿Puedo cambiarlo?" +polished = "¿Sería posible cambiarlo por otro color?" +meaning = "Posso trocar por outra cor?" +accept = ["¿Lo puedo cambiar por otro color?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você comprou online há duas semanas e nada chegou." +say = "Mi pedido todavía no llega." +short = "Mi pedido no llega." +polished = "Disculpe, mi pedido todavía no ha llegado." +meaning = "Meu pedido ainda não chegou." +accept = ["Mi pedido aún no llega", "Mi pedido todavía no ha llegado"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Antes de comprar um presente caro, você quer saber se pode devolver." +say = "¿Cuál es su política de devoluciones?" +short = "¿Puedo devolverlo?" +polished = "¿Me podría decir cuál es su política de devoluciones?" +meaning = "Qual é a política de devolução?" + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Você confere o extrato e a mesma compra aparece duas vezes." +say = "Creo que me cobraron dos veces." +short = "Me cobraron dos veces." +polished = "Disculpe, creo que me cobraron dos veces por esto." +meaning = "Acho que me cobraram duas vezes." diff --git a/decks/es/slang-and-small-talk.toml b/decks/es/slang-and-small-talk.toml new file mode 100644 index 0000000..a5b5fea --- /dev/null +++ b/decks/es/slang-and-small-talk.toml @@ -0,0 +1,105 @@ +# decks/es: gírias e conversa. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Perguntam que horas o mercado fecha e você não sabe." +say = "No tengo ni idea." +short = "Ni idea." +polished = "La verdad, no tengo ni idea." +meaning = "Não faço ideia." +accept = ["No tengo idea"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Seu amigo pergunta se você prefere pizza ou hambúrguer." +say = "Me da igual." +polished = "A mí me da igual, elige tú." +meaning = "Pra mim tanto faz." +accept = ["Me da lo mismo", "Lo que tú quieras"] +tip = "'Me da igual' = tanto faz. Dito seco, pode soar desinteressado." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Chove forte e te chamam pra uma festa do outro lado da cidade." +say = "¡Qué pereza!" +polished = "¡Qué pereza salir con esta lluvia!" +meaning = "Que preguiça!" +accept = ["¡Qué flojera!", "Me da pereza"] +tip = "'¡Qué pereza!' vale em quase todo lugar; no México também se diz '¡qué flojera!'." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Um amigo conta que vai largar o emprego pra viajar o mundo." +say = "¿En serio?" +polished = "¿En serio? ¡No te lo puedo creer!" +meaning = "Sério?" +accept = ["¿De verdad?", "¿Hablas en serio?"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Vocês combinam por mensagem de se encontrar às oito." +say = "¡Dale, nos vemos!" +short = "¡Dale!" +polished = "¡Dale, nos vemos a las ocho entonces!" +meaning = "Beleza, a gente se vê!" +accept = ["¡Vale, nos vemos!", "¡Listo, nos vemos!", "¡Va, nos vemos!"] +tip = "'Dale' = beleza, combinado (América Latina). Na Espanha é 'vale'." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Perguntam o que você acha do seu colega de apartamento." +say = "Me cae muy bien." +short = "Me cae bien." +polished = "La verdad, me cae muy bien." +meaning = "Gosto muito dele, é gente boa." +accept = ["Me cae súper bien", "Me cae genial"] +tip = "'Caer bien' = simpatizar com a pessoa. 'Me gusta' pode soar romântico." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "O técnico marcou pra manhã e já são quatro da tarde." +say = "Estoy harto de esperar." +short = "Estoy harto." +polished = "La verdad, ya estoy harto de esperar." +meaning = "Cansei de esperar." +accept = ["Estoy harta de esperar", "Ya me cansé de esperar"] +tip = "'Estar harto' = não aguentar mais." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Seu amigo quer ir a um restaurante que você conhece e sabe o preço." +say = "¡Ojo, que es muy caro!" +short = "¡Ojo!" +polished = "¡Ojo con ese lugar, que es muy caro!" +meaning = "Fica esperto, é bem caro!" +accept = ["Ojo, es muy caro", "Cuidado, que es muy caro"] +tip = "'¡Ojo!' (olho) = atenção, fica esperto." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Um amigo te manda um vídeo de um gato caindo do sofá." +say = "Me muero de risa." +short = "¡Qué risa!" +polished = "Me muero de risa con ese video." +meaning = "Estou morrendo de rir." +accept = ["Me estoy muriendo de risa", "Me morí de risa"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Você reencontra um conhecido e quer saber as novidades." +say = "¿Qué onda? ¿Cómo andas?" +short = "¿Qué onda?" +polished = "¿Qué onda? ¿Cómo andas, todo bien?" +meaning = "E aí, como você está?" +accept = ["¿Qué tal? ¿Cómo andas?", "¿Qué onda, cómo estás?"] +tip = "'¿Qué onda?' é o 'e aí?' de boa parte da América Latina. Na Espanha, '¿qué tal?'." diff --git a/decks/es/social.toml b/decks/es/social.toml new file mode 100644 index 0000000..64f7a4e --- /dev/null +++ b/decks/es/social.toml @@ -0,0 +1,198 @@ +# decks/es: social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "social" +situation = "Perguntam de onde você é." +say = "Soy de Brasil" +polished = "Soy de Brasil, de São Paulo" +meaning = "Sou do Brasil" + +[[phrase]] +topic = "social" +situation = "Quer saber com o que a pessoa trabalha." +say = "¿A qué te dedicas?" +polished = "Y tú, ¿a qué te dedicas?" +meaning = "Com o que você trabalha?" +tip = "Muito mais natural que '¿Cuál es tu trabajo?'." + +[[phrase]] +topic = "social" +situation = "A pessoa fala rápido demais." +say = "¿Puedes hablar más despacio?" +short = "Más despacio, por favor" +polished = "Perdón, ¿puedes hablar un poco más despacio?" +meaning = "Você pode falar mais devagar?" +accept = ["¿Podrías hablar más despacio?", "Más despacio, por favor"] + +[[phrase]] +topic = "social" +situation = "Não sabe uma palavra." +say = "¿Cómo se dice esto en español?" +short = "¿Cómo se dice?" +polished = "Perdona, ¿me podrías decir cómo se dice esto en español?" +meaning = "Como se diz isso em espanhol?" + +[[phrase]] +topic = "social" +situation = "Alguém pede desculpas por algo pequeno." +say = "No pasa nada" +short = "Tranqui" +polished = "No te preocupes, no pasa nada" +meaning = "Não tem problema" +accept = ["No te preocupes"] + +[[phrase]] +topic = "social" +situation = "Um amigo pergunta se você está chegando." +say = "Ya voy en camino" +short = "Ya voy" +polished = "Ya voy en camino, nos vemos pronto" +meaning = "Já estou a caminho" +accept = ["Voy en camino"] + +[[phrase]] +topic = "social" +situation = "Está indo embora da festa." +say = "Me encantó verte" +polished = "Me encantó mucho volver a verte" +meaning = "Adorei te ver" +accept = ["Qué bueno verte"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "Você encontra um vizinho no elevador." +say = "¿Cómo va todo?" +polished = "Hola, ¿cómo va todo hoy?" +meaning = "Como vão as coisas?" +accept = ["¿Qué tal todo?", "¿Cómo te va?"] +tip = "Resposta natural: 'Todo bien, ¿y tú?'." + +[[phrase]] +topic = "social" +level = "A1" +situation = "Sua amiga chega na festa e você a apresenta a um colega." +say = "Ella es mi amiga Ana." +short = "Ella es Ana." +polished = "Te presento a mi amiga Ana." +meaning = "Essa é minha amiga Ana." +accept = ["Esta es mi amiga Ana"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "O anfitrião te oferece mais uma bebida e você não quer." +say = "Así estoy bien, gracias." +short = "Estoy bien." +polished = "Así estoy bien por ahora, gracias." +meaning = "Estou bem assim, obrigado." +accept = ["Estoy bien, gracias", "No, gracias"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "Você quer manter contato com alguém que conheceu hoje." +say = "¿Cuál es tu número?" +short = "¿Tu número?" +polished = "¿Me das tu número de teléfono?" +meaning = "Qual é o seu número?" +accept = ["¿Me das tu número?"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "Um amigo conta que passou na entrevista de emprego." +say = "¡Qué buena noticia!" +short = "¡Qué bien!" +polished = "¡Qué buena noticia, me alegro mucho por ti!" +meaning = "Que notícia boa!" +accept = ["¡Qué buenas noticias!"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Você quer conhecer melhor um colega novo." +say = "¿Quieres tomar un café?" +short = "¿Un café?" +polished = "¿Te gustaría tomar un café un día de estos?" +meaning = "Quer tomar um café?" +accept = ["¿Tomamos un café?", "¿Vamos por un café?"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Te chamam pra sair hoje, mas você já tem compromisso." +say = "Hoy no puedo ir." +short = "No puedo." +polished = "Lo siento, hoy no puedo ir." +meaning = "Hoje não vou conseguir ir." +accept = ["Hoy no puedo", "Esta noche no puedo"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Um amigo conta que foi demitido." +say = "Lo siento mucho." +polished = "Lo siento mucho, de verdad." +meaning = "Sinto muito por isso." +accept = ["Cuánto lo siento", "Qué pena"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Você chega vinte minutos depois do combinado." +say = "Perdón por hacerte esperar." +short = "¡Perdón!" +polished = "Perdón por hacerte esperar, había mucho tráfico." +meaning = "Desculpa te fazer esperar." +accept = ["Perdona por hacerte esperar", "Disculpa la espera"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Na segunda, um colega pergunta como foi seu fim de semana." +say = "Nada especial, me quedé en casa." +short = "Nada especial." +polished = "Nada especial, me quedé en casa descansando." +meaning = "Nada demais, só fiquei em casa." +accept = ["Nada, me quedé en casa"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Sexta à tarde, você quer saber os planos do seu amigo." +say = "¿Qué planes tienes para el fin de semana?" +short = "¿Qué planes tienes?" +polished = "Oye, ¿qué planes tienes para este fin de semana?" +meaning = "O que você vai fazer no fim de semana?" +accept = ["¿Qué vas a hacer el fin de semana?"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "Você cruza na rua com um amigo que não via há anos." +say = "¡Tanto tiempo!" +polished = "¡Tanto tiempo! ¿Cómo has estado?" +meaning = "Quanto tempo!" +accept = ["¡Cuánto tiempo!", "¡Tanto tiempo sin verte!"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "A conversa está boa, mas você precisa ir embora." +say = "Ya me tengo que ir." +short = "Me tengo que ir." +polished = "Bueno, ya me tengo que ir, pero fue un gusto hablar contigo." +meaning = "Preciso ir andando." +accept = ["Ya me voy", "Tengo que irme"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "Seu amigo insiste em pagar a conta do bar de novo." +say = "La próxima la invito yo." +short = "La próxima invito yo." +polished = "Gracias, pero la próxima la invito yo." +meaning = "A próxima é por minha conta." +accept = ["La próxima va por mi cuenta", "La próxima pago yo"] +tip = "'Invitar' aqui é pagar pra outra pessoa: 'te invito' = eu pago." diff --git a/decks/es/travel.toml b/decks/es/travel.toml new file mode 100644 index 0000000..a7f9891 --- /dev/null +++ b/decks/es/travel.toml @@ -0,0 +1,109 @@ +# decks/es: viagem. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "viagem" +situation = "Você chegou no hotel." +say = "Tengo una reserva a mi nombre" +short = "Tengo una reserva" +polished = "Hola, tengo una reserva a mi nombre" +meaning = "Tenho uma reserva no meu nome" + +[[phrase]] +topic = "viagem" +situation = "Quer saber se o café da manhã está incluso." +say = "¿El desayuno está incluido?" +short = "¿Incluye desayuno?" +polished = "¿Me podría decir si el desayuno está incluido?" +meaning = "O café da manhã está incluso?" +accept = ["¿Está incluido el desayuno?"] + +[[phrase]] +topic = "viagem" +situation = "Sua mala não apareceu." +say = "Mi maleta no llegó" +polished = "Disculpe, mi maleta no llegó" +meaning = "Minha mala não chegou" + +[[phrase]] +topic = "viagem" +situation = "Está perdido procurando o metrô." +say = "¿Cómo llego a la estación de metro?" +short = "¿El metro?" +polished = "Disculpe, ¿cómo llego a la estación de metro?" +meaning = "Como eu chego na estação de metrô?" + +[[phrase]] +topic = "viagem" +situation = "Quer saber quanto tempo leva até o centro." +say = "¿Cuánto se tarda en llegar al centro?" +short = "¿Está lejos el centro?" +polished = "Disculpe, ¿sabe cuánto se tarda en llegar al centro?" +meaning = "Quanto tempo leva pra chegar no centro?" +accept = ["¿Cuánto tiempo se tarda al centro?"] + +[[phrase]] +topic = "viagem" +situation = "Na imigração, perguntam o motivo da viagem." +say = "Estoy de vacaciones" +polished = "Estoy aquí de vacaciones por una semana" +meaning = "Estou de férias" +accept = ["Vengo de vacaciones"] + +[[phrase]] +topic = "viagem" +situation = "Quer um táxi pra ir ao aeroporto." +say = "¿Me puede pedir un taxi al aeropuerto?" +short = "Un taxi, por favor" +polished = "¿Sería tan amable de pedirme un taxi al aeropuerto?" +meaning = "Pode me chamar um táxi pro aeroporto?" + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Na estação, você não acha a bilheteria." +say = "¿Dónde puedo comprar un boleto?" +short = "¿Los boletos?" +polished = "Disculpe, ¿dónde puedo comprar un boleto?" +meaning = "Onde posso comprar uma passagem?" +accept = ["¿Dónde puedo comprar un billete?", "¿Dónde compro un boleto?"] +tip = "'Boleto' na América Latina, 'billete' na Espanha." + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "O trem está na plataforma e você não tem certeza se é o seu." +say = "¿Este tren va al aeropuerto?" +short = "¿Va al aeropuerto?" +polished = "Disculpe, ¿este tren va al aeropuerto?" +meaning = "Esse trem vai pro aeroporto?" +accept = ["¿Es este el tren al aeropuerto?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você e seu amigo querem uma foto juntos em frente ao monumento." +say = "¿Nos puede tomar una foto?" +short = "¿Una foto, por favor?" +polished = "Disculpe, ¿nos podría tomar una foto, por favor?" +meaning = "Pode tirar uma foto da gente?" +accept = ["¿Nos puede sacar una foto?", "¿Nos hace una foto?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você planeja o dia seguinte com o recepcionista do hotel." +say = "¿A qué hora abre el museo?" +short = "¿Cuándo abre?" +polished = "Disculpe, ¿a qué hora abre el museo?" +meaning = "Que horas o museu abre?" +accept = ["¿Cuándo abre el museo?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "Você fez o check-out de manhã, mas seu voo é só à noite." +say = "¿Puedo dejar mis maletas aquí?" +short = "¿Mis maletas aquí?" +polished = "¿Sería posible dejar mis maletas aquí?" +meaning = "Posso deixar minhas malas aqui?" +accept = ["¿Puedo dejar mi equipaje aquí?", "¿Puedo dejar las maletas aquí?"] diff --git a/decks/es/work.toml b/decks/es/work.toml new file mode 100644 index 0000000..3bfd838 --- /dev/null +++ b/decks/es/work.toml @@ -0,0 +1,318 @@ +# decks/es: trabalho. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "trabalho" +situation = "O colega está falando, mas está no mudo." +say = "Perdón, estás en silencio" +short = "Estás en silencio" +polished = "Perdón, creo que tienes el micrófono en silencio" +meaning = "Desculpa, você está no mudo" +accept = ["Estás en silencio", "Tienes el micrófono apagado"] + +[[phrase]] +topic = "trabalho" +situation = "Você quer ver o que o colega está mostrando." +say = "¿Puedes compartir tu pantalla?" +short = "¿Compartes pantalla?" +polished = "¿Te importaría compartir tu pantalla?" +meaning = "Pode compartilhar sua tela?" +accept = ["¿Podrías compartir tu pantalla?"] + +[[phrase]] +topic = "trabalho" +situation = "Você vai se atrasar para a reunião." +say = "Voy a llegar unos minutos tarde" +short = "Llego tarde" +polished = "Perdón, voy a llegar unos minutos tarde" +meaning = "Vou chegar alguns minutos atrasado" + +[[phrase]] +topic = "trabalho" +situation = "Precisa confirmar antes de responder." +say = "Déjame revisarlo y te aviso" +short = "Lo reviso" +polished = "Déjame revisarlo bien y te aviso en un rato" +meaning = "Deixa eu revisar e te aviso" +accept = ["Lo reviso y te aviso"] + +[[phrase]] +topic = "trabalho" +situation = "Não entendeu a explicação." +say = "¿Me lo puedes explicar paso a paso?" +short = "¿Me lo explicas?" +polished = "¿Te importaría explicármelo paso a paso, por favor?" +meaning = "Você pode me explicar passo a passo?" + +[[phrase]] +topic = "trabalho" +situation = "Perguntam o prazo de uma tarefa." +say = "¿Cuál es la fecha de entrega?" +short = "¿Para cuándo es?" +polished = "¿Me podrías decir cuál es la fecha de entrega?" +meaning = "Qual é o prazo de entrega?" + +[[phrase]] +topic = "trabalho" +situation = "A reunião precisa ser adiada." +say = "¿Podemos pasarlo para mañana?" +short = "¿Mañana mejor?" +polished = "¿Sería posible pasarlo para mañana?" +meaning = "Podemos passar isso pra amanhã?" +accept = ["¿Lo podemos pasar para mañana?"] + +[[phrase]] +topic = "trabalho" +situation = "Você concorda com a ideia." +say = "Tiene sentido" +polished = "Sí, tiene todo el sentido" +meaning = "Faz sentido" + +[[phrase]] +topic = "trabalho" +situation = "Achou um problema sério em produção." +say = "Creo que hay un error en producción" +short = "Hay un error" +polished = "Creo que puede haber un error en producción" +meaning = "Acho que tem um erro em produção" + +[[phrase]] +topic = "trabalho" +situation = "Vai mandar um resumo depois da reunião." +say = "Te mando un correo con el resumen" +short = "Te mando el resumen" +polished = "Luego te mando un correo con el resumen" +meaning = "Te mando um email com o resumo" +tip = "Email em espanhol é 'correo' (ou 'mail' na conversa)." + +[[phrase]] +topic = "trabalho" +situation = "Quer saber se o áudio está bom." +say = "¿Me escuchas bien?" +short = "¿Me escuchas?" +polished = "Perdón, ¿me escuchas bien?" +meaning = "Você está me ouvindo bem?" +accept = ["¿Me oyes bien?"] + +[[phrase]] +topic = "trabalho" +situation = "Discorda, mas com educação." +say = "Entiendo, pero no estoy seguro de que funcione" +short = "No estoy seguro" +polished = "Entiendo tu punto, pero no estoy del todo seguro de que funcione" +meaning = "Entendo, mas não tenho certeza de que funcione" + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Seu celular toca durante a reunião e você atende rapidinho pra avisar." +say = "Estoy en una reunión." +polished = "Perdón, ahora estoy en una reunión." +meaning = "Estou numa reunião." +accept = ["Estoy en reunión"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Um colega chega na sua mesa enquanto você está numa ligação." +say = "Estoy en una llamada." +short = "En una llamada." +polished = "Perdona, ahora mismo estoy en una llamada." +meaning = "Estou numa ligação." +accept = ["Estoy al teléfono"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Na festa da empresa, alguém de outra área pergunta o que você faz." +say = "Trabajo en informática." +short = "En informática." +polished = "Trabajo en informática, en el equipo de software." +meaning = "Trabalho com TI." +accept = ["Trabajo en tecnología", "Trabajo en sistemas"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Um colega pergunta a que horas é a reunião de hoje." +say = "La reunión es a las diez." +short = "A las diez." +polished = "La reunión es a las diez, en la sala grande." +meaning = "A reunião é às dez." +accept = ["Es a las diez"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Primeiro dia no escritório, você procura onde vai ser a reunião." +say = "¿Dónde está la sala de reuniones?" +short = "¿La sala de reuniones?" +polished = "Disculpa, ¿me podrías decir dónde está la sala de reuniones?" +meaning = "Onde fica a sala de reunião?" +accept = ["¿Dónde es la sala de reuniones?"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Na call, o cliente falou rápido e você não pegou o número do pedido." +say = "¿Puede repetir, por favor?" +short = "¿Cómo?" +polished = "Perdón, ¿lo puede repetir, por favor?" +meaning = "Pode repetir, por favor?" +accept = ["¿Puedes repetir, por favor?"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Um cliente chega e você apresenta a pessoa que coordena o seu time." +say = "Este es mi jefe." +short = "Mi jefe." +polished = "Le presento a mi jefe." +meaning = "Esse é o meu gerente." +accept = ["Esta es mi jefa"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "No fim da apresentação, perguntam se alguém tem dúvidas, e você tem." +say = "Tengo una pregunta." +short = "Una pregunta." +polished = "Perdón, tengo una pregunta, si me permiten." +meaning = "Tenho uma pergunta." +accept = ["Tengo una duda"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Você acorda com febre e avisa o time no chat que não vai trabalhar." +say = "Hoy estoy enfermo." +short = "Estoy enfermo." +polished = "Hola a todos, hoy estoy enfermo y no voy a trabajar." +meaning = "Estou doente hoje." +accept = ["Hoy estoy enferma", "Estoy enfermo hoy"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Um colega passou meia hora te ajudando a configurar o notebook." +say = "Gracias por tu ayuda." +short = "Gracias." +polished = "Muchas gracias por toda tu ayuda." +meaning = "Obrigado pela ajuda." +accept = ["Gracias por su ayuda"] + +[[phrase]] +topic = "trabalho" +level = "A1" +situation = "Sexta à tarde, você sai do escritório e se despede do time." +say = "Nos vemos el lunes." +short = "Hasta el lunes." +polished = "Buen fin de semana, nos vemos el lunes." +meaning = "Até segunda." +accept = ["Hasta el lunes"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Um colega quer conversar, mas você está no meio de uma entrega." +say = "¿Hablamos después del almuerzo?" +polished = "¿Te parece si hablamos después del almuerzo?" +meaning = "Podemos conversar depois do almoço?" +accept = ["¿Podemos hablar después de comer?"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "O cliente pergunta quando vai receber a proposta." +say = "Hoy te mando el correo." +short = "Hoy te lo mando." +polished = "Le mando el correo hoy antes de que termine el día." +meaning = "Mando o e-mail hoje." +accept = ["Te envío el correo hoy"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Um colega pergunta se você vai ao escritório hoje." +say = "Hoy trabajo desde casa." +short = "Teletrabajo hoy." +polished = "Hoy trabajo desde casa, pero estoy conectado si me necesitas." +meaning = "Hoje estou trabalhando de casa." +accept = ["Hoy trabajo en remoto"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "A reunião já começou e você não acha o convite na agenda." +say = "¿Me mandas el enlace?" +short = "¿El enlace?" +polished = "¿Me podrías mandar el enlace, por favor?" +meaning = "Pode me mandar o link?" +accept = ["¿Me puedes enviar el enlace?"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Você entra atrasado na call e explica o motivo." +say = "No me funciona internet." +short = "Sin internet." +polished = "Perdón por el retraso, no me funciona internet." +meaning = "Minha internet caiu." +accept = ["Se me cayó internet"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Na call, o som do colega some de repente." +say = "No te oigo." +polished = "Perdón, no te oigo muy bien." +meaning = "Não estou te ouvindo." +accept = ["No te escucho", "No lo escucho"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Você avisa um colega que a reunião de quarta mudou de dia." +say = "La reunión se movió al viernes." +short = "Pasó al viernes." +polished = "Te aviso de que la reunión se movió al viernes." +meaning = "A reunião mudou pra sexta." +accept = ["Cambiaron la reunión al viernes"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "O trânsito parou e você avisa no chat que vai chegar atrasado." +say = "Llego cinco minutos tarde." +polished = "Perdón, llego unos cinco minutos tarde." +meaning = "Vou atrasar cinco minutos." +accept = ["Voy a llegar cinco minutos tarde"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Você quer marcar uma conversa com um cliente e pergunta o melhor horário." +say = "¿A qué hora te viene bien?" +short = "¿Cuándo puedes?" +polished = "¿A qué hora te vendría mejor?" +meaning = "Que horário fica bom pra você?" +accept = ["¿Qué hora te queda bien?"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "O chefe pergunta como está o relatório do mês." +say = "Terminé el informe." +short = "Informe listo." +polished = "Terminé el informe, ahora mismo se lo envío." +meaning = "Terminei o relatório." +accept = ["Ya terminé el informe"] + +[[phrase]] +topic = "trabalho" +level = "A2" +situation = "Você combina com um colega de revisar o projeto juntos." +say = "Nos vemos mañana a las nueve." +short = "Mañana a las nueve." +polished = "¿Te parece si nos vemos mañana a las nueve?" +meaning = "Vamos nos ver amanhã às nove." +accept = ["Quedamos mañana a las nueve"] diff --git a/decks/i18n/es.en.toml b/decks/i18n/es.en.toml deleted file mode 100644 index 44ff505..0000000 --- a/decks/i18n/es.en.toml +++ /dev/null @@ -1,405 +0,0 @@ -# English for English speakers, overlaying decks/es.toml. Keyed by `say` (must match the deck exactly). -language = "es" -native = "en" -language_name = "Spanish" -title = "Spanish for real life" -default_cue = "Repeat: {}" - -# ---------------------------------------------------------------- tips - -[[tip]] -text = "False friend: 'embarazada' means PREGNANT, not embarrassed (avergonzado)." -[[tip]] -text = "False friend: 'constipado' means having a cold, not constipated (estreñido)." -[[tip]] -text = "False friend: 'éxito' means success. The way out is 'salida'." -[[tip]] -text = "False friend: 'librería' is a bookshop. A library is 'biblioteca'." -[[tip]] -text = "False friend: 'carpeta' is a folder. A carpet is 'alfombra'." -[[tip]] -text = "False friend: 'actual' means current. 'Actually' is 'en realidad'." -[[tip]] -text = "False friend: 'sensible' means sensitive. Sensible is 'sensato'." -[[tip]] -text = "False friend: 'asistir' means to attend. To assist is 'ayudar'." -[[tip]] -text = "Vowels: Spanish has five short, pure vowels. Never glide them: 'no' is not 'noh-oo'." -[[tip]] -text = "Pronunciation: 'rr' is a rolled r, and a single 'r' is a quick tap, like the 'tt' in 'butter'." -[[tip]] -text = "Pronunciation: 'j' (and 'g' before e/i) is a rough 'h' from the throat: 'jamón' = 'ha-MON'." -[[tip]] -text = "Pronunciation: 'h' is always silent: 'hola' = 'ola', 'hotel' = 'otel'." -[[tip]] -text = "Pronunciation: 'll' and 'y' sound like the 'y' in 'yes' in most places: 'calle' = 'ka-ye'." -[[tip]] -text = "Pronunciation: 'z' and 'c' before e/i sound like 'th' in Spain and like 's' in Latin America." -[[tip]] -text = "'Tú' is informal, 'usted' is formal. Use 'usted' with older people, officials and new clients." -[[tip]] -text = "In Spanish you 'have' hunger and cold: tengo hambre, tengo frío, tengo 30 años." -[[tip]] -text = "For weather, use 'hace': hace frío, hace calor, hace sol." -[[tip]] -text = "'Ser' is for what something is, 'estar' for where it is or how it is right now: estoy cansado." -[[tip]] -text = "Questions and exclamations open with an upside-down mark: ¿Qué tal? ¡Qué bien!" -[[tip]] -text = "Spanish often drops the subject: say 'Tengo una pregunta', not 'Yo tengo una pregunta'." - -# ---------------------------------------------------------------- work - -[[phrase]] -say = "Perdón, estás en silencio" -meaning = "Sorry, you're on mute" -situation = "Your coworker is talking, but they're on mute." - -[[phrase]] -say = "¿Puedes compartir tu pantalla?" -meaning = "Can you share your screen?" -situation = "You want to see what your coworker is showing." - -[[phrase]] -say = "Voy a llegar unos minutos tarde" -meaning = "I'm going to be a few minutes late" -situation = "You're running late for the meeting." - -[[phrase]] -say = "Déjame revisarlo y te aviso" -meaning = "Let me check and I'll let you know" -situation = "You need to confirm something before you answer." - -[[phrase]] -say = "¿Me lo puedes explicar paso a paso?" -meaning = "Can you explain it to me step by step?" -situation = "You didn't understand the explanation." - -[[phrase]] -say = "¿Cuál es la fecha de entrega?" -meaning = "What's the deadline?" -situation = "You're asked about the deadline for a task." - -[[phrase]] -say = "¿Podemos pasarlo para mañana?" -meaning = "Can we move it to tomorrow?" -situation = "The meeting needs to be pushed back." - -[[phrase]] -say = "Tiene sentido" -meaning = "That makes sense" -situation = "You agree with the idea." - -[[phrase]] -say = "Creo que hay un error en producción" -meaning = "I think there's a bug in production" -situation = "You found a serious problem in production." - -[[phrase]] -say = "Te mando un correo con el resumen" -meaning = "I'll send you an email with the summary" -situation = "You'll send a summary after the meeting." -tip = "Email in Spanish is 'correo' (or just 'mail' in casual talk)." - -[[phrase]] -say = "¿Me escuchas bien?" -meaning = "Can you hear me okay?" -situation = "You want to check that your audio is fine." - -[[phrase]] -say = "Entiendo, pero no estoy seguro de que funcione" -meaning = "I see, but I'm not sure it will work" -situation = "You disagree, but politely." - -# ---------------------------------------------------------------- travel - -[[phrase]] -say = "Tengo una reserva a mi nombre" -meaning = "I have a reservation under my name" -situation = "You've just arrived at the hotel." - -[[phrase]] -say = "¿El desayuno está incluido?" -meaning = "Is breakfast included?" -situation = "You want to know if breakfast is included." - -[[phrase]] -say = "Mi maleta no llegó" -meaning = "My suitcase didn't arrive" -situation = "Your suitcase never showed up." - -[[phrase]] -say = "¿Cómo llego a la estación de metro?" -meaning = "How do I get to the subway station?" -situation = "You're lost, looking for the subway." - -[[phrase]] -say = "¿Cuánto se tarda en llegar al centro?" -meaning = "How long does it take to get downtown?" -situation = "You want to know how long it takes to get to the city center." - -[[phrase]] -say = "Estoy de vacaciones" -meaning = "I'm on vacation" -situation = "At immigration, they ask why you're traveling." - -[[phrase]] -say = "¿Me puede pedir un taxi al aeropuerto?" -meaning = "Could you call me a taxi to the airport?" -situation = "You need a taxi to the airport." - -# ---------------------------------------------------------------- restaurant - -[[phrase]] -say = "La cuenta, por favor" -meaning = "The check, please" -situation = "You've finished eating and want to pay." - -[[phrase]] -say = "¿Me lo pone para llevar?" -meaning = "Can I get it to go?" -situation = "You want to take the food with you." - -[[phrase]] -say = "Soy alérgico a los frutos secos" -meaning = "I'm allergic to nuts" -situation = "You're allergic to nuts." - -[[phrase]] -say = "¿Qué me recomienda?" -meaning = "What do you recommend?" -situation = "You don't know what to order." - -[[phrase]] -say = "Una mesa para dos, por favor" -meaning = "A table for two, please" -situation = "You arrive at a restaurant with a friend." - -[[phrase]] -say = "¿Aceptan tarjeta?" -meaning = "Do you take cards?" -situation = "You want to know if they accept cards." - -# ---------------------------------------------------------------- shopping - -[[phrase]] -say = "Solo estoy mirando, gracias" -meaning = "I'm just looking, thanks" -situation = "The salesperson offers help, but you're just browsing." - -[[phrase]] -say = "¿Me lo puedo probar?" -meaning = "Can I try it on?" -situation = "You want to try on some clothes." - -[[phrase]] -say = "¿Lo tiene en una talla más grande?" -meaning = "Do you have it in a bigger size?" -situation = "You need a different size." -tip = "Clothing size is 'talla'; shoe size is 'número'." - -[[phrase]] -say = "Quiero devolver esto" -meaning = "I want to return this" -situation = "You want to return a product." - -# ---------------------------------------------------------------- health - -[[phrase]] -say = "Necesito ver a un médico" -meaning = "I need to see a doctor" -situation = "You're not feeling well." - -[[phrase]] -say = "Me duele aquí" -meaning = "It hurts here" -situation = "Show where it hurts." - -[[phrase]] -say = "¿Tiene algo para el dolor de cabeza?" -meaning = "Do you have something for a headache?" -situation = "At the pharmacy, with a headache." - -[[phrase]] -say = "Me siento mal desde ayer" -meaning = "I've been feeling sick since yesterday" -situation = "Tell them since when you've been unwell." - -# ---------------------------------------------------------------- social - -[[phrase]] -say = "Soy de Brasil" -meaning = "I'm from Brazil" -situation = "Someone asks where you're from." - -[[phrase]] -say = "¿A qué te dedicas?" -meaning = "What do you do for a living?" -situation = "You want to know what the other person does for work." -tip = "Much more natural than '¿Cuál es tu trabajo?', just like 'What do you do?' in English." - -[[phrase]] -say = "¿Puedes hablar más despacio?" -meaning = "Can you speak more slowly?" -situation = "The person is talking way too fast." - -[[phrase]] -say = "¿Cómo se dice esto en español?" -meaning = "How do you say this in Spanish?" -situation = "You don't know a word." - -[[phrase]] -say = "No pasa nada" -meaning = "No problem / don't worry about it" -situation = "Someone apologizes for something small." - -[[phrase]] -say = "Ya voy en camino" -meaning = "I'm on my way" -situation = "A friend asks if you're almost there." - -[[phrase]] -say = "Me encantó verte" -meaning = "It was great to see you" -situation = "You're leaving the party." - -# ---------------------------------------------------------------- phone - -[[phrase]] -say = "¿Puedo dejar un mensaje?" -meaning = "Can I leave a message?" -situation = "The person you're calling isn't there." - -[[phrase]] -say = "Perdón, creo que me equivoqué de número" -meaning = "Sorry, I think I have the wrong number" -situation = "You called the wrong number." - -# ---------------------------------------------------------------- emergency - -[[phrase]] -say = "Llame a una ambulancia, por favor" -meaning = "Call an ambulance, please" -situation = "There's been an accident." - -[[phrase]] -say = "Perdí mi pasaporte" -meaning = "I lost my passport" -situation = "You've lost your passport." - -[[phrase]] -say = "¿Me puede ayudar, por favor?" -meaning = "Can you help me, please?" -situation = "You need help on the street." - -# ---------------------------------------------------------------- work, first steps - -[[phrase]] -say = "Estoy en una reunión." -meaning = "I'm in a meeting." -situation = "Your phone rings during a meeting and you answer quickly to say so." - -[[phrase]] -say = "Estoy en una llamada." -meaning = "I'm on a call." -situation = "A coworker comes to your desk while you're on a call." - -[[phrase]] -say = "Trabajo en informática." -meaning = "I work in IT." -situation = "At the company party, someone from another team asks what you do." - -[[phrase]] -say = "La reunión es a las diez." -meaning = "The meeting is at ten." -situation = "A coworker asks what time today's meeting is." - -[[phrase]] -say = "¿Dónde está la sala de reuniones?" -meaning = "Where is the meeting room?" -situation = "First day at the office, you're looking for where the meeting will be." - -[[phrase]] -say = "¿Puede repetir, por favor?" -meaning = "Could you repeat that, please?" -situation = "On a call, the client spoke fast and you missed the order number." - -[[phrase]] -say = "Este es mi jefe." -meaning = "This is my boss." -situation = "A client arrives and you introduce the person who leads your team." - -[[phrase]] -say = "Tengo una pregunta." -meaning = "I have a question." -situation = "At the end of the presentation they ask if anyone has questions, and you do." - -[[phrase]] -say = "Hoy estoy enfermo." -meaning = "I'm sick today." -situation = "You wake up with a fever and tell the team in chat you won't be working." - -[[phrase]] -say = "Gracias por tu ayuda." -meaning = "Thanks for your help." -situation = "A coworker spent half an hour helping you set up your laptop." - -[[phrase]] -say = "Nos vemos el lunes." -meaning = "See you Monday." -situation = "Friday afternoon, you leave the office and say bye to the team." - -[[phrase]] -say = "¿Hablamos después del almuerzo?" -meaning = "Can we talk after lunch?" -situation = "A coworker wants to chat, but you're in the middle of a deliverable." - -[[phrase]] -say = "Hoy te mando el correo." -meaning = "I'll send you the email today." -situation = "The client asks when they'll get the proposal." - -[[phrase]] -say = "Hoy trabajo desde casa." -meaning = "I'm working from home today." -situation = "A coworker asks if you're coming to the office today." - -[[phrase]] -say = "¿Me mandas el enlace?" -meaning = "Can you send me the link?" -situation = "The meeting already started and you can't find the invite in your calendar." - -[[phrase]] -say = "No me funciona internet." -meaning = "My internet isn't working." -situation = "You join the call late and explain why." - -[[phrase]] -say = "No te oigo." -meaning = "I can't hear you." -situation = "On the call, your coworker's audio suddenly cuts out." - -[[phrase]] -say = "La reunión se movió al viernes." -meaning = "The meeting was moved to Friday." -situation = "You tell a coworker that Wednesday's meeting changed days." - -[[phrase]] -say = "Llego cinco minutos tarde." -meaning = "I'll be five minutes late." -situation = "Traffic stopped and you post in chat that you'll be late." - -[[phrase]] -say = "¿A qué hora te viene bien?" -meaning = "What time works for you?" -situation = "You want to set up a chat with a client and ask for the best time." - -[[phrase]] -say = "Terminé el informe." -meaning = "I finished the report." -situation = "Your boss asks how the monthly report is going." - -[[phrase]] -say = "Nos vemos mañana a las nueve." -meaning = "See you tomorrow at nine." -situation = "You agree with a coworker to review the project together." diff --git a/decks/i18n/es.en/deck.toml b/decks/i18n/es.en/deck.toml new file mode 100644 index 0000000..7f35af3 --- /dev/null +++ b/decks/i18n/es.en/deck.toml @@ -0,0 +1,48 @@ +# English for English speakers, overlaying decks/es/, one file per theme. Keyed by `say` (must match the deck exactly). +language = "es" +native = "en" +language_name = "Spanish" +title = "Spanish for real life" +default_cue = "Repeat: {}" + + +[[tip]] +text = "False friend: 'embarazada' means PREGNANT, not embarrassed (avergonzado)." +[[tip]] +text = "False friend: 'constipado' means having a cold, not constipated (estreñido)." +[[tip]] +text = "False friend: 'éxito' means success. The way out is 'salida'." +[[tip]] +text = "False friend: 'librería' is a bookshop. A library is 'biblioteca'." +[[tip]] +text = "False friend: 'carpeta' is a folder. A carpet is 'alfombra'." +[[tip]] +text = "False friend: 'actual' means current. 'Actually' is 'en realidad'." +[[tip]] +text = "False friend: 'sensible' means sensitive. Sensible is 'sensato'." +[[tip]] +text = "False friend: 'asistir' means to attend. To assist is 'ayudar'." +[[tip]] +text = "Vowels: Spanish has five short, pure vowels. Never glide them: 'no' is not 'noh-oo'." +[[tip]] +text = "Pronunciation: 'rr' is a rolled r, and a single 'r' is a quick tap, like the 'tt' in 'butter'." +[[tip]] +text = "Pronunciation: 'j' (and 'g' before e/i) is a rough 'h' from the throat: 'jamón' = 'ha-MON'." +[[tip]] +text = "Pronunciation: 'h' is always silent: 'hola' = 'ola', 'hotel' = 'otel'." +[[tip]] +text = "Pronunciation: 'll' and 'y' sound like the 'y' in 'yes' in most places: 'calle' = 'ka-ye'." +[[tip]] +text = "Pronunciation: 'z' and 'c' before e/i sound like 'th' in Spain and like 's' in Latin America." +[[tip]] +text = "'Tú' is informal, 'usted' is formal. Use 'usted' with older people, officials and new clients." +[[tip]] +text = "In Spanish you 'have' hunger and cold: tengo hambre, tengo frío, tengo 30 años." +[[tip]] +text = "For weather, use 'hace': hace frío, hace calor, hace sol." +[[tip]] +text = "'Ser' is for what something is, 'estar' for where it is or how it is right now: estoy cansado." +[[tip]] +text = "Questions and exclamations open with an upside-down mark: ¿Qué tal? ¡Qué bien!" +[[tip]] +text = "Spanish often drops the subject: say 'Tengo una pregunta', not 'Yo tengo una pregunta'." diff --git a/decks/i18n/es.en/emergency.toml b/decks/i18n/es.en/emergency.toml new file mode 100644 index 0000000..ea44323 --- /dev/null +++ b/decks/i18n/es.en/emergency.toml @@ -0,0 +1,82 @@ +# decks/i18n/es.en (English for decks/es): emergência. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Llame a una ambulancia, por favor" +meaning = "Call an ambulance, please" +situation = "There's been an accident." + +[[phrase]] +say = "Perdí mi pasaporte" +meaning = "I lost my passport" +situation = "You've lost your passport." + +[[phrase]] +say = "¿Me puede ayudar, por favor?" +meaning = "Can you help me, please?" +situation = "You need help on the street." + +[[phrase]] +say = "¡Hay un incendio!" +meaning = "There's a fire!" +situation = "You see smoke coming out of the restaurant's kitchen." + +[[phrase]] +say = "No encuentro mi hotel." +meaning = "I can't find my hotel." +situation = "You come out of the subway in a city you don't know and can't find your way back." + +[[phrase]] +say = "Me robaron la mochila." +meaning = "Someone stole my backpack." +situation = "You get back to your table at the café and your backpack is gone." + +[[phrase]] +say = "Necesitamos un médico." +meaning = "We need a doctor." +situation = "Someone collapses next to you on the street." + +[[phrase]] +say = "Necesito ir a un hospital." +meaning = "I need to get to a hospital." +situation = "Your friend is hurt and you flag down a taxi." + +[[phrase]] +say = "Mi amigo está herido." +meaning = "My friend is hurt." +situation = "Your friend fell off his bike and can't get up." + +[[phrase]] +say = "No sé la dirección." +meaning = "I don't know the address." +situation = "You call emergency services and they ask where you are." + +[[phrase]] +say = "¿Puedo usar tu teléfono?" +meaning = "Can I use your phone?" +situation = "Your phone died and you need to let your family know." + +[[phrase]] +say = "Me quedé afuera sin llaves." +meaning = "I'm locked out." +situation = "The door slammed shut and your keys are inside the apartment." + +[[phrase]] +say = "¿Están todos bien?" +meaning = "Is everyone okay?" +situation = "After a minor car crash, you get out to check on people." + +[[phrase]] +say = "Necesito denunciar un robo." +meaning = "I need to report a theft." +situation = "At the police station, after your backpack was taken." +tip = "'Denunciar' is to file a police report." + +[[phrase]] +say = "Necesito cancelar mi tarjeta." +meaning = "I need to cancel my card." +situation = "Your card is missing and you call the bank." + +[[phrase]] +say = "No respira." +meaning = "He's not breathing." +situation = "A man has passed out and you're on the phone with emergency services." diff --git a/decks/i18n/es.en/first-contact.toml b/decks/i18n/es.en/first-contact.toml new file mode 100644 index 0000000..eb55bd0 --- /dev/null +++ b/decks/i18n/es.en/first-contact.toml @@ -0,0 +1,42 @@ +# decks/i18n/es.en (English for decks/es): primeiros contatos. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Estoy aprendiendo español." +meaning = "I'm learning Spanish." +situation = "You get stuck mid-sentence while talking to a stranger." + +[[phrase]] +say = "Me mudé aquí el año pasado." +meaning = "I moved here last year." +situation = "A neighbor asks how long you've been in town." + +[[phrase]] +say = "¿Vives por aquí?" +meaning = "Do you live around here?" +situation = "You chat with someone in line at the neighborhood bakery." + +[[phrase]] +say = "Fue un gusto conocerte." +meaning = "It was nice meeting you." +situation = "You say goodbye to someone you met today at a dinner." + +[[phrase]] +say = "¿Qué te trajo por aquí?" +meaning = "What brought you here?" +situation = "A new coworker tells you they came from another country." + +[[phrase]] +say = "¿Cuánto tiempo llevas viviendo aquí?" +meaning = "How long have you lived here?" +situation = "You meet someone from the neighborhood at a block party." +tip = "'Llevar' + time = how long so far: 'llevo dos años aquí' = I've been here two years." + +[[phrase]] +say = "Todavía me estoy acostumbrando." +meaning = "I'm still getting used to it." +situation = "Someone asks how life in the new city is going." + +[[phrase]] +say = "Tenemos que seguir en contacto." +meaning = "We should keep in touch." +situation = "On the last day of the course, you say goodbye to a classmate." diff --git a/decks/i18n/es.en/health-and-social.toml b/decks/i18n/es.en/health-and-social.toml new file mode 100644 index 0000000..968e9b5 --- /dev/null +++ b/decks/i18n/es.en/health-and-social.toml @@ -0,0 +1,22 @@ +# decks/i18n/es.en (English for decks/es): saúde e social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Últimamente ando muy estresado." +meaning = "I've been feeling stressed lately." +situation = "A friend notices you've been quiet and asks if everything is okay." +tip = "A woman says 'estresada'. 'Andar' + adjective = how you've been lately." + +[[phrase]] +say = "Estoy tratando de dormir más." +meaning = "I'm trying to get more sleep." +situation = "A coworker invites you out late on a Tuesday." + +[[phrase]] +say = "Deberías tomarte un día libre." +meaning = "You should take a day off." +situation = "Your friend is exhausted and won't stop working." + +[[phrase]] +say = "Avísame si necesitas algo." +meaning = "Let me know if you need anything." +situation = "A friend is sick at home, alone." diff --git a/decks/i18n/es.en/health.toml b/decks/i18n/es.en/health.toml new file mode 100644 index 0000000..ea88a00 --- /dev/null +++ b/decks/i18n/es.en/health.toml @@ -0,0 +1,99 @@ +# decks/i18n/es.en (English for decks/es): saúde. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Necesito ver a un médico" +meaning = "I need to see a doctor" +situation = "You're not feeling well." + +[[phrase]] +say = "Me duele aquí" +meaning = "It hurts here" +situation = "Show where it hurts." + +[[phrase]] +say = "¿Tiene algo para el dolor de cabeza?" +meaning = "Do you have something for a headache?" +situation = "At the pharmacy, with a headache." + +[[phrase]] +say = "Me siento mal desde ayer" +meaning = "I've been feeling sick since yesterday" +situation = "Tell them since when you've been unwell." + +[[phrase]] +say = "Tengo fiebre." +meaning = "I have a fever." +situation = "You take your temperature and the thermometer reads thirty-nine." +tip = "Spanish 'has' most symptoms: 'tengo fiebre', 'tengo tos', 'tengo frío'." + +[[phrase]] +say = "Me duele la garganta." +meaning = "I have a sore throat." +situation = "At the pharmacy, the assistant asks what's wrong." +tip = "'Me duele...' = my ... hurts. Literally 'the throat hurts me'." + +[[phrase]] +say = "Necesito algo para la tos." +meaning = "I need something for a cough." +situation = "You can't stop coughing and go to the pharmacy." + +[[phrase]] +say = "Soy alérgico a la penicilina." +meaning = "I'm allergic to penicillin." +situation = "Before prescribing, the doctor asks if you have any allergies." +tip = "A woman says 'alérgica'." + +[[phrase]] +say = "¿Tienes una curita?" +meaning = "Do you have a band-aid?" +situation = "You cut your finger cooking at a friend's place." +tip = "'Curita' in Latin America; in Spain it's 'tirita'." + +[[phrase]] +say = "¿Me puede ver un médico hoy?" +meaning = "Can I see a doctor today?" +situation = "You call the clinic first thing in the morning, without an appointment." + +[[phrase]] +say = "Empezó hace dos días." +meaning = "It started two days ago." +situation = "The doctor asks how long you've been in pain." +tip = "'Hace dos días' = two days ago. 'Hace' goes before the time." + +[[phrase]] +say = "Estoy mareado." +meaning = "I feel dizzy." +situation = "You stand up too fast and everything starts spinning." +tip = "A woman says 'mareada'. It also means seasick or carsick." + +[[phrase]] +say = "Creo que me torcí el tobillo." +meaning = "I think I sprained my ankle." +situation = "You landed badly playing soccer and your foot is swollen." + +[[phrase]] +say = "¿Cada cuánto debo tomarlo?" +meaning = "How often should I take it?" +situation = "The pharmacist hands you the medicine and you don't know the dose." + +[[phrase]] +say = "No tomo ningún medicamento." +meaning = "I'm not taking any medication." +situation = "The doctor asks if you take any medicine every day." + +[[phrase]] +say = "Necesito renovar mi receta." +meaning = "I need to renew my prescription." +situation = "Your regular medication ran out and you go to the doctor." +tip = "'Receta' is both a prescription and a cooking recipe." + +[[phrase]] +say = "¿Mi seguro cubre esto?" +meaning = "Does my insurance cover this?" +situation = "At the clinic's front desk, before an expensive test." + +[[phrase]] +say = "Me duele mucho una muela." +meaning = "I have a terrible toothache." +situation = "You call the dentist asking to be squeezed in urgently." +tip = "'Muela' is a back tooth; a tooth in general is 'diente'." diff --git a/decks/i18n/es.en/home-and-paperwork.toml b/decks/i18n/es.en/home-and-paperwork.toml new file mode 100644 index 0000000..caa0eef --- /dev/null +++ b/decks/i18n/es.en/home-and-paperwork.toml @@ -0,0 +1,46 @@ +# decks/i18n/es.en (English for decks/es): casa e burocracia. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "El wifi no funciona." +meaning = "The wifi isn't working." +situation = "The internet in your rented apartment is down and you write to the owner." + +[[phrase]] +say = "¿Dónde saco la basura?" +meaning = "Where do I take out the trash?" +situation = "First week in the new building, you run into a neighbor in the hallway." + +[[phrase]] +say = "Quiero retirar dinero." +meaning = "I'd like to withdraw some money." +situation = "At the bank counter, the teller asks how she can help." +tip = "'Retirar' or 'sacar' dinero = to withdraw cash." + +[[phrase]] +say = "¿Hay un cajero cerca?" +meaning = "Is there an ATM nearby?" +situation = "The street market is cash only and you have none." +tip = "'Cajero' (automático) is an ATM." + +[[phrase]] +say = "Hay una fuga de agua." +meaning = "There's a water leak." +situation = "The kitchen sink drips all night and you tell the landlord." + +[[phrase]] +say = "El cajero se tragó mi tarjeta." +meaning = "The ATM kept my card." +situation = "The ATM didn't give your card back and you walk into the branch." +tip = "The ATM 'swallows' the card: 'se tragó'." + +[[phrase]] +say = "Necesito pagar esta factura." +meaning = "I need to pay this bill." +situation = "You walk up to the counter with the electricity bill in your hand." +tip = "'Factura' is a utility bill or invoice. A restaurant bill is 'la cuenta'." + +[[phrase]] +say = "¿Cuándo se paga el alquiler?" +meaning = "When is the rent due?" +situation = "First month in the apartment, you write to the landlord." +tip = "Rent is 'alquiler' in most countries, 'renta' in Mexico." diff --git a/decks/i18n/es.en/phone.toml b/decks/i18n/es.en/phone.toml new file mode 100644 index 0000000..8fd794d --- /dev/null +++ b/decks/i18n/es.en/phone.toml @@ -0,0 +1,84 @@ +# decks/i18n/es.en (English for decks/es): telefone. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "¿Puedo dejar un mensaje?" +meaning = "Can I leave a message?" +situation = "The person you're calling isn't there." + +[[phrase]] +say = "Perdón, creo que me equivoqué de número" +meaning = "Sorry, I think I have the wrong number" +situation = "You called the wrong number." + +[[phrase]] +say = "¿Quién habla, por favor?" +meaning = "Who's calling, please?" +situation = "You pick up the phone and don't recognize the voice." + +[[phrase]] +say = "No te escucho." +meaning = "I can't hear you." +situation = "The call is very quiet and you can't hear the other person." + +[[phrase]] +say = "¿Puedo hablar con Ana?" +meaning = "Can I speak to Ana?" +situation = "You call a friend's home and someone else picks up." + +[[phrase]] +say = "Espera un segundo." +meaning = "Hold on a second." +situation = "The doorbell rings in the middle of a call and you have to go open the door." + +[[phrase]] +say = "Te devuelvo la llamada." +meaning = "I'll call you back." +situation = "A friend calls just as you're getting on the bus." + +[[phrase]] +say = "Quiero pedir una cita." +meaning = "I'd like to make an appointment." +situation = "You call the doctor's office to book a visit." +tip = "'Cita' is an appointment, and also a date." + +[[phrase]] +say = "¿Puede repetir el número?" +meaning = "Could you repeat the number?" +situation = "The receptionist read out the phone number too fast for you to write down." + +[[phrase]] +say = "Se corta la llamada." +meaning = "You're breaking up." +situation = "The signal is bad and the other person's voice keeps dropping." + +[[phrase]] +say = "¿Me mandas la dirección por mensaje?" +meaning = "Can you text me the address?" +situation = "A friend explains where the party is, but you'd rather have it in writing." +tip = "False friend: 'dirección' is an address (and also a direction)." + +[[phrase]] +say = "Llámame cuando puedas." +meaning = "Call me when you can." +situation = "Your friend doesn't pick up and you get their voicemail." + +[[phrase]] +say = "Claro, espero." +meaning = "Sure, I can hold." +situation = "The agent asks if you can stay on the line." + +[[phrase]] +say = "Llamo por mi conexión a internet." +meaning = "I'm calling about my internet connection." +situation = "Your home internet is down and you call support." +tip = "'Llamo por...' is the standard way to give the reason for a call." + +[[phrase]] +say = "Perdón, se cortó la llamada." +meaning = "Sorry, we got cut off." +situation = "The call dropped mid-conversation and you call again." + +[[phrase]] +say = "¿Puedo hablar con una persona?" +meaning = "Can I speak to a real person?" +situation = "You're stuck in an automated phone menu and want an agent." diff --git a/decks/i18n/es.en/restaurant.toml b/decks/i18n/es.en/restaurant.toml new file mode 100644 index 0000000..9759d1d --- /dev/null +++ b/decks/i18n/es.en/restaurant.toml @@ -0,0 +1,59 @@ +# decks/i18n/es.en (English for decks/es): restaurante. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "La cuenta, por favor" +meaning = "The check, please" +situation = "You've finished eating and want to pay." + +[[phrase]] +say = "¿Me lo pone para llevar?" +meaning = "Can I get it to go?" +situation = "You want to take the food with you." + +[[phrase]] +say = "Soy alérgico a los frutos secos" +meaning = "I'm allergic to nuts" +situation = "You're allergic to nuts." + +[[phrase]] +say = "¿Qué me recomienda?" +meaning = "What do you recommend?" +situation = "You don't know what to order." + +[[phrase]] +say = "Una mesa para dos, por favor" +meaning = "A table for two, please" +situation = "You arrive at a restaurant with a friend." + +[[phrase]] +say = "¿Aceptan tarjeta?" +meaning = "Do you take cards?" +situation = "You want to know if they accept cards." + +[[phrase]] +say = "Voy a pedir el pollo." +meaning = "I'll have the chicken." +situation = "The waiter comes to your table, notepad in hand." +tip = "To order: 'voy a pedir...' or 'para mí, ...'." + +[[phrase]] +say = "¿Nos trae la carta?" +meaning = "Could we see the menu?" +situation = "You sat down ten minutes ago and nobody has brought the menu." +tip = "'La carta' is the menu. 'El menú' also works." + +[[phrase]] +say = "¿Este plato pica?" +meaning = "Is this dish spicy?" +situation = "You can't handle chili and the dish has a little flame drawn next to it." +tip = "'Picar' = to burn with chili. Spicy is 'picante', never 'caliente' (hot in temperature)." + +[[phrase]] +say = "¿Me trae agua, por favor?" +meaning = "Can I have some water, please?" +situation = "The food arrived, but they forgot your drink." + +[[phrase]] +say = "Todo estuvo delicioso." +meaning = "Everything was delicious." +situation = "The waiter clears the plates and asks if everything was good." diff --git a/decks/i18n/es.en/routine-and-transport.toml b/decks/i18n/es.en/routine-and-transport.toml new file mode 100644 index 0000000..5bc3d84 --- /dev/null +++ b/decks/i18n/es.en/routine-and-transport.toml @@ -0,0 +1,44 @@ +# decks/i18n/es.en (English for decks/es): rotina e transporte. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "¿Está ocupado este asiento?" +meaning = "Is this seat taken?" +situation = "The bus is full and there's a bag on the seat next to someone." + +[[phrase]] +say = "Esta es mi parada." +meaning = "This is my stop." +situation = "The bus is packed and you need to squeeze through to get off." +tip = "'Permiso' is the 'excuse me' for getting past people." + +[[phrase]] +say = "¿Cuánto cuesta el pasaje?" +meaning = "How much is the fare?" +situation = "You get on the bus and don't know how much to pay." + +[[phrase]] +say = "¿Me puede dejar aquí?" +meaning = "Can you drop me off here?" +situation = "Your ride-share driver is about to go past your place." + +[[phrase]] +say = "Perdí el autobús." +meaning = "I missed the bus." +situation = "You reach the stop and see the bus turning the corner." +tip = "The bus has many names: 'autobús', 'bus', 'camión' (Mexico), 'colectivo' (Argentina)." + +[[phrase]] +say = "Estoy atrapado en el tráfico." +meaning = "I'm stuck in traffic." +situation = "You call to say you'll be late for dinner." +tip = "A woman says 'atrapada'." + +[[phrase]] +say = "¿Hay una forma más rápida de llegar?" +meaning = "Is there a faster way to get there?" +situation = "The app shows an hour by subway to your friend's place." + +[[phrase]] +say = "Necesito recargar mi tarjeta." +meaning = "I need to top up my card." +situation = "The subway turnstile beeps: your card has no balance." diff --git a/decks/i18n/es.en/shopping.toml b/decks/i18n/es.en/shopping.toml new file mode 100644 index 0000000..01fa59a --- /dev/null +++ b/decks/i18n/es.en/shopping.toml @@ -0,0 +1,89 @@ +# decks/i18n/es.en (English for decks/es): compras. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Solo estoy mirando, gracias" +meaning = "I'm just looking, thanks" +situation = "The salesperson offers help, but you're just browsing." + +[[phrase]] +say = "¿Me lo puedo probar?" +meaning = "Can I try it on?" +situation = "You want to try on some clothes." + +[[phrase]] +say = "¿Lo tiene en una talla más grande?" +meaning = "Do you have it in a bigger size?" +situation = "You need a different size." +tip = "Clothing size is 'talla'; shoe size is 'número'." + +[[phrase]] +say = "Quiero devolver esto" +meaning = "I want to return this" +situation = "You want to return a product." + +[[phrase]] +say = "¿Dónde están los probadores?" +meaning = "Where are the fitting rooms?" +situation = "You picked two pairs of pants and can't find where to try them on." + +[[phrase]] +say = "Me queda apretada." +meaning = "It's too tight on me." +situation = "You come out of the fitting room and the assistant asks how the shirt fits." +tip = "'Me queda...' = it fits me...: 'me queda bien', 'me queda grande'." + +[[phrase]] +say = "Me lo llevo." +meaning = "I'll take it." +situation = "You like the coat and decide to buy it." + +[[phrase]] +say = "¿A qué hora cierran?" +meaning = "What time do you close?" +situation = "It's late and you want to know if you have time to come back to the store." + +[[phrase]] +say = "¿Esto está en oferta?" +meaning = "Is this on sale?" +situation = "There's a discount sign, but the tag shows the full price." +tip = "'Oferta' or 'rebaja' = a sale price." + +[[phrase]] +say = "Busco un regalo." +meaning = "I'm looking for a gift." +situation = "The assistant asks if she can help, and you want something for your mother." + +[[phrase]] +say = "¿Me da el recibo?" +meaning = "Can I have the receipt?" +situation = "You paid and the cashier didn't hand you the receipt." + +[[phrase]] +say = "¿Tiene una talla más pequeña?" +meaning = "Do you have a smaller size?" +situation = "The sneakers are too big on you." + +[[phrase]] +say = "Este está dañado." +meaning = "This one is damaged." +situation = "You open the box in the store and the device's screen is scratched." + +[[phrase]] +say = "¿Puedo cambiarlo por otro color?" +meaning = "Can I exchange it for another color?" +situation = "You were given a sweater, but you don't like the color." + +[[phrase]] +say = "Mi pedido todavía no llega." +meaning = "My order hasn't arrived yet." +situation = "You ordered online two weeks ago and nothing has come." + +[[phrase]] +say = "¿Cuál es su política de devoluciones?" +meaning = "What's your return policy?" +situation = "Before buying an expensive gift, you want to know if it can be returned." + +[[phrase]] +say = "Creo que me cobraron dos veces." +meaning = "I think I was charged twice." +situation = "You check your statement and the same purchase shows up twice." diff --git a/decks/i18n/es.en/slang-and-small-talk.toml b/decks/i18n/es.en/slang-and-small-talk.toml new file mode 100644 index 0000000..d88c4cf --- /dev/null +++ b/decks/i18n/es.en/slang-and-small-talk.toml @@ -0,0 +1,58 @@ +# decks/i18n/es.en (English for decks/es): gírias e conversa. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "No tengo ni idea." +meaning = "I have no clue." +situation = "Someone asks what time the market closes and you don't know." + +[[phrase]] +say = "Me da igual." +meaning = "Either way works for me." +situation = "Your friend asks if you'd rather have pizza or burgers." +tip = "'Me da igual' = I don't mind. Said flatly, it can sound like you don't care." + +[[phrase]] +say = "¡Qué pereza!" +meaning = "Ugh, I can't be bothered!" +situation = "It's pouring and you're invited to a party across town." +tip = "'¡Qué pereza!' works almost everywhere; Mexico also says '¡qué flojera!'." + +[[phrase]] +say = "¿En serio?" +meaning = "Seriously?" +situation = "A friend says he's quitting his job to travel the world." + +[[phrase]] +say = "¡Dale, nos vemos!" +meaning = "Cool, see you then!" +situation = "You agree by text to meet at eight." +tip = "'Dale' = okay, deal (Latin America). In Spain it's 'vale'." + +[[phrase]] +say = "Me cae muy bien." +meaning = "I really like him." +situation = "Someone asks what you think of your roommate." +tip = "'Caer bien' = to like someone as a person. 'Me gusta' can sound romantic." + +[[phrase]] +say = "Estoy harto de esperar." +meaning = "I'm fed up with waiting." +situation = "The technician said morning and it's already four in the afternoon." +tip = "A woman says 'harta'." + +[[phrase]] +say = "¡Ojo, que es muy caro!" +meaning = "Heads up, it's really expensive!" +situation = "Your friend wants to go to a restaurant you know, and you know the prices." +tip = "'¡Ojo!' (eye) = watch out, heads up." + +[[phrase]] +say = "Me muero de risa." +meaning = "I'm dying of laughter." +situation = "A friend sends you a video of a cat falling off the couch." + +[[phrase]] +say = "¿Qué onda? ¿Cómo andas?" +meaning = "What's up? How are you doing?" +situation = "You run into someone you know and want to catch up." +tip = "'¿Qué onda?' is the casual 'what's up?' in much of Latin America. In Spain, '¿qué tal?'." diff --git a/decks/i18n/es.en/social.toml b/decks/i18n/es.en/social.toml new file mode 100644 index 0000000..b76301f --- /dev/null +++ b/decks/i18n/es.en/social.toml @@ -0,0 +1,110 @@ +# decks/i18n/es.en (English for decks/es): social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Soy de Brasil" +meaning = "I'm from Brazil" +situation = "Someone asks where you're from." + +[[phrase]] +say = "¿A qué te dedicas?" +meaning = "What do you do for a living?" +situation = "You want to know what the other person does for work." +tip = "Much more natural than '¿Cuál es tu trabajo?', just like 'What do you do?' in English." + +[[phrase]] +say = "¿Puedes hablar más despacio?" +meaning = "Can you speak more slowly?" +situation = "The person is talking way too fast." + +[[phrase]] +say = "¿Cómo se dice esto en español?" +meaning = "How do you say this in Spanish?" +situation = "You don't know a word." + +[[phrase]] +say = "No pasa nada" +meaning = "No problem / don't worry about it" +situation = "Someone apologizes for something small." + +[[phrase]] +say = "Ya voy en camino" +meaning = "I'm on my way" +situation = "A friend asks if you're almost there." + +[[phrase]] +say = "Me encantó verte" +meaning = "It was great to see you" +situation = "You're leaving the party." + +[[phrase]] +say = "¿Cómo va todo?" +meaning = "How's it going?" +situation = "You run into a neighbor in the elevator." +tip = "A natural reply: 'Todo bien, ¿y tú?'." + +[[phrase]] +say = "Ella es mi amiga Ana." +meaning = "This is my friend Ana." +situation = "Your friend arrives at the party and you introduce her to a coworker." + +[[phrase]] +say = "Así estoy bien, gracias." +meaning = "I'm good, thanks." +situation = "The host offers you another drink and you don't want one." + +[[phrase]] +say = "¿Cuál es tu número?" +meaning = "What's your number?" +situation = "You want to keep in touch with someone you met today." + +[[phrase]] +say = "¡Qué buena noticia!" +meaning = "That's great news!" +situation = "A friend tells you they got the job." + +[[phrase]] +say = "¿Quieres tomar un café?" +meaning = "Do you want to grab a coffee?" +situation = "You'd like to get to know a new coworker better." +tip = "Drinks are 'taken' in Spanish: 'tomar un café', 'tomar algo'." + +[[phrase]] +say = "Hoy no puedo ir." +meaning = "I can't make it today." +situation = "You're invited out tonight, but you already have plans." + +[[phrase]] +say = "Lo siento mucho." +meaning = "I'm so sorry to hear that." +situation = "A friend tells you they lost their job." + +[[phrase]] +say = "Perdón por hacerte esperar." +meaning = "Sorry to keep you waiting." +situation = "You arrive twenty minutes after the agreed time." + +[[phrase]] +say = "Nada especial, me quedé en casa." +meaning = "Not much, I just stayed home." +situation = "On Monday, a coworker asks how your weekend was." + +[[phrase]] +say = "¿Qué planes tienes para el fin de semana?" +meaning = "What are you up to this weekend?" +situation = "Friday afternoon, you want to know your friend's plans." + +[[phrase]] +say = "¡Tanto tiempo!" +meaning = "Long time no see!" +situation = "You bump into a friend you haven't seen in years." + +[[phrase]] +say = "Ya me tengo que ir." +meaning = "I should get going." +situation = "The conversation is good, but you have to leave." + +[[phrase]] +say = "La próxima la invito yo." +meaning = "The next one is on me." +situation = "Your friend insists on paying the bar tab again." +tip = "'Invitar' here means to pay for someone: 'te invito' = it's on me." diff --git a/decks/i18n/es.en/travel.toml b/decks/i18n/es.en/travel.toml new file mode 100644 index 0000000..f2c0eba --- /dev/null +++ b/decks/i18n/es.en/travel.toml @@ -0,0 +1,62 @@ +# decks/i18n/es.en (English for decks/es): viagem. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Tengo una reserva a mi nombre" +meaning = "I have a reservation under my name" +situation = "You've just arrived at the hotel." + +[[phrase]] +say = "¿El desayuno está incluido?" +meaning = "Is breakfast included?" +situation = "You want to know if breakfast is included." + +[[phrase]] +say = "Mi maleta no llegó" +meaning = "My suitcase didn't arrive" +situation = "Your suitcase never showed up." + +[[phrase]] +say = "¿Cómo llego a la estación de metro?" +meaning = "How do I get to the subway station?" +situation = "You're lost, looking for the subway." + +[[phrase]] +say = "¿Cuánto se tarda en llegar al centro?" +meaning = "How long does it take to get downtown?" +situation = "You want to know how long it takes to get to the city center." + +[[phrase]] +say = "Estoy de vacaciones" +meaning = "I'm on vacation" +situation = "At immigration, they ask why you're traveling." + +[[phrase]] +say = "¿Me puede pedir un taxi al aeropuerto?" +meaning = "Could you call me a taxi to the airport?" +situation = "You need a taxi to the airport." + +[[phrase]] +say = "¿Dónde puedo comprar un boleto?" +meaning = "Where can I buy a ticket?" +situation = "At the station, you can't find the ticket office." +tip = "'Boleto' in Latin America, 'billete' in Spain." + +[[phrase]] +say = "¿Este tren va al aeropuerto?" +meaning = "Does this train go to the airport?" +situation = "The train is at the platform and you're not sure it's yours." + +[[phrase]] +say = "¿Nos puede tomar una foto?" +meaning = "Can you take our picture?" +situation = "You and your friend want a photo together in front of the monument." + +[[phrase]] +say = "¿A qué hora abre el museo?" +meaning = "What time does the museum open?" +situation = "You're planning tomorrow with the hotel receptionist." + +[[phrase]] +say = "¿Puedo dejar mis maletas aquí?" +meaning = "Can I leave my bags here?" +situation = "You checked out in the morning, but your flight isn't until tonight." diff --git a/decks/i18n/es.en/work.toml b/decks/i18n/es.en/work.toml new file mode 100644 index 0000000..a12239c --- /dev/null +++ b/decks/i18n/es.en/work.toml @@ -0,0 +1,172 @@ +# decks/i18n/es.en (English for decks/es): trabalho. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +say = "Perdón, estás en silencio" +meaning = "Sorry, you're on mute" +situation = "Your coworker is talking, but they're on mute." + +[[phrase]] +say = "¿Puedes compartir tu pantalla?" +meaning = "Can you share your screen?" +situation = "You want to see what your coworker is showing." + +[[phrase]] +say = "Voy a llegar unos minutos tarde" +meaning = "I'm going to be a few minutes late" +situation = "You're running late for the meeting." + +[[phrase]] +say = "Déjame revisarlo y te aviso" +meaning = "Let me check and I'll let you know" +situation = "You need to confirm something before you answer." + +[[phrase]] +say = "¿Me lo puedes explicar paso a paso?" +meaning = "Can you explain it to me step by step?" +situation = "You didn't understand the explanation." + +[[phrase]] +say = "¿Cuál es la fecha de entrega?" +meaning = "What's the deadline?" +situation = "You're asked about the deadline for a task." + +[[phrase]] +say = "¿Podemos pasarlo para mañana?" +meaning = "Can we move it to tomorrow?" +situation = "The meeting needs to be pushed back." + +[[phrase]] +say = "Tiene sentido" +meaning = "That makes sense" +situation = "You agree with the idea." + +[[phrase]] +say = "Creo que hay un error en producción" +meaning = "I think there's a bug in production" +situation = "You found a serious problem in production." + +[[phrase]] +say = "Te mando un correo con el resumen" +meaning = "I'll send you an email with the summary" +situation = "You'll send a summary after the meeting." +tip = "Email in Spanish is 'correo' (or just 'mail' in casual talk)." + +[[phrase]] +say = "¿Me escuchas bien?" +meaning = "Can you hear me okay?" +situation = "You want to check that your audio is fine." + +[[phrase]] +say = "Entiendo, pero no estoy seguro de que funcione" +meaning = "I see, but I'm not sure it will work" +situation = "You disagree, but politely." + +[[phrase]] +say = "Estoy en una reunión." +meaning = "I'm in a meeting." +situation = "Your phone rings during a meeting and you answer quickly to say so." + +[[phrase]] +say = "Estoy en una llamada." +meaning = "I'm on a call." +situation = "A coworker comes to your desk while you're on a call." + +[[phrase]] +say = "Trabajo en informática." +meaning = "I work in IT." +situation = "At the company party, someone from another team asks what you do." + +[[phrase]] +say = "La reunión es a las diez." +meaning = "The meeting is at ten." +situation = "A coworker asks what time today's meeting is." + +[[phrase]] +say = "¿Dónde está la sala de reuniones?" +meaning = "Where is the meeting room?" +situation = "First day at the office, you're looking for where the meeting will be." + +[[phrase]] +say = "¿Puede repetir, por favor?" +meaning = "Could you repeat that, please?" +situation = "On a call, the client spoke fast and you missed the order number." + +[[phrase]] +say = "Este es mi jefe." +meaning = "This is my boss." +situation = "A client arrives and you introduce the person who leads your team." + +[[phrase]] +say = "Tengo una pregunta." +meaning = "I have a question." +situation = "At the end of the presentation they ask if anyone has questions, and you do." + +[[phrase]] +say = "Hoy estoy enfermo." +meaning = "I'm sick today." +situation = "You wake up with a fever and tell the team in chat you won't be working." + +[[phrase]] +say = "Gracias por tu ayuda." +meaning = "Thanks for your help." +situation = "A coworker spent half an hour helping you set up your laptop." + +[[phrase]] +say = "Nos vemos el lunes." +meaning = "See you Monday." +situation = "Friday afternoon, you leave the office and say bye to the team." + +[[phrase]] +say = "¿Hablamos después del almuerzo?" +meaning = "Can we talk after lunch?" +situation = "A coworker wants to chat, but you're in the middle of a deliverable." + +[[phrase]] +say = "Hoy te mando el correo." +meaning = "I'll send you the email today." +situation = "The client asks when they'll get the proposal." + +[[phrase]] +say = "Hoy trabajo desde casa." +meaning = "I'm working from home today." +situation = "A coworker asks if you're coming to the office today." + +[[phrase]] +say = "¿Me mandas el enlace?" +meaning = "Can you send me the link?" +situation = "The meeting already started and you can't find the invite in your calendar." + +[[phrase]] +say = "No me funciona internet." +meaning = "My internet isn't working." +situation = "You join the call late and explain why." + +[[phrase]] +say = "No te oigo." +meaning = "I can't hear you." +situation = "On the call, your coworker's audio suddenly cuts out." + +[[phrase]] +say = "La reunión se movió al viernes." +meaning = "The meeting was moved to Friday." +situation = "You tell a coworker that Wednesday's meeting changed days." + +[[phrase]] +say = "Llego cinco minutos tarde." +meaning = "I'll be five minutes late." +situation = "Traffic stopped and you post in chat that you'll be late." + +[[phrase]] +say = "¿A qué hora te viene bien?" +meaning = "What time works for you?" +situation = "You want to set up a chat with a client and ask for the best time." + +[[phrase]] +say = "Terminé el informe." +meaning = "I finished the report." +situation = "Your boss asks how the monthly report is going." + +[[phrase]] +say = "Nos vemos mañana a las nueve." +meaning = "See you tomorrow at nine." +situation = "You agree with a coworker to review the project together." diff --git a/decks/pt.basics.toml b/decks/pt.basics.toml index 1cf4560..dce012a 100644 --- a/decks/pt.basics.toml +++ b/decks/pt.basics.toml @@ -815,3 +815,235 @@ say = "Estou atrasado." polished = "Desculpa, estou um pouco atrasado." meaning = "I'm late." accept = ["Estou atrasada", "Tô atrasado", "Tô atrasada"] + +# ---------------------------------------------------------------- emergencies + +[[phrase]] +topic = "emergência" +level = "PRE-A1" +situation = "You see smoke coming out of the restaurant's kitchen." +say = "Fogo!" +polished = "Tem fogo na cozinha!" +meaning = "Fire!" + +[[phrase]] +topic = "emergência" +level = "PRE-A1" +situation = "A cyclist is about to hit your friend, who is looking at his phone." +say = "Cuidado!" +polished = "Cuidado com a bicicleta!" +meaning = "Watch out!" + +[[phrase]] +topic = "emergência" +level = "PRE-A1" +situation = "Someone collapses next to you on the street and people gather around." +say = "Uma ambulância!" +polished = "Chama uma ambulância, por favor!" +meaning = "An ambulance!" + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Your phone and wallet are gone and you stop a police officer." +say = "Preciso de ajuda." +polished = "Por favor, preciso de ajuda." +meaning = "I need help." +accept = ["Eu preciso de ajuda"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "You reach into your pocket on the subway and your wallet is gone." +say = "Roubaram minha carteira." +polished = "Roubaram minha carteira no metrô." +meaning = "Someone stole my wallet." +accept = ["Levaram minha carteira"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Your friend is hurt and you need to get to a hospital fast." +say = "Cadê o hospital?" +polished = "Cadê o hospital mais próximo?" +meaning = "Where's the hospital?" +accept = ["Onde fica o hospital?", "Onde é o hospital?"] +tip = "'Cadê' is everyday Brazilian for 'where is'." + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "You get back to the hotel and realize your phone stayed in the taxi." +say = "Perdi meu celular." +polished = "Perdi meu celular, pode me ajudar?" +meaning = "I lost my phone." +accept = ["Perdi o meu celular"] + +# ---------------------------------------------------------------- shopping + +[[phrase]] +topic = "compras" +level = "PRE-A1" +situation = "A street vendor tells you the price of a hat and it's far more than you expected." +say = "Muito caro." +polished = "Está muito caro pra mim." +meaning = "Too expensive." +accept = ["Tá muito caro", "É muito caro"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "You walk into a clothing store and the assistant asks if you need help." +say = "Só olhando." +polished = "Estou só olhando, obrigado." +meaning = "Just looking." +accept = ["Só estou olhando", "Estou só olhando"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "You find a shirt you like and want to see how it fits." +say = "Posso provar?" +polished = "Posso provar essa camisa?" +meaning = "Can I try it on?" +accept = ["Posso experimentar?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "The shoes are tight and you want the next size up." +say = "Tem maior?" +polished = "Tem um número maior?" +meaning = "Do you have a bigger one?" +accept = ["Tem um maior?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "You like the jacket and decide to buy it." +say = "Vou levar." +polished = "Gostei, vou levar essa." +meaning = "I'll take it." +accept = ["Vou levar esse", "Vou levar essa"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "At a small shop, you're about to pay in cash and want a better price." +say = "Tem desconto?" +polished = "Tem desconto pagando em dinheiro?" +meaning = "Is there a discount?" +tip = "Asking for a discount when paying cash is normal in Brazil." + +[[phrase]] +topic = "compras" +level = "A1" +situation = "The cashier holds the card machine and asks 'crédito ou débito?'." +say = "No débito." +polished = "Vou pagar no débito, por favor." +meaning = "Debit." +accept = ["Débito", "É débito"] + +# ---------------------------------------------------------------- health and friends + +[[phrase]] +topic = "saúde e social" +level = "PRE-A1" +situation = "A friend tells you he got the job he wanted." +say = "Que legal!" +polished = "Que legal, parabéns pra você!" +meaning = "That's great!" +accept = ["Que bom!", "Que massa!"] +tip = "'Legal' means cool or nice far more often than it means legal." + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "You wake up feeling awful and message your team." +say = "Estou doente." +polished = "Hoje estou doente, desculpa." +meaning = "I'm sick." +accept = ["Tô doente"] + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "You take your temperature and the thermometer reads thirty-nine." +say = "Estou com febre." +polished = "Acho que estou com febre." +meaning = "I have a fever." +accept = ["Tô com febre", "Tenho febre"] +tip = "Portuguese is 'with' symptoms: 'estou com febre', 'estou com fome', 'estou com frio'." + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "At the pharmacy, the pharmacist asks what you need." +say = "Dor de cabeça." +polished = "Tem remédio pra dor de cabeça?" +meaning = "A headache." +accept = ["Estou com dor de cabeça"] + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "A friend tells you her grandmother is in the hospital." +say = "Sinto muito." +polished = "Sinto muito pelo que aconteceu." +meaning = "I'm so sorry." +accept = ["Eu sinto muito"] + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "You bump into a friend you haven't seen in years." +say = "Quanto tempo!" +polished = "Quanto tempo, como você está?" +meaning = "Long time no see!" + +[[phrase]] +topic = "saúde e social" +level = "A1" +situation = "You'd like to get to know a new coworker better." +say = "Vamos tomar café?" +polished = "Vamos tomar um café amanhã?" +meaning = "Shall we get a coffee?" +accept = ["Vamos tomar um café?"] + +# ---------------------------------------------------------------- on the phone + +[[phrase]] +topic = "primeiros contatos" +level = "PRE-A1" +situation = "Your phone rings and you pick up." +say = "Alô?" +polished = "Alô, quem está falando?" +meaning = "Hello? (on the phone)" +tip = "'Alô' is only for the phone. In person, say 'oi'." + +[[phrase]] +topic = "primeiros contatos" +level = "A1" +situation = "You pick up the phone and don't recognize the voice." +say = "Quem fala?" +polished = "Quem fala, por favor?" +meaning = "Who's speaking?" +accept = ["Quem é?", "Quem está falando?"] + +[[phrase]] +topic = "primeiros contatos" +level = "A1" +situation = "Someone calls asking for a person you've never heard of." +say = "Número errado." +polished = "Desculpa, é o número errado." +meaning = "Wrong number." +accept = ["É engano", "Foi engano"] + +[[phrase]] +topic = "primeiros contatos" +level = "A1" +situation = "A friend calls just as you're getting on the bus." +say = "Te ligo depois." +polished = "Te ligo depois do almoço." +meaning = "I'll call you later." +accept = ["Depois te ligo", "Eu te ligo depois"] diff --git a/decks/pt/deck.toml b/decks/pt/deck.toml new file mode 100644 index 0000000..f677ed5 --- /dev/null +++ b/decks/pt/deck.toml @@ -0,0 +1,40 @@ +# Hand-curated Brazilian Portuguese for English speakers: full phrases for real situations. +# The first words and short chunks are in pt.basics.toml. +language = "pt-BR" +native = "en" +language_name = "Portuguese" +title = "Portuguese for real life" + + +[[tip]] +text = "False friend: 'puxe' on a door means PULL. Push is 'empurre'." +[[tip]] +text = "False friend: 'pretender' means to intend. To pretend is 'fingir'." +[[tip]] +text = "False friend: 'atualmente' means currently. Actually is 'na verdade'." +[[tip]] +text = "False friend: 'esquisito' means weird, not exquisite." +[[tip]] +text = "False friend: 'parentes' are relatives. Parents are 'pais'." +[[tip]] +text = "False friend: 'livraria' is a bookshop. A library is 'biblioteca'." +[[tip]] +text = "Pronunciation: a final 'm' is nasal, never a closed 'm': 'bem' sounds like 'bayng'." +[[tip]] +text = "Pronunciation: 'ão' is a nasal 'own' said through the nose: 'não', 'pão', 'coração'." +[[tip]] +text = "Pronunciation: 'lh' is like the 'lli' in 'million'; 'nh' is like the 'ny' in 'canyon'." +[[tip]] +text = "Pronunciation: 'de' and 'te' at the end of a word sound like 'jee' and 'chee': 'cidade', 'noite'." +[[tip]] +text = "Pronunciation: an 'r' at the start of a word sounds like an English 'h': 'Rio' = 'HEE-oo'." +[[tip]] +text = "Spoken Brazilian shortens: 'estou' becomes 'tô', 'está' becomes 'tá', 'para' becomes 'pra'." +[[tip]] +text = "'Você' is the everyday 'you'. 'O senhor' and 'a senhora' are the polite forms for older people." +[[tip]] +text = "'Tudo bem?' is both the question and the answer: 'Tudo bem?' 'Tudo bem!'." +[[tip]] +text = "A man says 'obrigado', a woman says 'obrigada'." +[[tip]] +text = "Adding '-inho' softens almost anything: 'um minutinho', 'um cafezinho', 'rapidinho'." diff --git a/decks/pt/emergency.toml b/decks/pt/emergency.toml new file mode 100644 index 0000000..e1cd12e --- /dev/null +++ b/decks/pt/emergency.toml @@ -0,0 +1,134 @@ +# decks/pt: emergência. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "You see smoke coming out of the restaurant's kitchen." +say = "Está pegando fogo!" +polished = "Está pegando fogo, saiam todos!" +meaning = "There's a fire!" +accept = ["Tá pegando fogo"] +tip = "'Pegar fogo' = to catch fire." + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "You come out of the subway in a city you don't know and can't find your way back." +say = "Não acho meu hotel." +polished = "Com licença, não acho meu hotel." +meaning = "I can't find my hotel." +accept = ["Não encontro meu hotel", "Não consigo achar meu hotel"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "You get back to your table at the café and your backpack is gone." +say = "Roubaram minha mochila." +short = "Minha mochila!" +polished = "Com licença, acabaram de roubar minha mochila." +meaning = "Someone stole my backpack." +accept = ["Levaram minha mochila", "Roubaram a minha mochila"] +tip = "'Roubaram' = 'they stole'. Portuguese says 'they' when nobody knows who did it." + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Someone collapses next to you on the street." +say = "Precisamos de um médico." +short = "Um médico!" +polished = "Precisamos de um médico aqui, rápido, por favor!" +meaning = "We need a doctor." +accept = ["A gente precisa de um médico"] + +[[phrase]] +topic = "emergência" +level = "A1" +situation = "Your friend is hurt and you flag down a taxi." +say = "Preciso ir pra um hospital." +short = "Pro hospital, rápido!" +polished = "Por favor, preciso ir pra um hospital agora." +meaning = "I need to get to a hospital." +accept = ["Preciso ir para um hospital", "Preciso ir pro hospital"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Your friend fell off his bike and can't get up." +say = "Meu amigo está machucado." +short = "Ele está machucado!" +polished = "Me ajuda, por favor, meu amigo está muito machucado." +meaning = "My friend is hurt." +accept = ["Minha amiga está machucada", "Meu amigo se machucou"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "You call emergency services and they ask where you are." +say = "Não sei o endereço." +short = "Não sei." +polished = "Desculpa, não sei o endereço exato." +meaning = "I don't know the address." +accept = ["Eu não sei o endereço"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "Your phone died and you need to let your family know." +say = "Posso usar seu celular?" +short = "Seu celular, por favor?" +polished = "Desculpa, posso usar seu celular um minutinho?" +meaning = "Can I use your phone?" +accept = ["Posso usar o seu celular?", "Me empresta seu celular?"] +tip = "'Celular' is a mobile phone." + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "The door slammed shut and your keys are inside the apartment." +say = "Fiquei trancado pra fora." +short = "Fiquei pra fora." +polished = "Fiquei trancado pra fora do meu apartamento." +meaning = "I'm locked out." +accept = ["Fiquei trancada pra fora", "Fiquei trancado para fora"] + +[[phrase]] +topic = "emergência" +level = "A2" +situation = "After a minor car crash, you get out to check on people." +say = "Está todo mundo bem?" +short = "Todo mundo bem?" +polished = "Está todo mundo bem? Alguém se machucou?" +meaning = "Is everyone okay?" +accept = ["Tá todo mundo bem?"] +tip = "'Todo mundo' (the whole world) is how Brazilians say 'everyone'." + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "At the police station, after your backpack was taken." +say = "Preciso registrar um furto." +short = "Fui roubado." +polished = "Oi, eu gostaria de registrar um furto, por favor." +meaning = "I need to report a theft." +accept = ["Quero fazer um boletim de ocorrência", "Quero registrar um furto"] +tip = "The police report is a 'boletim de ocorrência', 'B.O.' for short." + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "Your card is missing and you call the bank." +say = "Preciso cancelar meu cartão." +short = "Cancela meu cartão." +polished = "Perdi meu cartão e preciso cancelar." +meaning = "I need to cancel my card." +accept = ["Preciso bloquear meu cartão", "Quero cancelar meu cartão"] + +[[phrase]] +topic = "emergência" +level = "B1" +situation = "A man has passed out and you're on the phone with emergency services." +say = "Ele não está respirando." +short = "Não respira!" +polished = "Rápido, por favor, ele não está respirando!" +meaning = "He's not breathing." +accept = ["Ele não respira", "Ele não tá respirando"] diff --git a/decks/pt/first-contact.toml b/decks/pt/first-contact.toml new file mode 100644 index 0000000..d48b18e --- /dev/null +++ b/decks/pt/first-contact.toml @@ -0,0 +1,79 @@ +# decks/pt: primeiros contatos. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "You get stuck mid-sentence while talking to a stranger." +say = "Estou aprendendo português." +short = "Estou aprendendo." +polished = "Ainda estou aprendendo português, tenha paciência." +meaning = "I'm learning Portuguese." +accept = ["Tô aprendendo português", "Ainda estou aprendendo português"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "A neighbor asks how long you've been in town." +say = "Me mudei pra cá ano passado." +short = "Ano passado." +polished = "Me mudei pra cá ano passado, a trabalho." +meaning = "I moved here last year." +accept = ["Me mudei para cá no ano passado", "Vim pra cá ano passado"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "You chat with someone in line at the neighborhood bakery." +say = "Você mora por aqui?" +polished = "E você, mora por aqui perto?" +meaning = "Do you live around here?" +accept = ["Você mora aqui perto?", "Mora por aqui?"] + +[[phrase]] +topic = "primeiros contatos" +level = "A2" +situation = "You say goodbye to someone you met today at a dinner." +say = "Foi um prazer te conhecer." +short = "Foi um prazer." +polished = "Foi um prazer enorme te conhecer." +meaning = "It was nice meeting you." +accept = ["Foi um prazer conhecer você", "Prazer em te conhecer"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "A new coworker tells you they came from another country." +say = "O que te trouxe pra cá?" +polished = "Me conta, o que te trouxe pra essa cidade?" +meaning = "What brought you here?" +accept = ["O que te trouxe para cá?", "O que te traz aqui?"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "You meet someone from the neighborhood at a block party." +say = "Há quanto tempo você mora aqui?" +short = "Há quanto tempo?" +polished = "E você, há quanto tempo mora aqui?" +meaning = "How long have you lived here?" +accept = ["Faz quanto tempo que você mora aqui?"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "Someone asks how life in the new city is going." +say = "Ainda estou me acostumando." +short = "Estou me acostumando." +polished = "Sinceramente, ainda estou me acostumando." +meaning = "I'm still getting used to it." +accept = ["Ainda tô me acostumando"] + +[[phrase]] +topic = "primeiros contatos" +level = "B1" +situation = "On the last day of the course, you say goodbye to a classmate." +say = "A gente precisa manter contato." +short = "Vamos manter contato." +polished = "A gente precisa mesmo manter contato." +meaning = "We should keep in touch." +accept = ["Precisamos manter contato", "Vamos manter contato"] diff --git a/decks/pt/health-and-social.toml b/decks/pt/health-and-social.toml new file mode 100644 index 0000000..75819a9 --- /dev/null +++ b/decks/pt/health-and-social.toml @@ -0,0 +1,43 @@ +# decks/pt: saúde e social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "A friend notices you've been quiet and asks if everything is okay." +say = "Ando muito estressado ultimamente." +short = "Ando estressado." +polished = "Pra falar a verdade, ando muito estressado ultimamente." +meaning = "I've been feeling stressed lately." +accept = ["Ando muito estressada ultimamente", "Tenho andado muito estressado"] +tip = "'Andar' + adjective = how you've been lately. A woman says 'estressada'." + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "A coworker invites you out late on a Tuesday." +say = "Estou tentando dormir mais." +short = "Preciso dormir mais." +polished = "Ultimamente estou tentando dormir mais." +meaning = "I'm trying to get more sleep." +accept = ["Tô tentando dormir mais"] + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "Your friend is exhausted and won't stop working." +say = "Você devia tirar um dia de folga." +short = "Tira um dia de folga." +polished = "Eu acho mesmo que você devia tirar um dia de folga." +meaning = "You should take a day off." +accept = ["Você deveria tirar um dia de folga"] +tip = "'Folga' is a day off. A holiday for everyone is a 'feriado'." + +[[phrase]] +topic = "saúde e social" +level = "B1" +situation = "A friend is sick at home, alone." +say = "Me avisa se precisar de algo." +short = "Me avisa." +polished = "Por favor, me avisa se precisar de qualquer coisa." +meaning = "Let me know if you need anything." +accept = ["Me avisa se precisar de alguma coisa", "Me fala se precisar de algo"] diff --git a/decks/pt/health.toml b/decks/pt/health.toml new file mode 100644 index 0000000..c21ff9a --- /dev/null +++ b/decks/pt/health.toml @@ -0,0 +1,148 @@ +# decks/pt: saúde. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "At the pharmacy, the assistant asks what's wrong." +say = "Estou com dor de garganta." +short = "Dor de garganta." +polished = "Estou com muita dor de garganta." +meaning = "I have a sore throat." +accept = ["Tô com dor de garganta", "Minha garganta está doendo"] +tip = "Portuguese is 'with' a pain: 'estou com dor de garganta', 'estou com dor nas costas'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "You can't stop coughing and go to the pharmacy." +say = "Preciso de algo pra tosse." +short = "Algo pra tosse?" +polished = "Você tem alguma coisa pra tosse forte?" +meaning = "I need something for a cough." +accept = ["Preciso de algo para tosse", "Preciso de um remédio pra tosse"] +tip = "'Pra' is the everyday spoken form of 'para'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "Before prescribing, the doctor asks if you have any allergies." +say = "Sou alérgico a penicilina." +short = "A penicilina." +polished = "Sim, sou alérgico a penicilina." +meaning = "I'm allergic to penicillin." +accept = ["Sou alérgica a penicilina", "Tenho alergia a penicilina"] +tip = "A woman says 'alérgica'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "You cut your finger cooking at a friend's place." +say = "Você tem um band-aid?" +polished = "Com licença, você tem um band-aid?" +meaning = "Do you have a band-aid?" +accept = ["Tem um band-aid?", "Você tem um curativo?"] +tip = "Brazilians say 'band-aid' too; the generic word is 'curativo'." + +[[phrase]] +topic = "saúde" +level = "A1" +situation = "In the middle of dinner at a friend's place, you start to feel sick." +say = "Não estou me sentindo bem." +short = "Não estou bem." +polished = "Desculpa, não estou me sentindo muito bem." +meaning = "I'm not feeling well." +accept = ["Não tô me sentindo bem", "Não me sinto bem"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "You call the clinic first thing in the morning, without an appointment." +say = "Consigo passar com um médico hoje?" +short = "Um médico hoje?" +polished = "Será que eu consigo passar com um médico hoje?" +meaning = "Can I see a doctor today?" +accept = ["Eu consigo passar com um médico hoje?"] +tip = "'Passar com o médico' = to be seen by the doctor." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "The doctor asks how long you've been in pain." +say = "Começou há dois dias." +short = "Há dois dias." +polished = "Começou há uns dois dias." +meaning = "It started two days ago." +accept = ["Começou faz dois dias"] +tip = "'Há dois dias' and 'faz dois dias' both mean two days ago." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "You stand up too fast and everything starts spinning." +say = "Estou tonto." +polished = "Estou tonto desde hoje de manhã." +meaning = "I feel dizzy." +accept = ["Estou tonta", "Tô tonto", "Tô tonta"] +tip = "A woman says 'tonta'." + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "You landed badly playing soccer and your foot is swollen." +say = "Acho que torci o tornozelo." +short = "Torci o tornozelo." +polished = "Acho que eu torci o tornozelo jogando bola." +meaning = "I think I sprained my ankle." +accept = ["Acho que torci o pé"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "The pharmacist hands you the medicine and you don't know the dose." +say = "De quanto em quanto tempo eu tomo?" +short = "Quantas vezes por dia?" +polished = "Desculpa, de quanto em quanto tempo eu tomo?" +meaning = "How often should I take it?" +accept = ["De quanto em quanto tempo devo tomar?"] + +[[phrase]] +topic = "saúde" +level = "A2" +situation = "The doctor asks if you take any medicine every day." +say = "Não tomo nenhum remédio." +short = "Nenhum remédio." +polished = "Não, não tomo nenhum remédio no momento." +meaning = "I'm not taking any medication." +accept = ["Não estou tomando nenhum remédio"] + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "Your regular medication ran out and you go to the doctor." +say = "Preciso renovar minha receita." +short = "Renovar minha receita." +polished = "Oi, preciso renovar minha receita, por favor." +meaning = "I need to renew my prescription." +accept = ["Preciso renovar a minha receita"] +tip = "'Receita' is both a prescription and a cooking recipe." + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "At the clinic's front desk, before an expensive test." +say = "Meu plano cobre isso?" +short = "O plano cobre?" +polished = "Você pode me dizer se meu plano cobre isso?" +meaning = "Does my insurance cover this?" +accept = ["O meu plano cobre isso?", "Meu convênio cobre isso?"] +tip = "'Plano' (de saúde) or 'convênio' is health insurance." + +[[phrase]] +topic = "saúde" +level = "B1" +situation = "You call the dentist asking to be squeezed in urgently." +say = "Estou com muita dor de dente." +short = "Dor de dente." +polished = "Estou com muita dor de dente desde ontem à noite." +meaning = "I have a terrible toothache." +accept = ["Tô com muita dor de dente"] diff --git a/decks/pt/home-and-paperwork.toml b/decks/pt/home-and-paperwork.toml new file mode 100644 index 0000000..13d0b7b --- /dev/null +++ b/decks/pt/home-and-paperwork.toml @@ -0,0 +1,84 @@ +# decks/pt: casa e burocracia. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "The internet in your rented apartment is down and you write to the owner." +say = "O wi-fi não está funcionando." +short = "Sem wi-fi." +polished = "Oi, o wi-fi não está funcionando no meu apartamento." +meaning = "The wifi isn't working." +accept = ["O wi-fi não funciona", "A internet não está funcionando", "O wi-fi não tá funcionando"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "First week in the new building, you run into a neighbor in the hallway." +say = "Onde eu coloco o lixo?" +short = "Onde vai o lixo?" +polished = "Desculpa, onde eu tenho que colocar o lixo?" +meaning = "Where do I take out the trash?" +accept = ["Onde coloco o lixo?", "Onde eu jogo o lixo?"] + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "At the bank counter, the teller asks how she can help." +say = "Queria sacar dinheiro." +polished = "Oi, eu queria sacar dinheiro, por favor." +meaning = "I'd like to withdraw some money." +accept = ["Quero sacar dinheiro", "Eu queria sacar dinheiro"] +tip = "'Sacar' = to withdraw cash." + +[[phrase]] +topic = "casa e burocracia" +level = "A2" +situation = "The street market is cash only and you have none." +say = "Tem um caixa eletrônico por aqui?" +short = "Um caixa eletrônico?" +polished = "Com licença, tem um caixa eletrônico por aqui?" +meaning = "Is there an ATM nearby?" +accept = ["Tem um caixa eletrônico aqui perto?", "Tem um banco 24 horas por aqui?"] + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "The kitchen sink drips all night and you tell the landlord." +say = "A torneira está vazando." +short = "Está vazando." +polished = "Oi, a torneira da cozinha está vazando." +meaning = "The faucet is leaking." +accept = ["A torneira tá vazando", "A torneira está pingando"] + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "The ATM didn't give your card back and you walk into the branch." +say = "O caixa engoliu meu cartão." +short = "Engoliu meu cartão." +polished = "Com licença, o caixa eletrônico engoliu meu cartão." +meaning = "The ATM kept my card." +accept = ["O caixa eletrônico engoliu meu cartão", "O caixa ficou com meu cartão"] +tip = "The ATM 'swallows' the card: 'engoliu'." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "You walk up to the counter with the electricity bill in your hand." +say = "Preciso pagar esse boleto." +short = "Pagar isso, por favor." +polished = "Oi, preciso pagar esse boleto, por favor." +meaning = "I need to pay this bill." +accept = ["Quero pagar esse boleto", "Preciso pagar essa conta"] +tip = "A 'boleto' is the payment slip Brazilians use for bills. Most people now pay with Pix." + +[[phrase]] +topic = "casa e burocracia" +level = "B1" +situation = "First month in the apartment, you write to the landlord." +say = "Quando vence o aluguel?" +short = "Quando vence?" +polished = "Você pode me lembrar quando vence o aluguel?" +meaning = "When is the rent due?" +accept = ["Que dia vence o aluguel?"] +tip = "'Vencer' = to be due: 'o aluguel vence dia cinco'." diff --git a/decks/pt/phone.toml b/decks/pt/phone.toml new file mode 100644 index 0000000..3fe0634 --- /dev/null +++ b/decks/pt/phone.toml @@ -0,0 +1,143 @@ +# decks/pt: telefone. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "You pick up the phone and don't recognize the voice." +say = "Com quem eu falo?" +polished = "Com quem eu falo, por favor?" +meaning = "Who am I speaking with?" +accept = ["Com quem estou falando?", "Quem está falando?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "The line goes quiet and you're not sure the other person can hear you." +say = "Você está me ouvindo?" +polished = "Alô, você está me ouvindo bem?" +meaning = "Can you hear me?" +accept = ["Está me ouvindo?", "Tá me ouvindo?"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "You call a friend's home and someone else picks up." +say = "Posso falar com a Ana?" +short = "A Ana, por favor." +polished = "Oi, eu poderia falar com a Ana, por favor?" +meaning = "Can I speak to Ana?" +accept = ["Eu posso falar com a Ana?", "A Ana está?"] +tip = "Names take an article in Brazil: 'a Ana', 'o Pedro'." + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "The doorbell rings in the middle of a call and you have to go open the door." +say = "Espera um segundo." +short = "Espera aí." +polished = "Você pode esperar um segundo, por favor?" +meaning = "Hold on a second." +accept = ["Só um segundo", "Um segundinho"] + +[[phrase]] +topic = "telefone" +level = "A1" +situation = "A friend calls just as you're getting on the bus." +say = "Eu te ligo de volta." +short = "Te ligo de volta." +polished = "Posso te ligar de volta em dez minutos?" +meaning = "I'll call you back." +accept = ["Te retorno", "Já te ligo"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "You can't make tomorrow's doctor's appointment and call the clinic." +say = "Preciso remarcar minha consulta." +short = "Posso remarcar?" +polished = "Oi, preciso remarcar minha consulta, por favor." +meaning = "I need to reschedule my appointment." +accept = ["Preciso remarcar a minha consulta"] +tip = "'Consulta' is a doctor's appointment: 'marcar' books it, 'remarcar' moves it." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "The receptionist read out the phone number too fast for you to write down." +say = "Pode repetir o número?" +short = "O número de novo?" +polished = "Desculpa, pode repetir o número mais devagar?" +meaning = "Could you repeat the number?" +accept = ["Você pode repetir o número?"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "The signal is bad and the other person's voice keeps dropping." +say = "A ligação está cortando." +short = "Está cortando." +polished = "Desculpa, a ligação está cortando, quase não te ouço." +meaning = "You're breaking up." +accept = ["A ligação tá cortando", "Tá cortando"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "A friend explains where the party is, but you'd rather have it in writing." +say = "Me manda o endereço por mensagem?" +short = "Me manda o endereço." +polished = "Você pode me mandar o endereço por mensagem, por favor?" +meaning = "Can you text me the address?" +accept = ["Você me manda o endereço por mensagem?"] +tip = "'Endereço' is a street address. In Brazil a 'mensagem' is almost always WhatsApp." + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "Your friend doesn't pick up and you leave a voice message." +say = "Me liga quando puder." +short = "Me liga." +polished = "Oi, sou eu, me liga quando puder." +meaning = "Call me when you can." +accept = ["Me liga quando você puder"] + +[[phrase]] +topic = "telefone" +level = "A2" +situation = "The agent asks if you can stay on the line." +say = "Claro, eu aguardo." +polished = "Claro, sem problema, eu aguardo." +meaning = "Sure, I can hold." +accept = ["Claro, eu espero", "Sim, eu aguardo"] + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "Your home internet is down and you call support." +say = "Estou ligando por causa da minha internet." +short = "É sobre a minha internet." +polished = "Oi, estou ligando por causa de um problema na minha internet." +meaning = "I'm calling about my internet." +accept = ["Tô ligando por causa da minha internet"] +tip = "'Estou ligando por causa de...' is the standard way to give the reason for a call." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "The call dropped mid-conversation and you call again." +say = "Desculpa, a ligação caiu." +short = "A ligação caiu." +polished = "Desculpa, acho que a ligação caiu." +meaning = "Sorry, we got cut off." +accept = ["Desculpe, a ligação caiu"] +tip = "A call 'falls' in Portuguese: 'a ligação caiu'." + +[[phrase]] +topic = "telefone" +level = "B1" +situation = "You're stuck in an automated phone menu and want a human." +say = "Posso falar com um atendente?" +short = "Um atendente, por favor." +polished = "Você poderia me transferir para um atendente, por favor?" +meaning = "Can I speak to an agent?" +accept = ["Quero falar com um atendente"] diff --git a/decks/pt/restaurant.toml b/decks/pt/restaurant.toml new file mode 100644 index 0000000..06be987 --- /dev/null +++ b/decks/pt/restaurant.toml @@ -0,0 +1,53 @@ +# decks/pt: restaurante. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "The waiter comes to your table, notepad in hand." +say = "Vou querer o frango." +short = "O frango, por favor." +polished = "Acho que vou querer o frango, por favor." +meaning = "I'll have the chicken." +accept = ["Eu vou querer o frango", "Pra mim, o frango"] +tip = "'Vou querer...' is the natural way to order." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "You sat down ten minutes ago and nobody has brought the menu." +say = "Pode trazer o cardápio?" +short = "O cardápio, por favor." +polished = "Com licença, pode trazer o cardápio, por favor?" +meaning = "Could we see the menu?" +accept = ["Você pode trazer o cardápio?", "Me traz o cardápio?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "You can't handle chili and the dish has a little flame drawn next to it." +say = "Esse prato é apimentado?" +short = "É apimentado?" +polished = "Com licença, esse prato é muito apimentado?" +meaning = "Is this dish spicy?" +accept = ["Esse prato é picante?", "Esse prato tem pimenta?"] + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "The food arrived, but they forgot your drink." +say = "Me traz uma água, por favor?" +short = "Uma água, por favor." +polished = "Você pode me trazer uma água, por favor?" +meaning = "Can I have some water, please?" +accept = ["Pode me trazer uma água, por favor?"] +tip = "'Uma água' is a bottle or glass of water. They'll ask 'com gás ou sem gás?' (sparkling or still)." + +[[phrase]] +topic = "restaurante" +level = "A2" +situation = "The waiter clears the plates and asks if everything was good." +say = "Estava tudo delicioso." +short = "Estava delicioso." +polished = "Estava tudo delicioso, muito obrigado." +meaning = "Everything was delicious." +accept = ["Estava tudo uma delícia", "Estava tudo ótimo"] diff --git a/decks/pt/routine-and-transport.toml b/decks/pt/routine-and-transport.toml new file mode 100644 index 0000000..e3dace5 --- /dev/null +++ b/decks/pt/routine-and-transport.toml @@ -0,0 +1,82 @@ +# decks/pt: rotina e transporte. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "The bus is full and there's a bag on the seat next to someone." +say = "Esse lugar está ocupado?" +short = "Está ocupado?" +polished = "Com licença, esse lugar está ocupado?" +meaning = "Is this seat taken?" +accept = ["Tem alguém aqui?", "Esse lugar tá ocupado?"] + +[[phrase]] +topic = "rotina e transporte" +level = "A1" +situation = "The bus is packed and you need to squeeze through to get off." +say = "Vou descer aqui." +polished = "Com licença, vou descer aqui." +meaning = "This is my stop." +accept = ["Eu desço aqui", "É a minha parada"] +tip = "You 'descer' (go down) to get off a bus." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "You get on the bus and don't know how much to pay." +say = "Quanto é a passagem?" +short = "Quanto é?" +polished = "Com licença, quanto é a passagem?" +meaning = "How much is the fare?" +accept = ["Quanto custa a passagem?", "Quanto tá a passagem?"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "Your ride-share driver is about to go past your place." +say = "Pode me deixar aqui?" +short = "Aqui está bom." +polished = "Você pode me deixar aqui mesmo, por favor?" +meaning = "Can you drop me off here?" +accept = ["Pode parar aqui?", "Me deixa aqui, por favor"] + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "You reach the stop and see the bus turning the corner." +say = "Perdi o ônibus." +polished = "Desculpa, acabei de perder o ônibus." +meaning = "I missed the bus." +accept = ["Acabei de perder o ônibus"] +tip = "'Perder' is both to miss (a bus) and to lose (your keys)." + +[[phrase]] +topic = "rotina e transporte" +level = "A2" +situation = "You call to say you'll be late for dinner." +say = "Estou preso no trânsito." +short = "Muito trânsito." +polished = "Desculpa, estou preso no trânsito agora." +meaning = "I'm stuck in traffic." +accept = ["Estou presa no trânsito", "Tô preso no trânsito", "Tô presa no trânsito"] + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "The app shows an hour by subway to your friend's place." +say = "Tem um jeito mais rápido de chegar?" +short = "Tem algo mais rápido?" +polished = "Você sabe se tem um jeito mais rápido de chegar?" +meaning = "Is there a faster way to get there?" +accept = ["Tem um jeito mais rápido de chegar lá?"] +tip = "'Tem' (has) is the everyday 'there is': 'tem um jeito', 'tem um banco aqui'." + +[[phrase]] +topic = "rotina e transporte" +level = "B1" +situation = "The subway turnstile beeps: your card has no balance." +say = "Preciso recarregar meu cartão." +short = "Uma recarga, por favor." +polished = "Oi, preciso recarregar meu cartão de transporte." +meaning = "I need to top up my card." +accept = ["Quero recarregar meu cartão", "Preciso carregar meu cartão"] diff --git a/decks/pt/shopping.toml b/decks/pt/shopping.toml new file mode 100644 index 0000000..8423108 --- /dev/null +++ b/decks/pt/shopping.toml @@ -0,0 +1,131 @@ +# decks/pt: compras. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "compras" +level = "A1" +situation = "You picked two pairs of pants and can't find where to try them on." +say = "Onde ficam os provadores?" +short = "Os provadores?" +polished = "Com licença, onde ficam os provadores?" +meaning = "Where are the fitting rooms?" +accept = ["Onde fica o provador?", "Cadê o provador?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "You come out of the fitting room and the assistant asks how the shirt fits." +say = "Ficou apertada." +polished = "Ficou um pouco apertada em mim." +meaning = "It's too tight." +accept = ["Ficou apertado", "Está apertada"] +tip = "'Ficou' is how you say how clothes fit: 'ficou bom', 'ficou grande'." + +[[phrase]] +topic = "compras" +level = "A1" +situation = "At a market stall, you have no cash on you." +say = "Posso pagar com cartão?" +short = "Aceita cartão?" +polished = "Com licença, posso pagar com cartão?" +meaning = "Can I pay by card?" +accept = ["Passa cartão?", "Vocês aceitam cartão?"] + +[[phrase]] +topic = "compras" +level = "A1" +situation = "It's late and you want to know if you have time to come back to the store." +say = "Que horas vocês fecham?" +short = "Fecham que horas?" +polished = "Com licença, que horas vocês fecham hoje?" +meaning = "What time do you close?" +accept = ["A que horas vocês fecham?"] + +[[phrase]] +topic = "compras" +level = "A2" +situation = "There's a discount sign, but the tag shows the full price." +say = "Isso está em promoção?" +short = "Em promoção?" +polished = "Com licença, esse aqui está em promoção?" +meaning = "Is this on sale?" +accept = ["Está na promoção?", "Isso tá em promoção?"] + +[[phrase]] +topic = "compras" +level = "A2" +situation = "The assistant asks if she can help, and you want something for your mother." +say = "Estou procurando um presente." +polished = "Estou procurando um presente pra minha mãe." +meaning = "I'm looking for a gift." +accept = ["Tô procurando um presente", "Procuro um presente"] + +[[phrase]] +topic = "compras" +level = "A2" +situation = "You paid and the cashier didn't hand you the receipt." +say = "Pode me dar a nota?" +short = "A nota, por favor." +polished = "Você pode me dar a nota fiscal, por favor?" +meaning = "Can I have the receipt?" +accept = ["Pode me dar o recibo?", "Me dá a nota?"] +tip = "'Nota' (nota fiscal) is the store receipt." + +[[phrase]] +topic = "compras" +level = "A2" +situation = "The sneakers are too big on you." +say = "Tem um número menor?" +short = "Um número menor?" +polished = "Por acaso tem um número menor?" +meaning = "Do you have a smaller size?" +accept = ["Tem um tamanho menor?"] +tip = "A shoe or clothing size is a 'número' or a 'tamanho'." + +[[phrase]] +topic = "compras" +level = "B1" +situation = "You open the box in the store and the device's screen is scratched." +say = "Este aqui está com defeito." +short = "Está com defeito." +polished = "Desculpa, mas este aqui está com defeito." +meaning = "This one is damaged." +accept = ["Esse aqui está com defeito", "Esse veio com defeito"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "You were given a sweater, but you don't like the color." +say = "Posso trocar por outra cor?" +short = "Posso trocar?" +polished = "Seria possível trocar por outra cor?" +meaning = "Can I exchange it for another color?" +accept = ["Dá pra trocar por outra cor?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "You ordered online two weeks ago and nothing has come." +say = "Meu pedido ainda não chegou." +short = "Meu pedido não chegou." +polished = "Desculpa, mas meu pedido ainda não chegou." +meaning = "My order hasn't arrived yet." +accept = ["O meu pedido ainda não chegou"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "Before buying an expensive gift, you want to know if it can be returned." +say = "Qual é a política de troca?" +short = "Posso devolver?" +polished = "Você pode me dizer qual é a política de troca?" +meaning = "What's your return policy?" +accept = ["Qual a política de troca?", "Qual é a política de devolução?"] + +[[phrase]] +topic = "compras" +level = "B1" +situation = "You check your statement and the same purchase shows up twice." +say = "Acho que me cobraram duas vezes." +short = "Me cobraram duas vezes." +polished = "Com licença, acho que me cobraram duas vezes por isso." +meaning = "I think I was charged twice." diff --git a/decks/pt/slang-and-small-talk.toml b/decks/pt/slang-and-small-talk.toml new file mode 100644 index 0000000..d45e350 --- /dev/null +++ b/decks/pt/slang-and-small-talk.toml @@ -0,0 +1,105 @@ +# decks/pt: gírias e conversa. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Someone asks what time the market closes and you don't know." +say = "Não faço ideia." +short = "Sei lá." +polished = "Sinceramente, não faço ideia." +meaning = "I have no clue." +accept = ["Não faço a menor ideia", "Não tenho ideia"] +tip = "'Sei lá' = no clue, who knows. Very casual." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Your friend asks if you'd rather have pizza or burgers." +say = "Pra mim tanto faz." +short = "Tanto faz." +polished = "Pra mim tanto faz, você escolhe." +meaning = "Either way works for me." +accept = ["Para mim tanto faz", "Por mim tanto faz"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "It's pouring and you're invited to a party across town." +say = "Não estou a fim de sair." +short = "Não tô a fim." +polished = "Hoje não estou muito a fim de sair." +meaning = "I don't feel like going out." +accept = ["Não tô a fim de sair", "Não estou com vontade de sair"] +tip = "'Estar a fim de' = to feel like doing something." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "A friend says he's quitting his job to travel the world." +say = "Tá falando sério?" +short = "Sério?" +polished = "Tá falando sério? Não acredito!" +meaning = "Are you serious?" +accept = ["Você está falando sério?", "É sério?"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "You agree by text to meet at eight." +say = "Beleza, até lá!" +short = "Beleza!" +polished = "Beleza, então até as oito!" +meaning = "Cool, see you then!" +accept = ["Fechado, até lá!", "Combinado, até lá!"] +tip = "'Beleza' = cool, deal, all good. Also 'fechado' and 'combinado'." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Someone asks what living with your roommate is like." +say = "A gente se dá muito bem." +short = "A gente se dá bem." +polished = "Na verdade, a gente se dá muito bem." +meaning = "We get along really well." +accept = ["Nós nos damos muito bem"] +tip = "'Se dar bem com alguém' = to get along with someone." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "The technician said morning and it's already four in the afternoon." +say = "Cansei de esperar." +polished = "Sinceramente, cansei de esperar." +meaning = "I'm fed up with waiting." +accept = ["Não aguento mais esperar", "Já cansei de esperar"] + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "Your friend wants to go to a restaurant you know, and you know the prices." +say = "Fica esperto, é bem caro." +short = "Fica esperto!" +polished = "Só um toque, fica esperto que é bem caro." +meaning = "Heads up, it's pretty expensive." +accept = ["Fica esperta, é bem caro", "Só avisando, é bem caro"] +tip = "'Dar um toque' = to give someone a heads up." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "A friend sends you a video of a cat falling off the couch." +say = "Morri de rir!" +polished = "Morri de rir com esse vídeo!" +meaning = "That's hilarious!" +accept = ["Tô morrendo de rir", "Estou morrendo de rir"] +tip = "Literally 'I died laughing'. In texts, Brazilians laugh with 'kkkk'." + +[[phrase]] +topic = "gírias e conversa" +level = "B1" +situation = "You run into someone you know and want to catch up." +say = "O que você anda fazendo?" +short = "E as novidades?" +polished = "E aí, o que você anda fazendo ultimamente?" +meaning = "What have you been up to?" +accept = ["O que você tem feito?", "O que cê anda fazendo?"] diff --git a/decks/pt/social.toml b/decks/pt/social.toml new file mode 100644 index 0000000..99f569c --- /dev/null +++ b/decks/pt/social.toml @@ -0,0 +1,145 @@ +# decks/pt: social. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "social" +level = "A1" +situation = "You run into a neighbor in the elevator." +say = "E aí, tudo certo?" +polished = "E aí, tudo certo com você?" +meaning = "Hey, how's it going?" +accept = ["E aí, tudo bem?", "E aí, beleza?"] +tip = "'E aí?' is the casual hello among friends. A natural reply: 'Tudo certo, e você?'." + +[[phrase]] +topic = "social" +level = "A1" +situation = "Your friend arrives at the party and you introduce her to a coworker." +say = "Essa é minha amiga Ana." +short = "Essa é a Ana." +polished = "Quero te apresentar minha amiga Ana." +meaning = "This is my friend Ana." +accept = ["Esta é minha amiga Ana", "Essa é a minha amiga Ana"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "The host offers you another drink and you don't want one." +say = "Estou bem assim, obrigado." +short = "Estou bem." +polished = "Estou bem assim por enquanto, obrigado." +meaning = "I'm good, thanks." +accept = ["Estou bem assim, obrigada", "Tô bem, obrigado", "Não, obrigado"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "You want to keep in touch with someone you met today." +say = "Qual é o seu número?" +short = "Seu número?" +polished = "Você me passa o seu número?" +meaning = "What's your number?" +accept = ["Qual o seu número?", "Me passa seu número?"] + +[[phrase]] +topic = "social" +level = "A1" +situation = "A friend tells you she passed her driving test." +say = "Que notícia boa!" +short = "Que bom!" +polished = "Que notícia boa, fico muito feliz por você!" +meaning = "That's great news!" +accept = ["Que boa notícia!"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "You bump into an old classmate and want to catch up properly." +say = "Quer tomar um café?" +short = "Um café?" +polished = "Você quer tomar um café qualquer dia desses?" +meaning = "Do you want to grab a coffee?" +accept = ["Você quer tomar um café?", "Bora tomar um café?"] +tip = "Drinks are 'taken' in Portuguese: 'tomar um café', 'tomar uma cerveja'." + +[[phrase]] +topic = "social" +level = "A2" +situation = "You're invited out tonight, but you already have plans." +say = "Hoje não vou conseguir ir." +short = "Hoje não dá." +polished = "Desculpa, hoje não vou conseguir ir." +meaning = "I can't make it today." +accept = ["Hoje eu não consigo ir", "Hoje não posso"] +tip = "'Não dá' = it won't work, I can't. Very common." + +[[phrase]] +topic = "social" +level = "A2" +situation = "A friend tells you he lost his job." +say = "Que pena, sinto muito." +short = "Que pena." +polished = "Que pena, sinto muito por isso." +meaning = "I'm so sorry to hear that." +accept = ["Poxa, sinto muito", "Que chato, sinto muito"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "You arrive twenty minutes after the agreed time." +say = "Desculpa a demora." +short = "Desculpa!" +polished = "Desculpa a demora, o trânsito estava horrível." +meaning = "Sorry to keep you waiting." +accept = ["Desculpa o atraso", "Desculpe a demora"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "On Monday, a coworker asks how your weekend was." +say = "Nada demais, fiquei em casa." +short = "Nada demais." +polished = "Nada demais, só fiquei em casa descansando." +meaning = "Not much, I just stayed home." +accept = ["Nada demais, só fiquei em casa"] + +[[phrase]] +topic = "social" +level = "A2" +situation = "Friday afternoon, you want to know your friend's plans." +say = "O que você vai fazer no fim de semana?" +short = "Algum plano?" +polished = "E aí, o que você vai fazer no fim de semana?" +meaning = "What are you up to this weekend?" +accept = ["O que você vai fazer no final de semana?"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "At a wedding, you sit next to a cousin you haven't seen in years." +say = "Faz tempo que a gente não se vê!" +short = "Faz tempo, hein?" +polished = "Faz tempo que a gente não se vê! Como você está?" +meaning = "It's been a long time!" +accept = ["Faz tempo que não nos vemos"] +tip = "'A gente' means 'we' in everyday speech, with a singular verb." + +[[phrase]] +topic = "social" +level = "B1" +situation = "The conversation is good, but you have to leave." +say = "Preciso ir andando." +short = "Preciso ir." +polished = "Bom, preciso ir andando, mas foi ótimo falar com você." +meaning = "I should get going." +accept = ["Tenho que ir", "Já vou indo"] + +[[phrase]] +topic = "social" +level = "B1" +situation = "Your friend insists on paying the bar tab again." +say = "A próxima é por minha conta." +short = "A próxima é minha." +polished = "Obrigado, mas a próxima é por minha conta." +meaning = "The next one is on me." +accept = ["A próxima eu pago", "Obrigada, mas a próxima é por minha conta"] +tip = "'Por minha conta' = on me, I'm paying." diff --git a/decks/pt/travel.toml b/decks/pt/travel.toml new file mode 100644 index 0000000..b0404d6 --- /dev/null +++ b/decks/pt/travel.toml @@ -0,0 +1,53 @@ +# decks/pt: viagem. The header and tips are in deck.toml; src/learn/deck.rs joins the files. + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "At the station, you can't find the ticket office." +say = "Onde eu compro a passagem?" +short = "Onde compra passagem?" +polished = "Com licença, onde eu compro a passagem?" +meaning = "Where can I buy a ticket?" +accept = ["Onde posso comprar a passagem?", "Onde compro a passagem?"] +tip = "'Passagem' is a ticket for travel. A ticket for a show is an 'ingresso'." + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "The train is at the platform and you're not sure it's yours." +say = "Esse trem vai pro aeroporto?" +short = "Vai pro aeroporto?" +polished = "Com licença, esse trem vai pro aeroporto?" +meaning = "Does this train go to the airport?" +accept = ["Esse trem vai para o aeroporto?"] +tip = "'Pro' is the spoken form of 'para o'." + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "You and your friend want a photo together in front of the monument." +say = "Pode tirar uma foto da gente?" +short = "Uma foto, por favor?" +polished = "Com licença, você pode tirar uma foto da gente?" +meaning = "Can you take our picture?" +accept = ["Você pode tirar uma foto nossa?", "Tira uma foto da gente?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "You're planning tomorrow with the hotel receptionist." +say = "Que horas abre o museu?" +short = "Abre que horas?" +polished = "Com licença, que horas abre o museu?" +meaning = "What time does the museum open?" +accept = ["A que horas abre o museu?", "Que horas o museu abre?"] + +[[phrase]] +topic = "viagem" +level = "A2" +situation = "You checked out in the morning, but your flight isn't until tonight." +say = "Posso deixar minhas malas aqui?" +short = "Minhas malas aqui?" +polished = "Será que eu posso deixar minhas malas aqui?" +meaning = "Can I leave my bags here?" +accept = ["Posso deixar as malas aqui?", "Posso deixar minha bagagem aqui?"] diff --git a/src/app/lesson.rs b/src/app/lesson.rs index 4c893f4..502999c 100644 --- a/src/app/lesson.rs +++ b/src/app/lesson.rs @@ -1902,7 +1902,7 @@ mod tests { let f = english_fixture("es", "C2"); let deck = f.lesson.deck(); let curated: std::collections::HashSet = [ - Deck::parse(include_str!("../../decks/es.toml")).unwrap(), + Deck::parse(crate::learn::deck::ES).unwrap(), Deck::parse(include_str!("../../decks/es.basics.toml")).unwrap(), ] .into_iter() diff --git a/src/app/menu.rs b/src/app/menu.rs index 61c73e1..f7e5781 100644 --- a/src/app/menu.rs +++ b/src/app/menu.rs @@ -1,6 +1,7 @@ //! The control panel ("Painel"): a small pixel window to change settings live -//! and trigger actions, in three tabs — JOGO (game), ÁUDIO (mic, voices) and -//! PROGRESSO (what you know, what you're learning, what comes next). +//! and trigger actions, in four tabs — JOGO (game), ÁUDIO (mic, voices), +//! TECLAS (the global hotkeys) and PROGRESSO (what you know, what you're +//! learning, what comes next). //! Pure state + drawing; the app owns the window. //! Keys: ↑/↓ choose, ←/→ change, Enter act, Tab switch tab, Esc close. Mouse: click. @@ -52,16 +53,24 @@ pub enum Item { VoiceLearning, TestVoices, Speaker, + /// The global hotkeys, one row each. + KeyPractice, + KeyRecap, + KeyPanel, + KeyGrab, + KeyProgress, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Tab { Game, Audio, + Keys, Progress, } -const TABS: [(Tab, T); 3] = [(Tab::Game, T::TabGame), (Tab::Audio, T::TabAudio), (Tab::Progress, T::TabProgress)]; +const TABS: [(Tab, T); 4] = + [(Tab::Game, T::TabGame), (Tab::Audio, T::TabAudio), (Tab::Keys, T::TabKeys), (Tab::Progress, T::TabProgress)]; pub const GAME: &[Item] = &[ Item::Native, @@ -90,6 +99,40 @@ pub const AUDIO: &[Item] = &[ Item::Speaker, ]; +pub const KEYS: &[Item] = &[Item::KeyPractice, Item::KeyRecap, Item::KeyPanel, Item::KeyGrab, Item::KeyProgress]; + +/// The setting a hotkey row changes. +fn hotkey(s: &mut Settings, item: Item) -> Option<&mut String> { + Some(match item { + Item::KeyPractice => &mut s.hotkey_challenge, + Item::KeyRecap => &mut s.hotkey_summary, + Item::KeyPanel => &mut s.hotkey_menu, + Item::KeyGrab => &mut s.hotkey_grab, + Item::KeyProgress => &mut s.hotkey_progress, + _ => return None, + }) +} + +/// The combination a hotkey row holds; None for any other row. +pub fn combo(s: &Settings, item: Item) -> Option { + hotkey(&mut s.clone(), item).cloned() +} + +/// What a hotkey row offers: every letter and digit under the modifiers the +/// hotkey already has ("Ctrl+Alt"), minus the keys the other hotkeys hold. +fn key_options(s: &Settings, item: Item) -> Vec { + let mut s = s.clone(); + let held = |s: &mut Settings, i: Item| hotkey(s, i).map(|h| h.replace(' ', "").to_lowercase()); + let others: Vec = KEYS.iter().filter(|k| **k != item).filter_map(|k| held(&mut s, *k)).collect(); + let current = hotkey(&mut s, item).map(|h| h.replace(' ', "")).unwrap_or_default(); + let mods = current.rsplit_once('+').map_or("Ctrl+Alt", |(mods, _)| mods); + ('A'..='Z') + .chain('0'..='9') + .map(|k| format!("{mods}+{k}")) + .filter(|k| !others.contains(&k.to_lowercase())) + .collect() +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Key { Up, @@ -138,6 +181,9 @@ pub struct Menu { pub status: String, /// What the PROGRESSO tab shows (the app refreshes it). pub progress: Option, + /// Hotkey combinations that could not be registered (another program + /// has them), as written in the settings; the app keeps this current. + pub keys_taken: Vec, /// The address being typed; keys go to it until Enter or Esc. edit: Option, /// The list open over the rows (every option of one item at once). @@ -244,6 +290,7 @@ impl Menu { test_result: String::new(), status: String::new(), progress: None, + keys_taken: Vec::new(), edit: None, list: None, } @@ -281,6 +328,7 @@ impl Menu { match self.tab { Tab::Game => GAME, Tab::Audio => AUDIO, + Tab::Keys => KEYS, Tab::Progress => &[], } } @@ -346,6 +394,11 @@ impl Menu { } Item::VoiceNative => each(s, with_default(&self.voices_native), |c, v| c.voice_native = v), Item::VoiceLearning => each(s, with_default(&self.voices_learning), |c, v| c.voice_learning = v), + key if KEYS.contains(&key) => each(s, key_options(s, key), |c, k| { + if let Some(h) = hotkey(c, key) { + *h = k; + } + }), _ => Vec::new(), } } @@ -610,6 +663,10 @@ impl Menu { None => auto(v, T::VoiceAuto), } } + key if KEYS.contains(&key) => { + let combo = hotkey(&mut s.clone(), key).cloned().unwrap_or_default(); + if self.keys_taken.contains(&combo) { T::KeyTaken.fill(n, &[&combo]) } else { combo } + } _ => String::new(), } } @@ -637,6 +694,11 @@ impl Menu { Item::VoiceLearning => T::ItemVoiceLearning, Item::TestVoices => T::ItemTestVoices, Item::Speaker => T::ItemSpeaker, + Item::KeyPractice => T::ItemKeyPractice, + Item::KeyRecap => T::ItemKeyRecap, + Item::KeyPanel => T::ItemKeyPanel, + Item::KeyGrab => T::ItemKeyGrab, + Item::KeyProgress => T::ItemKeyProgress, } .get(native) } @@ -852,6 +914,11 @@ impl Menu { for (k, line) in font::wrap(text, WIDTH - 16).iter().take(3).enumerate() { font::draw(c, 6, y + 10 + k as i32 * (ROW_H - 1), line, hex(0xe6ecff)); } + } else if self.tab == Tab::Keys { + let y = TOP + KEYS.len() as i32 * ROW_H + 6; + for (k, line) in font::wrap(T::KeysHelp.get(n), WIDTH - 16).iter().enumerate() { + font::draw(c, 6, y + k as i32 * (ROW_H - 1), line, dim); + } } else { font::draw(c, 6, foot_y - 2, &self.status, accent); } @@ -871,7 +938,7 @@ mod tests { } fn select(m: &mut Menu, item: Item) { - if !m.items().contains(&item) { + while !m.items().contains(&item) { m.switch_tab(); } m.sel = m.items().iter().position(|i| *i == item).unwrap(); @@ -962,21 +1029,93 @@ mod tests { } #[test] - fn tab_cycles_game_audio_progress_and_back() { + fn tab_cycles_game_audio_keys_progress_and_back() { let mut m = menu(); let mut s = Settings::default(); m.key(Key::Tab, &mut s); assert_eq!(m.item(), Item::Mic); m.key(Key::Tab, &mut s); + assert_eq!(m.item(), Item::KeyPractice); + m.key(Key::Tab, &mut s); assert_eq!(m.tab, Tab::Progress); m.key(Key::Tab, &mut s); assert_eq!(m.item(), Item::Native); - assert_eq!(m.click(WIDTH / 2, TABS_Y + 3, &mut s), Action::None); + assert_eq!(m.click(WIDTH / 2 - 10, TABS_Y + 3, &mut s), Action::None); assert_eq!(m.tab, Tab::Audio, "clicking the tab header switches"); m.click(WIDTH - 10, TABS_Y + 3, &mut s); assert_eq!(m.tab, Tab::Progress); } + #[test] + fn a_hotkey_row_changes_the_key_and_keeps_its_modifiers() { + let mut m = menu(); + let mut s = Settings::default(); + select(&mut m, Item::KeyPractice); + assert_eq!(m.value(Item::KeyPractice, &s), "Ctrl+Alt+M"); + assert_eq!(m.key(Key::Right, &mut s), Action::Changed(Item::KeyPractice)); + assert_eq!(s.hotkey_challenge, "Ctrl+Alt+N"); + s.hotkey_grab = "Ctrl+Shift+G".into(); + select(&mut m, Item::KeyGrab); + m.key(Key::Right, &mut s); + assert_eq!(s.hotkey_grab, "Ctrl+Shift+H", "the modifiers written in the config stay"); + s.validate().unwrap(); + } + + #[test] + fn a_hotkey_row_never_offers_a_key_another_action_holds() { + let mut m = menu(); + let mut s = Settings::default(); + select(&mut m, Item::KeyPractice); + m.key(Key::Enter, &mut s); + let offered = list_texts(&m, &s); + assert!(offered.contains(&"Ctrl+Alt+M".to_string()) && offered.contains(&"Ctrl+Alt+Y".to_string())); + for held in ["Ctrl+Alt+J", "Ctrl+Alt+K", "Ctrl+Alt+G", "Ctrl+Alt+P"] { + assert!(!offered.contains(&held.to_string()), "{held} belongs to another action"); + } + assert_eq!(offered.len(), 26 + 10 - 4, "every free letter and digit"); + // Stepping right from I skips J and K (recap, panel) and lands on L. + s.hotkey_challenge = "Ctrl+Alt+I".into(); + m.close_list(); + m.key(Key::Right, &mut s); + assert_eq!(s.hotkey_challenge, "Ctrl+Alt+L"); + } + + #[test] + fn a_hotkey_another_program_has_is_marked_in_the_row_and_the_list() { + let mut m = menu(); + let mut s = Settings::default(); + m.keys_taken = vec!["Ctrl+Alt+M".into()]; + assert_eq!(m.value(Item::KeyPractice, &s), "Ctrl+Alt+M (em uso)"); + assert_eq!(m.value(Item::KeyRecap, &s), "Ctrl+Alt+J", "only the taken one"); + s.native = Native::En; + assert_eq!(m.value(Item::KeyPractice, &s), "Ctrl+Alt+M (in use)"); + select(&mut m, Item::KeyPractice); + m.key(Key::Enter, &mut s); + let marked: Vec = list_texts(&m, &s).into_iter().filter(|t| t.contains("in use")).collect(); + assert_eq!(marked, vec!["Ctrl+Alt+M (in use)"]); + m.key(Key::Down, &mut s); + assert_eq!(m.key(Key::Enter, &mut s), Action::Changed(Item::KeyPractice)); + assert_eq!(m.value(Item::KeyPractice, &s), "Ctrl+Alt+N", "a free key has no mark"); + } + + #[test] + fn the_keys_tab_draws_its_rows_and_help_inside_the_panel() { + let mut m = menu(); + m.show(Tab::Keys); + m.keys_taken = vec!["Ctrl+Alt+M".into()]; + for native in Native::ALL { + let s = Settings { native, learning: "es".into(), ..Default::default() }; + let help = font::wrap(T::KeysHelp.get(native), WIDTH - 16); + let bottom = TOP + KEYS.len() as i32 * ROW_H + 6 + help.len() as i32 * (ROW_H - 1); + assert!(bottom <= HEIGHT - 13, "{native:?}: the help runs into the footer"); + for item in KEYS { + let row = format!("{} < {} >", Menu::label(*item, native), m.value(*item, &s)); + assert!(font::text_width(&row) <= WIDTH - 16, "{row:?} does not fit"); + } + render(&m, &s); + } + } + #[test] fn the_progress_tab_has_nothing_to_select_and_never_panics() { let mut m = menu(); @@ -1246,14 +1385,14 @@ mod tests { m.meter = Some(0.1); m.test_result = "Ouvi: \"I'm hungry\" ✓".into(); let s = Settings::default(); - for item in GAME.iter().chain(AUDIO) { + for item in GAME.iter().chain(AUDIO).chain(KEYS) { for native in Native::ALL { let s = Settings { native, learning: "es".into(), ..s.clone() }; assert!(font::supports(Menu::label(*item, native)), "{item:?}"); assert!(font::supports(&m.value(*item, &s)), "{item:?}"); } } - for tab in [Tab::Game, Tab::Audio, Tab::Progress] { + for tab in [Tab::Game, Tab::Audio, Tab::Keys, Tab::Progress] { m.tab = tab; let mut c = Canvas::new(WIDTH, HEIGHT); m.draw(&mut c, &s, 0.0); @@ -1283,6 +1422,11 @@ mod tests { Item::VoiceNative, Item::VoiceLearning, Item::Speaker, + Item::KeyPractice, + Item::KeyRecap, + Item::KeyPanel, + Item::KeyGrab, + Item::KeyProgress, ]; /// The options an open list shows, as the panel reads them. @@ -1385,7 +1529,7 @@ mod tests { assert_eq!(m.click(50, LIST_TOP + 9 * ROW_H, &mut s), Action::None, "below the last option: nothing"); assert_eq!(m.click(50, TOP + 2, &mut s), Action::None, "the header: nothing"); assert_eq!(m.list_open(), Some(Item::Commitment)); - assert_eq!(m.click(WIDTH / 2, TABS_Y + 3, &mut s), Action::None); + assert_eq!(m.click(WIDTH / 2 - 10, TABS_Y + 3, &mut s), Action::None); assert_eq!((m.list_open(), m.tab), (None, Tab::Audio), "a tab click leaves the list for that tab"); assert_eq!(s.commitment, Commitment::Relentless); } diff --git a/src/app/mod.rs b/src/app/mod.rs index df33dcc..369855f 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -119,17 +119,11 @@ pub fn run(settings: Settings, paths: Paths, level: Option) -> Resul ); } - let bindings = [ - (settings.hotkey_challenge.as_str(), Command::Challenge), - (settings.hotkey_summary.as_str(), Command::Summary), - (settings.hotkey_menu.as_str(), Command::Menu), - (settings.hotkey_grab.as_str(), Command::Grab), - (settings.hotkey_progress.as_str(), Command::Progress), - ]; + let bindings = bindings(&settings); let hotkeys = if session.global_hotkeys() { match Hotkeys::register(&bindings) { Ok(h) => { - for why in &h.taken { + for (_, why) in &h.taken { eprintln!("Hotkey unavailable: {why}"); } Some(h) @@ -170,7 +164,8 @@ pub fn run(settings: Settings, paths: Paths, level: Option) -> Resul daily_goal: settings.daily_goal, }; let languages = available_languages(&paths, &settings.learning); - let menu = Menu::new(languages, deck.topic_counts(&settings.max_level)); + let mut menu = Menu::new(languages, deck.topic_counts(&settings.max_level)); + menu.keys_taken = hotkeys.as_ref().map(|h| taken_keys(h, &settings)).unwrap_or_default(); let lesson = Lesson::new(deck, opts, history); let mut app = App { @@ -214,6 +209,24 @@ pub fn run(settings: Settings, paths: Paths, level: Option) -> Resul Ok(()) } +/// The hotkeys as the settings have them, each with what it does. +fn bindings(s: &Settings) -> [(&str, Command); 5] { + [ + (s.hotkey_challenge.as_str(), Command::Challenge), + (s.hotkey_summary.as_str(), Command::Summary), + (s.hotkey_menu.as_str(), Command::Menu), + (s.hotkey_grab.as_str(), Command::Grab), + (s.hotkey_progress.as_str(), Command::Progress), + ] +} + +/// The combinations that could not be registered, as the settings write them. +fn taken_keys(hotkeys: &Hotkeys, s: &Settings) -> Vec { + let all = bindings(s); + let lost = |cmd| all.iter().find(|(_, c)| *c == cmd).map(|(k, _)| k.to_string()); + hotkeys.taken.iter().filter_map(|(cmd, _)| lost(*cmd)).collect() +} + /// Built-in decks plus any custom `/.toml`. fn available_languages(paths: &Paths, current: &str) -> Vec { let mut langs: Vec = Deck::builtin_languages().iter().map(|l| l.to_string()).collect(); @@ -584,6 +597,9 @@ impl App { if matches!(item, Item::Language | Item::Native) { self.refresh_audio_lists(); // the voices follow the languages } + if let Some(combo) = menu::combo(&self.settings, item) { + self.rebind_hotkeys(&combo); + } let n = self.settings.native; let Some(scene) = &mut self.scene else { return }; match item { @@ -649,6 +665,40 @@ impl App { } } + /// A hotkey was changed to `combo` in the panel: the new set is registered + /// at once (no restart), a combination another program has is said and + /// marked, and every hint that names a hotkey shows the new keys — the + /// warrior's tips, the lesson footers, the shortcut sheet. + fn rebind_hotkeys(&mut self, combo: &str) { + let n = self.settings.native; + let mut note = T::KeySetToast.fill(n, &[&combo]); + if let Some(hotkeys) = &mut self.hotkeys { + hotkeys.rebind(&bindings(&self.settings)); + for (_, why) in &hotkeys.taken { + eprintln!("Hotkey unavailable: {why}"); + } + self.menu.keys_taken = taken_keys(hotkeys, &self.settings); + if self.menu.keys_taken.iter().any(|k| k == combo) { + note = T::KeyTakenToast.fill(n, &[&combo]); + } + } else { + // No global hotkeys here (Wayland): the desktop's own shortcuts call us. + let exe = std::env::current_exe().ok().and_then(|p| p.canonicalize().ok()); + let list = crate::cli::commands::shortcut_list(&self.settings); + let updated = crate::control::gnome::installed() + && exe.is_some_and(|e| crate::control::gnome::install(&e.display().to_string(), &list).is_ok()); + if !updated { + note = T::KeyDesktopToast.get(n).into(); + } + } + let (practice, recap) = (self.settings.hotkey_challenge.clone(), self.settings.hotkey_summary.clone()); + let Some(scene) = &mut self.scene else { return }; + let keys = |o: &mut lesson::Options| (o.hotkey, o.summary_hotkey) = (practice, recap); + self.lesson.set_options(keys, scene); + scene.hud.cheats = None; // rebuilt with the new keys when next shown + scene.hud.toast(note, 4.0); + } + /// Keeps topics and level compatible: the panel lists only topics with /// something at this level (and how much), and ticked topics left with /// nothing are unticked (saved, and said) instead of every lesson failing @@ -985,6 +1035,10 @@ impl ApplicationHandler for App { let hint = if self.resolved.overlay { self.settings.hotkey_menu.clone() } else { "H".into() }; let n = self.settings.native; scene.hud.toast(T::Welcome.fill(n, &[&self.commitment.label(n), &hint]), 5.0); + // A hotkey another program holds does nothing: say so instead of the welcome. + if let Some(taken) = self.menu.keys_taken.first() { + scene.hud.toast(T::KeyTakenToast.fill(n, &[taken]), 8.0); + } self.scene = Some(scene); self.fit_topic(); if self.resolved.overlay { diff --git a/src/cli/commands.rs b/src/cli/commands.rs index db0f39c..d052f75 100644 --- a/src/cli/commands.rs +++ b/src/cli/commands.rs @@ -117,7 +117,7 @@ fn shortcuts(settings: &Settings, action: ShortcutAction) -> Result<()> { Ok(()) } -fn shortcut_list(settings: &Settings) -> Vec { +pub(crate) fn shortcut_list(settings: &Settings) -> Vec { vec![ gnome::Shortcut { id: "say", name: "Snowlearner: praticar", keys: settings.hotkey_challenge.clone() }, gnome::Shortcut { id: "summary", name: "Snowlearner: resumo", keys: settings.hotkey_summary.clone() }, diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 474fb35..6489bbe 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -1,6 +1,6 @@ //! Command-line interface. `snowlearner` with no subcommand starts the app. -mod commands; +pub(crate) mod commands; use crate::config::level::Commitment; use crate::config::settings::WindowMode; diff --git a/src/control/hotkeys.rs b/src/control/hotkeys.rs index 8dff812..8a62c40 100644 --- a/src/control/hotkeys.rs +++ b/src/control/hotkeys.rs @@ -12,11 +12,13 @@ pub fn parse(spec: &str) -> Result { spec.replace(' ', "").parse::().map_err(|e| anyhow::anyhow!("invalid hotkey {spec:?}: {e}")) } +/// The hotkeys that could not be registered: what each would do, and why not. +pub type Taken = Vec<(Command, String)>; + pub struct Hotkeys { - _manager: GlobalHotKeyManager, - bindings: Vec<(u32, Command)>, - /// Why each hotkey that could not be registered is missing. - pub taken: Vec, + manager: GlobalHotKeyManager, + bindings: Vec<(HotKey, Command)>, + pub taken: Taken, } impl Hotkeys { @@ -24,7 +26,18 @@ impl Hotkeys { pub fn register(specs: &[(&str, Command)]) -> Result { let manager = GlobalHotKeyManager::new().context("global hotkeys unavailable on this desktop")?; let (bindings, taken) = register_each(specs, |hk| Ok(manager.register(hk)?)); - Ok(Hotkeys { _manager: manager, bindings, taken }) + Ok(Hotkeys { manager, bindings, taken }) + } + + /// Releases the hotkeys held and registers `specs` instead (the panel + /// changed one). `taken` then says which of the new set are missing. + pub fn rebind(&mut self, specs: &[(&str, Command)]) { + for (hk, _) in self.bindings.drain(..) { + if let Err(e) = self.manager.unregister(hk) { + eprintln!("could not release a hotkey: {e}"); + } + } + (self.bindings, self.taken) = register_each(specs, |hk| Ok(self.manager.register(hk)?)); } /// Drains pending key presses. @@ -32,7 +45,7 @@ impl Hotkeys { let mut out = Vec::new(); while let Ok(ev) = GlobalHotKeyEvent::receiver().try_recv() { if ev.state == HotKeyState::Pressed { - if let Some((_, cmd)) = self.bindings.iter().find(|(id, _)| *id == ev.id) { + if let Some((_, cmd)) = self.bindings.iter().find(|(hk, _)| hk.id() == ev.id) { out.push(*cmd); } } @@ -46,7 +59,7 @@ impl Hotkeys { fn register_each( specs: &[(&str, Command)], mut register: impl FnMut(HotKey) -> Result<()>, -) -> (Vec<(u32, Command)>, Vec) { +) -> (Vec<(HotKey, Command)>, Taken) { let mut bindings = Vec::new(); let mut taken = Vec::new(); for &(spec, cmd) in specs { @@ -54,8 +67,8 @@ fn register_each( register(hk).with_context(|| format!("could not register {spec} (taken by another app?)"))?; Ok(hk) }) { - Ok(hk) => bindings.push((hk.id(), cmd)), - Err(e) => taken.push(format!("{e:#}")), + Ok(hk) => bindings.push((hk, cmd)), + Err(e) => taken.push((cmd, format!("{e:#}"))), } } (bindings, taken) @@ -93,7 +106,15 @@ mod tests { let cmds: Vec = bound.iter().map(|(_, c)| *c).collect(); assert_eq!(cmds, vec![Command::Challenge, Command::Menu]); assert_eq!(taken.len(), 2); - assert!(taken[0].contains("Ctrl+Alt+G") && taken[0].contains("already registered"), "{taken:?}"); - assert!(taken[1].contains("Ctrl+Banana"), "{taken:?}"); + assert_eq!(taken[0].0, Command::Grab, "the action that lost its key is named"); + assert!(taken[0].1.contains("Ctrl+Alt+G") && taken[0].1.contains("already registered"), "{taken:?}"); + assert!(taken[1].1.contains("Ctrl+Banana"), "{taken:?}"); + } + + #[test] + fn every_letter_and_digit_makes_a_hotkey() { + for k in ('A'..='Z').chain('0'..='9') { + assert!(parse(&format!("Ctrl+Alt+{k}")).is_ok(), "{k}"); + } } } diff --git a/src/lang/text.rs b/src/lang/text.rs index 744f810..0787d5b 100644 --- a/src/lang/text.rs +++ b/src/lang/text.rs @@ -47,6 +47,7 @@ texts! { PanelWindow => "Snowlearner · Painel", "Snowlearner · Panel"; TabGame => "JOGO", "GAME"; TabAudio => "ÁUDIO", "AUDIO"; + TabKeys => "TECLAS", "KEYS"; TabProgress => "PROGRESSO", "PROGRESS"; ItemNative => "Minha língua", "My language"; ItemLanguage => "Idioma", "Learning"; @@ -69,6 +70,19 @@ texts! { ItemVoiceLearning => "Voz do idioma", "Learning voice"; ItemTestVoices => "> Testar vozes", "> Test voices"; ItemSpeaker => "Alto-falante", "Speaker"; + ItemKeyPractice => "Praticar", "Practice"; + ItemKeyRecap => "Resumo do dia", "Today's recap"; + ItemKeyPanel => "Painel", "Panel"; + ItemKeyGrab => "Mão mágica", "Magic hand"; + ItemKeyProgress => "Progresso", "Progress"; + KeyTaken => "{0} (em uso)", "{0} (in use)"; + KeysHelp => "(em uso): outro programa já tem esse atalho. Enter lista as teclas livres pra trocar.", + "(in use): another program already has that hotkey. Enter lists the free keys to switch to."; + KeyTakenToast => "{0} já é de outro programa. Escolha outra tecla no painel.", + "{0} belongs to another program. Pick another key in the panel."; + KeySetToast => "Atalho trocado: {0}", "Hotkey changed: {0}"; + KeyDesktopToast => "Atalho salvo. Rode snowlearner setup pra registrar no desktop.", + "Hotkey saved. Run snowlearner setup to register it with the desktop."; AllTopicsShort => "todos", "all"; TopicsCount => "{0} temas", "{0} topics"; PickerFooter => "↑↓ Enter: escolher Esc: voltar", "↑↓ Enter: pick Esc: back"; diff --git a/src/learn/deck.rs b/src/learn/deck.rs index 402cf6b..55d7411 100644 --- a/src/learn/deck.rs +++ b/src/learn/deck.rs @@ -1,6 +1,7 @@ //! Phrase decks: TOML data, built-in for `en` and `es` (pt-BR cues) and //! `pt-BR` (English cues), overridable by dropping `.toml` into the -//! config `decks/` folder. +//! config `decks/` folder. The hand-curated ones are a folder per language +//! (`decks//`), one file per theme. //! //! Phrases are real situations, not vocabulary drills: each has a topic, a //! situation in the learner's own language, accepted variants and an @@ -16,27 +17,44 @@ use anyhow::{Context, Result, bail}; use serde::{Deserialize, Serialize}; use std::path::Path; +/// One deck out of a folder under `decks/`: `deck.toml` (header and tips), +/// then a file of phrases per theme, joined in the order listed. A new theme +/// file must be listed here. +macro_rules! themed { + ($dir:literal: $($theme:literal),+ $(,)?) => { + concat!( + include_str!(concat!("../../decks/", $dir, "/deck.toml")), + $("\n", include_str!(concat!("../../decks/", $dir, "/", $theme, ".toml"))),+ + ) + }; +} + +/// The hand-curated decks, one folder per language. +const EN: &str = themed!("en": + "work", "travel", "restaurant", "shopping", "health", "social", "phone", "emergency", + "first-contact", "routine-and-transport", "health-and-social", "home-and-paperwork", "slang-and-small-talk", +); +pub(crate) const ES: &str = themed!("es": + "work", "travel", "restaurant", "shopping", "health", "social", "phone", "emergency", + "first-contact", "routine-and-transport", "health-and-social", "home-and-paperwork", "slang-and-small-talk", +); +const PT: &str = themed!("pt": + "phone", "health", "emergency", "social", "shopping", "restaurant", "travel", + "first-contact", "routine-and-transport", "health-and-social", "home-and-paperwork", "slang-and-small-talk", +); +/// `decks/es` for English speakers, theme by theme. +const ES_EN: &str = themed!("i18n/es.en": + "work", "travel", "restaurant", "shopping", "health", "social", "phone", "emergency", + "first-contact", "routine-and-transport", "health-and-social", "home-and-paperwork", "slang-and-small-talk", +); + /// Built-in decks per language: hand-curated phrases, the first words and /// chunks (`.basics.toml`), then the phrases ported from Lexicaster /// (`scripts/port-lexicaster.mjs`). Duplicates keep the first. const BUILTIN: &[(&str, &[&str])] = &[ - ( - "en", - &[ - include_str!("../../decks/en.toml"), - include_str!("../../decks/en.basics.toml"), - include_str!("../../decks/en.lexicaster.toml"), - ], - ), - ( - "es", - &[ - include_str!("../../decks/es.toml"), - include_str!("../../decks/es.basics.toml"), - include_str!("../../decks/es.lexicaster.toml"), - ], - ), - ("pt-BR", &[include_str!("../../decks/pt.basics.toml")]), + ("en", &[EN, include_str!("../../decks/en.basics.toml"), include_str!("../../decks/en.lexicaster.toml")]), + ("es", &[ES, include_str!("../../decks/es.basics.toml"), include_str!("../../decks/es.lexicaster.toml")]), + ("pt-BR", &[PT, include_str!("../../decks/pt.basics.toml")]), ]; /// Answer tiers for the generated decks, hand-curated and keyed by `say` @@ -48,11 +66,8 @@ const TIERS: &[(&str, &str)] = &[ /// Built-in translations: (deck language, native, overlays keyed by `say`). /// The Lexicaster ports have none yet, so English speakers don't get them. -const TRANSLATIONS: &[(&str, Native, &[&str])] = &[( - "es", - Native::En, - &[include_str!("../../decks/i18n/es.en.toml"), include_str!("../../decks/i18n/es.basics.en.toml")], -)]; +const TRANSLATIONS: &[(&str, Native, &[&str])] = + &[("es", Native::En, &[ES_EN, include_str!("../../decks/i18n/es.basics.en.toml")])]; /// CEFR levels, easiest first. Pre-A1 (CEFR Companion Volume, 2020) is the /// learner who knows nothing yet: isolated words and set expressions. @@ -653,7 +668,7 @@ mod tests { fn english_speakers_get_the_whole_curated_spanish_deck_in_english() { let pt = Deck::builtin("es").unwrap(); let en = Deck::builtin_for("es", Native::En).unwrap(); - let curated = Deck::parse(include_str!("../../decks/es.toml")).unwrap().phrases.len() + let curated = Deck::parse(ES).unwrap().phrases.len() + Deck::parse(include_str!("../../decks/es.basics.toml")).unwrap().phrases.len(); assert_eq!(en.phrases.len(), curated, "es.toml and es.basics are fully translated; Lexicaster is not"); assert!(en.phrases.len() < pt.phrases.len()); @@ -684,7 +699,8 @@ mod tests { let count = |st: Stage| d.phrases.iter().filter(|p| Stage::of(p) == st).count(); assert!(count(Stage::Words) >= 40, "{} first words", count(Stage::Words)); assert!(count(Stage::Chunks) >= 20, "{} short chunks", count(Stage::Chunks)); - assert_eq!(count(Stage::Phrases), 0, "a first-steps deck has no full phrases"); + assert!(count(Stage::Phrases) >= 40, "{} full phrases", count(Stage::Phrases)); + assert!(d.tips.len() >= 10, "tips for English speakers"); let order = crate::learn::path::ordered(&d.phrases, &d.selection(&[], "C2")); assert_eq!(Stage::of(&d.phrases[order[0]]), Stage::Words, "the path starts with a word"); for p in &d.phrases { @@ -780,16 +796,8 @@ mod tests { /// Fewest items that make a rung. const RUNG_MIN: usize = 3; /// Rungs still missing in the built-in decks. Filling one means removing it - /// here: the test fails while a filled rung is still listed. - const LADDER_GAPS: &[(&str, &str)] = &[ - ("primeiros contatos", "A2"), - ("primeiros contatos", "B1"), - ("restaurante", "A2"), - ("viagem", "A2"), - ("compras", "A2"), - ("compras", "B1"), - ("saúde e social", "B1"), - ]; + /// here: the test fails while a filled rung is still listed. None are left. + const LADDER_GAPS: &[(&str, &str)] = &[]; #[test] fn core_topics_climb_every_level_from_pre_a1_to_b1() {